1 #ifndef ERF_LANDSURFACE_H
2 #define ERF_LANDSURFACE_H
6 #include <AMReX_PlotFileUtil.H>
7 #include <AMReX_MultiFabUtil.H>
28 template<
class NewSurfModel>
33 m_lsm_model[lev] = std::make_unique<NewSurfModel>();
46 const amrex::MultiFab& cons_in,
47 const amrex::Geometry& geom,
48 const amrex::Geometry& geom0,
49 amrex::Vector<amrex::BCRec>& domain_bcs_type,
50 amrex::IntVect& refRatio,
52 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
55 domain_bcs_type, refRatio,
56 dt_advance, nc_init_file);
61 amrex::MultiFab& cons_in,
62 amrex::MultiFab& xvel_in,
63 amrex::MultiFab& yvel_in,
64 amrex::MultiFab* hfx3_out,
65 amrex::MultiFab* qfx3_out,
68 const double& dt_advance_d,
70 const bool updated_lev0)
74 m_lsm_model[lev]->Advance_With_State(lev, cons_in, xvel_in, yvel_in,
77 time, dt_advance, nstep, updated_lev0);
81 Advance (
const int& lev,
const double& dt_advance_d)
88 Plot(
const int& lev,
const int& nstep)
111 std::string
name = varname;
113 return (index >= 0) ?
m_lsm_model[lev]->Lsm_Data_Ptr(index) :
nullptr;
134 amrex::Vector<std::string>
137 amrex::Vector<std::string> names;
142 names.reserve(
nvars);
143 for (
int var = 0; var <
nvars; ++var) {
157 for (
int varIdx(0); varIdx<ndata; ++varIdx) {
158 amrex::MultiFab* Lev0_Data_Ptr = this->
Get_Data_Ptr(0, varIdx);
159 m_lsm_model[lev]->Lsm_Set_Lev0_Data_Ptr(varIdx, Lev0_Data_Ptr);
162 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
177 for (
int varIdx(0); varIdx<nflux; ++varIdx) {
178 amrex::MultiFab* Lev0_Flux_Ptr = this->
Get_Flux_Ptr(0, varIdx);
179 m_lsm_model[lev]->Lsm_Set_Lev0_Flux_Ptr(varIdx, Lev0_Flux_Ptr);
182 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
189 std::unordered_map<std::string,std::string>&
210 const amrex::Vector<int> &level_steps,
211 const amrex::Vector<amrex::IntVect> &ref_ratio)
215 amrex::Vector<std::string> varnames;
219 varnames.resize(nvar);
222 std::string plotfilename = amrex::Concatenate(
plot_file_lsm, level_steps[0], 5);
223 for (
int lev(0); lev<nlev; ++lev) {
227 amrex::IntVect
ng(0,0,0);
228 amrex::BoxArray ba = mf_lsm->boxArray();
229 amrex::DistributionMapping dm = mf_lsm->DistributionMap();
231 for (
int n(0); n<nvar; ++n) {
237 WriteMultiLevelPlotfile (plotfilename, nlev, GetVecOfConstPtrs(
m_lsm_data_lev),
239 level_steps, ref_ratio);
245 template<
class SurfModelType>
247 return static_cast<SurfModelType*
>(
m_lsm_model[lev].get());
@ nvars
Definition: ERF_DataStruct.H:152
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:101
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_LandSurface.H:17
amrex::Vector< amrex::Geometry > m_lsm_geom_lev
Definition: ERF_LandSurface.H:258
std::unordered_map< std::string, std::string > & Get_WRFInputNames()
Definition: ERF_LandSurface.H:190
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:45
amrex::MultiFab * Get_Data_Ptr(const int &lev, const std::string &varname)
Definition: ERF_LandSurface.H:109
int Get_Data_Size()
Definition: ERF_LandSurface.H:126
amrex::Geometry Get_Lsm_Geom(const int &lev)
Definition: ERF_LandSurface.H:123
SurfModelType * get_model_lev(const int &lev)
Definition: ERF_LandSurface.H:246
void Read_Lsm_Restart(const int &lev, const std::string &dir)
Definition: ERF_LandSurface.H:206
int Get_FluxIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:170
void Plot(const int &lev, const int &nstep)
Definition: ERF_LandSurface.H:88
void Set_Lev0_Data_Ptr(const int &lev)
Definition: ERF_LandSurface.H:153
amrex::Vector< std::string > Get_DataNames()
Definition: ERF_LandSurface.H:135
void ReSize(const int &nlev)
Definition: ERF_LandSurface.H:26
amrex::Vector< amrex::MultiFab > m_lsm_data_lev
Definition: ERF_LandSurface.H:261
std::string Get_DataName(const int &varIdx)
Definition: ERF_LandSurface.H:132
int Get_LSM_Step(const int &lev) const
Definition: ERF_LandSurface.H:194
std::string Get_FluxName(const int &varIdx)
Definition: ERF_LandSurface.H:167
amrex::Vector< std::unique_ptr< NullSurf > > m_lsm_model
Definition: ERF_LandSurface.H:252
void Set_LSM_Step(const int &lev, int step)
Definition: ERF_LandSurface.H:197
void SetModel()
Definition: ERF_LandSurface.H:30
amrex::MultiFab * Get_Flux_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:120
void Advance(const int &lev, const double &dt_advance_d)
Definition: ERF_LandSurface.H:81
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:60
bool Get_LSM_Update_Status(const int &lev)
Definition: ERF_LandSurface.H:187
LandSurface()
Definition: ERF_LandSurface.H:21
void Set_Lev0_Flux_Ptr(const int &lev)
Definition: ERF_LandSurface.H:173
void Update_State_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:100
int Get_DataIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:150
void Plot_Lsm_Data(double time, const amrex::Vector< int > &level_steps, const amrex::Vector< amrex::IntVect > &ref_ratio)
Definition: ERF_LandSurface.H:209
void Define(const int &lev, SolverChoice &sc)
Definition: ERF_LandSurface.H:38
int Get_Flux_Size()
Definition: ERF_LandSurface.H:129
amrex::MultiFab * Get_Data_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:106
void Write_Lsm_Restart(const int &lev, const std::string &dir) const
Definition: ERF_LandSurface.H:203
bool Has_Model() const
Definition: ERF_LandSurface.H:117
std::string plot_file_lsm
Definition: ERF_LandSurface.H:255
void Update_Micro_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:94
@ ng
Definition: ERF_Morrison.H:49
Definition: ERF_DataStruct.H:241
Definition: ERF_SurfacePrecipitation.H:21