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>;
95 const amrex::MultiFab& cons_in,
96 const amrex::Geometry& geom,
97 const amrex::Geometry& geom0,
98 amrex::Vector<amrex::BCRec>& domain_bcs_type,
99 amrex::IntVect& refRatio,
101 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
override;
106 amrex::MultiFab& cons_in,
107 amrex::MultiFab& xvel_in,
108 amrex::MultiFab& yvel_in,
109 amrex::MultiFab* hfx3_out,
110 amrex::MultiFab* qfx3_out,
115 const bool updated_lev0,
116 amrex::MultiFab* z_nd)
override;
166 std::string lc_varname = amrex::toLower(varname);
189 std::string lc_varname = amrex::toLower(varname);
200 amrex::MultiFab* lev0_data_ptr)
override
208 amrex::MultiFab* lev0_flux_ptr)
override
230 noahmpio.itimestep = step;
248 amrex::MultiFab& cons_in,
261 const amrex::Box& bx,
265 amrex::MultiFab& cons_in,
266 amrex::MultiFab& xvel_in,
267 amrex::MultiFab& yvel_in,
268 amrex::MultiFab* z_nd,
270 amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
271 amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
278 const amrex::Box& bx,
279 const amrex::Box& gbx,
280 amrex::MultiFab& cons_in);
302 const amrex::Vector<erf_noahmp::ClampedPrecipCell>& clamped_cells,
303 const amrex::Vector<erf_noahmp::InvariantPrecipCell>& invariant_cells);
319 amrex::ParmParse pp_nsoil(
"erf");
320 pp_nsoil.queryAdd(
"lsm_nsoil",
m_nsoil);
329 return dir +
"/precip_accum_prev_Level_" + std::to_string(l)
330 +
"_slot_" + std::to_string(s);
338 void with_land_comm (
const std::function<
void(NoahmpIO_type&)>& fn)
const;
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
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:396
Dimensionless numeric literals and pure mathematical constants.
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NOAHMP.H:57
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_NOAHMP.H:154
int khi_lsm
Definition: ERF_NOAHMP.H:385
bool m_nsoil_resolved
Definition: ERF_NOAHMP.H:316
NOAHMP()
Definition: ERF_NOAHMP.H:67
std::string Lsm_FluxName(const int &varIdx) override
Definition: ERF_NOAHMP.H:177
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_NOAHMP.H:373
void Plot_Landfile(const int &nstep) override
Definition: ERF_NOAHMP_IO.cpp:46
virtual void Init(const int &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, amrex::Vector< amrex::Vector< std::string >> &)
Definition: ERF_NullSurf.H:27
static std::string m_precip_snapshot_name(const std::string &dir, int l, int s)
Definition: ERF_NOAHMP.H:328
bool m_idealized_init
Definition: ERF_NOAHMP.H:436
amrex::Array< amrex::MultiFab *, LsmFlux_NOAHMP::NumVars > lsm_lev0_flux
Definition: ERF_NOAHMP.H:404
amrex::Array< FabPtr, LsmFlux_NOAHMP::NumVars > lsm_fab_flux
Definition: ERF_NOAHMP.H:398
bool m_updated
Definition: ERF_NOAHMP.H:430
int Get_LSM_Step() const override
Definition: ERF_NOAHMP.H:220
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:354
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_NOAHMP.H:59
amrex::Vector< int > LsmDataMap
Definition: ERF_NOAHMP.H:348
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:243
int Lsm_DataIndex(const std::string &varname) override
Definition: ERF_NOAHMP.H:163
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_output_tmp
Definition: ERF_NOAHMP.H:415
int soil_data_idx(int g, int k) const
Definition: ERF_NOAHMP.H:310
amrex::Vector< std::unique_ptr< amrex::FArrayBox > > noahmp_input_tmp
Definition: ERF_NOAHMP.H:414
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, amrex::MultiFab *z_nd, const erf_noahmp::PrecipSlots &precip, amrex::Vector< erf_noahmp::ClampedPrecipCell > &clamped_cells, amrex::Vector< erf_noahmp::InvariantPrecipCell > &invariant_cells)
Definition: ERF_NOAHMP_Advance.cpp:91
bool m_radiation_feeds_lsm
Definition: ERF_NOAHMP.H:462
int m_nsoil
Definition: ERF_NOAHMP.H:408
int Lsm_Flux_Size() override
Definition: ERF_NOAHMP.H:150
bool Get_Update_Status() override
Definition: ERF_NOAHMP.H:215
int Lsm_Data_Size() override
Definition: ERF_NOAHMP.H:146
amrex::Geometry Lsm_Geom() override
Definition: ERF_NOAHMP.H:141
amrex::IntVect m_refRatio
Definition: ERF_NOAHMP.H:370
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:395
NoahmpIO_vector noahmpio_vect
Definition: ERF_NOAHMP.H:411
int m_lsm_data_size
Definition: ERF_NOAHMP.H:342
erf_noahmp::PrecipSlots collect_precip_sources(const SurfacePrecipAccumulationSources &precip_sources)
Definition: ERF_NOAHMP_Precip.cpp:20
bool m_checked_radiation_inputs
Definition: ERF_NOAHMP.H:443
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:427
int m_first_advance_nstep
Definition: ERF_NOAHMP.H:456
amrex::Geometry m_lsm_geom
Definition: ERF_NOAHMP.H:366
int m_itimestep
Definition: ERF_NOAHMP.H:378
amrex::Geometry m_geom0
Definition: ERF_NOAHMP.H:363
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:433
void Define(SolverChoice &sc) override
Definition: ERF_NOAHMP.H:74
int m_nz_lsm
Definition: ERF_NOAHMP.H:388
amrex::Vector< amrex::MultiFab * > lsm_lev0_data
Definition: ERF_NOAHMP.H:401
int m_lsm_flux_size
Definition: ERF_NOAHMP.H:345
amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > > m_precip_accum_prev
Definition: ERF_NOAHMP.H:420
int Lsm_FluxIndex(const std::string &varname) override
Definition: ERF_NOAHMP.H:186
amrex::Real m_dtbl
Definition: ERF_NOAHMP.H:382
void interp_from_lev0(const int &lev, amrex::MultiFab &cons_in, const int &nstep)
Definition: ERF_NOAHMP_Advance.cpp:25
void Lsm_Set_Lev0_Flux_Ptr(const int &varIdx, amrex::MultiFab *lev0_flux_ptr) override
Definition: ERF_NOAHMP.H:207
amrex::Vector< int > LsmFluxMap
Definition: ERF_NOAHMP.H:351
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, amrex::MultiFab *z_nd) override
Definition: ERF_NOAHMP_Advance.cpp:378
std::string m_radiation_model_name
Definition: ERF_NOAHMP.H:463
void Lsm_Set_Lev0_Data_Ptr(const int &varIdx, amrex::MultiFab *lev0_data_ptr) override
Definition: ERF_NOAHMP.H:199
void Set_LSM_Step(int step) override
Definition: ERF_NOAHMP.H:226
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:123
bool m_warned_radiation_inputs
Definition: ERF_NOAHMP.H:447
static constexpr int m_num_soil_groups
Definition: ERF_NOAHMP.H:306
amrex::Array< std::unique_ptr< amrex::MultiFab >, NoahmpPrecipSlot::NumSlots > m_precip_accum_restored
Definition: ERF_NOAHMP.H:424
void m_ensure_nsoil_resolved()
Definition: ERF_NOAHMP.H:317
bool Runs_Own_Land_Driver() const override
Definition: ERF_NOAHMP.H:90
amrex::Vector< std::string > LsmFluxName
Definition: ERF_NOAHMP.H:357
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:360
bool time_to_fire(const amrex::Real &elapsed_time)
Definition: ERF_NOAHMP_Advance.cpp:75
amrex::Real m_dz_lsm
Definition: ERF_NOAHMP.H:391
amrex::MultiFab * Lsm_Flux_Ptr(const int &varIdx) override
Definition: ERF_NOAHMP.H:132
Definition: ERF_NullSurf.H:15
virtual void Init(const int &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, amrex::Vector< amrex::Vector< std::string >> &)
Definition: ERF_NullSurf.H:27
@ NumVars
Definition: ERF_NOAHMP_Fields.H:110
@ NumVars
Definition: ERF_NOAHMP_Fields.H:123
@ NumSlots
Definition: ERF_NOAHMP_Fields.H:136
@ precip
Definition: ERF_SLM.H:133
Definition: ERF_NOAHMP.H:31
real(c_double), parameter g
Definition: ERF_module_model_constants.F90:19
Definition: ERF_DataStruct.H:685
static InitType init_type
Initial-condition source selected for the run.
Definition: ERF_DataStruct.H:2218
bool rad_feeds_lsm() const
True when the radiation model's outputs feed the land model (downwelling shortwave,...
Definition: ERF_DataStruct.H:2556
RadiationType rad_type
Radiation model.
Definition: ERF_DataStruct.H:2538
Definition: ERF_SurfacePrecipitation.H:34
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