104 const Real* dx = geom.CellSize();
105 const Real* problo = geom.ProbLo();
107 MultiFab mf_ba(ba, dmap, 1, 0, MFInfo(), *ebf);
109 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
111 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
112 const auto & my_flag = sfab.getEBCellFlagFab();
113 const auto * my_flag_ptr = &my_flag;
115 const Box & bx = mfi.validbox();
117 if (my_flag.getType(bx) == FabType::covered ||
118 my_flag.getType(bx) == FabType::regular) {
continue; }
120 std::array<const CutFab *, AMREX_SPACEDIM> areafrac;
121 const CutFab * bndrycent;
123 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
124 areafrac[d] = &(*ebf->getAreaFrac()[d])[mfi];
126 bndrycent = &(ebf->getBndryCent()[mfi]);
129 std::unique_ptr<EBCellFlagFab> host_flag;
130 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
131 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
133 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
134 host_flag->nBytes());
135 Gpu::streamSynchronize();
136 my_flag_ptr = host_flag.get();
139 std::array<std::unique_ptr<CutFab>, AMREX_SPACEDIM> areafrac_h;
140 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
141 if (areafrac[d]->arena()->isManaged() || areafrac[d]->arena()->isDevice()) {
142 areafrac_h[d] = std::make_unique<CutFab>(areafrac[d]->box(), areafrac[d]->nComp(),
144 Gpu::dtoh_memcpy_async(areafrac_h[d]->dataPtr(), areafrac[d]->dataPtr(),
145 areafrac[d]->size()*
sizeof(
Real));
146 Gpu::streamSynchronize();
147 areafrac[d] = areafrac_h[d].get();
151 std::unique_ptr<CutFab> bndrycent_h;
152 if (bndrycent->arena()->isManaged() || bndrycent->arena()->isDevice()) {
153 bndrycent_h = std::make_unique<CutFab>(bndrycent->box(), bndrycent->nComp(),
155 Gpu::dtoh_memcpy_async(bndrycent_h->dataPtr(), bndrycent->dataPtr(),
156 bndrycent->size()*
sizeof(
Real));
157 Gpu::streamSynchronize();
158 bndrycent = bndrycent_h.get();
164 bx, my_flag_ptr->const_array(),
165 bndrycent->const_array(),
166 areafrac[0]->const_array(),
167 areafrac[1]->const_array(),
168 areafrac[2]->const_array());
171 int cpu = ParallelDescriptor::MyProc();
172 int nProcs = ParallelDescriptor::NProcs();
176 if(ParallelDescriptor::IOProcessor()) {
180 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
182 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
183 const auto & my_flag = sfab.getEBCellFlagFab();
184 const auto * my_flag_ptr = &my_flag;
186 const Box & bx = mfi.validbox();
188 if (my_flag.getType(bx) == FabType::covered ||
189 my_flag.getType(bx) == FabType::regular) {
continue; }
192 std::unique_ptr<EBCellFlagFab> host_flag;
193 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
194 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
196 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
197 host_flag->nBytes());
198 Gpu::streamSynchronize();
199 my_flag_ptr = host_flag.get();
203 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