ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
NOAHMP Class Reference

#include <ERF_NOAHMP.H>

Inheritance diagram for NOAHMP:
Collaboration diagram for NOAHMP:

Public Member Functions

 NOAHMP ()
 
virtual ~NOAHMP ()=default
 
void Define (SolverChoice &) override
 
void Init (const int &lev, const amrex::MultiFab &cons_in, const amrex::Geometry &geom, const amrex::Real &dt) override
 
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 amrex::Real &dt, const int &nstep) override
 
amrex::MultiFab * Lsm_Data_Ptr (const int &varIdx) override
 
amrex::MultiFab * Lsm_Flux_Ptr (const int &varIdx) override
 
amrex::Geometry Lsm_Geom () override
 
int Lsm_Data_Size () override
 
int Lsm_Flux_Size () override
 
std::string Lsm_DataName (const int &varIdx) override
 
int Lsm_DataIndex (std::string varname) override
 
std::string Lsm_FluxName (const int &varIdx) override
 
int Lsm_FluxIndex (std::string varname) override
 
- Public Member Functions inherited from NullSurf
 NullSurf ()
 
virtual ~NullSurf ()=default
 
virtual void Advance (const amrex::Real &)
 
virtual void Update_Micro_Vars (amrex::MultiFab &)
 
virtual void Update_State_Vars (amrex::MultiFab &)
 
virtual void Copy_State_to_Micro (const amrex::MultiFab &)
 
virtual void Copy_Micro_to_State (amrex::MultiFab &)
 

Private Types

using FabPtr = std::shared_ptr< amrex::MultiFab >
 

Private Attributes

int m_lsm_data_size = LsmData_NOAHMP::NumVars
 
int m_lsm_flux_size = LsmFlux_NOAHMP::NumVars
 
amrex::Vector< int > LsmDataMap
 
amrex::Vector< int > LsmFluxMap
 
amrex::Vector< std::string > LsmDataName
 
amrex::Vector< std::string > LsmFluxName
 
amrex::Geometry m_geom
 
amrex::Geometry m_lsm_geom
 
amrex::Real m_dt
 
int khi_lsm
 
int m_nz_lsm = 1
 
amrex::Real m_dz_lsm = 1.0
 
amrex::Array< FabPtr, LsmData_NOAHMP::NumVarslsm_fab_data
 
amrex::Array< FabPtr, LsmFlux_NOAHMP::NumVarslsm_fab_flux
 
NoahmpIO_vector noahmpio_vect
 
int m_plot_int_1 = -1
 

Member Typedef Documentation

◆ FabPtr

using NOAHMP::FabPtr = std::shared_ptr<amrex::MultiFab>
private

Constructor & Destructor Documentation

◆ NOAHMP()

NOAHMP::NOAHMP ( )
inline
55 {}

◆ ~NOAHMP()

virtual NOAHMP::~NOAHMP ( )
virtualdefault

Member Function Documentation

◆ Advance_With_State()

void NOAHMP::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 amrex::Real dt,
const int &  nstep 
)
overridevirtual

Reimplemented from NullSurf.

216 {
217 
218  Box domain = m_geom.Domain();
219 
220  Print () << "Noah-MP driver started at time step: " << nstep+1 << std::endl;
221 
222  // Loop over blocks to copy forcing data to Noahmp, drive the land model,
223  // and copy data back to ERF Multifabs.
224  int idb = 0;
225  for (MFIter mfi(cons_in, false); mfi.isValid(); ++mfi, ++idb) {
226 
227  Box bx = mfi.tilebox();
228 
229  // Check if tile is at the lower boundary in lower z direction
230  if (bx.smallEnd(2) != domain.smallEnd(2)) { continue; }
231 
232  bx.makeSlab(2,domain.smallEnd(2));
233 
234  NoahmpIO_type* noahmpio = &noahmpio_vect[idb];
235 
236  const Array4<const Real>& U_PHY = xvel_in.const_array(mfi);
237  const Array4<const Real>& V_PHY = yvel_in.const_array(mfi);
238  const Array4<const Real>& QV_TH = cons_in.const_array(mfi);
239 
240  // Into NOAH-MP
241  const Array4<const Real>& SWDOWN = lsm_fab_data[LsmData_NOAHMP::sw_flux_dn]->const_array(mfi);
242  const Array4<const Real>& GLW = lsm_fab_data[LsmData_NOAHMP::lw_flux_dn]->const_array(mfi);
243  const Array4<const Real>& COSZEN = lsm_fab_data[LsmData_NOAHMP::cos_zenith_angle]->const_array(mfi);
244 
245  // Out of NOAH-MP
246  Array4<Real> TSK = lsm_fab_data[LsmData_NOAHMP::t_sfc]->array(mfi);
247  Array4<Real> EMISS = lsm_fab_data[LsmData_NOAHMP::sfc_emis]->array(mfi);
248  Array4<Real> ALBSFCDIR_VIS = lsm_fab_data[LsmData_NOAHMP::sfc_alb_dir_vis]->array(mfi);
249  Array4<Real> ALBSFCDIR_NIR = lsm_fab_data[LsmData_NOAHMP::sfc_alb_dir_nir]->array(mfi);
250  Array4<Real> ALBSFCDIF_VIS = lsm_fab_data[LsmData_NOAHMP::sfc_alb_dif_vis]->array(mfi);
251  Array4<Real> ALBSFCDIF_NIR = lsm_fab_data[LsmData_NOAHMP::sfc_alb_dif_nir]->array(mfi);
252 
253  // NOTE: Need to expose stresses and get stresses from NOAHMP
254  Array4<Real> q_flux_arr = lsm_fab_flux[LsmFlux_NOAHMP::q_flux]->array(mfi);
255  Array4<Real> t_flux_arr = lsm_fab_flux[LsmFlux_NOAHMP::t_flux]->array(mfi);
256  Array4<Real> tau13_arr = lsm_fab_flux[LsmFlux_NOAHMP::tau13]->array(mfi);
257  Array4<Real> tau23_arr = lsm_fab_flux[LsmFlux_NOAHMP::tau23]->array(mfi);
258 
259  // Copy forcing data from ERF to Noahmp.
260  ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int ) noexcept
261  {
262  noahmpio->U_PHY(i,1,j) = 0.5*(U_PHY(i,j,0)+U_PHY(i+1,j ,0));
263  noahmpio->V_PHY(i,1,j) = 0.5*(V_PHY(i,j,0)+V_PHY(i ,j+1,0));
264  noahmpio->T_PHY(i,1,j) = getTgivenRandRTh(QV_TH(i,j,0,Rho_comp),QV_TH(i,j,0,RhoTheta_comp));
265  noahmpio->QV_CURR(i,1,j) = QV_TH(i,j,0,RhoQ1_comp)/QV_TH(i,j,0,Rho_comp);
266  noahmpio->P8W(i,1,j) = getPgivenRTh(QV_TH(i,j,0,RhoTheta_comp));
267  noahmpio->SWDOWN(i,j) = SWDOWN(i,j,0);
268  noahmpio->GLW(i,j) = GLW(i,j,0);
269  noahmpio->COSZEN(i,j) = COSZEN(i,j,0);
270  });
271 
272  // Call the noahmpio driver code. This runs the land model forcing for
273  // each object in noahmpio_vect that represent a block in the domain.
274  noahmpio->itimestep = nstep+1;
275  noahmpio->DriverMain();
276 
277  // Copy forcing data from Noahmp to ERF
278  ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int ) noexcept
279  {
280  t_flux_arr(i,j,0) = noahmpio->HFX(i,j)/(QV_TH(i,j,0,Rho_comp)*Cp_d);
281  q_flux_arr(i,j,0) = noahmpio->LH(i,j)/(QV_TH(i,j,0,Rho_comp)*L_v);
282  tau13_arr(i,j,0) = noahmpio->TAU_EW(i,j)/QV_TH(i,j,0,Rho_comp);
283  tau23_arr(i,j,0) = noahmpio->TAU_NS(i,j)/QV_TH(i,j,0,Rho_comp);
284  TSK(i,j,0) = noahmpio->TSK(i,j);
285  EMISS(i,j,0) = noahmpio->EMISS(i,j);
286  ALBSFCDIR_VIS(i,j,0) = noahmpio->ALBSFCDIRXY(i,1,j);
287  ALBSFCDIR_NIR(i,j,0) = noahmpio->ALBSFCDIRXY(i,2,j);
288  ALBSFCDIF_VIS(i,j,0) = noahmpio->ALBSFCDIFXY(i,1,j);
289  ALBSFCDIF_NIR(i,j,0) = noahmpio->ALBSFCDIFXY(i,2,j);
290  });
291 
292  if((nstep+1)%m_plot_int_1 == 0) {
293  noahmpio->WriteLand(nstep+1);
294  }
295  }
296  Print () << "Noah-MP driver completed" << std::endl;
297 };
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:12
constexpr amrex::Real L_v
Definition: ERF_Constants.H:16
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=0.)
Definition: ERF_EOS.H:81
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenRandRTh(const amrex::Real rho, const amrex::Real rhotheta, const amrex::Real qv=0.0)
Definition: ERF_EOS.H:46
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
int m_plot_int_1
Definition: ERF_NOAHMP.H:208
amrex::Array< FabPtr, LsmFlux_NOAHMP::NumVars > lsm_fab_flux
Definition: ERF_NOAHMP.H:202
NoahmpIO_vector noahmpio_vect
Definition: ERF_NOAHMP.H:205
amrex::Array< FabPtr, LsmData_NOAHMP::NumVars > lsm_fab_data
Definition: ERF_NOAHMP.H:199
amrex::Geometry m_geom
Definition: ERF_NOAHMP.H:181
@ sw_flux_dn
Definition: ERF_NOAHMP.H:32
@ sfc_emis
Definition: ERF_NOAHMP.H:26
@ sfc_alb_dir_vis
Definition: ERF_NOAHMP.H:27
@ sfc_alb_dif_nir
Definition: ERF_NOAHMP.H:30
@ lw_flux_dn
Definition: ERF_NOAHMP.H:33
@ cos_zenith_angle
Definition: ERF_NOAHMP.H:31
@ t_sfc
Definition: ERF_NOAHMP.H:25
@ sfc_alb_dir_nir
Definition: ERF_NOAHMP.H:28
@ sfc_alb_dif_vis
Definition: ERF_NOAHMP.H:29
@ t_flux
Definition: ERF_NOAHMP.H:41
@ tau13
Definition: ERF_NOAHMP.H:43
@ q_flux
Definition: ERF_NOAHMP.H:42
@ tau23
Definition: ERF_NOAHMP.H:44
Here is the call graph for this function:

◆ Define()

void NOAHMP::Define ( SolverChoice )
inlineoverridevirtual

Reimplemented from NullSurf.

63  {
64  // NOTE: We should parse constants from sc here if needed,
65  }

◆ Init()

void NOAHMP::Init ( const int &  lev,
const amrex::MultiFab &  cons_in,
const amrex::Geometry &  geom,
const amrex::Real dt 
)
overridevirtual

Reimplemented from NullSurf.

21 {
22 
23  m_dt = dt;
24  m_geom = geom;
25 
26  Box domain = geom.Domain();
27  khi_lsm = domain.smallEnd(2) - 1;
28 
36  LsmDataName = {"t_sfc" , "sfc_emis" ,
37  "sfc_alb_dir_vis" , "sfc_alb_dir_nir" ,
38  "sfc_alb_dif_vis" , "sfc_alb_dif_nir" ,
39  "cos_zenith_angle", "sw_flux_dn" ,
40  "lw_flux_dn" };
41 
42 
47  LsmFluxName = {"t_flux" , "q_flux" ,
48  "tau13" , "tau23" };
49 
50  ParmParse pp("erf");
51  pp.query("plot_int_1" , m_plot_int_1);
52 
53  // NOTE: All boxes in ba extend from zlo to zhi, so this transform is valid.
54  // If that were to change, the dm and new ba are no longer valid and
55  // direct copying between lsm data/flux vars cannot be done in a parfor.
56 
57  // Set 2D box array for lsm data
58  IntVect ng(0,0,0);
59  BoxArray ba = cons_in.boxArray();
60  DistributionMapping dm = cons_in.DistributionMap();
61  BoxList bl_lsm = ba.boxList();
62  for (auto& b : bl_lsm) {
63  b.setRange(2,0);
64  }
65  BoxArray ba_lsm(std::move(bl_lsm));
66 
67  // Set up lsm geometry
68  const RealBox& dom_rb = m_geom.ProbDomain();
69  const Real* dom_dx = m_geom.CellSize();
70  RealBox lsm_rb = dom_rb;
71  Real lsm_dx[AMREX_SPACEDIM] = {AMREX_D_DECL(dom_dx[0],dom_dx[1],m_dz_lsm)};
72  Real lsm_z_hi = dom_rb.lo(2);
73  Real lsm_z_lo = lsm_z_hi - Real(m_nz_lsm)*lsm_dx[2];
74  lsm_rb.setHi(2,lsm_z_hi); lsm_rb.setLo(2,lsm_z_lo);
75  m_lsm_geom.define( ba_lsm.minimalBox(), lsm_rb, m_geom.Coord(), m_geom.isPeriodic() );
76 
77  // Create the data
78  for (auto ivar = 0; ivar < LsmData_NOAHMP::NumVars; ++ivar) {
79  // State vars are CC
80  lsm_fab_data[ivar] = std::make_shared<MultiFab>(ba_lsm, dm, 1, ng);
81 
82  // NOTE: Radiation steps first so we set values
83  // to reasonable initialization for coupling
84  Real val_to_set = 0.0;
85  if (ivar == LsmData_NOAHMP::t_sfc) {
86  val_to_set = 300.0;
87  } else if (ivar == LsmData_NOAHMP::sfc_emis) {
88  val_to_set = 0.9;
89  } else if ( (ivar>=LsmData_NOAHMP::sfc_alb_dir_vis) &&
91  val_to_set = 0.06;
92  } else {
93  val_to_set = 0.0;
94  }
95  lsm_fab_data[ivar]->setVal(val_to_set);
96  }
97 
98  // Create the fluxes
99  for (auto ivar = 0; ivar < LsmFlux_NOAHMP::NumVars; ++ivar) {
100  // NOTE: Fluxes are CC with ghost cells for averaging
101  lsm_fab_flux[ivar] = std::make_shared<MultiFab>(ba_lsm, dm, 1, IntVect(1,1,0));
102  lsm_fab_flux[ivar]->setVal(0.);
103  }
104 
105  Print() << "Noah-MP initialization started" << std::endl;
106 
107  // Set noahmpio_vect to the size of local blocks (boxes)
108  noahmpio_vect.resize(cons_in.local_size(), lev);
109 
110  // Iterate over multifab and noahmpio object together. Multifabs is
111  // used to extract size of blocks and set bounds for noahmpio objects.
112  int idb = 0;
113  for (MFIter mfi(cons_in, false); mfi.isValid(); ++mfi, ++idb) {
114 
115  // Get bounds for the tile
116  const Box& bx = mfi.tilebox();
117 
118  // Check if tile is at the lower boundary in lower z direction
119  if (bx.smallEnd(2) != domain.smallEnd(2)) { continue; }
120 
121  // Get reference to the noahmpio object
122  NoahmpIO_type* noahmpio = &noahmpio_vect[idb];
123 
124  // Pass idb context to noahmpio
125  noahmpio->blkid = idb;
126 
127  // Pass level context to noahmpio
128  noahmpio->level = lev;
129 
130  // Initialize scalar values
131  noahmpio->ScalarInitDefault();
132 
133  // Store the rank of process for noahmp
134  noahmpio->rank = ParallelDescriptor::MyProc();
135 
136  // Store parallel communicator for noahmp
137  noahmpio->comm = MPI_Comm_c2f(ParallelDescriptor::Communicator());
138 
139  // Read namelist.erf file. This file contains
140  // noahmpio specific parameters and is read by
141  // the Fortran side of the implementation.
142  noahmpio->ReadNamelist();
143 
144  // Read the headers from the NetCDF land file. This is also
145  // implemented on the Fortran side of things currently.
146  noahmpio->ReadLandHeader();
147 
148  // Extract tile bounds and set them to their corresponding
149  // noahmpio variables. At present we will set all the variables
150  // corresponding to domain, memory, and tile to the same bounds.
151  // This will be changed later if we want to do special memory
152  // management for expensive use cases.
153  noahmpio->xstart = bx.smallEnd(0);
154  noahmpio->xend = bx.bigEnd(0);
155  noahmpio->ystart = bx.smallEnd(1);
156  noahmpio->yend = bx.bigEnd(1);
157 
158  // Domain bounds
159  noahmpio->ids = noahmpio->xstart;
160  noahmpio->ide = noahmpio->xend;
161  noahmpio->jds = noahmpio->ystart;
162  noahmpio->jde = noahmpio->yend;
163  noahmpio->kds = 1;
164  noahmpio->kde = 2;
165 
166  // Tile bounds
167  noahmpio->its = noahmpio->xstart;
168  noahmpio->ite = noahmpio->xend;
169  noahmpio->jts = noahmpio->ystart;
170  noahmpio->jte = noahmpio->yend;
171  noahmpio->kts = 1;
172  noahmpio->kte = 2;
173 
174  // Memory bounds
175  noahmpio->ims = noahmpio->xstart;
176  noahmpio->ime = noahmpio->xend;
177  noahmpio->jms = noahmpio->ystart;
178  noahmpio->jme = noahmpio->yend;
179  noahmpio->kms = 1;
180  noahmpio->kme = 2;
181 
182  // This procedure allocates memory in Fortran for IO variables
183  // using bounds that are set above and read from namelist.erf
184  // and headers from the NetCDF land file
185  noahmpio->VarInitDefault();
186 
187  // This reads NoahmpTable.TBL file which is another input file
188  // we need to set some IO variables.
189  noahmpio->ReadTable();
190 
191  // Read and initialize data from the NetCDF land file.
192  noahmpio->ReadLandMain();
193 
194  // Compute additional initial values that were not supplied
195  // by the NetCDF land file.
196  noahmpio->InitMain();
197 
198  // Write initial plotfile for land with the tag 0
199  Print() << "Noah-MP writing lnd.nc file at lev: " << lev << std::endl;
200  noahmpio->WriteLand(0);
201  }
202 
203  Print() << "Noah-MP initialization completed" << std::endl;
204 
205 };
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:233
amrex::Real Real
Definition: ERF_ShocInterface.H:19
int khi_lsm
Definition: ERF_NOAHMP.H:190
amrex::Vector< std::string > LsmDataName
Definition: ERF_NOAHMP.H:175
amrex::Vector< int > LsmDataMap
Definition: ERF_NOAHMP.H:169
int m_lsm_data_size
Definition: ERF_NOAHMP.H:163
amrex::Geometry m_lsm_geom
Definition: ERF_NOAHMP.H:184
int m_nz_lsm
Definition: ERF_NOAHMP.H:193
int m_lsm_flux_size
Definition: ERF_NOAHMP.H:166
amrex::Vector< int > LsmFluxMap
Definition: ERF_NOAHMP.H:172
amrex::Vector< std::string > LsmFluxName
Definition: ERF_NOAHMP.H:178
amrex::Real m_dz_lsm
Definition: ERF_NOAHMP.H:196
amrex::Real m_dt
Definition: ERF_NOAHMP.H:187
@ NumVars
Definition: ERF_NOAHMP.H:34
@ NumVars
Definition: ERF_NOAHMP.H:45
@ ng
Definition: ERF_Morrison.H:48
Here is the call graph for this function:

◆ Lsm_Data_Ptr()

amrex::MultiFab* NOAHMP::Lsm_Data_Ptr ( const int &  varIdx)
inlineoverridevirtual

Reimplemented from NullSurf.

88  {
89  int lsmIdx = LsmDataMap[varIdx];
90  AMREX_ALWAYS_ASSERT(lsmIdx < NOAHMP::m_lsm_data_size && lsmIdx>=0);
91  return lsm_fab_data[lsmIdx].get();
92  }

◆ Lsm_Data_Size()

int NOAHMP::Lsm_Data_Size ( )
inlineoverridevirtual

Reimplemented from NullSurf.

109 { return NOAHMP::m_lsm_data_size; }

◆ Lsm_DataIndex()

int NOAHMP::Lsm_DataIndex ( std::string  varname)
inlineoverridevirtual

Reimplemented from NullSurf.

127  {
128  int varIdx = -1;
129  std::string lc_varname = amrex::toLower(varname);
130  for (int idx(0); idx<LsmData_NOAHMP::NumVars; ++idx) {
131  if (lc_varname == amrex::toLower(LsmDataName[idx])) {
132  varIdx = idx;
133  }
134  }
135  return varIdx;
136  }

◆ Lsm_DataName()

std::string NOAHMP::Lsm_DataName ( const int &  varIdx)
inlineoverridevirtual

Reimplemented from NullSurf.

118  {
119  int lsmIdx = LsmDataMap[varIdx];
120  AMREX_ALWAYS_ASSERT(lsmIdx < NOAHMP::m_lsm_data_size && lsmIdx>=0);
121  return LsmDataName[lsmIdx];
122  }

◆ Lsm_Flux_Ptr()

amrex::MultiFab* NOAHMP::Lsm_Flux_Ptr ( const int &  varIdx)
inlineoverridevirtual

Reimplemented from NullSurf.

97  {
98  int lsmIdx = LsmFluxMap[varIdx];
99  AMREX_ALWAYS_ASSERT(lsmIdx < NOAHMP::m_lsm_flux_size && lsmIdx>=0);
100  return lsm_fab_flux[lsmIdx].get();
101  }

◆ Lsm_Flux_Size()

int NOAHMP::Lsm_Flux_Size ( )
inlineoverridevirtual

Reimplemented from NullSurf.

113 { return NOAHMP::m_lsm_flux_size; }

◆ Lsm_FluxIndex()

int NOAHMP::Lsm_FluxIndex ( std::string  varname)
inlineoverridevirtual

Reimplemented from NullSurf.

150  {
151  int varIdx = -1;
152  std::string lc_varname = amrex::toLower(varname);
153  for (int idx(0); idx<LsmFlux_NOAHMP::NumVars; ++idx) {
154  if (lc_varname == amrex::toLower(LsmFluxName[idx])) {
155  varIdx = idx;
156  }
157  }
158  return varIdx;
159  }

◆ Lsm_FluxName()

std::string NOAHMP::Lsm_FluxName ( const int &  varIdx)
inlineoverridevirtual

Reimplemented from NullSurf.

141  {
142  int lsmIdx = LsmFluxMap[varIdx];
143  AMREX_ALWAYS_ASSERT(lsmIdx < NOAHMP::m_lsm_flux_size && lsmIdx>=0);
144  return LsmFluxName[lsmIdx];
145  }

◆ Lsm_Geom()

amrex::Geometry NOAHMP::Lsm_Geom ( )
inlineoverridevirtual

Reimplemented from NullSurf.

105 { return m_lsm_geom; }

Member Data Documentation

◆ khi_lsm

int NOAHMP::khi_lsm
private

◆ lsm_fab_data

amrex::Array<FabPtr, LsmData_NOAHMP::NumVars> NOAHMP::lsm_fab_data
private

Referenced by Lsm_Data_Ptr().

◆ lsm_fab_flux

amrex::Array<FabPtr, LsmFlux_NOAHMP::NumVars> NOAHMP::lsm_fab_flux
private

Referenced by Lsm_Flux_Ptr().

◆ LsmDataMap

amrex::Vector<int> NOAHMP::LsmDataMap
private

Referenced by Lsm_Data_Ptr(), and Lsm_DataName().

◆ LsmDataName

amrex::Vector<std::string> NOAHMP::LsmDataName
private

Referenced by Lsm_DataIndex(), and Lsm_DataName().

◆ LsmFluxMap

amrex::Vector<int> NOAHMP::LsmFluxMap
private

Referenced by Lsm_Flux_Ptr(), and Lsm_FluxName().

◆ LsmFluxName

amrex::Vector<std::string> NOAHMP::LsmFluxName
private

Referenced by Lsm_FluxIndex(), and Lsm_FluxName().

◆ m_dt

amrex::Real NOAHMP::m_dt
private

◆ m_dz_lsm

amrex::Real NOAHMP::m_dz_lsm = 1.0
private

◆ m_geom

amrex::Geometry NOAHMP::m_geom
private

◆ m_lsm_data_size

int NOAHMP::m_lsm_data_size = LsmData_NOAHMP::NumVars
private

Referenced by Lsm_Data_Size().

◆ m_lsm_flux_size

int NOAHMP::m_lsm_flux_size = LsmFlux_NOAHMP::NumVars
private

Referenced by Lsm_Flux_Size().

◆ m_lsm_geom

amrex::Geometry NOAHMP::m_lsm_geom
private

Referenced by Lsm_Geom().

◆ m_nz_lsm

int NOAHMP::m_nz_lsm = 1
private

◆ m_plot_int_1

int NOAHMP::m_plot_int_1 = -1
private

◆ noahmpio_vect

NoahmpIO_vector NOAHMP::noahmpio_vect
private

The documentation for this class was generated from the following files: