86 const Real* dx = geom.CellSize();
87 const Real* problo = geom.ProbLo();
89 MultiFab mf_ba(ba, dmap, 1, 0, MFInfo(), *ebf);
91 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
93 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
94 const auto & my_flag = sfab.getEBCellFlagFab();
95 const auto * my_flag_ptr = &my_flag;
97 const Box & bx = mfi.validbox();
99 if (my_flag.getType(bx) == FabType::covered ||
100 my_flag.getType(bx) == FabType::regular) {
continue; }
102 std::array<const CutFab *, AMREX_SPACEDIM> areafrac;
103 const CutFab * bndrycent;
105 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
106 areafrac[d] = &(*ebf->getAreaFrac()[d])[mfi];
108 bndrycent = &(ebf->getBndryCent()[mfi]);
111 std::unique_ptr<EBCellFlagFab> host_flag;
112 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
113 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
115 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
116 host_flag->nBytes());
117 Gpu::streamSynchronize();
118 my_flag_ptr = host_flag.get();
121 std::array<std::unique_ptr<CutFab>, AMREX_SPACEDIM> areafrac_h;
122 for (
int d = 0; d < AMREX_SPACEDIM; ++d) {
123 if (areafrac[d]->arena()->isManaged() || areafrac[d]->arena()->isDevice()) {
124 areafrac_h[d] = std::make_unique<CutFab>(areafrac[d]->box(), areafrac[d]->nComp(),
126 Gpu::dtoh_memcpy_async(areafrac_h[d]->dataPtr(), areafrac[d]->dataPtr(),
127 areafrac[d]->size()*
sizeof(Real));
128 Gpu::streamSynchronize();
129 areafrac[d] = areafrac_h[d].get();
133 std::unique_ptr<CutFab> bndrycent_h;
134 if (bndrycent->arena()->isManaged() || bndrycent->arena()->isDevice()) {
135 bndrycent_h = std::make_unique<CutFab>(bndrycent->box(), bndrycent->nComp(),
137 Gpu::dtoh_memcpy_async(bndrycent_h->dataPtr(), bndrycent->dataPtr(),
138 bndrycent->size()*
sizeof(Real));
139 Gpu::streamSynchronize();
140 bndrycent = bndrycent_h.get();
144 eb_to_pvd.EBToPolygon(
146 bx, my_flag_ptr->const_array(),
147 bndrycent->const_array(),
148 areafrac[0]->const_array(),
149 areafrac[1]->const_array(),
150 areafrac[2]->const_array());
153 int cpu = ParallelDescriptor::MyProc();
154 int nProcs = ParallelDescriptor::NProcs();
156 eb_to_pvd.WriteEBVTP(cpu, level);
158 if(ParallelDescriptor::IOProcessor()) {
162 for (MFIter mfi(mf_ba); mfi.isValid(); ++mfi) {
164 const auto & sfab =
static_cast<EBFArrayBox
const &
>(mf_ba[mfi]);
165 const auto & my_flag = sfab.getEBCellFlagFab();
166 const auto * my_flag_ptr = &my_flag;
168 const Box & bx = mfi.validbox();
170 if (my_flag.getType(bx) == FabType::covered ||
171 my_flag.getType(bx) == FabType::regular) {
continue; }
174 std::unique_ptr<EBCellFlagFab> host_flag;
175 if (my_flag.arena()->isManaged() || my_flag.arena()->isDevice()) {
176 host_flag = std::make_unique<EBCellFlagFab>(my_flag.box(), my_flag.nComp(),
178 Gpu::dtoh_memcpy_async(host_flag->dataPtr(), my_flag.dataPtr(),
179 host_flag->nBytes());
180 Gpu::streamSynchronize();
181 my_flag_ptr = host_flag.get();
185 eb_to_pvd.EBGridCoverage(cpu, problo, dx, bx, my_flag_ptr->const_array());
static void WritePVTP(int nProcs)
Definition: ERF_EBToPVD.cpp:225