32 Real small_volfrac = 1.e-14;
34 pp.queryAdd(
"small_volfrac", small_volfrac);
35 const Real small_value = 1.e-15;
37 const IntVect vdim(IntVect::TheDimensionVector(a_idim));
39 const BoxArray& grids = amrex::convert(a_grids, vdim);
41 m_cellflags =
new FabArray<EBCellFlagFab>(grids, a_dmap, 1, a_ngrow[0], MFInfo(),
42 DefaultFabFactory<EBCellFlagFab>());
46 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
47 auto& fab = (*m_cellflags)[mfi];
48 fab.setType(FabType::singlevalued);
51 m_volfrac =
new MultiFab(grids, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
52 m_volcent =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
54 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
55 const BoxArray& faceba = amrex::convert(a_grids, IntVect::TheDimensionVector(idim));
56 m_areafrac[idim] =
new MultiFab(faceba, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
57 m_facecent[idim] =
new MultiFab(faceba, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
60 m_bndryarea =
new MultiFab(grids, a_dmap, 1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
61 m_bndrycent =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
62 m_bndrynorm =
new MultiFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
67 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
75 const auto& FlagFab = a_factory->getMultiEBCellFlagFab();
77 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
79 const Box& bx = mfi.validbox();
80 const Box& bx_grown = mfi.growntilebox();
81 const Box tbx = mfi.nodaltilebox(a_idim);
82 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
84 GpuArray<Real, AMREX_SPACEDIM> dx = a_geom.CellSizeArray();
85 bool l_periodic = a_geom.isPeriodic(a_idim);
87 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
88 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
89 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
90 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
91 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
93 if (FlagFab[mfi].getType(bx) == FabType::covered ) {
95 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
97 aux_flag(i,j,k).setCovered();
98 aux_flag(i,j,k).setDisconnected();
99 aux_vfrac(i,j,k) = 0.0;
100 aux_afrac_x(i,j,k) = 0.0;
101 aux_afrac_y(i,j,k) = 0.0;
102 aux_afrac_z(i,j,k) = 0.0;
105 }
else if (FlagFab[mfi].getType(bx) == FabType::regular ) {
107 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
109 aux_flag(i,j,k).setRegular();
110 aux_flag(i,j,k).setDisconnected();
111 aux_vfrac(i,j,k) = 1.0;
112 aux_afrac_x(i,j,k) = 1.0;
113 aux_afrac_y(i,j,k) = 1.0;
114 aux_afrac_z(i,j,k) = 1.0;
117 }
else if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
122 Array4<EBCellFlag const>
const& flag = FlagFab.const_array(mfi);
125 Array4<Real const>
const& afrac = (a_factory->getAreaFrac()[a_idim])->const_array(mfi);
126 Array4<Real const>
const& bnorm = a_factory->getBndryNormal()[mfi].const_array();
127 Array4<Real const>
const& bcent = a_factory->getBndryCent()[mfi].const_array();
130 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
131 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
132 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
133 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
134 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
135 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
136 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
139 Box dom_grown = domain;
140 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
141 if (a_geom.isPeriodic(idim)) {
142 dom_grown.grow(idim, a_ngrow[0]);
146 const IntVect dom_grown_lo = dom_grown.smallEnd();
147 const IntVect dom_grown_hi = dom_grown.bigEnd();
149 BoxList diffList = boxDiff(bx_grown, bx);
150 for (
const Box& b : diffList) {
151 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
153 if ( i < dom_grown_lo[0] || i > dom_grown_hi[0] ||
154 j < dom_grown_lo[1] || j > dom_grown_hi[1] ||
155 k < dom_grown_lo[2] || k > dom_grown_hi[2] ) {
156 aux_flag(i,j,k).setCovered();
157 aux_flag(i,j,k).setDisconnected();
162 #ifndef AMREX_USE_GPU
166 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
169 aux_flag(i,j,k).setCovered();
170 aux_flag(i,j,k).setDisconnected();
172 aux_vfrac(i,j,k) = 0.0;
173 aux_vcent(i,j,k,0) = 0.0;
174 aux_vcent(i,j,k,1) = 0.0;
175 aux_vcent(i,j,k,2) = 0.0;
177 aux_afrac_x(i,j,k) = 0.0;
178 aux_afrac_y(i,j,k) = 0.0;
179 aux_afrac_z(i,j,k) = 0.0;
181 aux_fcent_x(i,j,k,0) = 0.0; aux_fcent_x(i,j,k,1) = 0.0;
182 aux_fcent_y(i,j,k,0) = 0.0; aux_fcent_y(i,j,k,1) = 0.0;
183 aux_fcent_z(i,j,k,0) = 0.0; aux_fcent_z(i,j,k,1) = 0.0;
185 if (i==bx.bigEnd(0)) {
186 aux_flag(i+1,j,k).setCovered();
187 aux_vfrac(i+1,j,k) = 0.0;
188 aux_vcent(i+1,j,k,0) = 0.0;
189 aux_vcent(i+1,j,k,1) = 0.0;
190 aux_vcent(i+1,j,k,2) = 0.0;
192 aux_afrac_x(i+1,j,k) = 0.0;
193 aux_fcent_x(i+1,j,k,0) = 0.0;
194 aux_fcent_x(i+1,j,k,1) = 0.0;
196 if (j==bx.bigEnd(1)) {
197 aux_flag(i,j+1,k).setCovered();
198 aux_vfrac(i,j+1,k) = 0.0;
199 aux_vcent(i,j+1,k,0) = 0.0;
200 aux_vcent(i,j+1,k,1) = 0.0;
201 aux_vcent(i,j+1,k,2) = 0.0;
203 aux_afrac_y(i,j+1,k) = 0.0;
204 aux_fcent_y(i,j+1,k,0) = 0.0;
205 aux_fcent_y(i,j+1,k,1) = 0.0;
207 if (k==bx.bigEnd(2)) {
208 aux_flag(i,j,k+1).setCovered();
209 aux_vfrac(i,j,k+1) = 0.0;
210 aux_vcent(i,j,k+1,0) = 0.0;
211 aux_vcent(i,j,k+1,1) = 0.0;
212 aux_vcent(i,j,k+1,2) = 0.0;
214 aux_afrac_z(i,j,k+1) = 0.0;
215 aux_fcent_z(i,j,k+1,0) = 0.0;
216 aux_fcent_z(i,j,k+1,1) = 0.0;
219 aux_barea(i,j,k) = 0.0;
221 aux_bcent(i,j,k,0) = 0.0;
222 aux_bcent(i,j,k,1) = 0.0;
223 aux_bcent(i,j,k,2) = 0.0;
225 aux_bnorm(i,j,k,0) = 0.0;
226 aux_bnorm(i,j,k,1) = 0.0;
227 aux_bnorm(i,j,k,2) = 0.0;
230 IntVect iv_hi(i,j,k);
231 IntVect iv_lo(iv_hi - vdim);
233 bool lo_isCovered = flag(iv_lo).isCovered();
234 bool hi_isCovered = flag(iv_hi).isCovered();
235 bool lo_isRegular = flag(iv_lo).isRegular();
236 bool hi_isRegular = flag(iv_hi).isRegular();
237 bool lo_isSingleValued = flag(iv_lo).isSingleValued();
238 bool hi_isSingleValued = flag(iv_hi).isSingleValued();
240 const bool at_lo_boundary = (!l_periodic && iv_hi[a_idim]==domain.smallEnd(a_idim));
241 const bool at_hi_boundary = (!l_periodic && iv_hi[a_idim]==domain.bigEnd(a_idim));
245 if (at_lo_boundary) {
248 lo_isRegular =
false;
249 lo_isSingleValued =
false;
250 }
else if (hi_isRegular) {
251 lo_isCovered =
false;
253 lo_isSingleValued =
false;
254 }
else if (hi_isSingleValued) {
255 if (almostEqual(afrac(i,j,k),0.0)) {
257 lo_isRegular =
false;
258 lo_isSingleValued =
false;
259 }
else if (almostEqual(afrac(i,j,k),1.0)) {
260 lo_isCovered =
false;
262 lo_isSingleValued =
false;
264 lo_isCovered =
false;
265 lo_isRegular =
false;
266 lo_isSingleValued =
true;
274 if (at_hi_boundary) {
277 hi_isRegular =
false;
278 hi_isSingleValued =
false;
279 }
else if (lo_isRegular) {
280 hi_isCovered =
false;
282 hi_isSingleValued =
false;
283 }
else if (lo_isSingleValued) {
284 if (almostEqual(afrac(i,j,k),0.0)) {
286 hi_isRegular =
false;
287 hi_isSingleValued =
false;
288 }
else if (almostEqual(afrac(i,j,k),1.0)) {
289 hi_isCovered =
false;
291 hi_isSingleValued =
false;
293 hi_isCovered =
false;
294 hi_isRegular =
false;
295 hi_isSingleValued =
true;
301 if ( lo_isCovered && hi_isCovered) {
305 }
else if ( lo_isRegular && hi_isRegular) {
307 aux_flag(i,j,k).setRegular();
308 aux_flag(i,j,k).setConnected();
310 aux_vfrac(i,j,k) = 1.0;
312 aux_afrac_x(i,j,k) = 1.0;
313 aux_afrac_y(i,j,k) = 1.0;
314 aux_afrac_z(i,j,k) = 1.0;
316 aux_fcent_x(i,j,k,0) = 0.0; aux_fcent_x(i,j,k,1) = 0.0;
317 aux_fcent_y(i,j,k,0) = 0.0; aux_fcent_y(i,j,k,1) = 0.0;
318 aux_fcent_z(i,j,k,0) = 0.0; aux_fcent_z(i,j,k,1) = 0.0;
320 if (i==bx.bigEnd(0)) {
321 aux_afrac_x(i+1,j,k) = 1.0;
322 aux_fcent_x(i+1,j,k,0) = 0.0;
323 aux_fcent_x(i+1,j,k,1) = 0.0;
325 if (j==bx.bigEnd(1)) {
326 aux_afrac_y(i,j+1,k) = 1.0;
327 aux_fcent_y(i,j+1,k,0) = 0.0;
328 aux_fcent_y(i,j+1,k,1) = 0.0;
330 if (k==bx.bigEnd(2)) {
331 aux_afrac_z(i,j,k+1) = 1.0;
332 aux_fcent_z(i,j,k+1,0) = 0.0;
333 aux_fcent_z(i,j,k+1,1) = 0.0;
338 #ifndef AMREX_USE_GPU
339 if (verbose) { Print() <<
"\ncell: " << amrex::IntVect(i,j,k) <<
"\n"; }
341 Array<Real,AMREX_SPACEDIM> lo_arr = {-0.5,-0.5,-0.5};
342 Array<Real,AMREX_SPACEDIM> hi_arr = { 0.5, 0.5, 0.5};
351 RealVect lo_point (bcent(iv_lo,0), bcent(iv_lo,1), bcent(iv_lo,2));
352 RealVect lo_normal(bnorm(iv_lo,0), bnorm(iv_lo,1), bnorm(iv_lo,2));
354 if (at_lo_boundary) {
355 lo_point[a_idim] += 1.0;
358 if (lo_isSingleValued ) {
359 Real bnorm_x = bnorm(iv_lo,0) * dx[0];
360 Real bnorm_y = bnorm(iv_lo,1) * dx[1];
361 Real bnorm_z = bnorm(iv_lo,2) * dx[2];
363 Real norm = sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
365 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
367 lo_normal = bnorm_isoparam;
371 lo_arr[a_idim] = 0.0;
372 hi_arr[a_idim] = 0.5;
373 RealBox lo_rbx(lo_arr.data(), hi_arr.data());
375 eb_cut_cell_ lo_eb_cc(flag(iv_lo), lo_rbx, lo_point, lo_normal);
379 AMREX_ASSERT( !lo_isCovered || lo_eb_cc.isCovered() );
380 AMREX_ASSERT( !lo_isRegular || lo_eb_cc.isRegular() );
386 RealVect hi_point (bcent(iv_hi,0), bcent(iv_hi,1), bcent(iv_hi,2));
387 RealVect hi_normal(bnorm(iv_hi,0), bnorm(iv_hi,1), bnorm(iv_hi,2));
389 if (at_hi_boundary) {
390 hi_point[a_idim] += -1.0;
393 if (hi_isSingleValued ) {
394 Real bnorm_x = bnorm(iv_hi,0) * dx[0];
395 Real bnorm_y = bnorm(iv_hi,1) * dx[1];
396 Real bnorm_z = bnorm(iv_hi,2) * dx[2];
398 Real norm = sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
400 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
402 hi_normal = bnorm_isoparam;
406 lo_arr[a_idim] = -0.5;
407 hi_arr[a_idim] = 0.0;
408 RealBox hi_rbx(lo_arr.data(), hi_arr.data());
410 eb_cut_cell_ hi_eb_cc(flag(iv_hi), hi_rbx, hi_point, hi_normal);
414 AMREX_ASSERT( !hi_isCovered || hi_eb_cc.isCovered() );
415 AMREX_ASSERT( !hi_isRegular || hi_eb_cc.isRegular() );
418 #if defined(AMREX_DEBUG) || defined(AMREX_TESTING) || 1
428 eb_cut_cell_ hi_hi_eb_cc(flag(iv_hi), lo_rbx, hi_point, hi_normal);
432 #ifndef AMREX_USE_GPU
433 if ( !(!hi_isRegular || hi_hi_eb_cc.isRegular()) ||
434 !(!hi_isCovered || hi_hi_eb_cc.isCovered()) ) {
435 Print() <<
"flag(iv_hi) and hi_hi_eb_cc flags do not agree\n"
436 <<
"\n isRegular() " << hi_isRegular <<
" " << hi_hi_eb_cc.isRegular()
437 <<
"\n isCovered() " << hi_isCovered <<
" " << hi_hi_eb_cc.isCovered()
443 AMREX_ALWAYS_ASSERT( !hi_isRegular || hi_hi_eb_cc.isRegular() );
444 AMREX_ALWAYS_ASSERT( !hi_isCovered || hi_hi_eb_cc.isCovered() );
451 if ( hi_isSingleValued ) {
453 Real const adx = (a_idim == 0)
454 ? (hi_eb_cc.areaLo(0) - hi_hi_eb_cc.areaHi(0)) * dx[1] * dx[2]
455 : (hi_eb_cc.areaLo(0) + hi_hi_eb_cc.areaLo(0)) * dx[1] * dx[2]
456 - (hi_eb_cc.areaHi(0) + hi_hi_eb_cc.areaHi(0)) * dx[1] * dx[2];
458 Real const ady = (a_idim == 1)
459 ? (hi_eb_cc.areaLo(1) - hi_hi_eb_cc.areaHi(1)) * dx[0] * dx[2]
460 : (hi_eb_cc.areaLo(1) + hi_hi_eb_cc.areaLo(1)) * dx[0] * dx[2]
461 - (hi_eb_cc.areaHi(1) + hi_hi_eb_cc.areaHi(1)) * dx[0] * dx[2];
463 Real const adz = (a_idim == 2)
464 ? (hi_eb_cc.areaLo(2) - hi_hi_eb_cc.areaHi(2)) * dx[0] * dx[1]
465 : (hi_eb_cc.areaLo(2) + hi_hi_eb_cc.areaLo(2)) * dx[0] * dx[1]
466 - (hi_eb_cc.areaHi(2) + hi_hi_eb_cc.areaHi(2)) * dx[0] * dx[1];
468 Real const apnorm = std::sqrt(adx*adx + ady*ady + adz*adz);
471 Real const apnorminv = 1. / apnorm;
472 RealVect
const normal(adx*apnorminv, ady*apnorminv, adz*apnorminv);
473 Real const dot_normals = normal.dotProduct(hi_normal);
475 #ifndef AMREX_USE_GPU
476 if ( !amrex::almostEqual(dot_normals, 1.0) ) {
477 Print() <<
"\nFail: check-1 dot_normals " << dot_normals
483 }
else if (verbose) {
484 Print() <<
"Pass: dot_normals = 1.0\n";
488 AMREX_ALWAYS_ASSERT( amrex::almostEqual(dot_normals, 1.0) );
493 #ifndef AMREX_USE_GPU
494 Real const abs_err = std::abs( hi_eb_cc.areaHi(a_idim) - hi_hi_eb_cc.areaLo(a_idim) );
496 if ( abs_err >= machine_tol ) {
497 Print() <<
"\nFail: check-2 area abs_err: " << abs_err
498 <<
"\n hi_eb_cc.areaHi " << hi_eb_cc.areaHi(a_idim)
499 <<
"\n hi_hi_eb_cc.areaLo " << hi_hi_eb_cc.areaLo(a_idim)
501 }
else if (verbose) {
502 Print() <<
"Pass: hi_eb_cc.areaHi = hi_hi_eb_cc.areaLo"
503 <<
" abs_err: " << abs_err <<
"\n";
505 AMREX_ALWAYS_ASSERT( abs_err < machine_tol );
510 {
Real const abs_err = amrex::max(std::abs(lo_eb_cc.areaHi(a_idim) - afrac(iv_hi)),
511 std::abs(hi_eb_cc.areaLo(a_idim) - afrac(iv_hi)));
512 Real compare_tol = 5.0e-6;
513 #ifndef AMREX_USE_GPU
514 if ( abs_err >= compare_tol ) {
516 Print() <<
"\nFail: check-3 area abs_err " << abs_err
517 <<
"\n hi_eb_cc.areaLo(" << a_idim <<
") = " << hi_eb_cc.areaLo(a_idim)
518 <<
"\n lo_eb_cc.areaHi(" << a_idim <<
") = " << lo_eb_cc.areaHi(a_idim)
519 <<
"\n afrac" << iv_hi <<
" = " << afrac(iv_hi)
521 }
else if (verbose) {
522 Print() <<
"Pass: hi_eb_cc.areaLo = afrac = " << afrac(iv_hi)
523 <<
" abs_err: " << abs_err <<
"\n";
526 AMREX_ALWAYS_ASSERT( abs_err < compare_tol );
531 {
Real const vol = hi_eb_cc.volume() + hi_hi_eb_cc.volume();
532 Real const abs_err = amrex::Math::abs(vfrac(iv_hi) - vol);
533 Real compare_tol = 5.0e-6;
534 #ifndef AMREX_USE_GPU
535 if ( abs_err >= compare_tol ) {
538 amrex::Print() <<
"\nFail: check-4 volume abs_err: " << abs_err
539 <<
"\n point: " << hi_point
540 <<
"\n normal: " << hi_normal
541 <<
"\n hi_eb_cc.volume() " << hi_eb_cc.volume()
542 <<
"\n hi_hi_eb_cc.volume() " << hi_hi_eb_cc.volume()
543 <<
"\n vfrac: " << vfrac(iv_hi)
545 }
else if (verbose) {
546 Print() <<
"Pass: hi_eb_cc + hi_hi_eb_cc = vfrac = " << vfrac(iv_hi)
547 <<
" abs_err: " << abs_err <<
"\n";
550 AMREX_ALWAYS_ASSERT( abs_err < compare_tol );
560 if (lo_eb_cc.isCovered() && hi_eb_cc.isCovered()) {
564 }
else if (lo_eb_cc.isRegular() && hi_eb_cc.isRegular()) {
566 aux_flag(i,j,k).setRegular();
567 aux_flag(i,j,k).setConnected();
569 aux_vfrac(i,j,k) = 1.0;
571 aux_afrac_x(i,j,k) = 1.0;
572 aux_afrac_y(i,j,k) = 1.0;
573 aux_afrac_z(i,j,k) = 1.0;
575 aux_fcent_x(i,j,k,0) = 0.0; aux_fcent_x(i,j,k,1) = 0.0;
576 aux_fcent_y(i,j,k,0) = 0.0; aux_fcent_y(i,j,k,1) = 0.0;
577 aux_fcent_z(i,j,k,0) = 0.0; aux_fcent_z(i,j,k,1) = 0.0;
579 if (i==bx.bigEnd(0)) {
580 aux_afrac_x(i+1,j,k) = 1.0;
581 aux_fcent_x(i+1,j,k,0) = 0.0; aux_fcent_x(i+1,j,k,1) = 0.0;
583 if (j==bx.bigEnd(1)) {
584 aux_afrac_y(i,j+1,k) = 1.0;
585 aux_fcent_y(i,j+1,k,0) = 0.0; aux_fcent_y(i,j+1,k,1) = 0.0;
587 if (k==bx.bigEnd(2)) {
588 aux_afrac_z(i,j,k+1) = 1.0;
589 aux_fcent_z(i,j,k+1,0) = 0.0; aux_fcent_z(i,j,k+1,1) = 0.0;
592 }
else if ( (lo_eb_cc.isRegular() && hi_eb_cc.isCovered())
593 || (lo_eb_cc.isCovered() && hi_eb_cc.isRegular()) ) {
596 #ifndef AMREX_USE_GPU
597 Print()<<
"eb_aux_ / Check: Regular and Covered cut cells are facing each other." << std::endl;
604 aux_flag(i,j,k).setSingleValued();
608 Real lo_vol {lo_eb_cc.volume()};
609 Real hi_vol {hi_eb_cc.volume()};
611 aux_vfrac(i,j,k) = lo_vol + hi_vol;
623 RealVect lo_vcent {lo_eb_cc.centVol()};
624 RealVect hi_vcent {hi_eb_cc.centVol()};
626 lo_vcent[a_idim] = lo_vcent[a_idim] - 0.5;
627 hi_vcent[a_idim] = hi_vcent[a_idim] + 0.5;
629 aux_vcent(i,j,k,0) = ( lo_vol * lo_vcent[0] + hi_vol * hi_vcent[0] ) / aux_vfrac(i,j,k);
630 aux_vcent(i,j,k,1) = ( lo_vol * lo_vcent[1] + hi_vol * hi_vcent[1] ) / aux_vfrac(i,j,k);
631 aux_vcent(i,j,k,2) = ( lo_vol * lo_vcent[2] + hi_vol * hi_vcent[2] ) / aux_vfrac(i,j,k);
635 Real lo_areaLo_x {lo_eb_cc.areaLo(0)};
636 Real lo_areaLo_y {lo_eb_cc.areaLo(1)};
637 Real lo_areaLo_z {lo_eb_cc.areaLo(2)};
639 Real hi_areaLo_x {hi_eb_cc.areaLo(0)};
640 Real hi_areaLo_y {hi_eb_cc.areaLo(1)};
641 Real hi_areaLo_z {hi_eb_cc.areaLo(2)};
643 aux_afrac_x(i,j,k) = (a_idim == 0) ? lo_areaLo_x : lo_areaLo_x + hi_areaLo_x;
644 aux_afrac_y(i,j,k) = (a_idim == 1) ? lo_areaLo_y : lo_areaLo_y + hi_areaLo_y;
645 aux_afrac_z(i,j,k) = (a_idim == 2) ? lo_areaLo_z : lo_areaLo_z + hi_areaLo_z;
647 if (i==bx.bigEnd(0)) {
648 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
649 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
650 aux_afrac_x(i+1,j,k) = (a_idim == 0) ? hi_areaHi_x : lo_areaHi_x + hi_areaHi_x;
652 if (j==bx.bigEnd(1)) {
653 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
654 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
655 aux_afrac_y(i,j+1,k) = (a_idim == 1) ? hi_areaHi_y : lo_areaHi_y + hi_areaHi_y;
657 if (k==bx.bigEnd(2)) {
658 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
659 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
660 aux_afrac_z(i,j,k+1) = (a_idim == 2) ? hi_areaHi_z : lo_areaHi_z + hi_areaHi_z;
673 RealVect lo_centLo_x {lo_eb_cc.centLo(0)};
674 RealVect lo_centLo_y {lo_eb_cc.centLo(1)};
675 RealVect lo_centLo_z {lo_eb_cc.centLo(2)};
677 RealVect hi_centLo_x {hi_eb_cc.centLo(0)};
678 RealVect hi_centLo_y {hi_eb_cc.centLo(1)};
679 RealVect hi_centLo_z {hi_eb_cc.centLo(2)};
682 aux_fcent_x(i,j,k,0) = lo_centLo_x[1];
683 aux_fcent_x(i,j,k,1) = lo_centLo_x[2];
684 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) > 0.0)
685 ? ( lo_areaLo_y * (lo_centLo_y[0] - 0.5)
686 + hi_areaLo_y * (hi_centLo_y[0] + 0.5) ) / aux_afrac_y(i,j,k)
688 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) > 0.0)
689 ? ( lo_areaLo_y * lo_centLo_y[2]
690 + hi_areaLo_y * hi_centLo_y[2] ) / aux_afrac_y(i,j,k)
692 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) > 0.0)
693 ? ( lo_areaLo_z * (lo_centLo_z[0] - 0.5)
694 + hi_areaLo_z * (hi_centLo_z[0] + 0.5) ) / aux_afrac_z(i,j,k)
696 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) > 0.0)
697 ? ( lo_areaLo_z * lo_centLo_z[1]
698 + hi_areaLo_z * hi_centLo_z[1] ) / aux_afrac_z(i,j,k)
700 }
else if (a_idim == 1) {
701 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) > 0.0)
702 ? ( lo_areaLo_x * (lo_centLo_x[1] - 0.5)
703 + hi_areaLo_x * (hi_centLo_x[1] + 0.5) ) / aux_afrac_x(i,j,k)
705 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) > 0.0)
706 ? ( lo_areaLo_x * lo_centLo_x[2]
707 + hi_areaLo_x * hi_centLo_x[2] ) / aux_afrac_x(i,j,k)
709 aux_fcent_y(i,j,k,0) = lo_centLo_y[0];
710 aux_fcent_y(i,j,k,1) = lo_centLo_y[2];
711 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) > 0.0)
712 ? ( lo_areaLo_z * lo_centLo_z[0]
713 + hi_areaLo_z * hi_centLo_z[0] ) / aux_afrac_z(i,j,k)
715 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) > 0.0)
716 ? ( lo_areaLo_z * (lo_centLo_z[1] - 0.5)
717 + hi_areaLo_z * (hi_centLo_z[1] + 0.5) ) / aux_afrac_z(i,j,k)
719 }
else if (a_idim == 2) {
720 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) > 0.0)
721 ? ( lo_areaLo_x * lo_centLo_x[1]
722 + hi_areaLo_x * hi_centLo_x[1] ) / aux_afrac_x(i,j,k)
724 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) > 0.0)
725 ? ( lo_areaLo_x * (lo_centLo_x[2] - 0.5)
726 + hi_areaLo_x * (hi_centLo_x[2] + 0.5) ) / aux_afrac_x(i,j,k)
728 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) > 0.0)
729 ? ( lo_areaLo_y * lo_centLo_y[0]
730 + hi_areaLo_y * hi_centLo_y[0] ) / aux_afrac_y(i,j,k)
732 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) > 0.0)
733 ? ( lo_areaLo_y * (lo_centLo_y[2] - 0.5)
734 + hi_areaLo_y * (hi_centLo_y[2] + 0.5) ) / aux_afrac_y(i,j,k)
736 aux_fcent_z(i,j,k,0) = lo_centLo_z[0];
737 aux_fcent_z(i,j,k,1) = lo_centLo_z[1];
740 if (i==bx.bigEnd(0)) {
741 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
742 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
743 RealVect lo_centHi_x {lo_eb_cc.centHi(0)};
744 RealVect hi_centHi_x {hi_eb_cc.centHi(0)};
746 aux_fcent_x(i+1,j,k,0) = hi_centHi_x[1];
747 aux_fcent_x(i+1,j,k,1) = hi_centHi_x[2];
748 }
else if (a_idim == 1) {
749 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) > 0.0)
750 ? ( lo_areaHi_x * (lo_centHi_x[1] - 0.5)
751 + hi_areaHi_x * (hi_centHi_x[1] + 0.5) ) / aux_afrac_x(i+1,j,k)
753 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) > 0.0)
754 ? ( lo_areaHi_x * lo_centHi_x[2]
755 + hi_areaHi_x * hi_centHi_x[2] ) / aux_afrac_x(i+1,j,k)
757 }
else if (a_idim == 2) {
758 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) > 0.0)
759 ? ( lo_areaHi_x * lo_centHi_x[1]
760 + hi_areaHi_x * hi_centHi_x[1] ) / aux_afrac_x(i+1,j,k)
762 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) > 0.0)
763 ? ( lo_areaHi_x * (lo_centHi_x[2] - 0.5)
764 + hi_areaHi_x * (hi_centHi_x[2] + 0.5) ) / aux_afrac_x(i+1,j,k)
768 if (j==bx.bigEnd(1)) {
769 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
770 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
771 RealVect lo_centHi_y {lo_eb_cc.centHi(1)};
772 RealVect hi_centHi_y {hi_eb_cc.centHi(1)};
774 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) > 0.0)
775 ? ( lo_areaHi_y * (lo_centHi_y[0] - 0.5)
776 + hi_areaHi_y * (hi_centHi_y[0] + 0.5) ) / aux_afrac_y(i,j+1,k)
778 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) > 0.0)
779 ? ( lo_areaHi_y * lo_centHi_y[2]
780 + hi_areaHi_y * hi_centHi_y[2] ) / aux_afrac_y(i,j+1,k)
782 }
else if (a_idim == 1) {
783 aux_fcent_y(i,j+1,k,0) = lo_centHi_y[0];
784 aux_fcent_y(i,j+1,k,1) = lo_centHi_y[2];
785 }
else if (a_idim == 2) {
786 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) > 0.0)
787 ? ( lo_areaHi_y * lo_centHi_y[0]
788 + hi_areaHi_y * hi_centHi_y[0] ) / aux_afrac_y(i,j+1,k)
790 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) > 0.0)
791 ? ( lo_areaHi_y * (lo_centHi_y[2] - 0.5)
792 + hi_areaHi_y * (hi_centHi_y[2] + 0.5) ) / aux_afrac_y(i,j+1,k)
796 if (k==bx.bigEnd(2)) {
797 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
798 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
799 RealVect lo_centHi_z {lo_eb_cc.centHi(2)};
800 RealVect hi_centHi_z {hi_eb_cc.centHi(2)};
802 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) > 0.0)
803 ? ( lo_areaHi_z * (lo_centHi_z[0] - 0.5)
804 + hi_areaHi_z * (hi_centHi_z[0] + 0.5) ) / aux_afrac_z(i,j,k+1)
806 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) > 0.0)
807 ? ( lo_areaHi_z * lo_centHi_z[1]
808 + hi_areaHi_z * hi_centHi_z[1] ) / aux_afrac_z(i,j,k+1)
810 }
else if (a_idim == 1) {
811 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) > 0.0)
812 ? ( lo_areaHi_z * lo_centHi_z[0]
813 + hi_areaHi_z * hi_centHi_z[0] ) / aux_afrac_z(i,j,k+1)
815 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) > 0.0)
816 ? ( lo_areaHi_z * (lo_centHi_z[1] - 0.5)
817 + hi_areaHi_z * (hi_centHi_z[1] + 0.5) ) / aux_afrac_z(i,j,k+1)
819 }
else if (a_idim == 2) {
820 aux_fcent_z(i,j,k+1,0) = lo_centHi_z[0];
821 aux_fcent_z(i,j,k+1,1) = lo_centHi_z[1];
827 Real lo_areaBoun {lo_eb_cc.areaBoun()};
828 Real hi_areaBoun {hi_eb_cc.areaBoun()};
830 aux_barea(i,j,k) = lo_areaBoun + hi_areaBoun;
834 RealVect lo_centBoun {lo_eb_cc.centBoun()};
835 RealVect hi_centBoun {hi_eb_cc.centBoun()};
838 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);
839 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
840 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
841 }
else if (a_idim == 1) {
842 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
843 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);
844 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
845 }
else if (a_idim == 2) {
846 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
847 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
848 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);
853 RealVect eb_normal = ( lo_areaBoun * lo_normal + hi_areaBoun * hi_normal )/ aux_barea(i,j,k);
855 aux_bnorm(i,j,k,0) = eb_normal[0];
856 aux_bnorm(i,j,k,1) = eb_normal[1];
857 aux_bnorm(i,j,k,2) = eb_normal[2];
867 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
869 if (aux_vfrac(i,j,k) < small_volfrac) {
871 aux_vfrac(i,j,k) = 0.0;
872 aux_vcent(i,j,k,0) = 0.0;
873 aux_vcent(i,j,k,1) = 0.0;
874 aux_vcent(i,j,k,2) = 0.0;
876 aux_afrac_x(i ,j ,k ) = 0.0;
877 aux_afrac_x(i+1,j ,k ) = 0.0;
878 aux_afrac_y(i ,j ,k ) = 0.0;
879 aux_afrac_y(i ,j+1,k ) = 0.0;
880 aux_afrac_z(i ,j ,k+1) = 0.0;
881 aux_afrac_z(i ,j ,k ) = 0.0;
883 aux_fcent_x(i ,j ,k ,0) = 0.0;
884 aux_fcent_x(i ,j ,k ,1) = 0.0;
885 aux_fcent_x(i+1,j ,k ,0) = 0.0;
886 aux_fcent_x(i+1,j ,k ,1) = 0.0;
888 aux_fcent_y(i ,j ,k ,0) = 0.0;
889 aux_fcent_y(i ,j ,k ,1) = 0.0;
890 aux_fcent_y(i ,j+1,k ,0) = 0.0;
891 aux_fcent_y(i ,j+1,k ,1) = 0.0;
893 aux_fcent_z(i ,j ,k ,0) = 0.0;
894 aux_fcent_z(i ,j ,k ,1) = 0.0;
895 aux_fcent_z(i ,j ,k+1,0) = 0.0;
896 aux_fcent_z(i ,j ,k+1,1) = 0.0;
898 aux_barea(i,j,k) = 0.0;
900 aux_bcent(i,j,k,0) = 0.0;
901 aux_bcent(i,j,k,1) = 0.0;
902 aux_bcent(i,j,k,2) = 0.0;
904 aux_bnorm(i,j,k,0) = 0.0;
905 aux_bnorm(i,j,k,1) = 0.0;
906 aux_bnorm(i,j,k,2) = 0.0;
908 aux_flag(i,j,k).setCovered();
911 if (aux_vcent(i,j,k,0) < small_value) aux_vcent(i,j,k,0) = 0.0;
912 if (aux_vcent(i,j,k,1) < small_value) aux_vcent(i,j,k,1) = 0.0;
913 if (aux_vcent(i,j,k,2) < small_value) aux_vcent(i,j,k,2) = 0.0;
914 if (aux_bcent(i,j,k,0) < small_value) aux_bcent(i,j,k,0) = 0.0;
915 if (aux_bcent(i,j,k,1) < small_value) aux_bcent(i,j,k,1) = 0.0;
916 if (aux_bcent(i,j,k,2) < small_value) aux_bcent(i,j,k,2) = 0.0;
925 Box upper_slab = makeSlab(bx_grown, a_idim, bx.bigEnd(a_idim)+1);
926 Box bx_grown_1 = bx; bx_grown_1.grow(a_idim,1);
927 BoxList slab_diffList = boxDiff(upper_slab, bx_grown_1);
929 for (
const Box& b : slab_diffList) {
930 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
932 IntVect iv(AMREX_D_DECL(i,j,k));
933 IntVect iv_nearest = iv;
934 for (
int d=0; d<AMREX_SPACEDIM; ++d) {
935 iv_nearest[d] = Clamp(iv[d], bx_grown_1.smallEnd(d), bx_grown_1.bigEnd(d));
937 aux_afrac_x(iv) = aux_afrac_x(iv_nearest);
947 m_volfrac->FillBoundary(a_geom.periodicity());
948 m_volcent->FillBoundary(a_geom.periodicity());
949 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
950 m_areafrac[idim]->FillBoundary(a_geom.periodicity());
951 m_facecent[idim]->FillBoundary(a_geom.periodicity());
959 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
961 const Box& bx = mfi.validbox();
962 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
964 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
966 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
967 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
968 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
969 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
971 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
973 EB2::build_cellflag_from_ap (i, j, k, aux_flag, aux_afrac_x, aux_afrac_y, aux_afrac_z);
978 bool l_periodic_x = a_geom.isPeriodic(0);
979 bool l_periodic_y = a_geom.isPeriodic(1);
980 bool l_periodic_z = a_geom.isPeriodic(2);
983 Box dom_grown = grow(grow(domain,1,1),2,1);
984 Box dom_face_x_lo = dom_grown;
985 Box dom_face_x_hi = dom_grown;
986 dom_face_x_lo.setSmall(0, bx.smallEnd(0));
987 dom_face_x_lo.setBig( 0, bx.smallEnd(0));
988 dom_face_x_hi.setSmall(0, bx.bigEnd(0));
989 dom_face_x_hi.setBig( 0, bx.bigEnd(0));
991 const Box bx_grown = grow(grow(bx,1,1),2,1);
992 const Box bx_face_x_lo = bx_grown & dom_face_x_lo;
993 const Box bx_face_x_hi = bx_grown & dom_face_x_hi;
995 ParallelFor(bx_face_x_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
997 for(
int kk(-1); kk<=1; kk++) {
998 for(
int jj(-1); jj<=1; jj++) {
999 aux_flag(i,j,k).setDisconnected(-1,jj,kk);
1002 ParallelFor(bx_face_x_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1004 for(
int kk(-1); kk<=1; kk++) {
1005 for(
int jj(-1); jj<=1; jj++) {
1006 aux_flag(i,j,k).setDisconnected( 1,jj,kk);
1011 if (!l_periodic_y) {
1012 Box dom_grown = grow(grow(domain,0,1),2,1);
1013 Box dom_face_y_lo = dom_grown;
1014 Box dom_face_y_hi = dom_grown;
1015 dom_face_y_lo.setSmall(1, bx.smallEnd(1));
1016 dom_face_y_lo.setBig( 1, bx.smallEnd(1));
1017 dom_face_y_hi.setSmall(1, bx.bigEnd(1));
1018 dom_face_y_hi.setBig( 1, bx.bigEnd(1));
1020 const Box bx_grown = grow(grow(bx,0,1),2,1);
1021 const Box bx_face_y_lo = bx_grown & dom_face_y_lo;
1022 const Box bx_face_y_hi = bx_grown & dom_face_y_hi;
1024 ParallelFor(bx_face_y_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1026 for(
int kk(-1); kk<=1; kk++) {
1027 for(
int ii(-1); ii<=1; ii++) {
1028 aux_flag(i,j,k).setDisconnected(ii,-1,kk);
1031 ParallelFor(bx_face_y_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1033 for(
int kk(-1); kk<=1; kk++) {
1034 for(
int ii(-1); ii<=1; ii++) {
1035 aux_flag(i,j,k).setDisconnected(ii, 1,kk);
1040 if (!l_periodic_z) {
1041 Box dom_grown = grow(grow(domain,0,1),1,1);
1042 Box dom_face_z_lo = dom_grown;
1043 Box dom_face_z_hi = dom_grown;
1044 dom_face_z_lo.setSmall(2, bx.smallEnd(2));
1045 dom_face_z_lo.setBig( 2, bx.smallEnd(2));
1046 dom_face_z_hi.setSmall(2, bx.bigEnd(2));
1047 dom_face_z_hi.setBig( 2, bx.bigEnd(2));
1049 const Box bx_grown = grow(grow(bx,0,1),1,1);
1050 const Box bx_face_z_lo = bx_grown & dom_face_z_lo;
1051 const Box bx_face_z_hi = bx_grown & dom_face_z_hi;
1053 ParallelFor(bx_face_z_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1055 for(
int jj(-1); jj<=1; jj++) {
1056 for(
int ii(-1); ii<=1; ii++) {
1057 aux_flag(i,j,k).setDisconnected(ii,jj,-1);
1060 ParallelFor(bx_face_z_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1062 for(
int jj(-1); jj<=1; jj++) {
1063 for(
int ii(-1); ii<=1; ii++) {
1064 aux_flag(i,j,k).setDisconnected(ii,jj, 1);
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:230
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