Skip to content

Commit

Permalink
Merge branch 'feature/ismr' of github:afd-illinois/kharma into featur…
Browse files Browse the repository at this point in the history
…e/ismr
  • Loading branch information
bprather committed Oct 2, 2024
2 parents 570a921 + bca3373 commit 99b5b78
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 20 deletions.
3 changes: 1 addition & 2 deletions kharma/b_ct/b_ct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -499,9 +499,8 @@ TaskStatus B_CT::DerefinePoles(MeshData<Real> *md)
// TODO also get ranges in cells from the beginning rather than using j_p & calculating j_c
IndexRange3 bCC = KDomain::GetRange(rc, IndexDomain::interior, CC);
IndexRange3 bF1 = KDomain::GetRange(rc, domain, F1, ng, -ng);
IndexRange3 bF2 = KDomain::GetRange(rc, domain, F2, (binner) ? 0 : -1, (binner) ? 1 : 0, false);
IndexRange3 bF3 = KDomain::GetRange(rc, domain, F3, ng, -ng);
const int j_f = (binner) ? bF2.je : bF2.js; // last physical face
const int j_f = (binner) ? bCC.js : bCC.je + 1; // last physical face
const int jps = (binner) ? j_f + (nlevels - 1) : j_f - (nlevels - 1); // start of the lowest level of derefinement
const IndexRange j_p = IndexRange{(binner) ? j_f : jps, (binner) ? jps : j_f}; // Range of x2 to be de-refined
const int offset = (binner) ? 1 : -1; // offset to read the physical face values
Expand Down
12 changes: 8 additions & 4 deletions kharma/driver/kharma_step.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,14 @@ TaskCollection KHARMADriver::MakeDefaultTaskCollection(BlockList_t &blocks, int

auto t_step_done = t_ptou;
if (pkgs.count("ISMR")) {
auto t_derefine_b = t_ptou;
if (pkgs.count("B_CT"))
t_derefine_b = tl.AddTask(t_ptou, B_CT::DerefinePoles, md_sub_step_final.get());
t_step_done = tl.AddTask(t_derefine_b, ISMR::DerefinePoles, md_sub_step_final.get());
if (pkgs.at("ISMR")->Param<uint>("nlevels") > 0) {
auto t_derefine_b = t_ptou;
if (pkgs.count("B_CT"))
t_derefine_b = tl.AddTask(t_ptou, B_CT::DerefinePoles, md_sub_step_final.get());
auto t_derefine_f = tl.AddTask(t_derefine_b, ISMR::DerefinePoles, md_sub_step_final.get());
auto t_floors_2 = tl.AddTask(t_derefine_f, Packages::MeshApplyFloors, md_sub_step_final.get(), IndexDomain::entire);
t_step_done = tl.AddTask(t_floors_2, Inverter::MeshFixUtoP, md_sub_step_final.get());
}
}

// Estimate next time step based on ctop
Expand Down
14 changes: 4 additions & 10 deletions kharma/flux/reconstruction.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -617,28 +617,22 @@ KOKKOS_FORCEINLINE_FUNCTION void ReconstructRow(parthenon::team_mbr_t& member, c
}

// Reconstruct with ismr:
// Linear X3 & X1 reconstruction near X2 boundaries, but otherwise call through
// Linear X3 reconstruction near X2 boundaries, but otherwise call through
// TODO higher-order with spacing of the coarse cells? Would need new ReconstructXN+no DC/VL support
template <Type recon_type, int dir>
KOKKOS_INLINE_FUNCTION void ReconstructRowIsmr(parthenon::team_mbr_t& member, const VariablePack<Real> &P,
const int& k, const int& j, const int& is_l, const int& ie_l, const int& ng_plus_nlevels,
ScratchPad2D<Real> ql, ScratchPad2D<Real> qr)
{
if constexpr (dir == X1DIR) {
if (j < ng_plus_nlevels || j > P.GetDim(2) - 1 - ng_plus_nlevels) {
KReconstruction::ReconstructX1<Type::linear_mc>(member, k, j, is_l, ie_l, P, ql, qr);
} else {
KReconstruction::ReconstructRow<recon_type, dir>(member, P, k, j, is_l, ie_l, ql, qr);
}
} else if constexpr (dir == X2DIR) {
ReconstructRow<recon_type, dir>(member, P, k, j, is_l, ie_l, ql, qr);
} else {
if constexpr (dir == X3DIR) {
if (j < ng_plus_nlevels || j > P.GetDim(2) - 1 - ng_plus_nlevels) {
KReconstruction::ReconstructX3l<Type::linear_mc>(member, k - 1, j, is_l, ie_l, P, ql);
KReconstruction::ReconstructX3r<Type::linear_mc>(member, k, j, is_l, ie_l, P, qr);
} else {
ReconstructRow<recon_type, dir>(member, P, k, j, is_l, ie_l, ql, qr);
}
} else {
ReconstructRow<recon_type, dir>(member, P, k, j, is_l, ie_l, ql, qr);
}
}

Expand Down
11 changes: 7 additions & 4 deletions kharma/ismr/ismr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ std::shared_ptr<KHARMAPackage> ISMR::Initialize(ParameterInput *pin, std::shared

// ISMR cache: not evolved, immediately copied to fluid state after averaging
// Must be total size of variable list
int nvar = KHARMA::PackDimension(packages.get(), Metadata::WithFluxes);
using FC = Metadata::FlagCollection;
FC fluid_vars = FC({Metadata::Conserved, Metadata::Cell, Metadata::Independent});
int nvar = KHARMA::PackDimension(packages.get(), fluid_vars);
std::vector<int> s_avg({nvar});
auto m = Metadata({Metadata::Real, Metadata::Cell, Metadata::Derived, Metadata::OneCopy}, s_avg);
pkg->AddField("ismr.vars_avg", m);
Expand All @@ -73,6 +75,7 @@ std::shared_ptr<KHARMAPackage> ISMR::Initialize(ParameterInput *pin, std::shared

TaskStatus ISMR::DerefinePoles(MeshData<Real> *md)
{
Flag("ISMR_DerefinePoles");
// TODO this routine only applies to polar boundaries for now.
auto pmesh = md->GetMeshPointer();
const uint nlevels = pmesh->packages.Get("ISMR")->Param<uint>("nlevels");
Expand All @@ -82,7 +85,7 @@ TaskStatus ISMR::DerefinePoles(MeshData<Real> *md)
for (auto &pmb : pmesh->block_list) {
auto& rc = pmb->meshblock_data.Get();
PackIndexMap cons_map;
auto vars = rc->PackVariables(std::vector<MetadataFlag>{Metadata::Conserved, Metadata::Cell}, cons_map);
auto vars = rc->PackVariables(std::vector<MetadataFlag>{Metadata::Conserved, Metadata::Cell, Metadata::Independent}, cons_map);
auto vars_avg = rc->PackVariables(std::vector<std::string>{"ismr.vars_avg"});
const int nvar = vars.GetDim(4);
for (int i = 0; i < BOUNDARY_NFACES; i++) {
Expand All @@ -93,9 +96,8 @@ TaskStatus ISMR::DerefinePoles(MeshData<Real> *md)
if (bdir == X2DIR && pmb->boundary_flag[bface] == BoundaryFlag::user) {
// indices
IndexRange3 bCC = KDomain::GetRange(rc, IndexDomain::interior, CC);
IndexRange3 bF2 = KDomain::GetBoundaryRange(rc, domain, F2);
// last physical face
const int j_f = (binner) ? bF2.je : bF2.js;
const int j_f = (binner) ? bCC.js : bCC.je + 1;
// start of the lowest level of derefinement
const int jps = (binner) ? j_f + (nlevels - 1) : j_f - (nlevels - 1);
// Range of x2 to be de-refined
Expand Down Expand Up @@ -156,5 +158,6 @@ TaskStatus ISMR::DerefinePoles(MeshData<Real> *md)
}
}
}
EndFlag();
return TaskStatus::complete;
}

0 comments on commit 99b5b78

Please sign in to comment.