Skip to content

Commit

Permalink
make chage to cell-centered MF
Browse files Browse the repository at this point in the history
  • Loading branch information
ejyoo921 committed Sep 19, 2024
1 parent 2304763 commit 8eb29d8
Showing 1 changed file with 27 additions and 25 deletions.
52 changes: 27 additions & 25 deletions Src/EB/AMReX_EB2_Level.H
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
#include <AMReX_EB2_MultiGFab.H>
#include <AMReX_EB2_C.H>
#include <AMReX_EB2_IF_AllRegular.H>

#include <AMReX_PlotFileUtil.H>

#ifdef AMREX_USE_OMP
Expand Down Expand Up @@ -49,8 +48,6 @@ public:
void fillBndryNorm ( MultiFab& bndrynorm, const Geometry& geom) const;
void fillAreaFrac (Array<MultiCutFab*,AMREX_SPACEDIM> const& areafrac, const Geometry& geom) const;
void fillAreaFrac (Array< MultiFab*,AMREX_SPACEDIM> const& areafrac, const Geometry& geom) const;
void fillFaceMulticut (Array<MultiCutFab*,AMREX_SPACEDIM> const& multicut_face, const Geometry& geom) const;
void fillFaceMulticut (Array< MultiFab*,AMREX_SPACEDIM> const& multicut_face, const Geometry& geom) const;
void fillFaceCent (Array<MultiCutFab*,AMREX_SPACEDIM> const& facecent, const Geometry& geom) const;
void fillFaceCent (Array< MultiFab*,AMREX_SPACEDIM> const& facecent, const Geometry& geom) const;
void fillEdgeCent (Array<MultiCutFab*,AMREX_SPACEDIM> const& edgecent, const Geometry& geom) const;
Expand Down Expand Up @@ -94,9 +91,11 @@ protected:
MultiFab m_bndrycent;
MultiFab m_bndrynorm;
Array<MultiFab,AMREX_SPACEDIM> m_areafrac;
Array<MultiFab,AMREX_SPACEDIM> multicut_face;
Array<MultiFab,AMREX_SPACEDIM> m_facecent;
Array<MultiFab,AMREX_SPACEDIM> m_edgecent;
MultiFab m_multicut_fcx;
MultiFab m_multicut_fcy;
MultiFab m_multicut_fcz;
iMultiFab m_cutcellmask;
bool m_allregular = false;
bool m_ok = false;
Expand All @@ -105,6 +104,7 @@ protected:

private:
template <typename G> friend class GShopLevel;

// Need this function to work around a gcc bug.
void setRegularLevel () {
m_allregular = true;
Expand Down Expand Up @@ -296,12 +296,12 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
m_bndryarea.define(m_grids, m_dmap, 1, ng, mf_info);
m_bndrycent.define(m_grids, m_dmap, AMREX_SPACEDIM, ng, mf_info);
m_bndrynorm.define(m_grids, m_dmap, AMREX_SPACEDIM, ng, mf_info);

m_multicut_fcx.define(m_grids, m_dmap, 1, ng, mf_info);
m_multicut_fcy.define(m_grids, m_dmap, 1, ng, mf_info);
m_multicut_fcz.define(m_grids, m_dmap, 1, ng, mf_info);
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
m_areafrac[idim].define(amrex::convert(m_grids, IntVect::TheDimensionVector(idim)),
m_dmap, 1, ng, mf_info);
multicut_face[idim].define(amrex::convert(m_grids, IntVect::TheDimensionVector(idim)),
m_dmap, 1, ng, mf_info);
m_facecent[idim].define(amrex::convert(m_grids, IntVect::TheDimensionVector(idim)),
m_dmap, AMREX_SPACEDIM-1, ng, mf_info);
IntVect edge_type{1}; edge_type[idim] = 0;
Expand Down Expand Up @@ -363,7 +363,6 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
Array4<Real> const& bar = m_bndryarea.array(mfi);
Array4<Real> const& bct = m_bndrycent.array(mfi);
Array4<Real> const& bnm = m_bndrynorm.array(mfi);

AMREX_D_TERM(Array4<Real> const& apx = m_areafrac[0].array(mfi);,
Array4<Real> const& apy = m_areafrac[1].array(mfi);,
Array4<Real> const& apz = m_areafrac[2].array(mfi););
Expand Down Expand Up @@ -423,13 +422,14 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
Array4<Real> const& ym2 = M2[1].array();
Array4<Real> const& zm2 = M2[2].array();

AMREX_D_TERM(Array4<Real> const& mcx = multicut_face[0].array(mfi);,
Array4<Real> const& mcy = multicut_face[1].array(mfi);,
Array4<Real> const& mcz = multicut_face[2].array(mfi););
Array4<Real> const& mcx = m_multicut_fcx.array(mfi);
Array4<Real> const& mcy = m_multicut_fcy.array(mfi);
Array4<Real> const& mcz = m_multicut_fcz.array(mfi);

nmc = build_faces(vbx, cfg, ftx, fty, ftz, xdg, ydg, zdg, lst,
xip, yip, zip, apx, apy, apz, fcx, fcy, fcz,
xm2, ym2, zm2, dx, problo, cover_multiple_cuts, plt_multiple_cuts, mcx, mcy, mcz);
xm2, ym2, zm2, dx, problo, cover_multiple_cuts,
plt_multiple_cuts, mcx, mcy, mcz);

cellflagtmp.resize(m_cellflag[mfi].box());
Elixir cellflagtmp_eli = cellflagtmp.elixir();
Expand All @@ -438,7 +438,8 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
build_cells(vbx, cfg, ftx, fty, ftz, apx, apy, apz,
fcx, fcy, fcz, xm2, ym2, zm2, dx, vfr, ctr,
bar, bct, bnm, cfgtmp, lst,
small_volfrac, geom, extend_domain_face, cover_multiple_cuts, plt_multiple_cuts,
small_volfrac, geom, extend_domain_face,
cover_multiple_cuts, plt_multiple_cuts,
nsm, nmc);

// Because it is used in a synchronous reduction kernel in
Expand Down Expand Up @@ -480,10 +481,11 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
clst, geom);
}

Array4<Real> const& mcx = multicut_face[0].array(mfi);
Array4<Real> const& mcx = m_multicut_fcx.array(mfi);

nmc = build_faces(vbx, cfg, ftx, fty, lst, xip, yip, apx, apy, fcx, fcy,
dx, problo, cover_multiple_cuts, nsm, plt_multiple_cuts, mcx);
dx, problo, cover_multiple_cuts, nsm,
plt_multiple_cuts, mcx);

build_cells(vbx, cfg, ftx, fty, apx, apy, dx, vfr, ctr,
bar, bct, bnm, lst, small_volfrac, geom, extend_domain_face,
Expand All @@ -495,29 +497,29 @@ GShopLevel<G>::define_fine (G const& gshop, const Geometry& geom,
}

ParallelAllReduce::Sum<int>({nsmallcells,nmulticuts}, ParallelContext::CommunicatorSub());

if (plt_multiple_cuts && nmulticuts > 0)
{
amrex::Print() << "Total number of multicuts = " << nmulticuts << "\n";
amrex::Print() << "Plotting multicut locations..." << "\n";
amrex::Print() << "Max is = " << multicut_face[0].max(0) << "\n";

#if (AMREX_SPACEDIM == 3)
if (multicut_face[0].max(0) > 2)
if (m_multicut_fcx.max(0) > 2)
{
WriteSingleLevelPlotfile("plt.multicut.x", multicut_face[0], {"multicut_fcx"}, geom, 0.0, 0);
WriteSingleLevelPlotfile("plt.multicut.x", m_multicut_fcx, {"multicut_fcx"}, geom, 0.0, 0);
}
if (multicut_face[1].max(0) > 2)
if (m_multicut_fcy.max(0) > 2)
{
WriteSingleLevelPlotfile("plt.multicut.y", multicut_face[1], {"multicut_fcy"}, geom, 0.0, 0);
WriteSingleLevelPlotfile("plt.multicut.y", m_multicut_fcy, {"multicut_fcy"}, geom, 0.0, 0);
}
if (multicut_face[2].max(0) > 2)
if (m_multicut_fcz.max(0) > 2)
{
WriteSingleLevelPlotfile("plt.multicut.z", multicut_face[2], {"multicut_fcz"}, geom, 0.0, 0);
WriteSingleLevelPlotfile("plt.multicut.z", m_multicut_fcz, {"multicut_fcz"}, geom, 0.0, 0);
}
#elif (AMREX_SPACEDIM == 2)
if (multicut_face[0].max(0) > 2)
if (m_multicut_fcx.max(0) > 2)
{
WriteSingleLevelPlotfile("plt.multicut", multicut_face[0], {"multicut_fcx"}, geom, 0.0, 0);
WriteSingleLevelPlotfile("plt.multicut", m_multicut_fcx, {"multicut_fcx"}, geom, 0.0, 0);
}
#endif
amrex::Abort("amrex::EB2:: more than 2 cuts not supported");
Expand Down Expand Up @@ -621,4 +623,4 @@ GShopLevel<G>::GShopLevel (IndexSpace const* is, int /*ilev*/, int max_grid_size

}

#endif
#endif

0 comments on commit 8eb29d8

Please sign in to comment.