1 #ifndef ERF_LANDSURFACE_H
2 #define ERF_LANDSURFACE_H
6 #include <AMReX_PlotFileUtil.H>
7 #include <AMReX_MultiFabUtil.H>
30 template<
class NewSurfModel>
35 m_lsm_model[lev] = std::make_unique<NewSurfModel>();
48 const amrex::MultiFab& cons_in,
49 const amrex::Geometry& geom,
50 const amrex::Geometry& geom0,
51 amrex::Vector<amrex::BCRec>& domain_bcs_type,
52 amrex::IntVect& refRatio,
54 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
57 domain_bcs_type, refRatio,
58 dt_advance, nc_init_file);
63 amrex::MultiFab& cons_in,
64 amrex::MultiFab& xvel_in,
65 amrex::MultiFab& yvel_in,
66 amrex::MultiFab* hfx3_out,
67 amrex::MultiFab* qfx3_out,
70 const double& dt_advance_d,
72 const bool updated_lev0)
76 m_lsm_model[lev]->Advance_With_State(lev, cons_in, xvel_in, yvel_in,
79 time, dt_advance, nstep, updated_lev0);
83 Advance (
const int& lev,
const double& dt_advance_d)
90 Plot(
const int& lev,
const int& nstep)
113 std::string
name = varname;
115 return (index >= 0) ?
m_lsm_model[lev]->Lsm_Data_Ptr(index) :
nullptr;
136 amrex::Vector<std::string>
139 amrex::Vector<std::string> names;
144 names.reserve(
nvars);
145 for (
int var = 0; var <
nvars; ++var) {
159 for (
int varIdx(0); varIdx<ndata; ++varIdx) {
160 amrex::MultiFab* Lev0_Data_Ptr = this->
Get_Data_Ptr(0, varIdx);
161 m_lsm_model[lev]->Lsm_Set_Lev0_Data_Ptr(varIdx, Lev0_Data_Ptr);
164 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
179 for (
int varIdx(0); varIdx<nflux; ++varIdx) {
180 amrex::MultiFab* Lev0_Flux_Ptr = this->
Get_Flux_Ptr(0, varIdx);
181 m_lsm_model[lev]->Lsm_Set_Lev0_Flux_Ptr(varIdx, Lev0_Flux_Ptr);
184 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
191 std::unordered_map<std::string,std::string>&
213 const amrex::Vector<int> &level_steps,
214 const amrex::Vector<amrex::IntVect> &ref_ratio)
220 int nlev = finest_level + 1;
222 amrex::Vector<std::string> varnames;
226 varnames.resize(nvar);
229 std::string plotfilename = amrex::Concatenate(
plot_file_lsm, level_steps[0], 5);
230 for (
int lev(0); lev<nlev; ++lev) {
234 amrex::IntVect
ng(0,0,0);
235 amrex::BoxArray ba = mf_lsm->boxArray();
236 amrex::DistributionMapping dm = mf_lsm->DistributionMap();
238 for (
int n(0); n<nvar; ++n) {
244 WriteMultiLevelPlotfile (plotfilename, nlev, GetVecOfConstPtrs(
m_lsm_data_lev),
246 level_steps, ref_ratio);
252 template<
class SurfModelType>
254 return static_cast<SurfModelType*
>(
m_lsm_model[lev].get());
@ nvars
Definition: ERF_DataStruct.H:153
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:101
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Wrapper class for managing land surface models across AMR levels.
Definition: ERF_LandSurface.H:19
amrex::Vector< amrex::Geometry > m_lsm_geom_lev
Definition: ERF_LandSurface.H:265
std::unordered_map< std::string, std::string > & Get_WRFInputNames()
Definition: ERF_LandSurface.H:192
void Init(const int &lev, const amrex::MultiFab &cons_in, const amrex::Geometry &geom, const amrex::Geometry &geom0, amrex::Vector< amrex::BCRec > &domain_bcs_type, amrex::IntVect &refRatio, const amrex::Real &dt_advance, amrex::Vector< amrex::Vector< std::string >> &nc_init_file)
Definition: ERF_LandSurface.H:47
amrex::MultiFab * Get_Data_Ptr(const int &lev, const std::string &varname)
Definition: ERF_LandSurface.H:111
int Get_Data_Size()
Definition: ERF_LandSurface.H:128
amrex::Geometry Get_Lsm_Geom(const int &lev)
Definition: ERF_LandSurface.H:125
SurfModelType * get_model_lev(const int &lev)
Definition: ERF_LandSurface.H:253
void Read_Lsm_Restart(const int &lev, const std::string &dir)
Definition: ERF_LandSurface.H:208
int Get_FluxIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:172
void Plot(const int &lev, const int &nstep)
Definition: ERF_LandSurface.H:90
void Set_Lev0_Data_Ptr(const int &lev)
Definition: ERF_LandSurface.H:155
amrex::Vector< std::string > Get_DataNames()
Definition: ERF_LandSurface.H:137
void ReSize(const int &nlev)
Definition: ERF_LandSurface.H:28
amrex::Vector< amrex::MultiFab > m_lsm_data_lev
Definition: ERF_LandSurface.H:268
std::string Get_DataName(const int &varIdx)
Definition: ERF_LandSurface.H:134
void Plot_Lsm_Data(double time, int finest_level, const amrex::Vector< int > &level_steps, const amrex::Vector< amrex::IntVect > &ref_ratio)
Definition: ERF_LandSurface.H:211
int Get_LSM_Step(const int &lev) const
Definition: ERF_LandSurface.H:196
std::string Get_FluxName(const int &varIdx)
Definition: ERF_LandSurface.H:169
amrex::Vector< std::unique_ptr< NullSurf > > m_lsm_model
Definition: ERF_LandSurface.H:259
void Set_LSM_Step(const int &lev, int step)
Definition: ERF_LandSurface.H:199
void SetModel()
Definition: ERF_LandSurface.H:32
amrex::MultiFab * Get_Flux_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:122
void Advance(const int &lev, const double &dt_advance_d)
Definition: ERF_LandSurface.H:83
void Advance(const int &lev, amrex::MultiFab &cons_in, amrex::MultiFab &xvel_in, amrex::MultiFab &yvel_in, amrex::MultiFab *hfx3_out, amrex::MultiFab *qfx3_out, const SurfacePrecipAccumulationSources &precip_sources, const double &time_d, const double &dt_advance_d, const int &nstep, const bool updated_lev0)
Definition: ERF_LandSurface.H:62
bool Get_LSM_Update_Status(const int &lev)
Definition: ERF_LandSurface.H:189
LandSurface()
Definition: ERF_LandSurface.H:23
void Set_Lev0_Flux_Ptr(const int &lev)
Definition: ERF_LandSurface.H:175
void Update_State_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:102
int Get_DataIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:152
void Define(const int &lev, SolverChoice &sc)
Definition: ERF_LandSurface.H:40
int Get_Flux_Size()
Definition: ERF_LandSurface.H:131
amrex::MultiFab * Get_Data_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:108
void Write_Lsm_Restart(const int &lev, const std::string &dir) const
Definition: ERF_LandSurface.H:205
bool Has_Model() const
Definition: ERF_LandSurface.H:119
std::string plot_file_lsm
Definition: ERF_LandSurface.H:262
void Update_Micro_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:96
@ ng
Definition: ERF_Morrison.H:49
Definition: ERF_DataStruct.H:634
Definition: ERF_SurfacePrecipitation.H:34