9 #include <AMReX_ParmParse.H>
10 #include <AMReX_Interpolater.H>
11 #include <AMReX_FillPatchUtil.H>
12 #include <AMReX_FArrayBox.H>
13 #include <AMReX_Geometry.H>
14 #include <AMReX_MultiFabUtil.H>
15 #include <AMReX_Vector.H>
16 #include <AMReX_MFIter.H>
17 #include <AMReX_VisMF.H>
18 #include <AMReX_Utility.H>
51 amrex::Array4<amrex::Real>
input;
58 using FabPtr = std::shared_ptr<amrex::MultiFab>;
77 const amrex::MultiFab& cons_in,
78 const amrex::Geometry& geom,
79 const amrex::Geometry& geom0,
80 amrex::Vector<amrex::BCRec>& domain_bcs_type,
81 amrex::IntVect& refRatio,
83 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
override;
88 amrex::MultiFab& cons_in,
89 amrex::MultiFab& xvel_in,
90 amrex::MultiFab& yvel_in,
91 amrex::MultiFab* hfx3_out,
92 amrex::MultiFab* qfx3_out,
97 const bool updated_lev0)
override;
147 std::string lc_varname = amrex::toLower(varname);
170 std::string lc_varname = amrex::toLower(varname);
181 amrex::MultiFab* lev0_data_ptr)
override
188 amrex::MultiFab* lev0_flux_ptr)
override
209 noahmpio.itimestep = step;
227 amrex::MultiFab& cons_in,
240 const amrex::Box& bx,
244 amrex::MultiFab& cons_in,
245 amrex::MultiFab& xvel_in,
246 amrex::MultiFab& yvel_in,
248 amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
249 amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
256 const amrex::Box& bx,
257 const amrex::Box& gbx,
258 amrex::MultiFab& cons_in);
280 const amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
281 const amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
294 amrex::ParmParse pp_nsoil(
"erf");
295 pp_nsoil.query(
"lsm_nsoil",
m_nsoil);
296 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
m_nsoil >= 1,
"erf.lsm_nsoil must be >= 1");
304 return dir +
"/precip_accum_prev_Level_" + std::to_string(l)
305 +
"_slot_" + std::to_string(s);
constexpr amrex::Real one
Definition: ERF_Constants.H:9
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:287
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NOAHMP.H:56
int Lsm_DataIndex(std::string varname) override
Definition: ERF_NOAHMP.H:144
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_NOAHMP.H:135
int khi_lsm
Definition: ERF_NOAHMP.H:356
bool m_nsoil_resolved
Definition: ERF_NOAHMP.H:291
NOAHMP()
Definition: ERF_NOAHMP.H:62
void Define(SolverChoice &) override
Definition: ERF_NOAHMP.H:69
std::string Lsm_FluxName(const int &varIdx) override
Definition: ERF_NOAHMP.H:158
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_NOAHMP.H:342
int m_plot_int_1
Definition: ERF_NOAHMP.H:401
void Plot_Landfile(const int &nstep) override
Definition: ERF_NOAHMP_IO.cpp:20
static std::string m_precip_snapshot_name(const std::string &dir, int l, int s)
Definition: ERF_NOAHMP.H:303
void Advance_With_State(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 amrex::Real &elapsed_time, const amrex::Real &dt, const int &nstep, const bool updated_lev0) override
Definition: ERF_NOAHMP_Advance.cpp:342
int Lsm_FluxIndex(std::string varname) override
Definition: ERF_NOAHMP.H:167
amrex::Array< amrex::MultiFab *, LsmFlux_NOAHMP::NumVars > lsm_lev0_flux
Definition: ERF_NOAHMP.H:375
amrex::Array< FabPtr, LsmFlux_NOAHMP::NumVars > lsm_fab_flux
Definition: ERF_NOAHMP.H:369
bool m_updated
Definition: ERF_NOAHMP.H:404
int Get_LSM_Step() const override
Definition: ERF_NOAHMP.H:199
void Write_Lsm_Restart(const std::string &dir) const override
Definition: ERF_NOAHMP_IO.cpp:30
amrex::Vector< std::string > LsmDataName
Definition: ERF_NOAHMP.H:324
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_NOAHMP.H:58
amrex::Vector< int > LsmDataMap
Definition: ERF_NOAHMP.H:318
void read_results(const amrex::MFIter &mfi, const erf_noahmp::NoahmpBlockViews &blk, const amrex::Box &bx, const amrex::Box &gbx, amrex::MultiFab &cons_in)
Definition: ERF_NOAHMP_Advance.cpp:207
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, amrex::Vector< amrex::Vector< std::string >> &nc_init_file) override
Definition: ERF_NOAHMP_Init.cpp:23
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_output_tmp
Definition: ERF_NOAHMP.H:386
int soil_data_idx(int g, int k) const
Definition: ERF_NOAHMP.H:285
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_input_tmp
Definition: ERF_NOAHMP.H:385
int m_nsoil
Definition: ERF_NOAHMP.H:379
int Lsm_Flux_Size() override
Definition: ERF_NOAHMP.H:131
bool Get_Update_Status() override
Definition: ERF_NOAHMP.H:194
int Lsm_Data_Size() override
Definition: ERF_NOAHMP.H:127
amrex::Geometry Lsm_Geom() override
Definition: ERF_NOAHMP.H:122
amrex::IntVect m_refRatio
Definition: ERF_NOAHMP.H:339
void Read_Lsm_Restart(const std::string &dir) override
Definition: ERF_NOAHMP_IO.cpp:49
amrex::Vector< FabPtr > lsm_fab_data
Definition: ERF_NOAHMP.H:366
NoahmpIO_vector noahmpio_vect
Definition: ERF_NOAHMP.H:382
int m_lsm_data_size
Definition: ERF_NOAHMP.H:312
erf_noahmp::PrecipSlots collect_precip_sources(const SurfacePrecipAccumulationSources &precip_sources)
Definition: ERF_NOAHMP_Precip.cpp:20
void report_precip_diagnostics(const int &lev, const amrex::Vector< erf_noahmp::ClampedPrecipCell > &clamped_cells, const amrex::Vector< erf_noahmp::InvariantPrecipCell > &invariant_cells)
Definition: ERF_NOAHMP_Precip.cpp:80
virtual ~NOAHMP()=default
int m_lev
Definition: ERF_NOAHMP.H:398
amrex::Geometry m_lsm_geom
Definition: ERF_NOAHMP.H:336
int m_itimestep
Definition: ERF_NOAHMP.H:349
amrex::Geometry m_geom0
Definition: ERF_NOAHMP.H:333
void stage_forcing(const amrex::MFIter &mfi, const erf_noahmp::NoahmpBlockViews &blk, const amrex::Box &bx, const int &klo, const int &lev, const bool is_moist, amrex::MultiFab &cons_in, amrex::MultiFab &xvel_in, amrex::MultiFab &yvel_in, const erf_noahmp::PrecipSlots &precip, amrex::Vector< erf_noahmp::ClampedPrecipCell > &clamped_cells, amrex::Vector< erf_noahmp::InvariantPrecipCell > &invariant_cells)
Definition: ERF_NOAHMP_Advance.cpp:76
void prepare_precip_snapshots(const int &lev, const erf_noahmp::PrecipSlots &precip)
Definition: ERF_NOAHMP_Precip.cpp:38
bool m_has_nc_file
Definition: ERF_NOAHMP.H:407
int m_nz_lsm
Definition: ERF_NOAHMP.H:359
amrex::Vector< amrex::MultiFab * > lsm_lev0_data
Definition: ERF_NOAHMP.H:372
int m_lsm_flux_size
Definition: ERF_NOAHMP.H:315
amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > > m_precip_accum_prev
Definition: ERF_NOAHMP.H:391
amrex::Real m_dtbl
Definition: ERF_NOAHMP.H:353
void interp_from_lev0(const int &lev, amrex::MultiFab &cons_in, const int &nstep)
Definition: ERF_NOAHMP_Advance.cpp:24
void Lsm_Set_Lev0_Flux_Ptr(const int &varIdx, amrex::MultiFab *lev0_flux_ptr) override
Definition: ERF_NOAHMP.H:187
amrex::Vector< int > LsmFluxMap
Definition: ERF_NOAHMP.H:321
void Lsm_Set_Lev0_Data_Ptr(const int &varIdx, amrex::MultiFab *lev0_data_ptr) override
Definition: ERF_NOAHMP.H:180
void Set_LSM_Step(int step) override
Definition: ERF_NOAHMP.H:205
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:104
amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > m_precip_accum_restored
Definition: ERF_NOAHMP.H:395
void m_ensure_nsoil_resolved()
Definition: ERF_NOAHMP.H:292
amrex::Vector< std::string > LsmFluxName
Definition: ERF_NOAHMP.H:327
void advance_precip_snapshots(const int &lev, const erf_noahmp::PrecipSlots &precip)
Definition: ERF_NOAHMP_Precip.cpp:66
amrex::Geometry m_geom
Definition: ERF_NOAHMP.H:330
bool time_to_fire(const amrex::Real &elapsed_time)
Definition: ERF_NOAHMP_Advance.cpp:59
amrex::Real m_dz_lsm
Definition: ERF_NOAHMP.H:362
amrex::MultiFab * Lsm_Flux_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:113
amrex::Real m_dt
Definition: ERF_NOAHMP.H:345
Definition: ERF_NullSurf.H:10
@ NumVars
Definition: ERF_NOAHMP_Fields.H:120
@ NumVars
Definition: ERF_NOAHMP_Fields.H:133
@ NumSlots
Definition: ERF_NOAHMP_Fields.H:146
Definition: ERF_NOAHMP.H:30
real(c_double), parameter g
Definition: ERF_module_model_constants.F90:19
Definition: ERF_DataStruct.H:141
Definition: ERF_SurfacePrecipitation.H:21
Definition: ERF_NOAHMP.H:41
int i
Definition: ERF_NOAHMP.H:41
amrex::Real raw_mm
Definition: ERF_NOAHMP.H:41
int j
Definition: ERF_NOAHMP.H:41
Definition: ERF_NOAHMP.H:45
int j
Definition: ERF_NOAHMP.H:45
amrex::Real froz_mm
Definition: ERF_NOAHMP.H:45
amrex::Real total_mm
Definition: ERF_NOAHMP.H:45
int i
Definition: ERF_NOAHMP.H:45
Definition: ERF_NOAHMP.H:49
NoahmpIO_type * io
Definition: ERF_NOAHMP.H:50
amrex::Array4< amrex::Real > output
Definition: ERF_NOAHMP.H:52
amrex::Array4< amrex::Real > input
Definition: ERF_NOAHMP.H:51
Definition: ERF_NOAHMP.H:33
bool have_any
Definition: ERF_NOAHMP.H:37
bool has[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:36
const amrex::MultiFab * accum[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:34
amrex::Real factor[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:35