Define face-centered EB geometry for one staggered direction.
42 pp.queryAdd(
"small_volfrac", small_volfrac);
43 const Real small_value =
Real(1.e-15);
45 const IntVect vdim(IntVect::TheDimensionVector(a_idim));
47 const BoxArray& my_grids = amrex::convert(a_grids, vdim);
49 m_cellflags =
new FabArray<EBCellFlagFab>(my_grids, a_dmap, 1, a_ngrow[0], MFInfo(),
50 DefaultFabFactory<EBCellFlagFab>());
54 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
55 auto& fab = (*m_cellflags)[mfi];
56 fab.setType(FabType::singlevalued);
59 m_volfrac =
new MultiFab(my_grids, a_dmap, 1, a_ngrow[1], MFInfo(), FArrayBoxFactory());
60 m_volcent =
new MultiFab(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
62 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
63 m_areafrac[idim] =
new MultiFab(a_grids, a_dmap, 1, a_ngrow[1]+1, MFInfo(), FArrayBoxFactory());
64 m_facecent[idim] =
new MultiFab(a_grids, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
67 m_bndryarea =
new MultiFab(my_grids, a_dmap, 1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
68 m_bndrycent =
new MultiFab(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
69 m_bndrynorm =
new MultiFab(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
75 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
84 const auto& FlagFab = a_factory->getMultiEBCellFlagFab();
86 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
88 const Box& bx = mfi.validbox();
89 const Box& bx_grown = mfi.growntilebox();
90 const Box tbx = mfi.nodaltilebox(a_idim);
91 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
93 GpuArray<Real, AMREX_SPACEDIM>
dx = a_geom.CellSizeArray();
94 bool l_periodic = a_geom.isPeriodic(a_idim);
96 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
97 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
98 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
99 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
100 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
102 if (FlagFab[mfi].getType(bx) == FabType::covered ) {
104 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
106 aux_flag(i,j,k).setCovered();
107 aux_flag(i,j,k).setDisconnected();
108 if (i==bx.bigEnd(0)) {
109 aux_flag(i+1,j,k).setCovered();
111 if (j==bx.bigEnd(1)) {
112 aux_flag(i,j+1,k).setCovered();
114 if (k==bx.bigEnd(2)) {
115 aux_flag(i,j,k+1).setCovered();
119 }
else if (FlagFab[mfi].getType(bx) == FabType::regular ) {
121 ParallelFor(tbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
123 aux_flag(i,j,k).setRegular();
124 aux_flag(i,j,k).setDisconnected();
125 aux_vfrac(i,j,k) =
one;
126 aux_afrac_x(i,j,k) =
one;
127 aux_afrac_y(i,j,k) =
one;
128 aux_afrac_z(i,j,k) =
one;
129 if (i==bx.bigEnd(0)) {
130 aux_flag(i+1,j,k).setRegular();
131 aux_vfrac(i+1,j,k) =
one;
132 aux_afrac_x(i+1,j,k) =
one;
134 if (j==bx.bigEnd(1)) {
135 aux_flag(i,j+1,k).setRegular();
136 aux_vfrac(i,j+1,k) =
one;
137 aux_afrac_y(i,j+1,k) =
one;
139 if (k==bx.bigEnd(2)) {
140 aux_flag(i,j,k+1).setRegular();
141 aux_vfrac(i,j,k+1) =
one;
142 aux_afrac_z(i,j,k+1) =
one;
146 }
else if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
151 Array4<EBCellFlag const>
const& flag = FlagFab.const_array(mfi);
152 Array4<Real const>
const& afrac = (a_factory->getAreaFrac()[a_idim])->const_array(mfi);
153 Array4<Real const>
const& bnorm = a_factory->getBndryNormal()[mfi].const_array();
154 Array4<Real const>
const& bcent = a_factory->getBndryCent()[mfi].const_array();
157 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
158 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
159 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
160 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
161 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
162 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
163 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
166 Box dom_grown = domain;
167 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
168 if (a_geom.isPeriodic(idim)) {
169 dom_grown.grow(idim, a_ngrow[0]);
173 const IntVect dom_grown_lo = dom_grown.smallEnd();
174 const IntVect dom_grown_hi = dom_grown.bigEnd();
176 BoxList diffList = boxDiff(bx_grown, bx);
177 for (
const Box& b : diffList) {
178 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
180 if ( i < dom_grown_lo[0] || i > dom_grown_hi[0] ||
181 j < dom_grown_lo[1] || j > dom_grown_hi[1] ||
182 k < dom_grown_lo[2] || k > dom_grown_hi[2] ) {
183 aux_flag(i,j,k).setCovered();
184 aux_flag(i,j,k).setDisconnected();
189 #ifndef AMREX_USE_GPU
193 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
196 aux_flag(i,j,k).setCovered();
197 aux_flag(i,j,k).setDisconnected();
199 if (i==bx.bigEnd(0)) {
200 aux_flag(i+1,j,k).setCovered();
202 if (j==bx.bigEnd(1)) {
203 aux_flag(i,j+1,k).setCovered();
205 if (k==bx.bigEnd(2)) {
206 aux_flag(i,j,k+1).setCovered();
210 IntVect iv_hi(i,j,k);
211 IntVect iv_lo(iv_hi - vdim);
213 bool lo_isCovered = flag(iv_lo).isCovered();
214 bool hi_isCovered = flag(iv_hi).isCovered();
215 bool lo_isRegular = flag(iv_lo).isRegular();
216 bool hi_isRegular = flag(iv_hi).isRegular();
217 bool lo_isSingleValued = flag(iv_lo).isSingleValued();
218 bool hi_isSingleValued = flag(iv_hi).isSingleValued();
220 const bool at_lo_boundary = (!l_periodic && iv_hi[a_idim]==domain.smallEnd(a_idim));
221 const bool at_hi_boundary = (!l_periodic && iv_hi[a_idim]==domain.bigEnd(a_idim));
225 if (at_lo_boundary) {
228 lo_isRegular =
false;
229 lo_isSingleValued =
false;
230 }
else if (hi_isRegular) {
231 lo_isCovered =
false;
233 lo_isSingleValued =
false;
234 }
else if (hi_isSingleValued) {
235 if (almostEqual(afrac(i,j,k),
zero)) {
237 lo_isRegular =
false;
238 lo_isSingleValued =
false;
239 }
else if (almostEqual(afrac(i,j,k),
one)) {
240 lo_isCovered =
false;
242 lo_isSingleValued =
false;
244 lo_isCovered =
false;
245 lo_isRegular =
false;
246 lo_isSingleValued =
true;
254 if (at_hi_boundary) {
257 hi_isRegular =
false;
258 hi_isSingleValued =
false;
259 }
else if (lo_isRegular) {
260 hi_isCovered =
false;
262 hi_isSingleValued =
false;
263 }
else if (lo_isSingleValued) {
264 if (almostEqual(afrac(i,j,k),
zero)) {
266 hi_isRegular =
false;
267 hi_isSingleValued =
false;
268 }
else if (almostEqual(afrac(i,j,k),
one)) {
269 hi_isCovered =
false;
271 hi_isSingleValued =
false;
273 hi_isCovered =
false;
274 hi_isRegular =
false;
275 hi_isSingleValued =
true;
281 if ( lo_isCovered && hi_isCovered) {
285 }
else if ( lo_isRegular && hi_isRegular) {
287 aux_flag(i,j,k).setRegular();
288 aux_flag(i,j,k).setConnected();
290 aux_vfrac(i,j,k) =
one;
292 aux_afrac_x(i,j,k) =
one;
293 aux_afrac_y(i,j,k) =
one;
294 aux_afrac_z(i,j,k) =
one;
296 if (i==bx.bigEnd(0)) {
297 aux_afrac_x(i+1,j,k) =
one;
299 if (j==bx.bigEnd(1)) {
300 aux_afrac_y(i,j+1,k) =
one;
302 if (k==bx.bigEnd(2)) {
303 aux_afrac_z(i,j,k+1) =
one;
308 #ifndef AMREX_USE_GPU
309 if (verbose) { Print() <<
"\ncell: " << amrex::IntVect(i,j,k) <<
"\n"; }
321 RealVect lo_point (bcent(iv_lo,0), bcent(iv_lo,1), bcent(iv_lo,2));
322 RealVect lo_normal(bnorm(iv_lo,0), bnorm(iv_lo,1), bnorm(iv_lo,2));
324 if (at_lo_boundary) {
325 lo_point[a_idim] +=
one;
328 if (lo_isSingleValued ) {
329 Real bnorm_x = bnorm(iv_lo,0) *
dx[0];
330 Real bnorm_y = bnorm(iv_lo,1) *
dx[1];
331 Real bnorm_z = bnorm(iv_lo,2) *
dx[2];
333 Real norm = std::sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
335 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
337 lo_normal = bnorm_isoparam;
341 lo_arr[a_idim] =
zero;
343 RealBox lo_rbx(lo_arr.data(), hi_arr.data());
345 eb_cut_cell_ lo_eb_cc(flag(iv_lo), lo_rbx, lo_point, lo_normal);
349 AMREX_ASSERT( !lo_isCovered || lo_eb_cc.isCovered() );
350 AMREX_ASSERT( !lo_isRegular || lo_eb_cc.isRegular() );
356 RealVect hi_point (bcent(iv_hi,0), bcent(iv_hi,1), bcent(iv_hi,2));
357 RealVect hi_normal(bnorm(iv_hi,0), bnorm(iv_hi,1), bnorm(iv_hi,2));
359 if (at_hi_boundary) {
360 hi_point[a_idim] += -
one;
363 if (hi_isSingleValued ) {
364 Real bnorm_x = bnorm(iv_hi,0) *
dx[0];
365 Real bnorm_y = bnorm(iv_hi,1) *
dx[1];
366 Real bnorm_z = bnorm(iv_hi,2) *
dx[2];
368 Real norm = std::sqrt( bnorm_x*bnorm_x + bnorm_y*bnorm_y + bnorm_z*bnorm_z);
370 RealVect bnorm_isoparam ( bnorm_x / norm, bnorm_y / norm, bnorm_z / norm);
372 hi_normal = bnorm_isoparam;
377 hi_arr[a_idim] =
zero;
378 RealBox hi_rbx(lo_arr.data(), hi_arr.data());
380 eb_cut_cell_ hi_eb_cc(flag(iv_hi), hi_rbx, hi_point, hi_normal);
384 AMREX_ASSERT( !hi_isCovered || hi_eb_cc.isCovered() );
385 AMREX_ASSERT( !hi_isRegular || hi_eb_cc.isRegular() );
388 #if defined(AMREX_DEBUG) || defined(AMREX_TESTING) || 1
398 eb_cut_cell_ hi_hi_eb_cc(flag(iv_hi), lo_rbx, hi_point, hi_normal);
402 #ifndef AMREX_USE_GPU
403 if ( !(!hi_isRegular || hi_hi_eb_cc.isRegular()) ||
404 !(!hi_isCovered || hi_hi_eb_cc.isCovered()) ) {
405 Print() <<
"flag(iv_hi) and hi_hi_eb_cc flags do not agree\n"
406 <<
"\n isRegular() " << hi_isRegular <<
" " << hi_hi_eb_cc.isRegular()
407 <<
"\n isCovered() " << hi_isCovered <<
" " << hi_hi_eb_cc.isCovered()
421 if ( hi_isSingleValued ) {
423 Real const adx = (a_idim == 0)
424 ? (hi_eb_cc.areaLo(0) - hi_hi_eb_cc.areaHi(0)) *
dx[1] *
dx[2]
425 : (hi_eb_cc.areaLo(0) + hi_hi_eb_cc.areaLo(0)) *
dx[1] *
dx[2]
426 - (hi_eb_cc.areaHi(0) + hi_hi_eb_cc.areaHi(0)) *
dx[1] *
dx[2];
428 Real const ady = (a_idim == 1)
429 ? (hi_eb_cc.areaLo(1) - hi_hi_eb_cc.areaHi(1)) *
dx[0] *
dx[2]
430 : (hi_eb_cc.areaLo(1) + hi_hi_eb_cc.areaLo(1)) *
dx[0] *
dx[2]
431 - (hi_eb_cc.areaHi(1) + hi_hi_eb_cc.areaHi(1)) *
dx[0] *
dx[2];
433 Real const adz = (a_idim == 2)
434 ? (hi_eb_cc.areaLo(2) - hi_hi_eb_cc.areaHi(2)) *
dx[0] *
dx[1]
435 : (hi_eb_cc.areaLo(2) + hi_hi_eb_cc.areaLo(2)) *
dx[0] *
dx[1]
436 - (hi_eb_cc.areaHi(2) + hi_hi_eb_cc.areaHi(2)) *
dx[0] *
dx[1];
438 Real const apnorm = std::sqrt(adx*adx + ady*ady + adz*adz);
441 Real const apnorminv =
one / apnorm;
442 RealVect
const normal(adx*apnorminv, ady*apnorminv, adz*apnorminv);
443 Real const dot_normals = normal.dotProduct(hi_normal);
445 #ifndef AMREX_USE_GPU
446 if ( !amrex::almostEqual(dot_normals,
one) ) {
447 Print() <<
"\nFail: check-1 dot_normals " << dot_normals
453 }
else if (verbose) {
454 Print() <<
"Pass: dot_normals = one\n";
463 #ifndef AMREX_USE_GPU
464 Real const abs_err = std::abs( hi_eb_cc.areaHi(a_idim) - hi_hi_eb_cc.areaLo(a_idim) );
466 if ( abs_err >= machine_tol ) {
467 Print() <<
"\nFail: check-2 area abs_err: " << abs_err
468 <<
"\n hi_eb_cc.areaHi " << hi_eb_cc.areaHi(a_idim)
469 <<
"\n hi_hi_eb_cc.areaLo " << hi_hi_eb_cc.areaLo(a_idim)
471 }
else if (verbose) {
472 Print() <<
"Pass: hi_eb_cc.areaHi = hi_hi_eb_cc.areaLo"
473 <<
" abs_err: " << abs_err <<
"\n";
480 {
Real const abs_err = amrex::max(std::abs(lo_eb_cc.areaHi(a_idim) - afrac(iv_hi)),
481 std::abs(hi_eb_cc.areaLo(a_idim) - afrac(iv_hi)));
483 #ifndef AMREX_USE_GPU
484 if ( abs_err >= compare_tol ) {
486 Print() <<
"\nFail: check-3 area abs_err " << abs_err
487 <<
"\n hi_eb_cc.areaLo(" << a_idim <<
") = " << hi_eb_cc.areaLo(a_idim)
488 <<
"\n lo_eb_cc.areaHi(" << a_idim <<
") = " << lo_eb_cc.areaHi(a_idim)
489 <<
"\n afrac" << iv_hi <<
" = " << afrac(iv_hi)
491 }
else if (verbose) {
492 Print() <<
"Pass: hi_eb_cc.areaLo = afrac = " << afrac(iv_hi)
493 <<
" abs_err: " << abs_err <<
"\n";
501 {
Real const vol = hi_eb_cc.volume() + hi_hi_eb_cc.volume();
502 Real const abs_err = amrex::Math::abs(vfrac(iv_hi) - vol);
504 #ifndef AMREX_USE_GPU
505 if ( abs_err >= compare_tol ) {
508 amrex::Print() <<
"\nFail: check-4 volume abs_err: " << abs_err
509 <<
"\n point: " << hi_point
510 <<
"\n normal: " << hi_normal
511 <<
"\n hi_eb_cc.volume() " << hi_eb_cc.volume()
512 <<
"\n hi_hi_eb_cc.volume() " << hi_hi_eb_cc.volume()
513 <<
"\n vfrac: " << vfrac(iv_hi)
515 }
else if (verbose) {
516 Print() <<
"Pass: hi_eb_cc + hi_hi_eb_cc = vfrac = " << vfrac(iv_hi)
517 <<
" abs_err: " << abs_err <<
"\n";
530 if (lo_eb_cc.isCovered() && hi_eb_cc.isCovered()) {
534 }
else if (lo_eb_cc.isRegular() && hi_eb_cc.isRegular()) {
536 aux_flag(i,j,k).setRegular();
537 aux_flag(i,j,k).setConnected();
539 aux_vfrac(i,j,k) =
one;
541 aux_afrac_x(i,j,k) =
one;
542 aux_afrac_y(i,j,k) =
one;
543 aux_afrac_z(i,j,k) =
one;
545 aux_fcent_x(i,j,k,0) =
zero; aux_fcent_x(i,j,k,1) =
zero;
546 aux_fcent_y(i,j,k,0) =
zero; aux_fcent_y(i,j,k,1) =
zero;
547 aux_fcent_z(i,j,k,0) =
zero; aux_fcent_z(i,j,k,1) =
zero;
549 if (i==bx.bigEnd(0)) {
550 aux_afrac_x(i+1,j,k) =
one;
551 aux_fcent_x(i+1,j,k,0) =
zero; aux_fcent_x(i+1,j,k,1) =
zero;
553 if (j==bx.bigEnd(1)) {
554 aux_afrac_y(i,j+1,k) =
one;
555 aux_fcent_y(i,j+1,k,0) =
zero; aux_fcent_y(i,j+1,k,1) =
zero;
557 if (k==bx.bigEnd(2)) {
558 aux_afrac_z(i,j,k+1) =
one;
559 aux_fcent_z(i,j,k+1,0) =
zero; aux_fcent_z(i,j,k+1,1) =
zero;
562 }
else if ( (lo_eb_cc.isRegular() && hi_eb_cc.isCovered())
563 || (lo_eb_cc.isCovered() && hi_eb_cc.isRegular()) ) {
566 #ifndef AMREX_USE_GPU
567 Print()<<
"eb_aux_ / Check: Regular and Covered cut cells are facing each other." << std::endl;
574 aux_flag(i,j,k).setSingleValued();
578 Real lo_vol {lo_eb_cc.volume()}; AMREX_ASSERT(lo_vol >=
zero && lo_vol <=
myhalf);
579 Real hi_vol {hi_eb_cc.volume()}; AMREX_ASSERT(hi_vol >=
zero && hi_vol <=
myhalf);
581 aux_vfrac(i,j,k) = lo_vol + hi_vol;
593 RealVect lo_vcent {lo_eb_cc.centVol()};
594 RealVect hi_vcent {hi_eb_cc.centVol()};
596 lo_vcent[a_idim] = lo_vcent[a_idim] -
myhalf;
597 hi_vcent[a_idim] = hi_vcent[a_idim] +
myhalf;
599 aux_vcent(i,j,k,0) = ( lo_vol * lo_vcent[0] + hi_vol * hi_vcent[0] ) / aux_vfrac(i,j,k);
600 aux_vcent(i,j,k,1) = ( lo_vol * lo_vcent[1] + hi_vol * hi_vcent[1] ) / aux_vfrac(i,j,k);
601 aux_vcent(i,j,k,2) = ( lo_vol * lo_vcent[2] + hi_vol * hi_vcent[2] ) / aux_vfrac(i,j,k);
605 Real lo_areaLo_x {lo_eb_cc.areaLo(0)};
606 Real lo_areaLo_y {lo_eb_cc.areaLo(1)};
607 Real lo_areaLo_z {lo_eb_cc.areaLo(2)};
609 Real hi_areaLo_x {hi_eb_cc.areaLo(0)};
610 Real hi_areaLo_y {hi_eb_cc.areaLo(1)};
611 Real hi_areaLo_z {hi_eb_cc.areaLo(2)};
613 aux_afrac_x(i,j,k) = (a_idim == 0) ? lo_areaLo_x : lo_areaLo_x + hi_areaLo_x;
614 aux_afrac_y(i,j,k) = (a_idim == 1) ? lo_areaLo_y : lo_areaLo_y + hi_areaLo_y;
615 aux_afrac_z(i,j,k) = (a_idim == 2) ? lo_areaLo_z : lo_areaLo_z + hi_areaLo_z;
617 if (i==bx.bigEnd(0)) {
618 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
619 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
620 aux_afrac_x(i+1,j,k) = (a_idim == 0) ? hi_areaHi_x : lo_areaHi_x + hi_areaHi_x;
622 if (j==bx.bigEnd(1)) {
623 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
624 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
625 aux_afrac_y(i,j+1,k) = (a_idim == 1) ? hi_areaHi_y : lo_areaHi_y + hi_areaHi_y;
627 if (k==bx.bigEnd(2)) {
628 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
629 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
630 aux_afrac_z(i,j,k+1) = (a_idim == 2) ? hi_areaHi_z : lo_areaHi_z + hi_areaHi_z;
643 RealVect lo_centLo_x {lo_eb_cc.centLo(0)};
644 RealVect lo_centLo_y {lo_eb_cc.centLo(1)};
645 RealVect lo_centLo_z {lo_eb_cc.centLo(2)};
647 RealVect hi_centLo_x {hi_eb_cc.centLo(0)};
648 RealVect hi_centLo_y {hi_eb_cc.centLo(1)};
649 RealVect hi_centLo_z {hi_eb_cc.centLo(2)};
652 aux_fcent_x(i,j,k,0) = lo_centLo_x[1];
653 aux_fcent_x(i,j,k,1) = lo_centLo_x[2];
654 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) >
zero)
655 ? ( lo_areaLo_y * (lo_centLo_y[0] -
myhalf)
656 + hi_areaLo_y * (hi_centLo_y[0] +
myhalf) ) / aux_afrac_y(i,j,k)
658 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) >
zero)
659 ? ( lo_areaLo_y * lo_centLo_y[2]
660 + hi_areaLo_y * hi_centLo_y[2] ) / aux_afrac_y(i,j,k)
662 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) >
zero)
663 ? ( lo_areaLo_z * (lo_centLo_z[0] -
myhalf)
664 + hi_areaLo_z * (hi_centLo_z[0] +
myhalf) ) / aux_afrac_z(i,j,k)
666 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) >
zero)
667 ? ( lo_areaLo_z * lo_centLo_z[1]
668 + hi_areaLo_z * hi_centLo_z[1] ) / aux_afrac_z(i,j,k)
670 }
else if (a_idim == 1) {
671 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) >
zero)
672 ? ( lo_areaLo_x * (lo_centLo_x[1] -
myhalf)
673 + hi_areaLo_x * (hi_centLo_x[1] +
myhalf) ) / aux_afrac_x(i,j,k)
675 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) >
zero)
676 ? ( lo_areaLo_x * lo_centLo_x[2]
677 + hi_areaLo_x * hi_centLo_x[2] ) / aux_afrac_x(i,j,k)
679 aux_fcent_y(i,j,k,0) = lo_centLo_y[0];
680 aux_fcent_y(i,j,k,1) = lo_centLo_y[2];
681 aux_fcent_z(i,j,k,0) = (aux_afrac_z(i,j,k) >
zero)
682 ? ( lo_areaLo_z * lo_centLo_z[0]
683 + hi_areaLo_z * hi_centLo_z[0] ) / aux_afrac_z(i,j,k)
685 aux_fcent_z(i,j,k,1) = (aux_afrac_z(i,j,k) >
zero)
686 ? ( lo_areaLo_z * (lo_centLo_z[1] -
myhalf)
687 + hi_areaLo_z * (hi_centLo_z[1] +
myhalf) ) / aux_afrac_z(i,j,k)
689 }
else if (a_idim == 2) {
690 aux_fcent_x(i,j,k,0) = (aux_afrac_x(i,j,k) >
zero)
691 ? ( lo_areaLo_x * lo_centLo_x[1]
692 + hi_areaLo_x * hi_centLo_x[1] ) / aux_afrac_x(i,j,k)
694 aux_fcent_x(i,j,k,1) = (aux_afrac_x(i,j,k) >
zero)
695 ? ( lo_areaLo_x * (lo_centLo_x[2] -
myhalf)
696 + hi_areaLo_x * (hi_centLo_x[2] +
myhalf) ) / aux_afrac_x(i,j,k)
698 aux_fcent_y(i,j,k,0) = (aux_afrac_y(i,j,k) >
zero)
699 ? ( lo_areaLo_y * lo_centLo_y[0]
700 + hi_areaLo_y * hi_centLo_y[0] ) / aux_afrac_y(i,j,k)
702 aux_fcent_y(i,j,k,1) = (aux_afrac_y(i,j,k) >
zero)
703 ? ( lo_areaLo_y * (lo_centLo_y[2] -
myhalf)
704 + hi_areaLo_y * (hi_centLo_y[2] +
myhalf) ) / aux_afrac_y(i,j,k)
706 aux_fcent_z(i,j,k,0) = lo_centLo_z[0];
707 aux_fcent_z(i,j,k,1) = lo_centLo_z[1];
710 if (i==bx.bigEnd(0)) {
711 Real lo_areaHi_x {lo_eb_cc.areaHi(0)};
712 Real hi_areaHi_x {hi_eb_cc.areaHi(0)};
713 RealVect lo_centHi_x {lo_eb_cc.centHi(0)};
714 RealVect hi_centHi_x {hi_eb_cc.centHi(0)};
716 aux_fcent_x(i+1,j,k,0) = hi_centHi_x[1];
717 aux_fcent_x(i+1,j,k,1) = hi_centHi_x[2];
718 }
else if (a_idim == 1) {
719 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) >
zero)
720 ? ( lo_areaHi_x * (lo_centHi_x[1] -
myhalf)
721 + hi_areaHi_x * (hi_centHi_x[1] +
myhalf) ) / aux_afrac_x(i+1,j,k)
723 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) >
zero)
724 ? ( lo_areaHi_x * lo_centHi_x[2]
725 + hi_areaHi_x * hi_centHi_x[2] ) / aux_afrac_x(i+1,j,k)
727 }
else if (a_idim == 2) {
728 aux_fcent_x(i+1,j,k,0) = (aux_afrac_x(i+1,j,k) >
zero)
729 ? ( lo_areaHi_x * lo_centHi_x[1]
730 + hi_areaHi_x * hi_centHi_x[1] ) / aux_afrac_x(i+1,j,k)
732 aux_fcent_x(i+1,j,k,1) = (aux_afrac_x(i+1,j,k) >
zero)
733 ? ( lo_areaHi_x * (lo_centHi_x[2] -
myhalf)
734 + hi_areaHi_x * (hi_centHi_x[2] +
myhalf) ) / aux_afrac_x(i+1,j,k)
738 if (j==bx.bigEnd(1)) {
739 Real lo_areaHi_y {lo_eb_cc.areaHi(1)};
740 Real hi_areaHi_y {hi_eb_cc.areaHi(1)};
741 RealVect lo_centHi_y {lo_eb_cc.centHi(1)};
742 RealVect hi_centHi_y {hi_eb_cc.centHi(1)};
744 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) >
zero)
745 ? ( lo_areaHi_y * (lo_centHi_y[0] -
myhalf)
746 + hi_areaHi_y * (hi_centHi_y[0] +
myhalf) ) / aux_afrac_y(i,j+1,k)
748 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) >
zero)
749 ? ( lo_areaHi_y * lo_centHi_y[2]
750 + hi_areaHi_y * hi_centHi_y[2] ) / aux_afrac_y(i,j+1,k)
752 }
else if (a_idim == 1) {
753 aux_fcent_y(i,j+1,k,0) = lo_centHi_y[0];
754 aux_fcent_y(i,j+1,k,1) = lo_centHi_y[2];
755 }
else if (a_idim == 2) {
756 aux_fcent_y(i,j+1,k,0) = (aux_afrac_y(i,j+1,k) >
zero)
757 ? ( lo_areaHi_y * lo_centHi_y[0]
758 + hi_areaHi_y * hi_centHi_y[0] ) / aux_afrac_y(i,j+1,k)
760 aux_fcent_y(i,j+1,k,1) = (aux_afrac_y(i,j+1,k) >
zero)
761 ? ( lo_areaHi_y * (lo_centHi_y[2] -
myhalf)
762 + hi_areaHi_y * (hi_centHi_y[2] +
myhalf) ) / aux_afrac_y(i,j+1,k)
766 if (k==bx.bigEnd(2)) {
767 Real lo_areaHi_z {lo_eb_cc.areaHi(2)};
768 Real hi_areaHi_z {hi_eb_cc.areaHi(2)};
769 RealVect lo_centHi_z {lo_eb_cc.centHi(2)};
770 RealVect hi_centHi_z {hi_eb_cc.centHi(2)};
772 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) >
zero)
773 ? ( lo_areaHi_z * (lo_centHi_z[0] -
myhalf)
774 + hi_areaHi_z * (hi_centHi_z[0] +
myhalf) ) / aux_afrac_z(i,j,k+1)
776 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) >
zero)
777 ? ( lo_areaHi_z * lo_centHi_z[1]
778 + hi_areaHi_z * hi_centHi_z[1] ) / aux_afrac_z(i,j,k+1)
780 }
else if (a_idim == 1) {
781 aux_fcent_z(i,j,k+1,0) = (aux_afrac_z(i,j,k+1) >
zero)
782 ? ( lo_areaHi_z * lo_centHi_z[0]
783 + hi_areaHi_z * hi_centHi_z[0] ) / aux_afrac_z(i,j,k+1)
785 aux_fcent_z(i,j,k+1,1) = (aux_afrac_z(i,j,k+1) >
zero)
786 ? ( lo_areaHi_z * (lo_centHi_z[1] -
myhalf)
787 + hi_areaHi_z * (hi_centHi_z[1] +
myhalf) ) / aux_afrac_z(i,j,k+1)
789 }
else if (a_idim == 2) {
790 aux_fcent_z(i,j,k+1,0) = lo_centHi_z[0];
791 aux_fcent_z(i,j,k+1,1) = lo_centHi_z[1];
797 Real lo_areaBoun {lo_eb_cc.areaBoun()};
798 Real hi_areaBoun {hi_eb_cc.areaBoun()};
800 aux_barea(i,j,k) = lo_areaBoun + hi_areaBoun;
804 RealVect lo_centBoun {lo_eb_cc.centBoun()};
805 RealVect hi_centBoun {hi_eb_cc.centBoun()};
808 aux_bcent(i,j,k,0) = ( lo_areaBoun * (lo_centBoun[0]-
myhalf) + hi_areaBoun * (hi_centBoun[0]+
myhalf) ) / aux_barea(i,j,k);
809 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
810 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
811 }
else if (a_idim == 1) {
812 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
813 aux_bcent(i,j,k,1) = ( lo_areaBoun * (lo_centBoun[1]-
myhalf) + hi_areaBoun * (hi_centBoun[1]+
myhalf) ) / aux_barea(i,j,k);
814 aux_bcent(i,j,k,2) = ( lo_areaBoun * lo_centBoun[2] + hi_areaBoun * hi_centBoun[2] ) / aux_barea(i,j,k);
815 }
else if (a_idim == 2) {
816 aux_bcent(i,j,k,0) = ( lo_areaBoun * lo_centBoun[0] + hi_areaBoun * hi_centBoun[0] ) / aux_barea(i,j,k);
817 aux_bcent(i,j,k,1) = ( lo_areaBoun * lo_centBoun[1] + hi_areaBoun * hi_centBoun[1] ) / aux_barea(i,j,k);
818 aux_bcent(i,j,k,2) = ( lo_areaBoun * (lo_centBoun[2]-
myhalf) + hi_areaBoun * (hi_centBoun[2]+
myhalf) ) / aux_barea(i,j,k);
823 RealVect eb_normal = ( lo_areaBoun * lo_normal + hi_areaBoun * hi_normal )/ aux_barea(i,j,k);
825 aux_bnorm(i,j,k,0) = eb_normal[0];
826 aux_bnorm(i,j,k,1) = eb_normal[1];
827 aux_bnorm(i,j,k,2) = eb_normal[2];
835 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
837 if (aux_vfrac(i,j,k) < small_volfrac)
839 aux_vfrac(i,j,k) =
zero;
848 m_volfrac->FillBoundary(a_geom.periodicity());
850 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
852 const Box& bx = mfi.validbox();
853 const Box& bx_grown = mfi.growntilebox();
855 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
856 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
857 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
858 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
859 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
860 Array4<Real>
const& aux_afrac_idim =
m_areafrac[a_idim]->array(mfi);
862 Array4<Real>
const& aux_vcent =
m_volcent->array(mfi);
863 Array4<Real>
const& aux_fcent_x =
m_facecent[0]->array(mfi);
864 Array4<Real>
const& aux_fcent_y =
m_facecent[1]->array(mfi);
865 Array4<Real>
const& aux_fcent_z =
m_facecent[2]->array(mfi);
866 Array4<Real>
const& aux_barea =
m_bndryarea->array(mfi);
867 Array4<Real>
const& aux_bcent =
m_bndrycent->array(mfi);
868 Array4<Real>
const& aux_bnorm =
m_bndrynorm->array(mfi);
870 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
873 Box my_xbx(bx); my_xbx.growHi(0,1);
874 int xbx_lo = my_xbx.smallEnd(0);
875 int xbx_hi = my_xbx.bigEnd(0);
876 ParallelFor(my_xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
878 if ((i == xbx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
879 (i == xbx_hi && aux_vfrac(i-1,j,k) < small_volfrac) ||
880 (i > xbx_lo && i < xbx_hi &&
881 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i-1,j,k) < small_volfrac))) {
882 aux_afrac_x(i,j,k) =
zero;
886 Box my_ybx(bx); my_ybx.growHi(1,1);
887 int ybx_lo = my_ybx.smallEnd(1);
888 int ybx_hi = my_ybx.bigEnd(1);
889 ParallelFor(my_ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
891 if ((j == ybx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
892 (j == ybx_hi && aux_vfrac(i,j-1,k) < small_volfrac) ||
893 (j > ybx_lo && j < ybx_hi &&
894 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i,j-1,k) < small_volfrac))) {
895 aux_afrac_y(i,j,k) =
zero;
899 Box my_zbx(bx); my_zbx.growHi(2,1);
900 int zbx_lo = my_zbx.smallEnd(2);
901 int zbx_hi = my_zbx.bigEnd(2);
902 ParallelFor(my_zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
904 if ((k == zbx_lo && aux_vfrac(i,j,k) < small_volfrac) ||
905 (k == zbx_hi && aux_vfrac(i,j,k-1) < small_volfrac) ||
906 (k > zbx_lo && k < zbx_hi &&
907 (aux_vfrac(i,j,k) < small_volfrac || aux_vfrac(i,j,k-1) < small_volfrac))) {
908 aux_afrac_z(i,j,k) =
zero;
912 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
914 if (aux_vfrac(i,j,k) < small_volfrac)
916 aux_vcent(i,j,k,0) =
zero;
917 aux_vcent(i,j,k,1) =
zero;
918 aux_vcent(i,j,k,2) =
zero;
920 aux_fcent_x(i ,j ,k ,0) =
zero;
921 aux_fcent_x(i ,j ,k ,1) =
zero;
922 aux_fcent_x(i+1,j ,k ,0) =
zero;
923 aux_fcent_x(i+1,j ,k ,1) =
zero;
925 aux_fcent_y(i ,j ,k ,0) =
zero;
926 aux_fcent_y(i ,j ,k ,1) =
zero;
927 aux_fcent_y(i ,j+1,k ,0) =
zero;
928 aux_fcent_y(i ,j+1,k ,1) =
zero;
930 aux_fcent_z(i ,j ,k ,0) =
zero;
931 aux_fcent_z(i ,j ,k ,1) =
zero;
932 aux_fcent_z(i ,j ,k+1,0) =
zero;
933 aux_fcent_z(i ,j ,k+1,1) =
zero;
935 aux_barea(i,j,k) =
zero;
937 aux_bcent(i,j,k,0) =
zero;
938 aux_bcent(i,j,k,1) =
zero;
939 aux_bcent(i,j,k,2) =
zero;
941 aux_bnorm(i,j,k,0) =
zero;
942 aux_bnorm(i,j,k,1) =
zero;
943 aux_bnorm(i,j,k,2) =
zero;
945 aux_flag(i,j,k).setCovered();
948 if (std::abs(aux_vcent(i,j,k,0)) < small_value) aux_vcent(i,j,k,0) =
zero;
949 if (std::abs(aux_vcent(i,j,k,1)) < small_value) aux_vcent(i,j,k,1) =
zero;
950 if (std::abs(aux_vcent(i,j,k,2)) < small_value) aux_vcent(i,j,k,2) =
zero;
951 if (std::abs(aux_bcent(i,j,k,0)) < small_value) aux_bcent(i,j,k,0) =
zero;
952 if (std::abs(aux_bcent(i,j,k,1)) < small_value) aux_bcent(i,j,k,1) =
zero;
953 if (std::abs(aux_bcent(i,j,k,2)) < small_value) aux_bcent(i,j,k,2) =
zero;
962 Box upper_slab = makeSlab(bx_grown, a_idim, bx.bigEnd(a_idim)+1);
963 Box bx_grown_1 = bx; bx_grown_1.grow(a_idim,1);
964 BoxList slab_diffList = boxDiff(upper_slab, bx_grown_1);
966 for (
const Box& b : slab_diffList) {
967 ParallelFor(b, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
969 IntVect iv(AMREX_D_DECL(i,j,k));
970 IntVect iv_nearest = iv;
971 for (
int d=0; d<AMREX_SPACEDIM; ++d) {
972 iv_nearest[d] = Clamp(iv[d], bx_grown_1.smallEnd(d), bx_grown_1.bigEnd(d));
974 aux_afrac_idim(iv) = aux_afrac_idim(iv_nearest);
987 m_volcent->FillBoundary(a_geom.periodicity());
988 for (
int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
989 m_areafrac[idim]->FillBoundary(a_geom.periodicity());
990 m_facecent[idim]->FillBoundary(a_geom.periodicity());
997 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
999 const Box& bx = mfi.validbox();
1000 const Box domain = surroundingNodes(a_geom.Domain(), a_idim);
1002 if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
1004 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
1005 Array4<Real>
const& aux_afrac_x =
m_areafrac[0]->array(mfi);
1006 Array4<Real>
const& aux_afrac_y =
m_areafrac[1]->array(mfi);
1007 Array4<Real>
const& aux_afrac_z =
m_areafrac[2]->array(mfi);
1009 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1011 EB2::build_cellflag_from_ap (i, j, k, aux_flag, aux_afrac_x, aux_afrac_y, aux_afrac_z);
1016 bool l_periodic_x = a_geom.isPeriodic(0);
1017 bool l_periodic_y = a_geom.isPeriodic(1);
1018 bool l_periodic_z = a_geom.isPeriodic(2);
1020 if (!l_periodic_x) {
1021 const Box dom_grown = grow(grow(domain,1,1),2,1);
1022 const Box bx_grown = grow(grow( bx,1,1),2,1);
1023 const Box bx_face_x_lo = bx_grown & makeSlab(dom_grown,0,domain.smallEnd(0));
1024 const Box bx_face_x_hi = bx_grown & makeSlab(dom_grown,0,domain.bigEnd(0));
1026 ParallelFor(bx_face_x_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1028 for(
int kk(-1); kk<=1; kk++) {
1029 for(
int jj(-1); jj<=1; jj++) {
1030 aux_flag(i,j,k).setDisconnected(-1,jj,kk);
1033 ParallelFor(bx_face_x_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1035 for(
int kk(-1); kk<=1; kk++) {
1036 for(
int jj(-1); jj<=1; jj++) {
1037 aux_flag(i,j,k).setDisconnected( 1,jj,kk);
1042 if (!l_periodic_y) {
1043 const Box dom_grown = grow(grow(domain,0,1),2,1);
1044 const Box bx_grown = grow(grow( bx,0,1),2,1);
1045 const Box bx_face_y_lo = bx_grown & makeSlab(dom_grown,1,domain.smallEnd(1));
1046 const Box bx_face_y_hi = bx_grown & makeSlab(dom_grown,1,domain.bigEnd(1));
1048 ParallelFor(bx_face_y_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1050 for(
int kk(-1); kk<=1; kk++) {
1051 for(
int ii(-1); ii<=1; ii++) {
1052 aux_flag(i,j,k).setDisconnected(ii,-1,kk);
1055 ParallelFor(bx_face_y_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1057 for(
int kk(-1); kk<=1; kk++) {
1058 for(
int ii(-1); ii<=1; ii++) {
1059 aux_flag(i,j,k).setDisconnected(ii, 1,kk);
1064 if (!l_periodic_z) {
1065 const Box dom_grown = grow(grow(domain,0,1),1,1);
1066 const Box bx_grown = grow(grow( bx,0,1),1,1);
1067 const Box bx_face_z_lo = bx_grown & makeSlab(dom_grown,2,domain.smallEnd(2));
1068 const Box bx_face_z_hi = bx_grown & makeSlab(dom_grown,2,domain.bigEnd(2));
1070 ParallelFor(bx_face_z_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1072 for(
int jj(-1); jj<=1; jj++) {
1073 for(
int ii(-1); ii<=1; ii++) {
1074 aux_flag(i,j,k).setDisconnected(ii,jj,-1);
1077 ParallelFor(bx_face_z_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1079 for(
int jj(-1); jj<=1; jj++) {
1080 for(
int ii(-1); ii<=1; ii++) {
1081 aux_flag(i,j,k).setDisconnected(ii,jj, 1);
1093 for (MFIter mfi(*
m_cellflags,
false); mfi.isValid(); ++mfi) {
1095 const Box& bx = mfi.validbox();
1096 const Box gbx = amrex::grow(bx,
m_cellflags->nGrow()-1);
1098 Array4<EBCellFlag>
const& aux_flag =
m_cellflags->array(mfi);
1099 Array4<Real>
const& aux_vfrac =
m_volfrac->array(mfi);
1101 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1103 for(
int kk(-1); kk<=1; kk++) {
1104 for(
int jj(-1); jj<=1; jj++) {
1105 for(
int ii(-1); ii<=1; ii++)
1107 if (aux_vfrac(i+ii,j+jj,k+kk) ==
zero) {
1108 aux_flag(i,j,k).setDisconnected(ii,jj,kk);
1113 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
1115 if (aux_vfrac(i,j,k)==
zero) {
1116 aux_flag(i,j,k).setCovered();
1131 amrex::VisMF::Write(*
m_areafrac[0],
"UAREAX");
1132 amrex::VisMF::Write(*
m_areafrac[1],
"UAREAY");
1133 amrex::VisMF::Write(*
m_areafrac[2],
"UAREAZ");
1134 }
else if (a_idim == 1) {
1136 amrex::VisMF::Write(*
m_areafrac[0],
"VAREAX");
1137 amrex::VisMF::Write(*
m_areafrac[1],
"VAREAY");
1138 amrex::VisMF::Write(*
m_areafrac[2],
"VAREAZ");
1141 amrex::VisMF::Write(*
m_areafrac[0],
"WAREAX");
1142 amrex::VisMF::Write(*
m_areafrac[1],
"WAREAY");
1143 amrex::VisMF::Write(*
m_areafrac[2],
"WAREAZ");
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::FabArray< amrex::EBCellFlagFab > * m_cellflags
Definition: ERF_EBAux.H:75
amrex::MultiFab * m_bndrynorm
Definition: ERF_EBAux.H:80
amrex::MultiFab * m_bndryarea
Definition: ERF_EBAux.H:78
amrex::MultiFab * m_volfrac
Definition: ERF_EBAux.H:76
amrex::MultiFab * m_bndrycent
Definition: ERF_EBAux.H:79
amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > m_facecent
Definition: ERF_EBAux.H:83
amrex::MultiFab * m_volcent
Definition: ERF_EBAux.H:77
amrex::Array< amrex::MultiFab *, AMREX_SPACEDIM > m_areafrac
Definition: ERF_EBAux.H:82
Reconstructs geometric moments for one EB cut cell.
Definition: ERF_EBCutCell.H:68
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12