ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_MakeNewLevel.cpp File Reference
#include <memory>
#include "ERF_Constants.H"
#include "AMReX_buildInfo.H"
#include "ERF.H"
#include "ERF_Utils.H"
#include "ERF_ProbCommon.H"
#include "ERF_SBMStateManager.H"
#include "ERF_SBMTransport.H"
Include dependency graph for ERF_MakeNewLevel.cpp:

Functions

static Vector< std::unique_ptr< MultiFab > > save_qmoist_restart_vars (const Vector< MultiFab * > &qmoist_lev, const std::vector< int > &idx)
 
static void fill_qmoist_restart_var (MultiFab &dst, const MultiFab *old_mf, const MultiFab *crse_mf, const Geometry &crse_geom, const Geometry &fine_geom, const IntVect &ratio)
 

Function Documentation

◆ fill_qmoist_restart_var()

static void fill_qmoist_restart_var ( MultiFab &  dst,
const MultiFab *  old_mf,
const MultiFab *  crse_mf,
const Geometry &  crse_geom,
const Geometry &  fine_geom,
const IntVect &  ratio 
)
static
486 {
487  const int ncomp = dst.nComp();
488  if (crse_mf != nullptr) {
489  MultiFab tmp(dst.boxArray(), dst.DistributionMap(), ncomp, 0);
490  Vector<BCRec> bcs(ncomp); // unused by pc_interp, which needs no coarse ghost cells
491  for (int n = 0; n < ncomp; ++n) {
492  for (int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
493  bcs[n].setLo(dir, BCType::foextrap);
494  bcs[n].setHi(dir, BCType::foextrap);
495  }
496  }
497  InterpFromCoarseLevel(tmp, IntVect(0), IntVect(0), *crse_mf, 0, 0, ncomp,
498  crse_geom, fine_geom, ratio, &pc_interp, bcs, 0);
499  const int klo = fine_geom.Domain().smallEnd(2);
500  for (MFIter mfi(dst, TilingIfNotGPU()); mfi.isValid(); ++mfi) {
501  Box bx = mfi.tilebox();
502  if (bx.smallEnd(2) > klo) { continue; }
503  bx.setBig(2, klo);
504  const auto& dst_arr = dst.array(mfi);
505  const auto& tmp_arr = tmp.const_array(mfi);
506  ParallelFor(bx, ncomp, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
507  {
508  dst_arr(i,j,k,n) = tmp_arr(i,j,k,n);
509  });
510  }
511  }
512  if (old_mf != nullptr) { dst.ParallelCopy(*old_mf, 0, 0, ncomp); }
513  dst.FillBoundary(fine_geom.periodicity());
514 }
const int klo
Definition: ERF_InitCustomPert_KE.H:9
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
@ foextrap
Definition: ERF_IndexDefines.H:339
@ tmp
Definition: ERF_AdvanceWSM6.cpp:116

Referenced by ERF::MakeNewLevelFromCoarse(), and ERF::RemakeLevel().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ save_qmoist_restart_vars()

static Vector<std::unique_ptr<MultiFab> > save_qmoist_restart_vars ( const Vector< MultiFab * > &  qmoist_lev,
const std::vector< int > &  idx 
)
static
468 {
469  Vector<std::unique_ptr<MultiFab>> saved;
470  for (int i : idx) {
471  const MultiFab* src = (i < qmoist_lev.size()) ? qmoist_lev[i] : nullptr;
472  if (src == nullptr) { saved.push_back(nullptr); continue; }
473  saved.push_back(std::make_unique<MultiFab>(src->boxArray(), src->DistributionMap(),
474  src->nComp(), 0));
475  MultiFab::Copy(*saved.back(), *src, 0, 0, src->nComp(), 0);
476  }
477  return saved;
478 }
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:404

Referenced by ERF::RemakeLevel().

Here is the call graph for this function:
Here is the caller graph for this function: