22#include < AMReX_ParmParse.H>
33#include < ERF_EBAux.H>
44#include < ERF_EBCutCell.H>
5+ #include < AMReX_MultiFabUtil.H>
56
67using namespace amrex ;
78
@@ -69,10 +70,12 @@ define( [[maybe_unused]] int const& a_level,
6970 // Initialize with zeros
7071 m_volfrac->setVal (0.0 );
7172 m_volcent->setVal (0.0 );
73+
7274 for (int idim = 0 ; idim < AMREX_SPACEDIM; ++idim) {
7375 m_areafrac[idim]->setVal (0.0 );
7476 m_facecent[idim]->setVal (0.0 );
7577 }
78+
7679 m_bndryarea->setVal (0.0 );
7780 m_bndrycent->setVal (0.0 );
7881 m_bndrynorm->setVal (0.0 );
@@ -101,24 +104,14 @@ define( [[maybe_unused]] int const& a_level,
101104 {
102105 aux_flag (i,j,k).setCovered ();
103106 aux_flag (i,j,k).setDisconnected ();
104- aux_vfrac (i,j,k) = 0.0 ;
105- aux_afrac_x (i,j,k) = 0.0 ;
106- aux_afrac_y (i,j,k) = 0.0 ;
107- aux_afrac_z (i,j,k) = 0.0 ;
108107 if (i==bx.bigEnd (0 )) {
109108 aux_flag (i+1 ,j,k).setCovered ();
110- aux_vfrac (i+1 ,j,k) = 0.0 ;
111- aux_afrac_x (i+1 ,j,k) = 0.0 ;
112109 }
113110 if (j==bx.bigEnd (1 )) {
114111 aux_flag (i,j+1 ,k).setCovered ();
115- aux_vfrac (i,j+1 ,k) = 0.0 ;
116- aux_afrac_y (i,j+1 ,k) = 0.0 ;
117112 }
118113 if (k==bx.bigEnd (2 )) {
119114 aux_flag (i,j,k+1 ).setCovered ();
120- aux_vfrac (i,j,k+1 ) = 0.0 ;
121- aux_afrac_z (i,j,k+1 ) = 0.0 ;
122115 }
123116 });
124117
@@ -155,8 +148,6 @@ define( [[maybe_unused]] int const& a_level,
155148
156149 // CC cell quantities
157150 Array4<EBCellFlag const > const & flag = FlagFab.const_array (mfi);
158- // Array4<Real const> const& vfrac = (a_factory->getVolFrac()).const_array(mfi);
159- // Array4<Real const> const& ccent = (a_factory->getCentroid()).const_array(mfi);
160151 Array4<Real const > const & afrac = (a_factory->getAreaFrac ()[a_idim])->const_array (mfi);
161152 Array4<Real const > const & bnorm = a_factory->getBndryNormal ()[mfi].const_array ();
162153 Array4<Real const > const & bcent = a_factory->getBndryCent ()[mfi].const_array ();
@@ -204,63 +195,16 @@ define( [[maybe_unused]] int const& a_level,
204195 aux_flag (i,j,k).setCovered ();
205196 aux_flag (i,j,k).setDisconnected ();
206197
207- aux_vfrac (i,j,k) = 0.0 ;
208- aux_vcent (i,j,k,0 ) = 0.0 ;
209- aux_vcent (i,j,k,1 ) = 0.0 ;
210- aux_vcent (i,j,k,2 ) = 0.0 ;
211-
212- aux_afrac_x (i,j,k) = 0.0 ;
213- aux_afrac_y (i,j,k) = 0.0 ;
214- aux_afrac_z (i,j,k) = 0.0 ;
215-
216- aux_fcent_x (i,j,k,0 ) = 0.0 ; aux_fcent_x (i,j,k,1 ) = 0.0 ;
217- aux_fcent_y (i,j,k,0 ) = 0.0 ; aux_fcent_y (i,j,k,1 ) = 0.0 ;
218- aux_fcent_z (i,j,k,0 ) = 0.0 ; aux_fcent_z (i,j,k,1 ) = 0.0 ;
219-
220198 if (i==bx.bigEnd (0 )) {
221199 aux_flag (i+1 ,j,k).setCovered ();
222- aux_vfrac (i+1 ,j,k) = 0.0 ;
223- aux_vcent (i+1 ,j,k,0 ) = 0.0 ;
224- aux_vcent (i+1 ,j,k,1 ) = 0.0 ;
225- aux_vcent (i+1 ,j,k,2 ) = 0.0 ;
226-
227- aux_afrac_x (i+1 ,j,k) = 0.0 ;
228- aux_fcent_x (i+1 ,j,k,0 ) = 0.0 ;
229- aux_fcent_x (i+1 ,j,k,1 ) = 0.0 ;
230200 }
231201 if (j==bx.bigEnd (1 )) {
232202 aux_flag (i,j+1 ,k).setCovered ();
233- aux_vfrac (i,j+1 ,k) = 0.0 ;
234- aux_vcent (i,j+1 ,k,0 ) = 0.0 ;
235- aux_vcent (i,j+1 ,k,1 ) = 0.0 ;
236- aux_vcent (i,j+1 ,k,2 ) = 0.0 ;
237-
238- aux_afrac_y (i,j+1 ,k) = 0.0 ;
239- aux_fcent_y (i,j+1 ,k,0 ) = 0.0 ;
240- aux_fcent_y (i,j+1 ,k,1 ) = 0.0 ;
241203 }
242204 if (k==bx.bigEnd (2 )) {
243205 aux_flag (i,j,k+1 ).setCovered ();
244- aux_vfrac (i,j,k+1 ) = 0.0 ;
245- aux_vcent (i,j,k+1 ,0 ) = 0.0 ;
246- aux_vcent (i,j,k+1 ,1 ) = 0.0 ;
247- aux_vcent (i,j,k+1 ,2 ) = 0.0 ;
248-
249- aux_afrac_z (i,j,k+1 ) = 0.0 ;
250- aux_fcent_z (i,j,k+1 ,0 ) = 0.0 ;
251- aux_fcent_z (i,j,k+1 ,1 ) = 0.0 ;
252206 }
253207
254- aux_barea (i,j,k) = 0.0 ;
255-
256- aux_bcent (i,j,k,0 ) = 0.0 ;
257- aux_bcent (i,j,k,1 ) = 0.0 ;
258- aux_bcent (i,j,k,2 ) = 0.0 ;
259-
260- aux_bnorm (i,j,k,0 ) = 0.0 ;
261- aux_bnorm (i,j,k,1 ) = 0.0 ;
262- aux_bnorm (i,j,k,2 ) = 0.0 ;
263-
264208 // Index for low and hi cells
265209 IntVect iv_hi (i,j,k);
266210 IntVect iv_lo (iv_hi - vdim);
@@ -348,24 +292,14 @@ define( [[maybe_unused]] int const& a_level,
348292 aux_afrac_y (i,j,k) = 1.0 ;
349293 aux_afrac_z (i,j,k) = 1.0 ;
350294
351- aux_fcent_x (i,j,k,0 ) = 0.0 ; aux_fcent_x (i,j,k,1 ) = 0.0 ;
352- aux_fcent_y (i,j,k,0 ) = 0.0 ; aux_fcent_y (i,j,k,1 ) = 0.0 ;
353- aux_fcent_z (i,j,k,0 ) = 0.0 ; aux_fcent_z (i,j,k,1 ) = 0.0 ;
354-
355295 if (i==bx.bigEnd (0 )) {
356296 aux_afrac_x (i+1 ,j,k) = 1.0 ;
357- aux_fcent_x (i+1 ,j,k,0 ) = 0.0 ;
358- aux_fcent_x (i+1 ,j,k,1 ) = 0.0 ;
359297 }
360298 if (j==bx.bigEnd (1 )) {
361299 aux_afrac_y (i,j+1 ,k) = 1.0 ;
362- aux_fcent_y (i,j+1 ,k,0 ) = 0.0 ;
363- aux_fcent_y (i,j+1 ,k,1 ) = 0.0 ;
364300 }
365301 if (k==bx.bigEnd (2 )) {
366302 aux_afrac_z (i,j,k+1 ) = 1.0 ;
367- aux_fcent_z (i,j,k+1 ,0 ) = 0.0 ;
368- aux_fcent_z (i,j,k+1 ,1 ) = 0.0 ;
369303 }
370304
371305 } else {
@@ -897,6 +831,43 @@ define( [[maybe_unused]] int const& a_level,
897831
898832 });
899833
834+ ParallelFor (bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
835+ {
836+ if (aux_vfrac (i,j,k) < small_volfrac)
837+ {
838+ aux_vfrac (i,j,k) = 0.0 ;
839+ }
840+ });
841+
842+ } // if (FlagFab[mfi].getType(bx) == FabType::singlevalued )
843+
844+ } // MFIter
845+
846+ // We FillBoundary volfrac here so that we can use tests on volfrac in ghost cells below
847+ m_volfrac->FillBoundary (a_geom.periodicity ());
848+
849+ for (MFIter mfi (*m_cellflags, false ); mfi.isValid (); ++mfi) {
850+
851+ const Box& bx = mfi.validbox ();
852+ const Box& bx_grown = mfi.growntilebox ();
853+
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);
859+
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);
867+
868+
869+ if (FlagFab[mfi].getType (bx) == FabType::singlevalued ) {
870+
900871 // Corrections for small cells
901872 Box my_xbx (bx); if (a_idim == 0 ) my_xbx.growLo (0 ,1 );
902873 ParallelFor (my_xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
@@ -929,7 +900,6 @@ define( [[maybe_unused]] int const& a_level,
929900 {
930901 if (aux_vfrac (i,j,k) < small_volfrac)
931902 {
932- aux_vfrac (i,j,k) = 0.0 ;
933903 aux_vcent (i,j,k,0 ) = 0.0 ;
934904 aux_vcent (i,j,k,1 ) = 0.0 ;
935905 aux_vcent (i,j,k,2 ) = 0.0 ;
@@ -998,7 +968,9 @@ define( [[maybe_unused]] int const& a_level,
998968
999969 // Fill Boundary
1000970
1001- m_volfrac->FillBoundary (a_geom.periodicity ());
971+ // The FB call for volfrac is done above
972+ // m_volfrac->FillBoundary(a_geom.periodicity());
973+
1002974 m_volcent->FillBoundary (a_geom.periodicity ());
1003975 for (int idim = 0 ; idim < AMREX_SPACEDIM; ++idim) {
1004976 m_areafrac[idim]->FillBoundary (a_geom.periodicity ());
@@ -1009,7 +981,6 @@ define( [[maybe_unused]] int const& a_level,
1009981 m_bndrynorm->FillBoundary (a_geom.periodicity ());
1010982
1011983 // Set Connectivities
1012-
1013984 for (MFIter mfi (*m_cellflags, false ); mfi.isValid (); ++mfi) {
1014985
1015986 const Box& bx = mfi.validbox ();
0 commit comments