Define face-centered EB geometry for one staggered direction.
37 pp.queryAdd(
"small_volfrac", small_volfrac);
41 const IntVect vdim(IntVect::TheDimensionVector(a_idim));
43 const BoxArray& my_grids = amrex::convert(a_grids, vdim);
46 m_cellflags = std::make_unique<FabArray<EBCellFlagFab>>(my_grids, a_dmap, 1, a_ngrow[0], MFInfo(),
47 DefaultFabFactory<EBCellFlagFab>());
51 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
52 auto& fab = (*m_cellflags)[mfi];
53 fab.setType(FabType::singlevalued);
56 m_volfrac = std::make_unique<MultiFab>(my_grids, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
57 m_volcent = std::make_unique<MultiFab>(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
59 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
60 m_areafrac[idim] = std::make_unique<MultiFab>(a_grids, a_dmap, 1, a_ngrow[1]+1, MFInfo(), FArrayBoxFactory());
61 m_facecent[idim] = std::make_unique<MultiFab>(a_grids, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
64 m_bndryarea = std::make_unique<MultiFab>(my_grids, a_dmap, 1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
65 m_bndrycent = std::make_unique<MultiFab>(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
66 m_bndrynorm = std::make_unique<MultiFab>(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
72 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
81 const auto& FlagFab = a_factory->getMultiEBCellFlagFab();
83 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
85 const Box& bx = mfi.validbox();
86 const Box& bx_grown = mfi.growntilebox();
87 const Box tbx = mfi.nodaltilebox(a_idim);
88 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
90 GpuArray<Real, AMREX_SPACEDIM>
dx = a_geom.CellSizeArray();
91 bool l_periodic = a_geom.isPeriodic(a_idim);
93 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
94 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
95 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
96 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
97 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
99 if (FlagFab[mfi].getType(bx) == FabType::covered ) {
101 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
103 aux_flag(i,j,k).setCovered();
104 aux_flag(i,j,k).setDisconnected();
105 if (i==bx.bigEnd(0)) {
106 aux_flag(i+1,j,k).setCovered();
108 if (j==bx.bigEnd(1)) {
109 aux_flag(i,j+1,k).setCovered();
111 if (k==bx.bigEnd(2)) {
112 aux_flag(i,j,k+1).setCovered();
116 }
else if (FlagFab[mfi].getType(bx) == FabType::regular ) {
118 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
120 aux_flag(i,j,k).setRegular();
121 aux_flag(i,j,k).setDisconnected();
122 aux_vfrac(i,j,k) =
one;
123 aux_afrac_x(i,j,k) =
one;
124 aux_afrac_y(i,j,k) =
one;
125 aux_afrac_z(i,j,k) =
one;
126 if (i==bx.bigEnd(0)) {
127 aux_flag(i+1,j,k).setRegular();
128 aux_vfrac(i+1,j,k) =
one;
129 aux_afrac_x(i+1,j,k) =
one;
131 if (j==bx.bigEnd(1)) {
132 aux_flag(i,j+1,k).setRegular();
133 aux_vfrac(i,j+1,k) =
one;
134 aux_afrac_y(i,j+1,k) =
one;
136 if (k==bx.bigEnd(2)) {
137 aux_flag(i,j,k+1).setRegular();
138 aux_vfrac(i,j,k+1) =
one;
139 aux_afrac_z(i,j,k+1) =
one;
143 }
else if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
148 Array4<EBCellFlag const>
const& flag = FlagFab.const_array(mfi);
149 Array4<Real const>
const& afrac = (a_factory->getAreaFrac()[a_idim])->const_array(mfi);
150 Array4<Real const>
const& bnorm = a_factory->getBndryNormal()[mfi].const_array();
151 Array4<Real const>
const& bcent = a_factory->getBndryCent()[mfi].const_array();
154 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
155 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
156 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
157 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
158 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
159 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
160 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
163 Box dom_grown = domain;
164 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
165 if (a_geom.isPeriodic(idim)) {
166 dom_grown.grow(idim, a_ngrow[0]);
170 const IntVect dom_grown_lo = dom_grown.smallEnd();
171 const IntVect dom_grown_hi = dom_grown.bigEnd();
173 BoxList diffList = boxDiff(bx_grown, bx);
174 for (
const Box& b : diffList) {
175 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
177 if ( i < dom_grown_lo[0] || i > dom_grown_hi[0] ||
178 j < dom_grown_lo[1] || j > dom_grown_hi[1] ||
179 k < dom_grown_lo[2] || k > dom_grown_hi[2] ) {
180 aux_flag(i,j,k).setCovered();
181 aux_flag(i,j,k).setDisconnected();
186 #ifndef AMREX_USE_GPU
190 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
193 aux_flag(i,j,k).setCovered();
194 aux_flag(i,j,k).setDisconnected();
196 if (i==bx.bigEnd(0)) {
197 aux_flag(i+1,j,k).setCovered();
199 if (j==bx.bigEnd(1)) {
200 aux_flag(i,j+1,k).setCovered();
202 if (k==bx.bigEnd(2)) {
203 aux_flag(i,j,k+1).setCovered();
207 IntVect iv_hi(i,j,k);
208 IntVect iv_lo(iv_hi - vdim);
210 bool lo_isCovered = flag(iv_lo).isCovered();
211 bool hi_isCovered = flag(iv_hi).isCovered();
212 bool lo_isRegular = flag(iv_lo).isRegular();
213 bool hi_isRegular = flag(iv_hi).isRegular();
214 bool lo_isSingleValued = flag(iv_lo).isSingleValued();
215 bool hi_isSingleValued = flag(iv_hi).isSingleValued();
217 const bool at_lo_boundary = (!l_periodic && iv_hi[a_idim]==domain.smallEnd(a_idim));
218 const bool at_hi_boundary = (!l_periodic && iv_hi[a_idim]==domain.bigEnd(a_idim));
222 if (at_lo_boundary) {
225 lo_isRegular =
false;
226 lo_isSingleValued =
false;
227 }
else if (hi_isRegular) {
228 lo_isCovered =
false;
230 lo_isSingleValued =
false;
231 }
else if (hi_isSingleValued) {
232 if (almostEqual(afrac(i,j,k),
zero)) {
234 lo_isRegular =
false;
235 lo_isSingleValued =
false;
236 }
else if (almostEqual(afrac(i,j,k),
one)) {
237 lo_isCovered =
false;
239 lo_isSingleValued =
false;
241 lo_isCovered =
false;
242 lo_isRegular =
false;
243 lo_isSingleValued =
true;
251 if (at_hi_boundary) {
254 hi_isRegular =
false;
255 hi_isSingleValued =
false;
256 }
else if (lo_isRegular) {
257 hi_isCovered =
false;
259 hi_isSingleValued =
false;
260 }
else if (lo_isSingleValued) {
261 if (almostEqual(afrac(i,j,k),
zero)) {
263 hi_isRegular =
false;
264 hi_isSingleValued =
false;
265 }
else if (almostEqual(afrac(i,j,k),
one)) {
266 hi_isCovered =
false;
268 hi_isSingleValued =
false;
270 hi_isCovered =
false;
271 hi_isRegular =
false;
272 hi_isSingleValued =
true;
278 if ( lo_isCovered && hi_isCovered) {
282 }
else if ( lo_isRegular && hi_isRegular) {
284 aux_flag(i,j,k).setRegular();
285 aux_flag(i,j,k).setConnected();
287 aux_vfrac(i,j,k) =
one;
289 aux_afrac_x(i,j,k) =
one;
290 aux_afrac_y(i,j,k) =
one;
291 aux_afrac_z(i,j,k) =
one;
293 if (i==bx.bigEnd(0)) {
294 aux_afrac_x(i+1,j,k) =
one;
296 if (j==bx.bigEnd(1)) {
297 aux_afrac_y(i,j+1,k) =
one;
299 if (k==bx.bigEnd(2)) {
300 aux_afrac_z(i,j,k+1) =
one;
305 #ifndef AMREX_USE_GPU
306 if (verbose) { Print() <<
"\ncell: " << amrex::IntVect(i,j,k) <<
"\n"; }
318 RealVect lo_point (bcent(iv_lo,0), bcent(iv_lo,1), bcent(iv_lo,2));
319 RealVect lo_normal(bnorm(iv_lo,0), bnorm(iv_lo,1), bnorm(iv_lo,2));
321 if (at_lo_boundary) {
322 lo_point[a_idim] +=
one;
325 if (lo_isSingleValued ) {
326 Real bnorm_x = bnorm(iv_lo,0) *
dx[0];
327 Real bnorm_y = bnorm(iv_lo,1) *
dx[1];
328 Real bnorm_z = bnorm(iv_lo,2) *
dx[2];
330 Real norm = std::sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
332 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
334 lo_normal = bnorm_isoparam;
338 lo_arr[a_idim] =
zero;
340 RealBox lo_rbx(lo_arr.data(), hi_arr.data());
342 eb_cut_cell_ lo_eb_cc(flag(iv_lo), lo_rbx, lo_point, lo_normal);
346 AMREX_ASSERT( !lo_isCovered || lo_eb_cc.isCovered() );
347 AMREX_ASSERT( !lo_isRegular || lo_eb_cc.isRegular() );
353 RealVect hi_point (bcent(iv_hi,0), bcent(iv_hi,1), bcent(iv_hi,2));
354 RealVect hi_normal(bnorm(iv_hi,0), bnorm(iv_hi,1), bnorm(iv_hi,2));
356 if (at_hi_boundary) {
357 hi_point[a_idim] += -
one;
360 if (hi_isSingleValued ) {
361 Real bnorm_x = bnorm(iv_hi,0) *
dx[0];
362 Real bnorm_y = bnorm(iv_hi,1) *
dx[1];
363 Real bnorm_z = bnorm(iv_hi,2) *
dx[2];
365 Real norm = std::sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
367 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
369 hi_normal = bnorm_isoparam;
374 hi_arr[a_idim] =
zero;
375 RealBox hi_rbx(lo_arr.data(), hi_arr.data());
377 eb_cut_cell_ hi_eb_cc(flag(iv_hi), hi_rbx, hi_point, hi_normal);
381 AMREX_ASSERT( !hi_isCovered || hi_eb_cc.isCovered() );
382 AMREX_ASSERT( !hi_isRegular || hi_eb_cc.isRegular() );
385 #if defined(AMREX_DEBUG) || defined(AMREX_TESTING) || 1
395 eb_cut_cell_ hi_hi_eb_cc(flag(iv_hi), lo_rbx, hi_point, hi_normal);
399 #ifndef AMREX_USE_GPU
400 if ( !(!hi_isRegular || hi_hi_eb_cc.isRegular()) ||
401 !(!hi_isCovered || hi_hi_eb_cc.isCovered()) ) {
402 Print() <<
"flag(iv_hi) and hi_hi_eb_cc flags do not agree\n"
403 <<
"\n isRegular() " << hi_isRegular <<
" " << hi_hi_eb_cc.isRegular()
404 <<
"\n isCovered() " << hi_isCovered <<
" " << hi_hi_eb_cc.isCovered()
418 if ( hi_isSingleValued ) {
420 Real const adx = (a_idim == 0)
421 ? (hi_eb_cc.areaLo(0) - hi_hi_eb_cc.areaHi(0)) *
dx[1] *
dx[2]
422 : (hi_eb_cc.areaLo(0) + hi_hi_eb_cc.areaLo(0)) *
dx[1] *
dx[2]
423 - (hi_eb_cc.areaHi(0) + hi_hi_eb_cc.areaHi(0)) *
dx[1] *
dx[2];
425 Real const ady = (a_idim == 1)
426 ? (hi_eb_cc.areaLo(1) - hi_hi_eb_cc.areaHi(1)) *
dx[0] *
dx[2]
427 : (hi_eb_cc.areaLo(1) + hi_hi_eb_cc.areaLo(1)) *
dx[0] *
dx[2]
428 - (hi_eb_cc.areaHi(1) + hi_hi_eb_cc.areaHi(1)) *
dx[0] *
dx[2];
430 Real const adz = (a_idim == 2)
431 ? (hi_eb_cc.areaLo(2) - hi_hi_eb_cc.areaHi(2)) *
dx[0] *
dx[1]
432 : (hi_eb_cc.areaLo(2) + hi_hi_eb_cc.areaLo(2)) *
dx[0] *
dx[1]
433 - (hi_eb_cc.areaHi(2) + hi_hi_eb_cc.areaHi(2)) *
dx[0] *
dx[1];
435 Real const apnorm = std::sqrt(adx*adx + ady*ady + adz*adz);
438 Real const apnorminv =
one / apnorm;
439 RealVect
const normal(adx*apnorminv, ady*apnorminv, adz*apnorminv);
440 Real const dot_normals = normal.dotProduct(hi_normal);
442 #ifndef AMREX_USE_GPU
443 if ( !amrex::almostEqual(dot_normals,
one) ) {
444 Print() <<
"\nFail: check-1 dot_normals " << dot_normals
450 }
else if (verbose) {
451 Print() <<
"Pass: dot_normals = one\n";
460 #ifndef AMREX_USE_GPU
461 Real const abs_err = std::abs( hi_eb_cc.areaHi(a_idim) - hi_hi_eb_cc.areaLo(a_idim) );
463 if ( abs_err >= machine_tol ) {
464 Print() <<
"\nFail: check-2 area abs_err: " << abs_err
465 <<
"\n hi_eb_cc.areaHi " << hi_eb_cc.areaHi(a_idim)
466 <<
"\n hi_hi_eb_cc.areaLo " << hi_hi_eb_cc.areaLo(a_idim)
468 }
else if (verbose) {
469 Print() <<
"Pass: hi_eb_cc.areaHi = hi_hi_eb_cc.areaLo"
470 <<
" abs_err: " << abs_err <<
"\n";
477 {
Real const abs_err = amrex::max(std::abs(lo_eb_cc.areaHi(a_idim) - afrac(iv_hi)),
478 std::abs(hi_eb_cc.areaLo(a_idim) - afrac(iv_hi)));
480 #ifndef AMREX_USE_GPU
481 if ( abs_err >= compare_tol ) {
483 Print() <<
"\nFail: check-3 area abs_err " << abs_err
484 <<
"\n hi_eb_cc.areaLo(" << a_idim <<
") = " << hi_eb_cc.areaLo(a_idim)
485 <<
"\n lo_eb_cc.areaHi(" << a_idim <<
") = " << lo_eb_cc.areaHi(a_idim)
486 <<
"\n afrac" << iv_hi <<
" = " << afrac(iv_hi)
488 }
else if (verbose) {
489 Print() <<
"Pass: hi_eb_cc.areaLo = afrac = " << afrac(iv_hi)
490 <<
" abs_err: " << abs_err <<
"\n";
498 {
Real const vol = hi_eb_cc.volume() + hi_hi_eb_cc.volume();
499 Real const abs_err = amrex::Math::abs(vfrac(iv_hi) - vol);
501 #ifndef AMREX_USE_GPU
502 if ( abs_err >= compare_tol ) {
505 amrex::Print() <<
"\nFail: check-4 volume abs_err: " << abs_err
506 <<
"\n point: " << hi_point
507 <<
"\n normal: " << hi_normal
508 <<
"\n hi_eb_cc.volume() " << hi_eb_cc.volume()
509 <<
"\n hi_hi_eb_cc.volume() " << hi_hi_eb_cc.volume()
510 <<
"\n vfrac: " << vfrac(iv_hi)
512 }
else if (verbose) {
513 Print() <<
"Pass: hi_eb_cc + hi_hi_eb_cc = vfrac = " << vfrac(iv_hi)
514 <<
" abs_err: " << abs_err <<
"\n";
527 if (lo_eb_cc.isCovered() && hi_eb_cc.isCovered()) {
531 }
else if (lo_eb_cc.isRegular() && hi_eb_cc.isRegular()) {
533 aux_flag(i,j,k).setRegular();
534 aux_flag(i,j,k).setConnected();
536 aux_vfrac(i,j,k) =
one;
538 aux_afrac_x(i,j,k) =
one;
539 aux_afrac_y(i,j,k) =
one;
540 aux_afrac_z(i,j,k) =
one;
542 aux_fcent_x(i,j,k,0) =
zero; aux_fcent_x(i,j,k,1) =
zero;
543 aux_fcent_y(i,j,k,0) =
zero; aux_fcent_y(i,j,k,1) =
zero;
544 aux_fcent_z(i,j,k,0) =
zero; aux_fcent_z(i,j,k,1) =
zero;
546 if (i==bx.bigEnd(0)) {
547 aux_afrac_x(i+1,j,k) =
one;
548 aux_fcent_x(i+1,j,k,0) =
zero; aux_fcent_x(i+1,j,k,1) =
zero;
550 if (j==bx.bigEnd(1)) {
551 aux_afrac_y(i,j+1,k) =
one;
552 aux_fcent_y(i,j+1,k,0) =
zero; aux_fcent_y(i,j+1,k,1) =
zero;
554 if (k==bx.bigEnd(2)) {
555 aux_afrac_z(i,j,k+1) =
one;
556 aux_fcent_z(i,j,k+1,0) =
zero; aux_fcent_z(i,j,k+1,1) =
zero;
559 }
else if ( (lo_eb_cc.isRegular() && hi_eb_cc.isCovered())
560 || (lo_eb_cc.isCovered() && hi_eb_cc.isRegular()) ) {
563 #ifndef AMREX_USE_GPU
564 Print()<<
"eb_aux_ / Check: Regular and Covered cut cells are facing each other." << std::endl;
571 aux_flag(i,j,k).setSingleValued();
575 Real lo_vol {lo_eb_cc.volume()}; AMREX_ASSERT(lo_vol >=
zero && lo_vol <=
myhalf);
576 Real hi_vol {hi_eb_cc.volume()}; AMREX_ASSERT(hi_vol >=
zero && hi_vol <=
myhalf);
578 aux_vfrac(i,j,k) = lo_vol + hi_vol;
590 RealVect lo_vcent {lo_eb_cc.centVol()};
591 RealVect hi_vcent {hi_eb_cc.centVol()};
593 lo_vcent[a_idim] = lo_vcent[a_idim] -
myhalf;
594 hi_vcent[a_idim] = hi_vcent[a_idim] +
myhalf;
596 aux_vcent(i,j,k,0) = ( lo_vol * lo_vcent[0] + hi_vol * hi_vcent[0] ) / aux_vfrac(i,j,k);
597 aux_vcent(i,j,k,1) = ( lo_vol * lo_vcent[1] + hi_vol * hi_vcent[1] ) / aux_vfrac(i,j,k);
598 aux_vcent(i,j,k,2) = ( lo_vol * lo_vcent[2] + hi_vol * hi_vcent[2] ) / aux_vfrac(i,j,k);
602 Real lo_areaLo_x {lo_eb_cc.areaLo(0)};
603 Real lo_areaLo_y {lo_eb_cc.areaLo(1)};
604 Real lo_areaLo_z {lo_eb_cc.areaLo(2)};
606 Real hi_areaLo_x {hi_eb_cc.areaLo(0)};
607 Real hi_areaLo_y {hi_eb_cc.areaLo(1)};
608 Real hi_areaLo_z {hi_eb_cc.areaLo(2)};
610 aux_afrac_x(i,j,k) = (a_idim == 0) ? lo_areaLo_x : lo_areaLo_x + hi_areaLo_x;
611 aux_afrac_y(i,j,k) = (a_idim == 1) ? lo_areaLo_y : lo_areaLo_y + hi_areaLo_y;
612 aux_afrac_z(i,j,k) = (a_idim == 2) ? lo_areaLo_z : lo_areaLo_z + hi_areaLo_z;
614 if (i==bx.bigEnd(0)) {
615 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
616 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
617 aux_afrac_x(i+1,j,k) = (a_idim == 0) ? hi_areaHi_x : lo_areaHi_x + hi_areaHi_x;
619 if (j==bx.bigEnd(1)) {
620 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
621 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
622 aux_afrac_y(i,j+1,k) = (a_idim == 1) ? hi_areaHi_y : lo_areaHi_y + hi_areaHi_y;
624 if (k==bx.bigEnd(2)) {
625 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
626 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
627 aux_afrac_z(i,j,k+1) = (a_idim == 2) ? hi_areaHi_z : lo_areaHi_z + hi_areaHi_z;
640 RealVect lo_centLo_x {lo_eb_cc.centLo(0)};
641 RealVect lo_centLo_y {lo_eb_cc.centLo(1)};
642 RealVect lo_centLo_z {lo_eb_cc.centLo(2)};
644 RealVect hi_centLo_x {hi_eb_cc.centLo(0)};
645 RealVect hi_centLo_y {hi_eb_cc.centLo(1)};
646 RealVect hi_centLo_z {hi_eb_cc.centLo(2)};
649 aux_fcent_x(i,j,k,0) = lo_centLo_x[1];
650 aux_fcent_x(i,j,k,1) = lo_centLo_x[2];
651 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) >
zero)
652 ? ( lo_areaLo_y * (lo_centLo_y[0] -
myhalf)
653 + hi_areaLo_y * (hi_centLo_y[0] +
myhalf) ) / aux_afrac_y(i,j,k)
655 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) >
zero)
656 ? ( lo_areaLo_y * lo_centLo_y[2]
657 + hi_areaLo_y * hi_centLo_y[2] ) / aux_afrac_y(i,j,k)
659 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) >
zero)
660 ? ( lo_areaLo_z * (lo_centLo_z[0] -
myhalf)
661 + hi_areaLo_z * (hi_centLo_z[0] +
myhalf) ) / aux_afrac_z(i,j,k)
663 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) >
zero)
664 ? ( lo_areaLo_z * lo_centLo_z[1]
665 + hi_areaLo_z * hi_centLo_z[1] ) / aux_afrac_z(i,j,k)
667 }
else if (a_idim == 1) {
668 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) >
zero)
669 ? ( lo_areaLo_x * (lo_centLo_x[1] -
myhalf)
670 + hi_areaLo_x * (hi_centLo_x[1] +
myhalf) ) / aux_afrac_x(i,j,k)
672 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) >
zero)
673 ? ( lo_areaLo_x * lo_centLo_x[2]
674 + hi_areaLo_x * hi_centLo_x[2] ) / aux_afrac_x(i,j,k)
676 aux_fcent_y(i,j,k,0) = lo_centLo_y[0];
677 aux_fcent_y(i,j,k,1) = lo_centLo_y[2];
678 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) >
zero)
679 ? ( lo_areaLo_z * lo_centLo_z[0]
680 + hi_areaLo_z * hi_centLo_z[0] ) / aux_afrac_z(i,j,k)
682 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) >
zero)
683 ? ( lo_areaLo_z * (lo_centLo_z[1] -
myhalf)
684 + hi_areaLo_z * (hi_centLo_z[1] +
myhalf) ) / aux_afrac_z(i,j,k)
686 }
else if (a_idim == 2) {
687 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) >
zero)
688 ? ( lo_areaLo_x * lo_centLo_x[1]
689 + hi_areaLo_x * hi_centLo_x[1] ) / aux_afrac_x(i,j,k)
691 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) >
zero)
692 ? ( lo_areaLo_x * (lo_centLo_x[2] -
myhalf)
693 + hi_areaLo_x * (hi_centLo_x[2] +
myhalf) ) / aux_afrac_x(i,j,k)
695 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) >
zero)
696 ? ( lo_areaLo_y * lo_centLo_y[0]
697 + hi_areaLo_y * hi_centLo_y[0] ) / aux_afrac_y(i,j,k)
699 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) >
zero)
700 ? ( lo_areaLo_y * (lo_centLo_y[2] -
myhalf)
701 + hi_areaLo_y * (hi_centLo_y[2] +
myhalf) ) / aux_afrac_y(i,j,k)
703 aux_fcent_z(i,j,k,0) = lo_centLo_z[0];
704 aux_fcent_z(i,j,k,1) = lo_centLo_z[1];
707 if (i==bx.bigEnd(0)) {
708 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
709 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
710 RealVect lo_centHi_x {lo_eb_cc.centHi(0)};
711 RealVect hi_centHi_x {hi_eb_cc.centHi(0)};
713 aux_fcent_x(i+1,j,k,0) = hi_centHi_x[1];
714 aux_fcent_x(i+1,j,k,1) = hi_centHi_x[2];
715 }
else if (a_idim == 1) {
716 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) >
zero)
717 ? ( lo_areaHi_x * (lo_centHi_x[1] -
myhalf)
718 + hi_areaHi_x * (hi_centHi_x[1] +
myhalf) ) / aux_afrac_x(i+1,j,k)
720 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) >
zero)
721 ? ( lo_areaHi_x * lo_centHi_x[2]
722 + hi_areaHi_x * hi_centHi_x[2] ) / aux_afrac_x(i+1,j,k)
724 }
else if (a_idim == 2) {
725 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) >
zero)
726 ? ( lo_areaHi_x * lo_centHi_x[1]
727 + hi_areaHi_x * hi_centHi_x[1] ) / aux_afrac_x(i+1,j,k)
729 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) >
zero)
730 ? ( lo_areaHi_x * (lo_centHi_x[2] -
myhalf)
731 + hi_areaHi_x * (hi_centHi_x[2] +
myhalf) ) / aux_afrac_x(i+1,j,k)
735 if (j==bx.bigEnd(1)) {
736 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
737 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
738 RealVect lo_centHi_y {lo_eb_cc.centHi(1)};
739 RealVect hi_centHi_y {hi_eb_cc.centHi(1)};
741 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) >
zero)
742 ? ( lo_areaHi_y * (lo_centHi_y[0] -
myhalf)
743 + hi_areaHi_y * (hi_centHi_y[0] +
myhalf) ) / aux_afrac_y(i,j+1,k)
745 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) >
zero)
746 ? ( lo_areaHi_y * lo_centHi_y[2]
747 + hi_areaHi_y * hi_centHi_y[2] ) / aux_afrac_y(i,j+1,k)
749 }
else if (a_idim == 1) {
750 aux_fcent_y(i,j+1,k,0) = lo_centHi_y[0];
751 aux_fcent_y(i,j+1,k,1) = lo_centHi_y[2];
752 }
else if (a_idim == 2) {
753 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) >
zero)
754 ? ( lo_areaHi_y * lo_centHi_y[0]
755 + hi_areaHi_y * hi_centHi_y[0] ) / aux_afrac_y(i,j+1,k)
757 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) >
zero)
758 ? ( lo_areaHi_y * (lo_centHi_y[2] -
myhalf)
759 + hi_areaHi_y * (hi_centHi_y[2] +
myhalf) ) / aux_afrac_y(i,j+1,k)
763 if (k==bx.bigEnd(2)) {
764 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
765 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
766 RealVect lo_centHi_z {lo_eb_cc.centHi(2)};
767 RealVect hi_centHi_z {hi_eb_cc.centHi(2)};
769 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) >
zero)
770 ? ( lo_areaHi_z * (lo_centHi_z[0] -
myhalf)
771 + hi_areaHi_z * (hi_centHi_z[0] +
myhalf) ) / aux_afrac_z(i,j,k+1)
773 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) >
zero)
774 ? ( lo_areaHi_z * lo_centHi_z[1]
775 + hi_areaHi_z * hi_centHi_z[1] ) / aux_afrac_z(i,j,k+1)
777 }
else if (a_idim == 1) {
778 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) >
zero)
779 ? ( lo_areaHi_z * lo_centHi_z[0]
780 + hi_areaHi_z * hi_centHi_z[0] ) / aux_afrac_z(i,j,k+1)
782 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) >
zero)
783 ? ( lo_areaHi_z * (lo_centHi_z[1] -
myhalf)
784 + hi_areaHi_z * (hi_centHi_z[1] +
myhalf) ) / aux_afrac_z(i,j,k+1)
786 }
else if (a_idim == 2) {
787 aux_fcent_z(i,j,k+1,0) = lo_centHi_z[0];
788 aux_fcent_z(i,j,k+1,1) = lo_centHi_z[1];
794 Real lo_areaBoun {lo_eb_cc.areaBoun()};
795 Real hi_areaBoun {hi_eb_cc.areaBoun()};
797 aux_barea(i,j,k) = lo_areaBoun + hi_areaBoun;
801 RealVect lo_centBoun {lo_eb_cc.centBoun()};
802 RealVect hi_centBoun {hi_eb_cc.centBoun()};
805 aux_bcent(i,j,k,0) = ( lo_areaBoun * (lo_centBoun[0]-
myhalf) + hi_areaBoun * (hi_centBoun[0]+
myhalf) ) / aux_barea(i,j,k);
806 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
807 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
808 }
else if (a_idim == 1) {
809 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
810 aux_bcent(i,j,k,1) = ( lo_areaBoun * (lo_centBoun[1]-
myhalf) + hi_areaBoun * (hi_centBoun[1]+
myhalf) ) / aux_barea(i,j,k);
811 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
812 }
else if (a_idim == 2) {
813 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
814 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
815 aux_bcent(i,j,k,2) = ( lo_areaBoun * (lo_centBoun[2]-
myhalf) + hi_areaBoun * (hi_centBoun[2]+
myhalf) ) / aux_barea(i,j,k);
820 RealVect eb_normal = ( lo_areaBoun * lo_normal + hi_areaBoun * hi_normal )/ aux_barea(i,j,k);
822 aux_bnorm(i,j,k,0) = eb_normal[0];
823 aux_bnorm(i,j,k,1) = eb_normal[1];
824 aux_bnorm(i,j,k,2) = eb_normal[2];
832 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
834 if (aux_vfrac(i,j,k) < small_volfrac)
836 aux_vfrac(i,j,k) =
zero;
845 m_volfrac->FillBoundary(a_geom.periodicity());
847 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
849 const Box& bx = mfi.validbox();
850 const Box& bx_grown = mfi.growntilebox();
852 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
853 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
854 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
855 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
856 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
857 Array4<Real>
const& aux_afrac_idim =
m_areafrac[a_idim]->array(mfi);
859 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
860 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
861 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
862 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
863 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
864 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
865 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
867 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
870 Box my_xbx(bx); my_xbx.growHi(0,1);
871 int xbx_lo = my_xbx.smallEnd(0);
872 int xbx_hi = my_xbx.bigEnd(0);
873 ParallelFor(my_xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
875 if ((i == xbx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
876 (i == xbx_hi && aux_vfrac(i-1,j,k) < small_volfrac) ||
877 (i > xbx_lo && i < xbx_hi &&
878 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i-1,j,k) < small_volfrac))) {
879 aux_afrac_x(i,j,k) =
zero;
883 Box my_ybx(bx); my_ybx.growHi(1,1);
884 int ybx_lo = my_ybx.smallEnd(1);
885 int ybx_hi = my_ybx.bigEnd(1);
886 ParallelFor(my_ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
888 if ((j == ybx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
889 (j == ybx_hi && aux_vfrac(i,j-1,k) < small_volfrac) ||
890 (j > ybx_lo && j < ybx_hi &&
891 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i,j-1,k) < small_volfrac))) {
892 aux_afrac_y(i,j,k) =
zero;
896 Box my_zbx(bx); my_zbx.growHi(2,1);
897 int zbx_lo = my_zbx.smallEnd(2);
898 int zbx_hi = my_zbx.bigEnd(2);
899 ParallelFor(my_zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
901 if ((k == zbx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
902 (k == zbx_hi && aux_vfrac(i,j,k-1) < small_volfrac) ||
903 (k > zbx_lo && k < zbx_hi &&
904 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i,j,k-1) < small_volfrac))) {
905 aux_afrac_z(i,j,k) =
zero;
909 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
911 if (aux_vfrac(i,j,k) < small_volfrac)
913 aux_vcent(i,j,k,0) =
zero;
914 aux_vcent(i,j,k,1) =
zero;
915 aux_vcent(i,j,k,2) =
zero;
917 aux_fcent_x(i ,j ,k ,0) =
zero;
918 aux_fcent_x(i ,j ,k ,1) =
zero;
919 aux_fcent_x(i+1,j ,k ,0) =
zero;
920 aux_fcent_x(i+1,j ,k ,1) =
zero;
922 aux_fcent_y(i ,j ,k ,0) =
zero;
923 aux_fcent_y(i ,j ,k ,1) =
zero;
924 aux_fcent_y(i ,j+1,k ,0) =
zero;
925 aux_fcent_y(i ,j+1,k ,1) =
zero;
927 aux_fcent_z(i ,j ,k ,0) =
zero;
928 aux_fcent_z(i ,j ,k ,1) =
zero;
929 aux_fcent_z(i ,j ,k+1,0) =
zero;
930 aux_fcent_z(i ,j ,k+1,1) =
zero;
932 aux_barea(i,j,k) =
zero;
934 aux_bcent(i,j,k,0) =
zero;
935 aux_bcent(i,j,k,1) =
zero;
936 aux_bcent(i,j,k,2) =
zero;
938 aux_bnorm(i,j,k,0) =
zero;
939 aux_bnorm(i,j,k,1) =
zero;
940 aux_bnorm(i,j,k,2) =
zero;
942 aux_flag(i,j,k).setCovered();
945 if (std::abs(aux_vcent(i,j,k,0)) < small_value) aux_vcent(i,j,k,0) =
zero;
946 if (std::abs(aux_vcent(i,j,k,1)) < small_value) aux_vcent(i,j,k,1) =
zero;
947 if (std::abs(aux_vcent(i,j,k,2)) < small_value) aux_vcent(i,j,k,2) =
zero;
948 if (std::abs(aux_bcent(i,j,k,0)) < small_value) aux_bcent(i,j,k,0) =
zero;
949 if (std::abs(aux_bcent(i,j,k,1)) < small_value) aux_bcent(i,j,k,1) =
zero;
950 if (std::abs(aux_bcent(i,j,k,2)) < small_value) aux_bcent(i,j,k,2) =
zero;
959 Box upper_slab = makeSlab(bx_grown, a_idim, bx.bigEnd(a_idim)+1);
960 Box bx_grown_1 = bx; bx_grown_1.grow(a_idim,1);
961 BoxList slab_diffList = boxDiff(upper_slab, bx_grown_1);
963 for (
const Box& b : slab_diffList) {
964 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
966 IntVect iv(AMREX_D_DECL(i,j,k));
967 IntVect iv_nearest = iv;
968 for (
int d=0; d<AMREX_SPACEDIM; ++d) {
969 iv_nearest[d] = Clamp(iv[d], bx_grown_1.smallEnd(d), bx_grown_1.bigEnd(d));
971 aux_afrac_idim(iv) = aux_afrac_idim(iv_nearest);
984 m_volcent->FillBoundary(a_geom.periodicity());
985 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
986 m_areafrac[idim]->FillBoundary(a_geom.periodicity());
987 m_facecent[idim]->FillBoundary(a_geom.periodicity());
994 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
996 const Box& bx = mfi.validbox();
997 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
999 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
1001 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
1002 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
1003 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
1004 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
1006 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1008 EB2::build_cellflag_from_ap (i, j, k, aux_flag, aux_afrac_x, aux_afrac_y, aux_afrac_z);
1013 bool l_periodic_x = a_geom.isPeriodic(0);
1014 bool l_periodic_y = a_geom.isPeriodic(1);
1015 bool l_periodic_z = a_geom.isPeriodic(2);
1017 if (!l_periodic_x) {
1018 const Box dom_grown = grow(grow(domain,1,1),2,1);
1019 const Box bx_grown = grow(grow( bx,1,1),2,1);
1020 const Box bx_face_x_lo = bx_grown & makeSlab(dom_grown,0,domain.smallEnd(0));
1021 const Box bx_face_x_hi = bx_grown & makeSlab(dom_grown,0,domain.bigEnd(0));
1023 ParallelFor(bx_face_x_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1025 for(
int kk(-1); kk<=1; kk++) {
1026 for(
int jj(-1); jj<=1; jj++) {
1027 aux_flag(i,j,k).setDisconnected(-1,jj,kk);
1030 ParallelFor(bx_face_x_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1032 for(
int kk(-1); kk<=1; kk++) {
1033 for(
int jj(-1); jj<=1; jj++) {
1034 aux_flag(i,j,k).setDisconnected( 1,jj,kk);
1039 if (!l_periodic_y) {
1040 const Box dom_grown = grow(grow(domain,0,1),2,1);
1041 const Box bx_grown = grow(grow( bx,0,1),2,1);
1042 const Box bx_face_y_lo = bx_grown & makeSlab(dom_grown,1,domain.smallEnd(1));
1043 const Box bx_face_y_hi = bx_grown & makeSlab(dom_grown,1,domain.bigEnd(1));
1045 ParallelFor(bx_face_y_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1047 for(
int kk(-1); kk<=1; kk++) {
1048 for(
int ii(-1); ii<=1; ii++) {
1049 aux_flag(i,j,k).setDisconnected(ii,-1,kk);
1052 ParallelFor(bx_face_y_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1054 for(
int kk(-1); kk<=1; kk++) {
1055 for(
int ii(-1); ii<=1; ii++) {
1056 aux_flag(i,j,k).setDisconnected(ii, 1,kk);
1061 if (!l_periodic_z) {
1062 const Box dom_grown = grow(grow(domain,0,1),1,1);
1063 const Box bx_grown = grow(grow( bx,0,1),1,1);
1064 const Box bx_face_z_lo = bx_grown & makeSlab(dom_grown,2,domain.smallEnd(2));
1065 const Box bx_face_z_hi = bx_grown & makeSlab(dom_grown,2,domain.bigEnd(2));
1067 ParallelFor(bx_face_z_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1069 for(
int jj(-1); jj<=1; jj++) {
1070 for(
int ii(-1); ii<=1; ii++) {
1071 aux_flag(i,j,k).setDisconnected(ii,jj,-1);
1074 ParallelFor(bx_face_z_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1076 for(
int jj(-1); jj<=1; jj++) {
1077 for(
int ii(-1); ii<=1; ii++) {
1078 aux_flag(i,j,k).setDisconnected(ii,jj, 1);
1090 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
1092 const Box& bx = mfi.validbox();
1093 const Box gbx = amrex::grow(bx,
m_cellflags->nGrow()-1);
1095 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
1096 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
1098 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1100 for(
int kk(-1); kk<=1; kk++) {
1101 for(
int jj(-1); jj<=1; jj++) {
1102 for(
int ii(-1); ii<=1; ii++)
1104 if (aux_vfrac(i+ii,j+jj,k+kk) ==
zero) {
1105 aux_flag(i,j,k).setDisconnected(ii,jj,kk);
1110 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1112 if (aux_vfrac(i,j,k)==
zero) {
1113 aux_flag(i,j,k).setCovered();
1128 amrex::VisMF::Write(*
m_areafrac[0],
"UAREAX");
1129 amrex::VisMF::Write(*
m_areafrac[1],
"UAREAY");
1130 amrex::VisMF::Write(*
m_areafrac[2],
"UAREAZ");
1131 }
else if (a_idim == 1) {
1133 amrex::VisMF::Write(*
m_areafrac[0],
"VAREAX");
1134 amrex::VisMF::Write(*
m_areafrac[1],
"VAREAY");
1135 amrex::VisMF::Write(*
m_areafrac[2],
"VAREAZ");
1138 amrex::VisMF::Write(*
m_areafrac[0],
"WAREAX");
1139 amrex::VisMF::Write(*
m_areafrac[1],
"WAREAY");
1140 amrex::VisMF::Write(*
m_areafrac[2],
"WAREAZ");
const Real dx
Definition: ERF_InitCustomPert_ABL.H:44
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
constexpr amrex::Real real_eps
Definition: ERF_NumericalConstants.H:27
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:30
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:34
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::Array< std::unique_ptr< amrex::MultiFab >, AMREX_SPACEDIM > m_areafrac
Definition: ERF_EBAux.H:92
std::unique_ptr< amrex::MultiFab > m_bndrynorm
Definition: ERF_EBAux.H:90
std::unique_ptr< amrex::MultiFab > m_bndrycent
Definition: ERF_EBAux.H:89
std::unique_ptr< amrex::FabArray< amrex::EBCellFlagFab > > m_cellflags
Definition: ERF_EBAux.H:85
std::unique_ptr< amrex::MultiFab > m_bndryarea
Definition: ERF_EBAux.H:88
amrex::Array< std::unique_ptr< amrex::MultiFab >, AMREX_SPACEDIM > m_facecent
Definition: ERF_EBAux.H:93
std::unique_ptr< amrex::MultiFab > m_volcent
Definition: ERF_EBAux.H:87
std::unique_ptr< amrex::MultiFab > m_volfrac
Definition: ERF_EBAux.H:86
Reconstructs geometric moments for one EB cut cell.
Definition: ERF_EBCutCell.H:69
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12