33 Real small_volfrac = 1.e-14;
35 pp.queryAdd(
"small_volfrac", small_volfrac);
36 const Real small_value = 1.e-15;
38 const IntVect vdim(IntVect::TheDimensionVector(a_idim));
40 const BoxArray& grids = amrex::convert(a_grids, vdim);
42 m_cellflags =
new FabArray<EBCellFlagFab>(grids, a_dmap, 1, a_ngrow[0], MFInfo(),
43 DefaultFabFactory<EBCellFlagFab>());
47 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
48 auto& fab = (*m_cellflags)[mfi];
49 fab.setType(FabType::singlevalued);
52 m_volfrac =
new MultiFab(grids, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
53 m_volcent =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
55 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
56 const BoxArray& faceba = amrex::convert(a_grids, IntVect::TheDimensionVector(idim));
58 m_areafrac[idim] =
new MultiFab(a_grids, a_dmap, 1, a_ngrow[1]+1, MFInfo(), FArrayBoxFactory());
59 m_facecent[idim] =
new MultiFab(a_grids, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
61 m_areafrac[idim] =
new MultiFab(faceba, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
62 m_facecent[idim] =
new MultiFab(faceba, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
66 m_bndryarea =
new MultiFab(grids, a_dmap, 1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
67 m_bndrycent =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
68 m_bndrynorm =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
74 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
83 const auto& FlagFab = a_factory->getMultiEBCellFlagFab();
85 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
87 const Box& bx = mfi.validbox();
88 const Box& bx_grown = mfi.growntilebox();
89 const Box tbx = mfi.nodaltilebox(a_idim);
90 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
92 GpuArray<Real, AMREX_SPACEDIM> dx = a_geom.CellSizeArray();
93 bool l_periodic = a_geom.isPeriodic(a_idim);
95 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
96 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
97 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
98 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
99 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
101 if (FlagFab[mfi].getType(bx) == FabType::covered ) {
103 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
105 aux_flag(i,j,k).setCovered();
106 aux_flag(i,j,k).setDisconnected();
107 if (i==bx.bigEnd(0)) {
108 aux_flag(i+1,j,k).setCovered();
110 if (j==bx.bigEnd(1)) {
111 aux_flag(i,j+1,k).setCovered();
113 if (k==bx.bigEnd(2)) {
114 aux_flag(i,j,k+1).setCovered();
118 }
else if (FlagFab[mfi].getType(bx) == FabType::regular ) {
120 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
122 aux_flag(i,j,k).setRegular();
123 aux_flag(i,j,k).setDisconnected();
124 aux_vfrac(i,j,k) = 1.0;
125 aux_afrac_x(i,j,k) = 1.0;
126 aux_afrac_y(i,j,k) = 1.0;
127 aux_afrac_z(i,j,k) = 1.0;
128 if (i==bx.bigEnd(0)) {
129 aux_flag(i+1,j,k).setRegular();
130 aux_vfrac(i+1,j,k) = 1.0;
131 aux_afrac_x(i+1,j,k) = 1.0;
133 if (j==bx.bigEnd(1)) {
134 aux_flag(i,j+1,k).setRegular();
135 aux_vfrac(i,j+1,k) = 1.0;
136 aux_afrac_y(i,j+1,k) = 1.0;
138 if (k==bx.bigEnd(2)) {
139 aux_flag(i,j,k+1).setRegular();
140 aux_vfrac(i,j,k+1) = 1.0;
141 aux_afrac_z(i,j,k+1) = 1.0;
145 }
else if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
150 Array4<EBCellFlag const>
const& flag = FlagFab.const_array(mfi);
151 Array4<Real const>
const& afrac = (a_factory->getAreaFrac()[a_idim])->const_array(mfi);
152 Array4<Real const>
const& bnorm = a_factory->getBndryNormal()[mfi].const_array();
153 Array4<Real const>
const& bcent = a_factory->getBndryCent()[mfi].const_array();
156 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
157 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
158 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
159 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
160 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
161 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
162 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
165 Box dom_grown = domain;
166 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
167 if (a_geom.isPeriodic(idim)) {
168 dom_grown.grow(idim, a_ngrow[0]);
172 const IntVect dom_grown_lo = dom_grown.smallEnd();
173 const IntVect dom_grown_hi = dom_grown.bigEnd();
175 BoxList diffList = boxDiff(bx_grown, bx);
176 for (
const Box& b : diffList) {
177 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
179 if ( i < dom_grown_lo[0] || i > dom_grown_hi[0] ||
180 j < dom_grown_lo[1] || j > dom_grown_hi[1] ||
181 k < dom_grown_lo[2] || k > dom_grown_hi[2] ) {
182 aux_flag(i,j,k).setCovered();
183 aux_flag(i,j,k).setDisconnected();
188 #ifndef AMREX_USE_GPU
192 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
195 aux_flag(i,j,k).setCovered();
196 aux_flag(i,j,k).setDisconnected();
198 if (i==bx.bigEnd(0)) {
199 aux_flag(i+1,j,k).setCovered();
201 if (j==bx.bigEnd(1)) {
202 aux_flag(i,j+1,k).setCovered();
204 if (k==bx.bigEnd(2)) {
205 aux_flag(i,j,k+1).setCovered();
209 IntVect iv_hi(i,j,k);
210 IntVect iv_lo(iv_hi - vdim);
212 bool lo_isCovered = flag(iv_lo).isCovered();
213 bool hi_isCovered = flag(iv_hi).isCovered();
214 bool lo_isRegular = flag(iv_lo).isRegular();
215 bool hi_isRegular = flag(iv_hi).isRegular();
216 bool lo_isSingleValued = flag(iv_lo).isSingleValued();
217 bool hi_isSingleValued = flag(iv_hi).isSingleValued();
219 const bool at_lo_boundary = (!l_periodic && iv_hi[a_idim]==domain.smallEnd(a_idim));
220 const bool at_hi_boundary = (!l_periodic && iv_hi[a_idim]==domain.bigEnd(a_idim));
224 if (at_lo_boundary) {
227 lo_isRegular =
false;
228 lo_isSingleValued =
false;
229 }
else if (hi_isRegular) {
230 lo_isCovered =
false;
232 lo_isSingleValued =
false;
233 }
else if (hi_isSingleValued) {
234 if (almostEqual(afrac(i,j,k),0.0)) {
236 lo_isRegular =
false;
237 lo_isSingleValued =
false;
238 }
else if (almostEqual(afrac(i,j,k),1.0)) {
239 lo_isCovered =
false;
241 lo_isSingleValued =
false;
243 lo_isCovered =
false;
244 lo_isRegular =
false;
245 lo_isSingleValued =
true;
253 if (at_hi_boundary) {
256 hi_isRegular =
false;
257 hi_isSingleValued =
false;
258 }
else if (lo_isRegular) {
259 hi_isCovered =
false;
261 hi_isSingleValued =
false;
262 }
else if (lo_isSingleValued) {
263 if (almostEqual(afrac(i,j,k),0.0)) {
265 hi_isRegular =
false;
266 hi_isSingleValued =
false;
267 }
else if (almostEqual(afrac(i,j,k),1.0)) {
268 hi_isCovered =
false;
270 hi_isSingleValued =
false;
272 hi_isCovered =
false;
273 hi_isRegular =
false;
274 hi_isSingleValued =
true;
280 if ( lo_isCovered && hi_isCovered) {
284 }
else if ( lo_isRegular && hi_isRegular) {
286 aux_flag(i,j,k).setRegular();
287 aux_flag(i,j,k).setConnected();
289 aux_vfrac(i,j,k) = 1.0;
291 aux_afrac_x(i,j,k) = 1.0;
292 aux_afrac_y(i,j,k) = 1.0;
293 aux_afrac_z(i,j,k) = 1.0;
295 if (i==bx.bigEnd(0)) {
296 aux_afrac_x(i+1,j,k) = 1.0;
298 if (j==bx.bigEnd(1)) {
299 aux_afrac_y(i,j+1,k) = 1.0;
301 if (k==bx.bigEnd(2)) {
302 aux_afrac_z(i,j,k+1) = 1.0;
307 #ifndef AMREX_USE_GPU
308 if (verbose) { Print() <<
"\ncell: " << amrex::IntVect(i,j,k) <<
"\n"; }
310 Array<Real,AMREX_SPACEDIM> lo_arr = {-0.5,-0.5,-0.5};
311 Array<Real,AMREX_SPACEDIM> hi_arr = { 0.5, 0.5, 0.5};
320 RealVect lo_point (bcent(iv_lo,0), bcent(iv_lo,1), bcent(iv_lo,2));
321 RealVect lo_normal(bnorm(iv_lo,0), bnorm(iv_lo,1), bnorm(iv_lo,2));
323 if (at_lo_boundary) {
324 lo_point[a_idim] += 1.0;
327 if (lo_isSingleValued ) {
328 Real bnorm_x = bnorm(iv_lo,0) * dx[0];
329 Real bnorm_y = bnorm(iv_lo,1) * dx[1];
330 Real bnorm_z = bnorm(iv_lo,2) * dx[2];
332 Real norm = sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
334 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
336 lo_normal = bnorm_isoparam;
340 lo_arr[a_idim] = 0.0;
341 hi_arr[a_idim] = 0.5;
342 RealBox lo_rbx(lo_arr.data(), hi_arr.data());
344 eb_cut_cell_ lo_eb_cc(flag(iv_lo), lo_rbx, lo_point, lo_normal);
348 AMREX_ASSERT( !lo_isCovered || lo_eb_cc.isCovered() );
349 AMREX_ASSERT( !lo_isRegular || lo_eb_cc.isRegular() );
355 RealVect hi_point (bcent(iv_hi,0), bcent(iv_hi,1), bcent(iv_hi,2));
356 RealVect hi_normal(bnorm(iv_hi,0), bnorm(iv_hi,1), bnorm(iv_hi,2));
358 if (at_hi_boundary) {
359 hi_point[a_idim] += -1.0;
362 if (hi_isSingleValued ) {
363 Real bnorm_x = bnorm(iv_hi,0) * dx[0];
364 Real bnorm_y = bnorm(iv_hi,1) * dx[1];
365 Real bnorm_z = bnorm(iv_hi,2) * dx[2];
367 Real norm = sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
369 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
371 hi_normal = bnorm_isoparam;
375 lo_arr[a_idim] = -0.5;
376 hi_arr[a_idim] = 0.0;
377 RealBox hi_rbx(lo_arr.data(), hi_arr.data());
379 eb_cut_cell_ hi_eb_cc(flag(iv_hi), hi_rbx, hi_point, hi_normal);
383 AMREX_ASSERT( !hi_isCovered || hi_eb_cc.isCovered() );
384 AMREX_ASSERT( !hi_isRegular || hi_eb_cc.isRegular() );
387 #if defined(AMREX_DEBUG) || defined(AMREX_TESTING) || 1
397 eb_cut_cell_ hi_hi_eb_cc(flag(iv_hi), lo_rbx, hi_point, hi_normal);
401 #ifndef AMREX_USE_GPU
402 if ( !(!hi_isRegular || hi_hi_eb_cc.isRegular()) ||
403 !(!hi_isCovered || hi_hi_eb_cc.isCovered()) ) {
404 Print() <<
"flag(iv_hi) and hi_hi_eb_cc flags do not agree\n"
405 <<
"\n isRegular() " << hi_isRegular <<
" " << hi_hi_eb_cc.isRegular()
406 <<
"\n isCovered() " << hi_isCovered <<
" " << hi_hi_eb_cc.isCovered()
412 AMREX_ALWAYS_ASSERT( !hi_isRegular || hi_hi_eb_cc.isRegular() );
413 AMREX_ALWAYS_ASSERT( !hi_isCovered || hi_hi_eb_cc.isCovered() );
420 if ( hi_isSingleValued ) {
422 Real const adx = (a_idim == 0)
423 ? (hi_eb_cc.areaLo(0) - hi_hi_eb_cc.areaHi(0)) * dx[1] * dx[2]
424 : (hi_eb_cc.areaLo(0) + hi_hi_eb_cc.areaLo(0)) * dx[1] * dx[2]
425 - (hi_eb_cc.areaHi(0) + hi_hi_eb_cc.areaHi(0)) * dx[1] * dx[2];
427 Real const ady = (a_idim == 1)
428 ? (hi_eb_cc.areaLo(1) - hi_hi_eb_cc.areaHi(1)) * dx[0] * dx[2]
429 : (hi_eb_cc.areaLo(1) + hi_hi_eb_cc.areaLo(1)) * dx[0] * dx[2]
430 - (hi_eb_cc.areaHi(1) + hi_hi_eb_cc.areaHi(1)) * dx[0] * dx[2];
432 Real const adz = (a_idim == 2)
433 ? (hi_eb_cc.areaLo(2) - hi_hi_eb_cc.areaHi(2)) * dx[0] * dx[1]
434 : (hi_eb_cc.areaLo(2) + hi_hi_eb_cc.areaLo(2)) * dx[0] * dx[1]
435 - (hi_eb_cc.areaHi(2) + hi_hi_eb_cc.areaHi(2)) * dx[0] * dx[1];
437 Real const apnorm = std::sqrt(adx*adx + ady*ady + adz*adz);
440 Real const apnorminv = 1. / apnorm;
441 RealVect
const normal(adx*apnorminv, ady*apnorminv, adz*apnorminv);
442 Real const dot_normals = normal.dotProduct(hi_normal);
444 #ifndef AMREX_USE_GPU
445 if ( !amrex::almostEqual(dot_normals, 1.0) ) {
446 Print() <<
"\nFail: check-1 dot_normals " << dot_normals
452 }
else if (verbose) {
453 Print() <<
"Pass: dot_normals = 1.0\n";
457 AMREX_ALWAYS_ASSERT( amrex::almostEqual(dot_normals, 1.0) );
462 #ifndef AMREX_USE_GPU
463 Real const abs_err = std::abs( hi_eb_cc.areaHi(a_idim) - hi_hi_eb_cc.areaLo(a_idim) );
465 if ( abs_err >= machine_tol ) {
466 Print() <<
"\nFail: check-2 area abs_err: " << abs_err
467 <<
"\n hi_eb_cc.areaHi " << hi_eb_cc.areaHi(a_idim)
468 <<
"\n hi_hi_eb_cc.areaLo " << hi_hi_eb_cc.areaLo(a_idim)
470 }
else if (verbose) {
471 Print() <<
"Pass: hi_eb_cc.areaHi = hi_hi_eb_cc.areaLo"
472 <<
" abs_err: " << abs_err <<
"\n";
474 AMREX_ALWAYS_ASSERT( abs_err < machine_tol );
479 {
Real const abs_err = amrex::max(std::abs(lo_eb_cc.areaHi(a_idim) - afrac(iv_hi)),
480 std::abs(hi_eb_cc.areaLo(a_idim) - afrac(iv_hi)));
481 Real compare_tol = 5.0e-6;
482 #ifndef AMREX_USE_GPU
483 if ( abs_err >= compare_tol ) {
485 Print() <<
"\nFail: check-3 area abs_err " << abs_err
486 <<
"\n hi_eb_cc.areaLo(" << a_idim <<
") = " << hi_eb_cc.areaLo(a_idim)
487 <<
"\n lo_eb_cc.areaHi(" << a_idim <<
") = " << lo_eb_cc.areaHi(a_idim)
488 <<
"\n afrac" << iv_hi <<
" = " << afrac(iv_hi)
490 }
else if (verbose) {
491 Print() <<
"Pass: hi_eb_cc.areaLo = afrac = " << afrac(iv_hi)
492 <<
" abs_err: " << abs_err <<
"\n";
495 AMREX_ALWAYS_ASSERT( abs_err < compare_tol );
500 {
Real const vol = hi_eb_cc.volume() + hi_hi_eb_cc.volume();
501 Real const abs_err = amrex::Math::abs(vfrac(iv_hi) - vol);
502 Real compare_tol = 5.0e-6;
503 #ifndef AMREX_USE_GPU
504 if ( abs_err >= compare_tol ) {
507 amrex::Print() <<
"\nFail: check-4 volume abs_err: " << abs_err
508 <<
"\n point: " << hi_point
509 <<
"\n normal: " << hi_normal
510 <<
"\n hi_eb_cc.volume() " << hi_eb_cc.volume()
511 <<
"\n hi_hi_eb_cc.volume() " << hi_hi_eb_cc.volume()
512 <<
"\n vfrac: " << vfrac(iv_hi)
514 }
else if (verbose) {
515 Print() <<
"Pass: hi_eb_cc + hi_hi_eb_cc = vfrac = " << vfrac(iv_hi)
516 <<
" abs_err: " << abs_err <<
"\n";
519 AMREX_ALWAYS_ASSERT( abs_err < compare_tol );
529 if (lo_eb_cc.isCovered() && hi_eb_cc.isCovered()) {
533 }
else if (lo_eb_cc.isRegular() && hi_eb_cc.isRegular()) {
535 aux_flag(i,j,k).setRegular();
536 aux_flag(i,j,k).setConnected();
538 aux_vfrac(i,j,k) = 1.0;
540 aux_afrac_x(i,j,k) = 1.0;
541 aux_afrac_y(i,j,k) = 1.0;
542 aux_afrac_z(i,j,k) = 1.0;
544 aux_fcent_x(i,j,k,0) = 0.0; aux_fcent_x(i,j,k,1) = 0.0;
545 aux_fcent_y(i,j,k,0) = 0.0; aux_fcent_y(i,j,k,1) = 0.0;
546 aux_fcent_z(i,j,k,0) = 0.0; aux_fcent_z(i,j,k,1) = 0.0;
548 if (i==bx.bigEnd(0)) {
549 aux_afrac_x(i+1,j,k) = 1.0;
550 aux_fcent_x(i+1,j,k,0) = 0.0; aux_fcent_x(i+1,j,k,1) = 0.0;
552 if (j==bx.bigEnd(1)) {
553 aux_afrac_y(i,j+1,k) = 1.0;
554 aux_fcent_y(i,j+1,k,0) = 0.0; aux_fcent_y(i,j+1,k,1) = 0.0;
556 if (k==bx.bigEnd(2)) {
557 aux_afrac_z(i,j,k+1) = 1.0;
558 aux_fcent_z(i,j,k+1,0) = 0.0; aux_fcent_z(i,j,k+1,1) = 0.0;
561 }
else if ( (lo_eb_cc.isRegular() && hi_eb_cc.isCovered())
562 || (lo_eb_cc.isCovered() && hi_eb_cc.isRegular()) ) {
565 #ifndef AMREX_USE_GPU
566 Print()<<
"eb_aux_ / Check: Regular and Covered cut cells are facing each other." << std::endl;
573 aux_flag(i,j,k).setSingleValued();
577 Real lo_vol {lo_eb_cc.volume()};
578 Real hi_vol {hi_eb_cc.volume()};
580 aux_vfrac(i,j,k) = lo_vol + hi_vol;
592 RealVect lo_vcent {lo_eb_cc.centVol()};
593 RealVect hi_vcent {hi_eb_cc.centVol()};
595 lo_vcent[a_idim] = lo_vcent[a_idim] - 0.5;
596 hi_vcent[a_idim] = hi_vcent[a_idim] + 0.5;
598 aux_vcent(i,j,k,0) = ( lo_vol * lo_vcent[0] + hi_vol * hi_vcent[0] ) / aux_vfrac(i,j,k);
599 aux_vcent(i,j,k,1) = ( lo_vol * lo_vcent[1] + hi_vol * hi_vcent[1] ) / aux_vfrac(i,j,k);
600 aux_vcent(i,j,k,2) = ( lo_vol * lo_vcent[2] + hi_vol * hi_vcent[2] ) / aux_vfrac(i,j,k);
604 Real lo_areaLo_x {lo_eb_cc.areaLo(0)};
605 Real lo_areaLo_y {lo_eb_cc.areaLo(1)};
606 Real lo_areaLo_z {lo_eb_cc.areaLo(2)};
608 Real hi_areaLo_x {hi_eb_cc.areaLo(0)};
609 Real hi_areaLo_y {hi_eb_cc.areaLo(1)};
610 Real hi_areaLo_z {hi_eb_cc.areaLo(2)};
612 aux_afrac_x(i,j,k) = (a_idim == 0) ? lo_areaLo_x : lo_areaLo_x + hi_areaLo_x;
613 aux_afrac_y(i,j,k) = (a_idim == 1) ? lo_areaLo_y : lo_areaLo_y + hi_areaLo_y;
614 aux_afrac_z(i,j,k) = (a_idim == 2) ? lo_areaLo_z : lo_areaLo_z + hi_areaLo_z;
616 if (i==bx.bigEnd(0)) {
617 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
618 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
619 aux_afrac_x(i+1,j,k) = (a_idim == 0) ? hi_areaHi_x : lo_areaHi_x + hi_areaHi_x;
621 if (j==bx.bigEnd(1)) {
622 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
623 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
624 aux_afrac_y(i,j+1,k) = (a_idim == 1) ? hi_areaHi_y : lo_areaHi_y + hi_areaHi_y;
626 if (k==bx.bigEnd(2)) {
627 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
628 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
629 aux_afrac_z(i,j,k+1) = (a_idim == 2) ? hi_areaHi_z : lo_areaHi_z + hi_areaHi_z;
642 RealVect lo_centLo_x {lo_eb_cc.centLo(0)};
643 RealVect lo_centLo_y {lo_eb_cc.centLo(1)};
644 RealVect lo_centLo_z {lo_eb_cc.centLo(2)};
646 RealVect hi_centLo_x {hi_eb_cc.centLo(0)};
647 RealVect hi_centLo_y {hi_eb_cc.centLo(1)};
648 RealVect hi_centLo_z {hi_eb_cc.centLo(2)};
651 aux_fcent_x(i,j,k,0) = lo_centLo_x[1];
652 aux_fcent_x(i,j,k,1) = lo_centLo_x[2];
653 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) > 0.0)
654 ? ( lo_areaLo_y * (lo_centLo_y[0] - 0.5)
655 + hi_areaLo_y * (hi_centLo_y[0] + 0.5) ) / aux_afrac_y(i,j,k)
657 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) > 0.0)
658 ? ( lo_areaLo_y * lo_centLo_y[2]
659 + hi_areaLo_y * hi_centLo_y[2] ) / aux_afrac_y(i,j,k)
661 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) > 0.0)
662 ? ( lo_areaLo_z * (lo_centLo_z[0] - 0.5)
663 + hi_areaLo_z * (hi_centLo_z[0] + 0.5) ) / aux_afrac_z(i,j,k)
665 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) > 0.0)
666 ? ( lo_areaLo_z * lo_centLo_z[1]
667 + hi_areaLo_z * hi_centLo_z[1] ) / aux_afrac_z(i,j,k)
669 }
else if (a_idim == 1) {
670 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) > 0.0)
671 ? ( lo_areaLo_x * (lo_centLo_x[1] - 0.5)
672 + hi_areaLo_x * (hi_centLo_x[1] + 0.5) ) / aux_afrac_x(i,j,k)
674 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) > 0.0)
675 ? ( lo_areaLo_x * lo_centLo_x[2]
676 + hi_areaLo_x * hi_centLo_x[2] ) / aux_afrac_x(i,j,k)
678 aux_fcent_y(i,j,k,0) = lo_centLo_y[0];
679 aux_fcent_y(i,j,k,1) = lo_centLo_y[2];
680 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) > 0.0)
681 ? ( lo_areaLo_z * lo_centLo_z[0]
682 + hi_areaLo_z * hi_centLo_z[0] ) / aux_afrac_z(i,j,k)
684 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) > 0.0)
685 ? ( lo_areaLo_z * (lo_centLo_z[1] - 0.5)
686 + hi_areaLo_z * (hi_centLo_z[1] + 0.5) ) / aux_afrac_z(i,j,k)
688 }
else if (a_idim == 2) {
689 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) > 0.0)
690 ? ( lo_areaLo_x * lo_centLo_x[1]
691 + hi_areaLo_x * hi_centLo_x[1] ) / aux_afrac_x(i,j,k)
693 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) > 0.0)
694 ? ( lo_areaLo_x * (lo_centLo_x[2] - 0.5)
695 + hi_areaLo_x * (hi_centLo_x[2] + 0.5) ) / aux_afrac_x(i,j,k)
697 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) > 0.0)
698 ? ( lo_areaLo_y * lo_centLo_y[0]
699 + hi_areaLo_y * hi_centLo_y[0] ) / aux_afrac_y(i,j,k)
701 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) > 0.0)
702 ? ( lo_areaLo_y * (lo_centLo_y[2] - 0.5)
703 + hi_areaLo_y * (hi_centLo_y[2] + 0.5) ) / aux_afrac_y(i,j,k)
705 aux_fcent_z(i,j,k,0) = lo_centLo_z[0];
706 aux_fcent_z(i,j,k,1) = lo_centLo_z[1];
709 if (i==bx.bigEnd(0)) {
710 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
711 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
712 RealVect lo_centHi_x {lo_eb_cc.centHi(0)};
713 RealVect hi_centHi_x {hi_eb_cc.centHi(0)};
715 aux_fcent_x(i+1,j,k,0) = hi_centHi_x[1];
716 aux_fcent_x(i+1,j,k,1) = hi_centHi_x[2];
717 }
else if (a_idim == 1) {
718 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) > 0.0)
719 ? ( lo_areaHi_x * (lo_centHi_x[1] - 0.5)
720 + hi_areaHi_x * (hi_centHi_x[1] + 0.5) ) / aux_afrac_x(i+1,j,k)
722 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) > 0.0)
723 ? ( lo_areaHi_x * lo_centHi_x[2]
724 + hi_areaHi_x * hi_centHi_x[2] ) / aux_afrac_x(i+1,j,k)
726 }
else if (a_idim == 2) {
727 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) > 0.0)
728 ? ( lo_areaHi_x * lo_centHi_x[1]
729 + hi_areaHi_x * hi_centHi_x[1] ) / aux_afrac_x(i+1,j,k)
731 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) > 0.0)
732 ? ( lo_areaHi_x * (lo_centHi_x[2] - 0.5)
733 + hi_areaHi_x * (hi_centHi_x[2] + 0.5) ) / aux_afrac_x(i+1,j,k)
737 if (j==bx.bigEnd(1)) {
738 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
739 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
740 RealVect lo_centHi_y {lo_eb_cc.centHi(1)};
741 RealVect hi_centHi_y {hi_eb_cc.centHi(1)};
743 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) > 0.0)
744 ? ( lo_areaHi_y * (lo_centHi_y[0] - 0.5)
745 + hi_areaHi_y * (hi_centHi_y[0] + 0.5) ) / aux_afrac_y(i,j+1,k)
747 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) > 0.0)
748 ? ( lo_areaHi_y * lo_centHi_y[2]
749 + hi_areaHi_y * hi_centHi_y[2] ) / aux_afrac_y(i,j+1,k)
751 }
else if (a_idim == 1) {
752 aux_fcent_y(i,j+1,k,0) = lo_centHi_y[0];
753 aux_fcent_y(i,j+1,k,1) = lo_centHi_y[2];
754 }
else if (a_idim == 2) {
755 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) > 0.0)
756 ? ( lo_areaHi_y * lo_centHi_y[0]
757 + hi_areaHi_y * hi_centHi_y[0] ) / aux_afrac_y(i,j+1,k)
759 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) > 0.0)
760 ? ( lo_areaHi_y * (lo_centHi_y[2] - 0.5)
761 + hi_areaHi_y * (hi_centHi_y[2] + 0.5) ) / aux_afrac_y(i,j+1,k)
765 if (k==bx.bigEnd(2)) {
766 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
767 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
768 RealVect lo_centHi_z {lo_eb_cc.centHi(2)};
769 RealVect hi_centHi_z {hi_eb_cc.centHi(2)};
771 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) > 0.0)
772 ? ( lo_areaHi_z * (lo_centHi_z[0] - 0.5)
773 + hi_areaHi_z * (hi_centHi_z[0] + 0.5) ) / aux_afrac_z(i,j,k+1)
775 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) > 0.0)
776 ? ( lo_areaHi_z * lo_centHi_z[1]
777 + hi_areaHi_z * hi_centHi_z[1] ) / aux_afrac_z(i,j,k+1)
779 }
else if (a_idim == 1) {
780 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) > 0.0)
781 ? ( lo_areaHi_z * lo_centHi_z[0]
782 + hi_areaHi_z * hi_centHi_z[0] ) / aux_afrac_z(i,j,k+1)
784 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) > 0.0)
785 ? ( lo_areaHi_z * (lo_centHi_z[1] - 0.5)
786 + hi_areaHi_z * (hi_centHi_z[1] + 0.5) ) / aux_afrac_z(i,j,k+1)
788 }
else if (a_idim == 2) {
789 aux_fcent_z(i,j,k+1,0) = lo_centHi_z[0];
790 aux_fcent_z(i,j,k+1,1) = lo_centHi_z[1];
796 Real lo_areaBoun {lo_eb_cc.areaBoun()};
797 Real hi_areaBoun {hi_eb_cc.areaBoun()};
799 aux_barea(i,j,k) = lo_areaBoun + hi_areaBoun;
803 RealVect lo_centBoun {lo_eb_cc.centBoun()};
804 RealVect hi_centBoun {hi_eb_cc.centBoun()};
807 aux_bcent(i,j,k,0) = ( lo_areaBoun * (lo_centBoun[0]-0.5) + hi_areaBoun * (hi_centBoun[0]+0.5) ) / aux_barea(i,j,k);
808 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
809 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
810 }
else if (a_idim == 1) {
811 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
812 aux_bcent(i,j,k,1) = ( lo_areaBoun * (lo_centBoun[1]-0.5) + hi_areaBoun * (hi_centBoun[1]+0.5) ) / aux_barea(i,j,k);
813 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
814 }
else if (a_idim == 2) {
815 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
816 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
817 aux_bcent(i,j,k,2) = ( lo_areaBoun * (lo_centBoun[2]-0.5) + hi_areaBoun * (hi_centBoun[2]+0.5) ) / aux_barea(i,j,k);
822 RealVect eb_normal = ( lo_areaBoun * lo_normal + hi_areaBoun * hi_normal )/ aux_barea(i,j,k);
824 aux_bnorm(i,j,k,0) = eb_normal[0];
825 aux_bnorm(i,j,k,1) = eb_normal[1];
826 aux_bnorm(i,j,k,2) = eb_normal[2];
834 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
836 if (aux_vfrac(i,j,k) < small_volfrac)
838 aux_vfrac(i,j,k) = 0.0;
847 m_volfrac->FillBoundary(a_geom.periodicity());
849 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
851 const Box& bx = mfi.validbox();
852 const Box& bx_grown = mfi.growntilebox();
854 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
855 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
856 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
857 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
858 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
860 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
861 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
862 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
863 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
864 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
865 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
866 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
869 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
872 Box my_xbx(bx);
if (a_idim == 0) my_xbx.growLo(0,1);
873 ParallelFor(my_xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
875 if (aux_vfrac(i,j,k) < small_volfrac) {
876 aux_afrac_x(i ,j ,k ) = 0.0;
877 aux_afrac_x(i+1,j ,k ) = 0.0;
881 Box my_ybx(bx);
if (a_idim == 1) my_ybx.growLo(1,1);
882 ParallelFor(my_ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
884 if (aux_vfrac(i,j,k) < small_volfrac) {
885 aux_afrac_y(i ,j ,k ) = 0.0;
886 aux_afrac_y(i ,j+1,k ) = 0.0;
890 Box my_zbx(bx);
if (a_idim == 2) my_zbx.growLo(2,1);
891 ParallelFor(my_zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
893 if (aux_vfrac(i,j,k) < small_volfrac) {
894 aux_afrac_z(i ,j ,k+1) = 0.0;
895 aux_afrac_z(i ,j ,k ) = 0.0;
899 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
901 if (aux_vfrac(i,j,k) < small_volfrac)
903 aux_vcent(i,j,k,0) = 0.0;
904 aux_vcent(i,j,k,1) = 0.0;
905 aux_vcent(i,j,k,2) = 0.0;
907 aux_fcent_x(i ,j ,k ,0) = 0.0;
908 aux_fcent_x(i ,j ,k ,1) = 0.0;
909 aux_fcent_x(i+1,j ,k ,0) = 0.0;
910 aux_fcent_x(i+1,j ,k ,1) = 0.0;
912 aux_fcent_y(i ,j ,k ,0) = 0.0;
913 aux_fcent_y(i ,j ,k ,1) = 0.0;
914 aux_fcent_y(i ,j+1,k ,0) = 0.0;
915 aux_fcent_y(i ,j+1,k ,1) = 0.0;
917 aux_fcent_z(i ,j ,k ,0) = 0.0;
918 aux_fcent_z(i ,j ,k ,1) = 0.0;
919 aux_fcent_z(i ,j ,k+1,0) = 0.0;
920 aux_fcent_z(i ,j ,k+1,1) = 0.0;
922 aux_barea(i,j,k) = 0.0;
924 aux_bcent(i,j,k,0) = 0.0;
925 aux_bcent(i,j,k,1) = 0.0;
926 aux_bcent(i,j,k,2) = 0.0;
928 aux_bnorm(i,j,k,0) = 0.0;
929 aux_bnorm(i,j,k,1) = 0.0;
930 aux_bnorm(i,j,k,2) = 0.0;
932 aux_flag(i,j,k).setCovered();
935 if (std::abs(aux_vcent(i,j,k,0)) < small_value) aux_vcent(i,j,k,0) = 0.0;
936 if (std::abs(aux_vcent(i,j,k,1)) < small_value) aux_vcent(i,j,k,1) = 0.0;
937 if (std::abs(aux_vcent(i,j,k,2)) < small_value) aux_vcent(i,j,k,2) = 0.0;
938 if (std::abs(aux_bcent(i,j,k,0)) < small_value) aux_bcent(i,j,k,0) = 0.0;
939 if (std::abs(aux_bcent(i,j,k,1)) < small_value) aux_bcent(i,j,k,1) = 0.0;
940 if (std::abs(aux_bcent(i,j,k,2)) < small_value) aux_bcent(i,j,k,2) = 0.0;
949 Box upper_slab = makeSlab(bx_grown, a_idim, bx.bigEnd(a_idim)+1);
950 Box bx_grown_1 = bx; bx_grown_1.grow(a_idim,1);
951 BoxList slab_diffList = boxDiff(upper_slab, bx_grown_1);
953 for (
const Box& b : slab_diffList) {
954 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
956 IntVect iv(AMREX_D_DECL(i,j,k));
957 IntVect iv_nearest = iv;
958 for (
int d=0; d<AMREX_SPACEDIM; ++d) {
959 iv_nearest[d] = Clamp(iv[d], bx_grown_1.smallEnd(d), bx_grown_1.bigEnd(d));
961 aux_afrac_x(iv) = aux_afrac_x(iv_nearest);
974 m_volcent->FillBoundary(a_geom.periodicity());
975 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
976 m_areafrac[idim]->FillBoundary(a_geom.periodicity());
977 m_facecent[idim]->FillBoundary(a_geom.periodicity());
984 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
986 const Box& bx = mfi.validbox();
987 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
989 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
991 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
992 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
993 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
994 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
996 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
998 EB2::build_cellflag_from_ap (i, j, k, aux_flag, aux_afrac_x, aux_afrac_y, aux_afrac_z);
1003 bool l_periodic_x = a_geom.isPeriodic(0);
1004 bool l_periodic_y = a_geom.isPeriodic(1);
1005 bool l_periodic_z = a_geom.isPeriodic(2);
1007 if (!l_periodic_x) {
1008 const Box dom_grown = grow(grow(domain,1,1),2,1);
1009 const Box bx_grown = grow(grow( bx,1,1),2,1);
1010 const Box bx_face_x_lo = bx_grown & makeSlab(dom_grown,0,domain.smallEnd(0));
1011 const Box bx_face_x_hi = bx_grown & makeSlab(dom_grown,0,domain.bigEnd(0));
1013 ParallelFor(bx_face_x_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1015 for(
int kk(-1); kk<=1; kk++) {
1016 for(
int jj(-1); jj<=1; jj++) {
1017 aux_flag(i,j,k).setDisconnected(-1,jj,kk);
1020 ParallelFor(bx_face_x_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1022 for(
int kk(-1); kk<=1; kk++) {
1023 for(
int jj(-1); jj<=1; jj++) {
1024 aux_flag(i,j,k).setDisconnected( 1,jj,kk);
1029 if (!l_periodic_y) {
1030 const Box dom_grown = grow(grow(domain,0,1),2,1);
1031 const Box bx_grown = grow(grow( bx,0,1),2,1);
1032 const Box bx_face_y_lo = bx_grown & makeSlab(dom_grown,1,domain.smallEnd(1));
1033 const Box bx_face_y_hi = bx_grown & makeSlab(dom_grown,1,domain.bigEnd(1));
1035 ParallelFor(bx_face_y_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1037 for(
int kk(-1); kk<=1; kk++) {
1038 for(
int ii(-1); ii<=1; ii++) {
1039 aux_flag(i,j,k).setDisconnected(ii,-1,kk);
1042 ParallelFor(bx_face_y_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1044 for(
int kk(-1); kk<=1; kk++) {
1045 for(
int ii(-1); ii<=1; ii++) {
1046 aux_flag(i,j,k).setDisconnected(ii, 1,kk);
1051 if (!l_periodic_z) {
1052 const Box dom_grown = grow(grow(domain,0,1),1,1);
1053 const Box bx_grown = grow(grow( bx,0,1),1,1);
1054 const Box bx_face_z_lo = bx_grown & makeSlab(dom_grown,2,domain.smallEnd(2));
1055 const Box bx_face_z_hi = bx_grown & makeSlab(dom_grown,2,domain.bigEnd(2));
1057 ParallelFor(bx_face_z_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1059 for(
int jj(-1); jj<=1; jj++) {
1060 for(
int ii(-1); ii<=1; ii++) {
1061 aux_flag(i,j,k).setDisconnected(ii,jj,-1);
1064 ParallelFor(bx_face_z_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1066 for(
int jj(-1); jj<=1; jj++) {
1067 for(
int ii(-1); ii<=1; ii++) {
1068 aux_flag(i,j,k).setDisconnected(ii,jj, 1);
1080 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
1082 const Box& bx = mfi.validbox();
1083 const Box gbx = amrex::grow(bx,
m_cellflags->nGrow()-1);
1085 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
1086 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
1088 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1090 for(
int kk(-1); kk<=1; kk++) {
1091 for(
int jj(-1); jj<=1; jj++) {
1092 for(
int ii(-1); ii<=1; ii++)
1094 if (aux_vfrac(i+ii,j+jj,k+kk) == 0.0) {
1095 aux_flag(i,j,k).setDisconnected(ii,jj,kk);
1100 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1102 if (aux_vfrac(i,j,k)==0.0) {
1103 aux_flag(i,j,k).setCovered();
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:233
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::FabArray< amrex::EBCellFlagFab > * m_cellflags
Definition: ERF_EBAux.H:44
amrex::MultiFab * m_bndrynorm
Definition: ERF_EBAux.H:49
amrex::MultiFab * m_bndryarea
Definition: ERF_EBAux.H:47
amrex::MultiFab * m_volfrac
Definition: ERF_EBAux.H:45
amrex::MultiFab * m_bndrycent
Definition: ERF_EBAux.H:48
amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > m_facecent
Definition: ERF_EBAux.H:52
amrex::MultiFab * m_volcent
Definition: ERF_EBAux.H:46
amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > m_areafrac
Definition: ERF_EBAux.H:51
Definition: ERF_EBCutCell.H:14
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12