144 const Real* dx = geom.CellSize();
145 const Real* problo = geom.ProbLo();
147 MultiFab mf_ba(ba, dmap, 1, 0, MFInfo(), *ebf);
149 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
151 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
152 const auto & my_flag = sfab.getEBCellFlagFab();
153 const auto * my_flag_ptr = &my_flag;
155 const Box & bx = mfi.validbox();
157 if (my_flag.getType(bx) == FabType::covered ||
158 my_flag.getType(bx) == FabType::regular) {
continue; }
160 std::array<const CutFab *, AMREX_SPACEDIM> areafrac;
161 const CutFab * bndrycent;
163 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
164 areafrac[d] = &(*ebf->getAreaFrac()[d])[mfi];
166 bndrycent = &(ebf->getBndryCent()[mfi]);
169 std::unique_ptr<EBCellFlagFab> host_flag;
170 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
171 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
173 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
174 host_flag->nBytes());
175 Gpu::streamSynchronize();
176 my_flag_ptr = host_flag.get();
179 std::array<std::unique_ptr<CutFab>, AMREX_SPACEDIM> areafrac_h;
180 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
181 if (areafrac[d]->arena()->isManaged() || areafrac[d]->arena()->isDevice()) {
182 areafrac_h[d] = std::make_unique<CutFab>(areafrac[d]->box(), areafrac[d]->nComp(),
184 Gpu::dtoh_memcpy_async(areafrac_h[d]->dataPtr(), areafrac[d]->dataPtr(),
185 areafrac[d]->size()*
sizeof(
Real));
186 Gpu::streamSynchronize();
187 areafrac[d] = areafrac_h[d].get();
191 std::unique_ptr<CutFab> bndrycent_h;
192 if (bndrycent->arena()->isManaged() || bndrycent->arena()->isDevice()) {
193 bndrycent_h = std::make_unique<CutFab>(bndrycent->box(), bndrycent->nComp(),
195 Gpu::dtoh_memcpy_async(bndrycent_h->dataPtr(), bndrycent->dataPtr(),
196 bndrycent->size()*
sizeof(
Real));
197 Gpu::streamSynchronize();
198 bndrycent = bndrycent_h.get();
204 bx, my_flag_ptr->const_array(),
205 bndrycent->const_array(),
206 areafrac[0]->const_array(),
207 areafrac[1]->const_array(),
208 areafrac[2]->const_array());
211 int cpu = ParallelDescriptor::MyProc();
212 int nProcs = ParallelDescriptor::NProcs();
216 if(ParallelDescriptor::IOProcessor()) {
220 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
222 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
223 const auto & my_flag = sfab.getEBCellFlagFab();
224 const auto * my_flag_ptr = &my_flag;
226 const Box & bx = mfi.validbox();
228 if (my_flag.getType(bx) == FabType::covered ||
229 my_flag.getType(bx) == FabType::regular) {
continue; }
232 std::unique_ptr<EBCellFlagFab> host_flag;
233 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
234 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
236 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
237 host_flag->nBytes());
238 Gpu::streamSynchronize();
239 my_flag_ptr = host_flag.get();
243 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