10 #include <AMReX_ParmParse.H>
11 #include <AMReX_Interpolater.H>
12 #include <AMReX_FillPatchUtil.H>
13 #include <AMReX_FArrayBox.H>
14 #include <AMReX_Geometry.H>
15 #include <AMReX_MultiFabUtil.H>
16 #include <AMReX_Vector.H>
17 #include <AMReX_MFIter.H>
18 #include <AMReX_VisMF.H>
19 #include <AMReX_Utility.H>
52 amrex::Array4<amrex::Real>
input;
59 using FabPtr = std::shared_ptr<amrex::MultiFab>;
78 const amrex::MultiFab& cons_in,
79 const amrex::Geometry& geom,
80 const amrex::Geometry& geom0,
81 amrex::Vector<amrex::BCRec>& domain_bcs_type,
82 amrex::IntVect& refRatio,
84 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
override;
89 amrex::MultiFab& cons_in,
90 amrex::MultiFab& xvel_in,
91 amrex::MultiFab& yvel_in,
92 amrex::MultiFab* hfx3_out,
93 amrex::MultiFab* qfx3_out,
98 const bool updated_lev0)
override;
148 std::string lc_varname = amrex::toLower(varname);
171 std::string lc_varname = amrex::toLower(varname);
182 amrex::MultiFab* lev0_data_ptr)
override
190 amrex::MultiFab* lev0_flux_ptr)
override
212 noahmpio.itimestep = step;
230 amrex::MultiFab& cons_in,
243 const amrex::Box& bx,
247 amrex::MultiFab& cons_in,
248 amrex::MultiFab& xvel_in,
249 amrex::MultiFab& yvel_in,
251 amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
252 amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
259 const amrex::Box& bx,
260 const amrex::Box& gbx,
261 amrex::MultiFab& cons_in);
283 const amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
284 const amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
300 amrex::ParmParse pp_nsoil(
"erf");
301 pp_nsoil.query(
"lsm_nsoil",
m_nsoil);
310 return dir +
"/precip_accum_prev_Level_" + std::to_string(l)
311 +
"_slot_" + std::to_string(s);
319 void with_land_comm (
const std::function<
void(NoahmpIO_type&)>& fn)
const;
constexpr amrex::Real one
Definition: ERF_Constants.H:9
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:365
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NOAHMP.H:57
int Lsm_DataIndex(std::string varname) override
Definition: ERF_NOAHMP.H:145
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_NOAHMP.H:136
int khi_lsm
Definition: ERF_NOAHMP.H:367
bool m_nsoil_resolved
Definition: ERF_NOAHMP.H:297
NOAHMP()
Definition: ERF_NOAHMP.H:63
void Define(SolverChoice &) override
Definition: ERF_NOAHMP.H:70
std::string Lsm_FluxName(const int &varIdx) override
Definition: ERF_NOAHMP.H:159
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_NOAHMP.H:353
void Plot_Landfile(const int &nstep) override
Definition: ERF_NOAHMP_IO.cpp:46
static std::string m_precip_snapshot_name(const std::string &dir, int l, int s)
Definition: ERF_NOAHMP.H:309
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:168
amrex::Array< amrex::MultiFab *, LsmFlux_NOAHMP::NumVars > lsm_lev0_flux
Definition: ERF_NOAHMP.H:386
amrex::Array< FabPtr, LsmFlux_NOAHMP::NumVars > lsm_fab_flux
Definition: ERF_NOAHMP.H:380
bool m_updated
Definition: ERF_NOAHMP.H:412
int Get_LSM_Step() const override
Definition: ERF_NOAHMP.H:202
void Write_Lsm_Restart(const std::string &dir) const override
Definition: ERF_NOAHMP_IO.cpp:54
amrex::Vector< std::string > LsmDataName
Definition: ERF_NOAHMP.H:335
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_NOAHMP.H:59
amrex::Vector< int > LsmDataMap
Definition: ERF_NOAHMP.H:329
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:22
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_output_tmp
Definition: ERF_NOAHMP.H:397
int soil_data_idx(int g, int k) const
Definition: ERF_NOAHMP.H:291
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_input_tmp
Definition: ERF_NOAHMP.H:396
int m_nsoil
Definition: ERF_NOAHMP.H:390
int Lsm_Flux_Size() override
Definition: ERF_NOAHMP.H:132
bool Get_Update_Status() override
Definition: ERF_NOAHMP.H:197
int Lsm_Data_Size() override
Definition: ERF_NOAHMP.H:128
amrex::Geometry Lsm_Geom() override
Definition: ERF_NOAHMP.H:123
amrex::IntVect m_refRatio
Definition: ERF_NOAHMP.H:350
void Read_Lsm_Restart(const std::string &dir) override
Definition: ERF_NOAHMP_IO.cpp:73
amrex::Vector< FabPtr > lsm_fab_data
Definition: ERF_NOAHMP.H:377
NoahmpIO_vector noahmpio_vect
Definition: ERF_NOAHMP.H:393
int m_lsm_data_size
Definition: ERF_NOAHMP.H:323
erf_noahmp::PrecipSlots collect_precip_sources(const SurfacePrecipAccumulationSources &precip_sources)
Definition: ERF_NOAHMP_Precip.cpp:20
void with_land_comm(const std::function< void(NoahmpIO_type &)> &fn) const
Definition: ERF_NOAHMP_IO.cpp:19
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:409
amrex::Geometry m_lsm_geom
Definition: ERF_NOAHMP.H:347
int m_itimestep
Definition: ERF_NOAHMP.H:360
amrex::Geometry m_geom0
Definition: ERF_NOAHMP.H:344
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:415
int m_nz_lsm
Definition: ERF_NOAHMP.H:370
amrex::Vector< amrex::MultiFab * > lsm_lev0_data
Definition: ERF_NOAHMP.H:383
int m_lsm_flux_size
Definition: ERF_NOAHMP.H:326
amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > > m_precip_accum_prev
Definition: ERF_NOAHMP.H:402
amrex::Real m_dtbl
Definition: ERF_NOAHMP.H:364
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:189
amrex::Vector< int > LsmFluxMap
Definition: ERF_NOAHMP.H:332
void Lsm_Set_Lev0_Data_Ptr(const int &varIdx, amrex::MultiFab *lev0_data_ptr) override
Definition: ERF_NOAHMP.H:181
void Set_LSM_Step(int step) override
Definition: ERF_NOAHMP.H:208
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:105
static constexpr int m_num_soil_groups
Definition: ERF_NOAHMP.H:287
amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > m_precip_accum_restored
Definition: ERF_NOAHMP.H:406
void m_ensure_nsoil_resolved()
Definition: ERF_NOAHMP.H:298
amrex::Vector< std::string > LsmFluxName
Definition: ERF_NOAHMP.H:338
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:341
bool time_to_fire(const amrex::Real &elapsed_time)
Definition: ERF_NOAHMP_Advance.cpp:59
amrex::Real m_dz_lsm
Definition: ERF_NOAHMP.H:373
amrex::MultiFab * Lsm_Flux_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:114
amrex::Real m_dt
Definition: ERF_NOAHMP.H:356
Definition: ERF_NullSurf.H:10
@ NumVars
Definition: ERF_NOAHMP_Fields.H:109
@ NumVars
Definition: ERF_NOAHMP_Fields.H:122
@ NumSlots
Definition: ERF_NOAHMP_Fields.H:135
Definition: ERF_NOAHMP.H:31
real(c_double), parameter g
Definition: ERF_module_model_constants.F90:19
Definition: ERF_DataStruct.H:241
Definition: ERF_SurfacePrecipitation.H:21
Definition: ERF_NOAHMP.H:42
int i
Definition: ERF_NOAHMP.H:42
amrex::Real raw_mm
Definition: ERF_NOAHMP.H:42
int j
Definition: ERF_NOAHMP.H:42
Definition: ERF_NOAHMP.H:46
int j
Definition: ERF_NOAHMP.H:46
amrex::Real froz_mm
Definition: ERF_NOAHMP.H:46
amrex::Real total_mm
Definition: ERF_NOAHMP.H:46
int i
Definition: ERF_NOAHMP.H:46
Definition: ERF_NOAHMP.H:50
NoahmpIO_type * io
Definition: ERF_NOAHMP.H:51
amrex::Array4< amrex::Real > output
Definition: ERF_NOAHMP.H:53
amrex::Array4< amrex::Real > input
Definition: ERF_NOAHMP.H:52
Definition: ERF_NOAHMP.H:34
bool have_any
Definition: ERF_NOAHMP.H:38
bool has[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:37
const amrex::MultiFab * accum[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:35
amrex::Real factor[NoahmpPrecipSlot::NumSlots]
Definition: ERF_NOAHMP.H:36