Skip to content

Commit

Permalink
applyBC optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
WeiqunZhang committed Jan 12, 2024
1 parent 749c45a commit 7bbcd34
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 12 deletions.
10 changes: 9 additions & 1 deletion Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,17 @@ public:

void compresid (int amrlev, int mglev, MF& resid, MF const& b) const;

void applyPhysBC_x (int amrlev, int mglev, MultiFab& mf) const;
void applyPhysBC_y (int amrlev, int mglev, MultiFab& mf) const;
void applyPhysBC_z (int amrlev, int mglev, MultiFab& mf) const;

private:

void applyBC (int amrlev, int mglev, MF& in, BCMode bc_mode, StateMode s_mode) const;
void applyBC (int amrlev, int mglev, MF& in) const;
void applyBC_x (int amrlev, int mglev, MultiFab& mf) const;
void applyBC_y (int amrlev, int mglev, MultiFab& mf) const;
void applyBC_z (int amrlev, int mglev, MultiFab& mf) const;

[[nodiscard]] iMultiFab const& getDotMask (int amrlev, int mglev, int idim) const;

[[nodiscard]] int getDirichlet (int amrlev, int mglev, int idim, int face) const;
Expand Down
56 changes: 45 additions & 11 deletions Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ void
MLCurlCurl::apply (int amrlev, int mglev, MF& out, MF& in, BCMode bc_mode,
StateMode s_mode, const MLMGBndryT<MF>* /*bndry*/) const
{
applyBC(amrlev, mglev, in, bc_mode, s_mode);
applyBC(amrlev, mglev, in);

auto const& dxinv = this->m_geom[amrlev][mglev].InvCellSizeArray();
auto const a = m_alpha;
Expand Down Expand Up @@ -149,26 +149,25 @@ MLCurlCurl::apply (int amrlev, int mglev, MF& out, MF& in, BCMode bc_mode,
void MLCurlCurl::smooth (int amrlev, int mglev, MF& sol, const MF& rhs,
bool skip_fillboundary) const
{
// xxxxx TODO: note that applyBC unnecessarily fill all three multifabs

if (!skip_fillboundary) {
applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
applyBC(amrlev, mglev, sol);
}

smooth_x(amrlev, mglev, sol, rhs[0], 0);
applyBC_x(amrlev, mglev, sol[0]);

applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
smooth_y(amrlev, mglev, sol, rhs[1], 0);
applyBC_y(amrlev, mglev, sol[1]);

applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
smooth_z(amrlev, mglev, sol, rhs[2], 0);
applyBC_z(amrlev, mglev, sol[2]);

applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
smooth_x(amrlev, mglev, sol, rhs[0], 1);
applyBC_x(amrlev, mglev, sol[0]);

applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
smooth_y(amrlev, mglev, sol, rhs[1], 1);
applyBC_y(amrlev, mglev, sol[1]);

applyBC(amrlev, mglev, sol, BCMode::Homogeneous, StateMode::Correction);
smooth_z(amrlev, mglev, sol, rhs[2], 1);

for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
Expand Down Expand Up @@ -480,11 +479,46 @@ MLCurlCurl::makeCoarseAmr (int famrlev, IntVect const& ng) const
return r;
}

void MLCurlCurl::applyBC (int amrlev, int mglev, MF& in, BCMode /*bc_mode*/,
StateMode /*s_mode*/) const
void MLCurlCurl::applyBC (int amrlev, int mglev, MF& in) const
{
Vector<MultiFab*> mfs{AMREX_D_DECL(in.data(),&(in[1]),&(in[2]))};
FillBoundary(mfs, this->m_geom[amrlev][mglev].periodicity());
applyPhysBC_x(amrlev, mglev, in[0]);
applyPhysBC_y(amrlev, mglev, in[1]);
applyPhysBC_z(amrlev, mglev, in[2]);
}

void MLCurlCurl::applyBC_x (int amrlev, int mglev, MultiFab& mf) const
{
mf.FillBoundary(this->m_geom[amrlev][mglev].periodicity());
applyPhysBC_x(amrlev, mglev, mf);
}

void MLCurlCurl::applyBC_y (int amrlev, int mglev, MultiFab& mf) const
{
mf.FillBoundary(this->m_geom[amrlev][mglev].periodicity());
applyPhysBC_y(amrlev, mglev, mf);
}

void MLCurlCurl::applyBC_z (int amrlev, int mglev, MultiFab& mf) const
{
mf.FillBoundary(this->m_geom[amrlev][mglev].periodicity());
applyPhysBC_z(amrlev, mglev, mf);
}

void MLCurlCurl::applyPhysBC_x (int amrlev, int mglev, MultiFab& mf) const
{

}

void MLCurlCurl::applyPhysBC_y (int amrlev, int mglev, MultiFab& mf) const
{

}

void MLCurlCurl::applyPhysBC_z (int amrlev, int mglev, MultiFab& mf) const
{

}

iMultiFab const& MLCurlCurl::getDotMask (int amrlev, int mglev, int idim) const
Expand Down

0 comments on commit 7bbcd34

Please sign in to comment.