100 const Real* dx = geom.CellSize();
101 const Real* problo = geom.ProbLo();
103 MultiFab mf_ba(ba, dmap, 1, 0, MFInfo(), *ebf);
105 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
107 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
108 const auto & my_flag = sfab.getEBCellFlagFab();
109 const auto * my_flag_ptr = &my_flag;
111 const Box & bx = mfi.validbox();
113 if (my_flag.getType(bx) == FabType::covered ||
114 my_flag.getType(bx) == FabType::regular) {
continue; }
116 std::array<const CutFab *, AMREX_SPACEDIM> areafrac;
117 const CutFab * bndrycent;
119 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
120 areafrac[d] = &(*ebf->getAreaFrac()[d])[mfi];
122 bndrycent = &(ebf->getBndryCent()[mfi]);
125 std::unique_ptr<EBCellFlagFab> host_flag;
126 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
127 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
129 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
130 host_flag->nBytes());
131 Gpu::streamSynchronize();
132 my_flag_ptr = host_flag.get();
135 std::array<std::unique_ptr<CutFab>, AMREX_SPACEDIM> areafrac_h;
136 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
137 if (areafrac[d]->arena()->isManaged() || areafrac[d]->arena()->isDevice()) {
138 areafrac_h[d] = std::make_unique<CutFab>(areafrac[d]->box(), areafrac[d]->nComp(),
140 Gpu::dtoh_memcpy_async(areafrac_h[d]->dataPtr(), areafrac[d]->dataPtr(),
141 areafrac[d]->size()*
sizeof(
Real));
142 Gpu::streamSynchronize();
143 areafrac[d] = areafrac_h[d].get();
147 std::unique_ptr<CutFab> bndrycent_h;
148 if (bndrycent->arena()->isManaged() || bndrycent->arena()->isDevice()) {
149 bndrycent_h = std::make_unique<CutFab>(bndrycent->box(), bndrycent->nComp(),
151 Gpu::dtoh_memcpy_async(bndrycent_h->dataPtr(), bndrycent->dataPtr(),
152 bndrycent->size()*
sizeof(
Real));
153 Gpu::streamSynchronize();
154 bndrycent = bndrycent_h.get();
160 bx, my_flag_ptr->const_array(),
161 bndrycent->const_array(),
162 areafrac[0]->const_array(),
163 areafrac[1]->const_array(),
164 areafrac[2]->const_array());
167 int cpu = ParallelDescriptor::MyProc();
168 int nProcs = ParallelDescriptor::NProcs();
172 if(ParallelDescriptor::IOProcessor()) {
176 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
178 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
179 const auto & my_flag = sfab.getEBCellFlagFab();
180 const auto * my_flag_ptr = &my_flag;
182 const Box & bx = mfi.validbox();
184 if (my_flag.getType(bx) == FabType::covered ||
185 my_flag.getType(bx) == FabType::regular) {
continue; }
188 std::unique_ptr<EBCellFlagFab> host_flag;
189 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
190 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
192 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
193 host_flag->nBytes());
194 Gpu::streamSynchronize();
195 my_flag_ptr = host_flag.get();
199 eb_to_pvd.
EBGridCoverage(cpu, problo, dx, bx, my_flag_ptr->const_array());
Definition: ERF_EBToPVD.H:16
void EBGridCoverage(int myID, const Real *problo, const Real *dx, const Box &bx, Array4< EBCellFlag const > const &flag)
Definition: ERF_EBToPVD.cpp:445
static void WritePVTP(const int nProcs, const int level)
Definition: ERF_EBToPVD.cpp:228
void EBToPolygon(const Real *problo, const Real *dx, const Box &bx, Array4< EBCellFlag const > const &flag, Array4< Real const > const &bcent, Array4< Real const > const &apx, Array4< Real const > const &apy, Array4< Real const > const &apz)
Definition: ERF_EBToPVD.cpp:33
void WriteEBVTP(const int myID, const int level) const
Definition: ERF_EBToPVD.cpp:201