Skip to content

Commit 0115dac

Browse files
skang67asalmgren
andauthored
Use cell-centered grid for EB area fraction and face centroid (#2702)
* Apply FillBoundary for momenta in slow_rhs_post. * check on domain boundaries not box boundaries * replace bx lo/hi by domain lo/hi * revert incorrect change in last commit * fix test on small cells * Added wrappers for non-const EB factory members. * Use cell-centered grids for eb_aux_ area fraction and face centroids. * Corrected rayleigh damping thickness in inputs_FittedMesh. * Remove FB from slow_rhs_post, since we do this in erf_slow_rhs_pre. --------- Co-authored-by: Ann Almgren <[email protected]>
1 parent 2f48a08 commit 0115dac

File tree

3 files changed

+56
-27
lines changed

3 files changed

+56
-27
lines changed

Exec/DryRegTests/WitchOfAgnesi/inputs_FittedMesh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ erf.abl_driver_type = "PressureGradient"
6464
erf.abl_pressure_grad = -0.02 0. 0.
6565

6666
erf.rayleigh_damp_W = true
67-
erf.rayleigh_zdamp = 5000.0
68-
erf.rayleigh_dampcoef = 0.2
67+
erf.rayleigh_zdamp = 50.0
68+
erf.rayleigh_dampcoef = 0.25
6969

7070
#erf.init_type = "input_sounding"
7171
#erf.init_sounding_ideal = true

Source/EB/ERF_EB.H

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,44 @@ class eb_ {
9999
inline amrex::FabArray<amrex::EBCellFlagFab>&
100100
getNonConstEBCellFlags(const amrex::EBFArrayBoxFactory& ebfact)
101101
{
102-
const amrex::FabArray<amrex::EBCellFlagFab>& flags_const = ebfact.getMultiEBCellFlagFab();
103-
return const_cast<amrex::FabArray<amrex::EBCellFlagFab>&>(flags_const);
102+
const amrex::FabArray<amrex::EBCellFlagFab>& flags_const = ebfact.getMultiEBCellFlagFab();
103+
return const_cast<amrex::FabArray<amrex::EBCellFlagFab>&>(flags_const);
104+
}
105+
106+
inline amrex::MultiFab&
107+
getNonConstVolFrac(const amrex::EBFArrayBoxFactory& ebfact)
108+
{
109+
const amrex::MultiFab& vfrac_const = ebfact.getVolFrac();
110+
return const_cast<amrex::MultiFab&>(vfrac_const);
111+
}
112+
113+
inline amrex::MultiCutFab&
114+
getNonConstCentroid(const amrex::EBFArrayBoxFactory& ebfact)
115+
{
116+
const amrex::MultiCutFab& vcent_const = ebfact.getCentroid();
117+
return const_cast<amrex::MultiCutFab&>(vcent_const);
118+
}
119+
120+
inline amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM>
121+
getNonConstAreaFrac(const amrex::EBFArrayBoxFactory& ebfact)
122+
{
123+
auto afrac_const = ebfact.getAreaFrac();
124+
amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM> afrac;
125+
for (int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
126+
afrac[dir] = const_cast<amrex::MultiCutFab*>(afrac_const[dir]);
127+
}
128+
return afrac;
129+
}
130+
131+
inline amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM>
132+
getNonConstFaceCent(const amrex::EBFArrayBoxFactory& ebfact)
133+
{
134+
auto fcent_const = ebfact.getFaceCent();
135+
amrex::Array<amrex::MultiCutFab*, AMREX_SPACEDIM> fcent;
136+
for (int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
137+
fcent[dir] = const_cast<amrex::MultiCutFab*>(fcent_const[dir]);
138+
}
139+
return fcent;
104140
}
105141

106142
};

Source/EB/ERF_EBAux.cpp

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,8 @@ define( [[maybe_unused]] int const& a_level,
5353
m_volcent = new MultiFab(my_grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], MFInfo(), FArrayBoxFactory());
5454

5555
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
56-
const BoxArray& faceba = amrex::convert(a_grids, IntVect::TheDimensionVector(idim));
57-
if (idim == a_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());
60-
} else {
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());
63-
}
56+
m_areafrac[idim] = new MultiFab(a_grids, a_dmap, 1, a_ngrow[1]+1, MFInfo(), FArrayBoxFactory());
57+
m_facecent[idim] = new MultiFab(a_grids, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
6458
}
6559

6660
m_bndryarea = new MultiFab(my_grids, a_dmap, 1, a_ngrow[2], MFInfo(), FArrayBoxFactory());
@@ -848,23 +842,22 @@ define( [[maybe_unused]] int const& a_level,
848842

849843
for (MFIter mfi(*m_cellflags, false); mfi.isValid(); ++mfi) {
850844

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);
845+
const Box& bx = mfi.validbox();
846+
const Box& bx_grown = mfi.growntilebox();
859847

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);
848+
Array4<EBCellFlag> const& aux_flag = m_cellflags->array(mfi);
849+
Array4<Real> const& aux_vfrac = m_volfrac->array(mfi);
850+
Array4<Real> const& aux_afrac_x = m_areafrac[0]->array(mfi);
851+
Array4<Real> const& aux_afrac_y = m_areafrac[1]->array(mfi);
852+
Array4<Real> const& aux_afrac_z = m_areafrac[2]->array(mfi);
867853

854+
Array4<Real> const& aux_vcent = m_volcent->array(mfi);
855+
Array4<Real> const& aux_fcent_x = m_facecent[0]->array(mfi);
856+
Array4<Real> const& aux_fcent_y = m_facecent[1]->array(mfi);
857+
Array4<Real> const& aux_fcent_z = m_facecent[2]->array(mfi);
858+
Array4<Real> const& aux_barea = m_bndryarea->array(mfi);
859+
Array4<Real> const& aux_bcent = m_bndrycent->array(mfi);
860+
Array4<Real> const& aux_bnorm = m_bndrynorm->array(mfi);
868861

869862
if (FlagFab[mfi].getType(bx) == FabType::singlevalued ) {
870863

0 commit comments

Comments
 (0)