1 #ifndef ERF_LANDSURFACE_H
2 #define ERF_LANDSURFACE_H
6 #include <AMReX_PlotFileUtil.H>
7 #include <AMReX_MultiFabUtil.H>
29 template<
class NewSurfModel>
34 m_lsm_model[lev] = std::make_unique<NewSurfModel>();
47 const amrex::MultiFab& cons_in,
48 const amrex::Geometry& geom,
49 const amrex::Geometry& geom0,
50 amrex::Vector<amrex::BCRec>& domain_bcs_type,
51 amrex::IntVect& refRatio,
53 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
56 domain_bcs_type, refRatio,
57 dt_advance, nc_init_file);
62 amrex::MultiFab& cons_in,
63 amrex::MultiFab& xvel_in,
64 amrex::MultiFab& yvel_in,
65 amrex::MultiFab* hfx3_out,
66 amrex::MultiFab* qfx3_out,
69 const double& dt_advance_d,
71 const bool updated_lev0)
75 m_lsm_model[lev]->Advance_With_State(lev, cons_in, xvel_in, yvel_in,
78 time, dt_advance, nstep, updated_lev0);
82 Advance (
const int& lev,
const double& dt_advance_d)
89 Plot(
const int& lev,
const int& nstep)
112 std::string
name = varname;
114 return (index >= 0) ?
m_lsm_model[lev]->Lsm_Data_Ptr(index) :
nullptr;
135 amrex::Vector<std::string>
138 amrex::Vector<std::string> names;
143 names.reserve(
nvars);
144 for (
int var = 0; var <
nvars; ++var) {
158 for (
int varIdx(0); varIdx<ndata; ++varIdx) {
159 amrex::MultiFab* Lev0_Data_Ptr = this->
Get_Data_Ptr(0, varIdx);
160 m_lsm_model[lev]->Lsm_Set_Lev0_Data_Ptr(varIdx, Lev0_Data_Ptr);
163 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
178 for (
int varIdx(0); varIdx<nflux; ++varIdx) {
179 amrex::MultiFab* Lev0_Flux_Ptr = this->
Get_Flux_Ptr(0, varIdx);
180 m_lsm_model[lev]->Lsm_Set_Lev0_Flux_Ptr(varIdx, Lev0_Flux_Ptr);
183 amrex::Abort(
"Differing types of land surface models across levels is not supported!");
190 std::unordered_map<std::string,std::string>&
211 const amrex::Vector<int> &level_steps,
212 const amrex::Vector<amrex::IntVect> &ref_ratio)
216 amrex::Vector<std::string> varnames;
220 varnames.resize(nvar);
223 std::string plotfilename = amrex::Concatenate(
plot_file_lsm, level_steps[0], 5);
224 for (
int lev(0); lev<nlev; ++lev) {
228 amrex::IntVect
ng(0,0,0);
229 amrex::BoxArray ba = mf_lsm->boxArray();
230 amrex::DistributionMapping dm = mf_lsm->DistributionMap();
232 for (
int n(0); n<nvar; ++n) {
238 WriteMultiLevelPlotfile (plotfilename, nlev, GetVecOfConstPtrs(
m_lsm_data_lev),
240 level_steps, ref_ratio);
246 template<
class SurfModelType>
248 return static_cast<SurfModelType*
>(
m_lsm_model[lev].get());
@ nvars
Definition: ERF_DataStruct.H:98
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:97
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_LandSurface.H:18
amrex::Vector< amrex::Geometry > m_lsm_geom_lev
Definition: ERF_LandSurface.H:259
std::unordered_map< std::string, std::string > & Get_WRFInputNames()
Definition: ERF_LandSurface.H:191
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:46
amrex::MultiFab * Get_Data_Ptr(const int &lev, const std::string &varname)
Definition: ERF_LandSurface.H:110
int Get_Data_Size()
Definition: ERF_LandSurface.H:127
amrex::Geometry Get_Lsm_Geom(const int &lev)
Definition: ERF_LandSurface.H:124
SurfModelType * get_model_lev(const int &lev)
Definition: ERF_LandSurface.H:247
void Read_Lsm_Restart(const int &lev, const std::string &dir)
Definition: ERF_LandSurface.H:207
int Get_FluxIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:171
void Plot(const int &lev, const int &nstep)
Definition: ERF_LandSurface.H:89
void Set_Lev0_Data_Ptr(const int &lev)
Definition: ERF_LandSurface.H:154
amrex::Vector< std::string > Get_DataNames()
Definition: ERF_LandSurface.H:136
void ReSize(const int &nlev)
Definition: ERF_LandSurface.H:27
amrex::Vector< amrex::MultiFab > m_lsm_data_lev
Definition: ERF_LandSurface.H:262
std::string Get_DataName(const int &varIdx)
Definition: ERF_LandSurface.H:133
int Get_LSM_Step(const int &lev) const
Definition: ERF_LandSurface.H:195
std::string Get_FluxName(const int &varIdx)
Definition: ERF_LandSurface.H:168
amrex::Vector< std::unique_ptr< NullSurf > > m_lsm_model
Definition: ERF_LandSurface.H:253
void Set_LSM_Step(const int &lev, int step)
Definition: ERF_LandSurface.H:198
void SetModel()
Definition: ERF_LandSurface.H:31
amrex::MultiFab * Get_Flux_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:121
void Advance(const int &lev, const double &dt_advance_d)
Definition: ERF_LandSurface.H:82
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:61
bool Get_LSM_Update_Status(const int &lev)
Definition: ERF_LandSurface.H:188
LandSurface()
Definition: ERF_LandSurface.H:22
void Set_Lev0_Flux_Ptr(const int &lev)
Definition: ERF_LandSurface.H:174
void Update_State_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:101
int Get_DataIdx(const int &lev, std::string &varname)
Definition: ERF_LandSurface.H:151
void Plot_Lsm_Data(double time, const amrex::Vector< int > &level_steps, const amrex::Vector< amrex::IntVect > &ref_ratio)
Definition: ERF_LandSurface.H:210
void Define(const int &lev, SolverChoice &sc)
Definition: ERF_LandSurface.H:39
int Get_Flux_Size()
Definition: ERF_LandSurface.H:130
amrex::MultiFab * Get_Data_Ptr(const int &lev, const int &varIdx)
Definition: ERF_LandSurface.H:107
void Write_Lsm_Restart(const int &lev, const std::string &dir) const
Definition: ERF_LandSurface.H:204
bool Has_Model() const
Definition: ERF_LandSurface.H:118
std::string plot_file_lsm
Definition: ERF_LandSurface.H:256
void Update_Micro_Vars_Lev(const int &lev, amrex::MultiFab &cons_in)
Definition: ERF_LandSurface.H:95
@ ng
Definition: ERF_Morrison.H:49
Definition: ERF_DataStruct.H:141
Definition: ERF_SurfacePrecipitation.H:21