Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
WeiqunZhang committed Dec 21, 2023
1 parent 99a8c18 commit 8692eab
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 27 deletions.
53 changes: 38 additions & 15 deletions Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ public:
private:
RT m_alpha = std::numeric_limits<RT>::lowest();
RT m_beta = std::numeric_limits<RT>::lowest();
Array<IntVect,AMREX_SPACEDIM> m_etype{IntVect(0,1,1),
IntVect(1,0,1),
IntVect(1,1,0)};
using mf_type = typename MF::value_type;
};

template <typename MF>
Expand Down Expand Up @@ -270,7 +274,7 @@ template <typename MF>
void
MLCurlCurlT<MF>::prepareForSolve ()
{
amrex::Abort("MLCurlCurlT::prepareForSolve: TODO");
amrex::Warning("MLCurlCurlT::prepareForSolve: TODO");
}

template <typename MF>
Expand Down Expand Up @@ -319,44 +323,63 @@ template <typename MF>
void
MLCurlCurlT<MF>::make (Vector<Vector<MF> >& mf, IntVect const& ng) const
{
amrex::ignore_unused(mf, ng);
amrex::Abort("MLCurlCurlT::make: TODO");
MLLinOpT<MF>::make(mf, ng);
}

template <typename MF>
MF
MLCurlCurlT<MF>::make (int amrlev, int mglev, IntVect const& ng) const
{
amrex::ignore_unused(amrlev, mglev, ng);
amrex::Abort("MLCurlCurlT::make: TODO");
return {};
MF r;
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
r[idim].define(amrex::convert(this->m_grids[amrlev][mglev], m_etype[idim]),
this->m_dmap[amrlev][mglev], this->getNComp(), ng, MFInfo(),
*(this->m_factory)[amrlev][mglev]);
}
return r;
}

template <typename MF>
MF
MLCurlCurlT<MF>::makeAlias (MF const& mf) const
{
amrex::ignore_unused(mf);
amrex::Abort("MLCurlCurlT::makeAlias: TODO");
return {};
MF r;
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
r[idim] = mf_type(mf[idim], amrex::make_alias, 0, mf[idim].nComp());
}
return r;
}

template <typename MF>
MF
MLCurlCurlT<MF>::makeCoarseMG (int amrlev, int mglev, IntVect const& ng) const
{
amrex::ignore_unused(amrlev, mglev, ng);
amrex::Abort("MLCurlCurlT::makeCoarseMG: TODO");
return {};
BoxArray cba = this->m_grids[amrlev][mglev];
IntVect ratio = (amrlev > 0) ? IntVect(2) : this->mg_coarsen_ratio_vec[mglev];
cba.coarsen(ratio);

MF r;
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
r[idim].define(amrex::convert(cba, m_etype[idim]),
this->m_dmap[amrlev][mglev], this->getNComp(), ng);
}
return r;
}

template <typename MF>
MF
MLCurlCurlT<MF>::makeCoarseAmr (int famrlev, IntVect const& ng) const
{
amrex::ignore_unused(famrlev, ng);
amrex::Abort("MLCurlCurlT::makeCoarseAmr: TODO");
return {};
BoxArray cba = this->m_grids[famrlev][0];
IntVect ratio(this->AMRRefRatio(famrlev-1));
cba.coarsen(ratio);

MF r;
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
r[idim].define(amrex::convert(cba, m_etype[idim]),
this->m_dmap[famrlev][0], this->getNComp(), ng);
}
return r;
}

template <>
Expand Down
19 changes: 7 additions & 12 deletions Src/LinearSolvers/MLMG/AMReX_MLLinOp.H
Original file line number Diff line number Diff line change
Expand Up @@ -1384,18 +1384,13 @@ template <typename MF>
void
MLLinOpT<MF>::make (Vector<Vector<MF> >& mf, IntVect const& ng) const
{
if constexpr (IsMultiFabLike_v<MF>) {
mf.clear();
mf.resize(m_num_amr_levels);
for (int alev = 0; alev < m_num_amr_levels; ++alev) {
mf[alev].resize(m_num_mg_levels[alev]);
for (int mlev = 0; mlev < m_num_mg_levels[alev]; ++mlev) {
mf[alev][mlev] = make(alev, mlev, ng);
}
mf.clear();
mf.resize(m_num_amr_levels);
for (int alev = 0; alev < m_num_amr_levels; ++alev) {
mf[alev].resize(m_num_mg_levels[alev]);
for (int mlev = 0; mlev < m_num_mg_levels[alev]; ++mlev) {
mf[alev][mlev] = make(alev, mlev, ng);
}
} else {
amrex::ignore_unused(mf, ng);
amrex::Abort("MLLinOpT::make: how did we get here?");
}
}

Expand Down Expand Up @@ -1483,8 +1478,8 @@ template <typename MF>
void
MLLinOpT<MF>::avgDownResMG (int clev, MF& cres, MF const& fres) const
{
const int ncomp = this->getNComp();
if constexpr (amrex::IsFabArray<MF>::value) {
const int ncomp = this->getNComp();
#ifdef AMREX_USE_EB
if (!fres.isAllRegular()) {
if constexpr (std::is_same<MF,MultiFab>()) {
Expand Down

0 comments on commit 8692eab

Please sign in to comment.