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

#include <ERF_SatAdj.H>

Inheritance diagram for SatAdj:
Collaboration diagram for SatAdj:

Public Member Functions

 SatAdj ()
 
virtual ~SatAdj ()=default
 
void AdvanceSatAdj (const SolverChoice &)
 
void Define (SolverChoice &sc) override
 
void Init (const amrex::MultiFab &cons_in, const amrex::BoxArray &, const amrex::Geometry &geom, const amrex::Real &dt_advance, std::unique_ptr< amrex::MultiFab > &, std::unique_ptr< amrex::MultiFab > &) override
 
void Copy_State_to_Micro (const amrex::MultiFab &cons_in) override
 
void Update_Micro_Vars (amrex::MultiFab &cons_in, const amrex::MultiFab *base_state) override
 
void Copy_Micro_to_State (amrex::MultiFab &cons_in) override
 
void Update_Micro_Vars (amrex::MultiFab &cons_in) override
 
void Update_State_Vars (amrex::MultiFab &cons_in, const amrex::MultiFab &) override
 
void Advance (const amrex::Real &dt_advance, const SolverChoice &solverChoice) override
 
amrex::MultiFab * Qmoist_Ptr (const int &varIdx) override
 
int Qmoist_Size () override
 
int Qstate_Moist_Size () override
 
int Qstate_Moist_NumConc_Size () override
 
void Qmoist_Restart_Vars (const SolverChoice &, std::vector< int > &a_idx, std::vector< std::string > &a_names) const override
 
- Public Member Functions inherited from NullMoist
 NullMoist ()
 
virtual ~NullMoist ()=default
 
virtual int Qstate_NonMoist_Size ()
 
virtual void GetPlotVarNames (amrex::Vector< std::string > &a_vec) const
 
virtual void GetPlotVar (const std::string &, amrex::MultiFab &) const
 
virtual void GetPlotVar (const std::string &a_name, amrex::MultiFab &a_mf, const int) const
 
virtual void SetCurrentLevel (const int &)
 
virtual void InitLevel (const int, const amrex::MultiFab &)
 
virtual int getDiagnosticsInterval () const
 
virtual void Set_dzmin (const amrex::Real)
 
virtual void Set_Lmask (amrex::iMultiFab *)
 Import ERF's land/water mask. Only schemes whose physics branches on land vs water need to override this. More...
 
virtual SurfacePrecipAccumulationSources Get_Surface_Precip_Accumulation_Ptrs (const int &) const
 
virtual void Set_RealWidth (const int)
 

Static Public Member Functions

AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real NewtonSolveSatTemperature (const amrex::Real fac_cond, const amrex::Real tabs_old, const amrex::Real pres_mbar, const amrex::Real qv_old, amrex::Real &qsat)
 
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real SatAdjMoistureTol (const amrex::Real qtot)
 
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void AdjustSatAdjCell (const amrex::Real fac_cond, const amrex::Real rdOcp, amrex::Real &tabs, const amrex::Real pres_mbar, amrex::Real &theta, amrex::Real &qv, amrex::Real &qc)
 

Private Types

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

Private Attributes

int m_qmoist_size = 0
 
int n_qstate_moist_size = 2
 
int n_qstate_moist_numconc_size = 0
 
amrex::Geometry m_geom
 
amrex::Real dt
 
amrex::Real m_fac_cond
 
amrex::Real m_rdOcp
 
bool m_do_cond
 
amrex::Array< FabPtr, MicVar_SatAdj::NumVarsmic_fab_vars
 

Member Typedef Documentation

◆ FabPtr

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

Constructor & Destructor Documentation

◆ SatAdj()

SatAdj::SatAdj ( )
inline
52 {}

◆ ~SatAdj()

virtual SatAdj::~SatAdj ( )
virtualdefault

Member Function Documentation

◆ AdjustSatAdjCell()

AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void SatAdj::AdjustSatAdjCell ( const amrex::Real  fac_cond,
const amrex::Real  rdOcp,
amrex::Real tabs,
const amrex::Real  pres_mbar,
amrex::Real theta,
amrex::Real qv,
amrex::Real qc 
)
inlinestatic
249  {
250  amrex::Real qsat;
251  erf_qsatw(tabs, pres_mbar, qsat);
252 
253  if ((qv + qc) > qsat) {
254  // Total water exceeds saturation at the initial temperature, so the final state
255  // is cloudy and saturated. Solve directly for the final saturated temperature.
256  // This is algebraically equivalent to evaporating existing cloud water first
257  // and then recondensing to the fixed-pressure equilibrium state.
258 #if defined(AMREX_DEBUG)
259  const amrex::Real qvprev = qv;
260  const amrex::Real qcprev = qc;
261 #endif
262 
263  if (qc < 0) {
264  // Repair negative cloud water by transferring the deficit back to vapor
265  // before solving the saturated equilibrium and clamping qc to zero.
266  qv += qc;
267  qc = zero;
268  }
269 
270  tabs = NewtonSolveSatTemperature(fac_cond, tabs, pres_mbar, qv, qsat);
271 
272  const amrex::Real delta_qv = qv - qsat;
273  qv = qsat;
274  qc += delta_qv;
275 
276 #if defined(AMREX_DEBUG)
277  amrex::Real qsatnew;
278  erf_qsatw(tabs, pres_mbar, qsatnew);
279  const amrex::Real qtol = SatAdjMoistureTol(qvprev + qcprev);
280  AMREX_ASSERT(std::abs(qv-qsatnew) <= qtol);
281  AMREX_ASSERT(std::abs(qv+qc-qvprev-qcprev) <= qtol);
282 #endif
283 
284  theta = getThgivenTandP(tabs, amrex::Real(100.0)*pres_mbar, rdOcp);
285  } else {
286  // Total water does not exceed initial saturation. Evaporate all cloud water,
287  // cooling the cell by latent heat absorption. The cooled cell can become
288  // supersaturated, so recondense if needed.
289  const amrex::Real delta_qc = qc;
290 
291  qv += qc;
292  qc = zero;
293 
294  tabs -= fac_cond * delta_qc;
295  theta = getThgivenTandP(tabs, amrex::Real(100.0)*pres_mbar, rdOcp);
296 
297  erf_qsatw(tabs, pres_mbar, qsat);
298  if (qv > qsat) {
299 #if defined(AMREX_DEBUG)
300  const amrex::Real qvprev = qv;
301  const amrex::Real qcprev = qc;
302  const amrex::Real Tprev = tabs;
303 #endif
304 
305  tabs = NewtonSolveSatTemperature(fac_cond, tabs, pres_mbar, qv, qsat);
306 
307  const amrex::Real delta_qv = qv - qsat;
308  qv = qsat;
309  qc += delta_qv;
310 
311 #if defined(AMREX_DEBUG)
312  amrex::Real qsatnew;
313  erf_qsatw(tabs, pres_mbar, qsatnew);
314  const amrex::Real qtol = SatAdjMoistureTol(qvprev + qcprev);
315  AMREX_ASSERT(qv < qvprev);
316  AMREX_ASSERT(qc > qcprev);
317  AMREX_ASSERT(tabs > Tprev);
318  AMREX_ASSERT(std::abs(qv-qsatnew) <= qtol);
319  AMREX_ASSERT(std::abs(qv+qc-qvprev-qcprev) <= qtol);
320 #endif
321 
322  theta = getThgivenTandP(tabs, amrex::Real(100.0)*pres_mbar, rdOcp);
323  }
324  }
325  }
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenTandP(const amrex::Real T, const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:18
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:228
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real SatAdjMoistureTol(const amrex::Real qtot)
Definition: ERF_SatAdj.H:228
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real NewtonSolveSatTemperature(const amrex::Real fac_cond, const amrex::Real tabs_old, const amrex::Real pres_mbar, const amrex::Real qv_old, amrex::Real &qsat)
Definition: ERF_SatAdj.H:157
@ theta
Definition: ERF_SatAdj.H:36
@ qv
Definition: ERF_SatAdj.H:40
@ tabs
Definition: ERF_SatAdj.H:37
@ qc
Definition: ERF_SatAdj.H:41
Here is the call graph for this function:

◆ Advance()

void SatAdj::Advance ( const amrex::Real dt_advance,
const SolverChoice solverChoice 
)
inlineoverridevirtual

Reimplemented from NullMoist.

111  {
112  dt = dt_advance;
113 
114  this->AdvanceSatAdj(solverChoice);
115  }
void AdvanceSatAdj(const SolverChoice &)
Definition: ERF_SatAdj.cpp:11
amrex::Real dt
Definition: ERF_SatAdj.H:341
Here is the call graph for this function:

◆ AdvanceSatAdj()

void SatAdj::AdvanceSatAdj ( const SolverChoice )

AdvanceSatAdj is a local valid-cell update over MFIter tileboxes. It uses pressure diagnosed in Copy_State_to_Micro and holds that pressure fixed inside each cell adjustment. There are no stencils, face fluxes, or ghost-cell reads in this kernel.

12 {
13  // Saturation adjustment can be disabled by solver choice, e.g. when SHOC
14  // owns moist thermodynamics instead of the standalone SatAdj module.
15  if (!m_do_cond) { return; }
16 
18 
19  // Expose for GPU
20  Real d_fac_cond = m_fac_cond;
21  Real rdOcp = m_rdOcp;
22 
23  for ( MFIter mfi(*tabs,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
24 
25  auto tbx = mfi.tilebox();
26 
27  auto qv_array = mic_fab_vars[MicVar_SatAdj::qv]->array(mfi);
28  auto qc_array = mic_fab_vars[MicVar_SatAdj::qc]->array(mfi);
29  auto tabs_array = mic_fab_vars[MicVar_SatAdj::tabs]->array(mfi);
30  auto theta_array = mic_fab_vars[MicVar_SatAdj::theta]->array(mfi);
31  auto pres_array = mic_fab_vars[MicVar_SatAdj::pres]->array(mfi);
32 
33  ParallelFor(tbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept
34  {
35  Real T = tabs_array(i,j,k);
36  Real p = pres_array(i,j,k);
37  Real th = theta_array(i,j,k);
38  Real qv = qv_array(i,j,k);
39  Real qc = qc_array(i,j,k);
40 
41  AdjustSatAdjCell(d_fac_cond, rdOcp, T, p, th, qv, qc);
42 
43  tabs_array(i,j,k) = T;
44  theta_array(i,j,k) = th;
45  qv_array(i,j,k) = qv;
46  qc_array(i,j,k) = qc;
47  });
48  }
49 }
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void AdjustSatAdjCell(const amrex::Real fac_cond, const amrex::Real rdOcp, amrex::Real &tabs, const amrex::Real pres_mbar, amrex::Real &theta, amrex::Real &qv, amrex::Real &qc)
Definition: ERF_SatAdj.H:242
amrex::Real m_fac_cond
Definition: ERF_SatAdj.H:344
amrex::Array< FabPtr, MicVar_SatAdj::NumVars > mic_fab_vars
Definition: ERF_SatAdj.H:349
amrex::Real m_rdOcp
Definition: ERF_SatAdj.H:345
bool m_do_cond
Definition: ERF_SatAdj.H:346
@ tabs
Definition: ERF_Kessler.H:26
@ qv
Definition: ERF_Kessler.H:30
@ pres
Definition: ERF_SatAdj.H:38
@ T
Definition: ERF_IndexDefines.H:128
@ p
Definition: ERF_WSM6.H:191

Referenced by Advance().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Copy_Micro_to_State()

void SatAdj::Copy_Micro_to_State ( amrex::MultiFab &  cons_in)
overridevirtual

Copies SatAdj's adjusted specific variables back into ERF's conserved state. The copied rho is used only to reconstruct rhoTheta, rhoQv, and rhoQc. Density itself is intentionally not written back because SatAdj does not own or modify rho.

Parameters
[out]consConserved variables

Reimplemented from NullMoist.

14 {
15  for (MFIter mfi(cons,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
16  const auto& tbx = mfi.tilebox();
17 
18  auto states_arr = cons.array(mfi);
19 
20  auto rho_arr = mic_fab_vars[MicVar_SatAdj::rho]->array(mfi);
21  auto theta_arr = mic_fab_vars[MicVar_SatAdj::theta]->array(mfi);
22  auto qv_arr = mic_fab_vars[MicVar_SatAdj::qv]->array(mfi);
23  auto qc_arr = mic_fab_vars[MicVar_SatAdj::qc]->array(mfi);
24 
25  // Density is intentionally not written back. SatAdj does not modify density;
26  // it uses the copied rho only to form conserved rhoTheta, rhoQv, and rhoQc
27  // from the adjusted specific variables.
28  ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k)
29  {
30  states_arr(i,j,k,RhoTheta_comp) = rho_arr(i,j,k)*theta_arr(i,j,k);
31  states_arr(i,j,k,RhoQ1_comp) = rho_arr(i,j,k)*qv_arr(i,j,k);
32  states_arr(i,j,k,RhoQ2_comp) = rho_arr(i,j,k)*qc_arr(i,j,k);
33  });
34  }
35 
36  // Fill ghost and periodic boundary values after the valid-cell copy-back.
37  cons.FillBoundary(m_geom.periodicity());
38 }
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:46
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
auto rho_arr
Definition: ERF_UpdateWSubsidence_SineMassFlux.H:3
amrex::Geometry m_geom
Definition: ERF_SatAdj.H:338
@ rho
Definition: ERF_SatAdj.H:35
@ cons
Definition: ERF_IndexDefines.H:214

Referenced by Update_State_Vars().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Copy_State_to_Micro()

void SatAdj::Copy_State_to_Micro ( const amrex::MultiFab &  cons_in)
overridevirtual

Copies conserved ERF state into SatAdj's internal specific variables. rho is copied but not modified by SatAdj. theta, qv, and qc are formed by dividing conserved densities by rho. tabs and pressure are diagnosed from the same conserved state snapshot. pressure is converted from Pa to mbar/hPa for saturation helper calls.

Parameters
[in]cons_inConserved variables input

Reimplemented from NullMoist.

45 {
46  Update_Micro_Vars(const_cast<MultiFab&>(cons_in), nullptr);
47 }
void Update_Micro_Vars(amrex::MultiFab &cons_in, const amrex::MultiFab *base_state) override

Referenced by Update_Micro_Vars().

Here is the caller graph for this function:

◆ Define()

void SatAdj::Define ( SolverChoice sc)
inlineoverridevirtual

Reimplemented from NullMoist.

63  {
64  m_fac_cond = lcond / sc.c_p;
65  m_rdOcp = sc.rdOcp;
66  m_do_cond = (!sc.uses_shoc_family());
67  }
constexpr amrex::Real lcond
Definition: ERF_Constants.H:109
amrex::Real rdOcp
Ratio of dry-air gas constant to c_p.
Definition: ERF_DataStruct.H:1948
bool uses_shoc_family() const noexcept
Query whether any SHOC-family PBL scheme is active.
Definition: ERF_DataStruct.H:2063
amrex::Real c_p
Specific heat at constant pressure for dry air [J/(kg-K)].
Definition: ERF_DataStruct.H:1947
Here is the call graph for this function:

◆ Init()

void SatAdj::Init ( const amrex::MultiFab &  cons_in,
const amrex::BoxArray &  ,
const amrex::Geometry &  geom,
const amrex::Real dt_advance,
std::unique_ptr< amrex::MultiFab > &  ,
std::unique_ptr< amrex::MultiFab > &   
)
overridevirtual

Initializes the Microphysics module.

Parameters
[in]cons_inConserved variables input
[in]qc_inCloud variables input
[in,out]qv_inVapor variables input
[in]qi_inIce variables input
[in]gridsThe boxes on which we will evolve the solution
[in]geomGeometry associated with these MultiFabs and grids
[in]dt_advanceTimestep for the advance

Reimplemented from NullMoist.

23 {
24  dt = dt_advance;
25  m_geom = geom;
26 
27  // initialize microphysics variables
28  for (auto ivar = 0; ivar < MicVar_SatAdj::NumVars; ++ivar) {
29  mic_fab_vars[ivar] = std::make_shared<MultiFab>(cons_in.boxArray(), cons_in.DistributionMap(),
30  1, cons_in.nGrowVect());
31  mic_fab_vars[ivar]->setVal(0.);
32  }
33 }
@ NumVars
Definition: ERF_SatAdj.H:42

◆ NewtonSolveSatTemperature()

AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real SatAdj::NewtonSolveSatTemperature ( const amrex::Real  fac_cond,
const amrex::Real  tabs_old,
const amrex::Real  pres_mbar,
const amrex::Real  qv_old,
amrex::Real qsat 
)
inlinestatic
162  {
163 #ifdef AMREX_USE_FLOAT
164  constexpr amrex::Real tol = amrex::Real(1.e-4);
165 #else
166  constexpr amrex::Real tol = amrex::Real(1.e-8);
167 #endif
168  constexpr int max_iter = 20;
169 
170  int niter = 0;
171  amrex::Real F, dFdT, dqsat;
172  amrex::Real tabs = tabs_old;
173 
174  //==================================================
175  // Newton iteration to qv=qsat (cloud phase only)
176  //==================================================
177  // Saturation moisture fractions
178  erf_qsatw(tabs, pres_mbar, qsat);
179  erf_dtqsatw(tabs, pres_mbar, dqsat);
180 
181  // Function for root finding:
182  // 0 = -T_new + T_old + L_eff/C_p * (qv - qsat)
183  F = -tabs + tabs_old + fac_cond*(qv_old - qsat);
184 
185  // Iterate when necessary
186  while (std::abs(F) > tol && niter < max_iter) {
187  // Derivative of function (T_new iterated on)
188  dFdT = -one - fac_cond*dqsat;
189 
190  // Update the temperature
191  tabs -= F/dFdT;
192 
193  // Saturation moisture fractions
194  erf_qsatw(tabs, pres_mbar, qsat);
195  erf_dtqsatw(tabs, pres_mbar, dqsat);
196 
197  // Function for root finding:
198  // 0 = -T_new + T_old + L_eff/C_p * (qv - qsat)
199  F = -tabs + tabs_old + fac_cond*(qv_old - qsat);
200 
201  // Update iteration
202  ++niter;
203  }
204 
205  // NOTE: the while loop already enforces the iteration limit, so the
206  // residual alone determines whether we found a valid root; testing
207  // niter < max_iter here would spuriously fail a solve that
208  // converged on exactly the last allowed iteration.
209  bool valid_solution = (std::abs(F) <= tol);
210  AMREX_ALWAYS_ASSERT_WITH_MESSAGE(valid_solution, "SatAdj single phase saturation adjustment failed to converge.");
211 
212  return tabs;
213  }
constexpr amrex::Real one
Definition: ERF_Constants.H:9
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 void erf_dtqsatw(amrex::Real t, amrex::Real p, amrex::Real &dtqsatw)
Definition: ERF_MicrophysicsUtils.H:244

Referenced by AdjustSatAdjCell().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Qmoist_Ptr()

amrex::MultiFab* SatAdj::Qmoist_Ptr ( const int &  varIdx)
inlineoverridevirtual

Reimplemented from NullMoist.

119  {
121  return nullptr;
122  }
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
int m_qmoist_size
Definition: ERF_SatAdj.H:329
Here is the call graph for this function:

◆ Qmoist_Restart_Vars()

void SatAdj::Qmoist_Restart_Vars ( const SolverChoice ,
std::vector< int > &  a_idx,
std::vector< std::string > &  a_names 
) const
inlineoverridevirtual

Reimplemented from NullMoist.

137  {
138  a_idx.clear();
139  a_names.clear();
140  }

◆ Qmoist_Size()

int SatAdj::Qmoist_Size ( )
inlineoverridevirtual

Reimplemented from NullMoist.

125 { return SatAdj::m_qmoist_size; }

◆ Qstate_Moist_NumConc_Size()

int SatAdj::Qstate_Moist_NumConc_Size ( )
inlineoverridevirtual

Reimplemented from NullMoist.

int n_qstate_moist_numconc_size
Definition: ERF_SatAdj.H:335

◆ Qstate_Moist_Size()

int SatAdj::Qstate_Moist_Size ( )
inlineoverridevirtual

Reimplemented from NullMoist.

128 { return SatAdj::n_qstate_moist_size; }
int n_qstate_moist_size
Definition: ERF_SatAdj.H:332

◆ SatAdjMoistureTol()

AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real SatAdj::SatAdjMoistureTol ( const amrex::Real  qtot)
inlinestatic
229  {
231  * amrex::max(amrex::Real(1.0), std::abs(qtot));
232  }
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12

Referenced by AdjustSatAdjCell().

Here is the caller graph for this function:

◆ Update_Micro_Vars() [1/2]

void SatAdj::Update_Micro_Vars ( amrex::MultiFab &  cons_in)
inlineoverridevirtual

Reimplemented from NullMoist.

93  {
94  if (!m_do_cond) { return; }
95  this->Copy_State_to_Micro(cons_in);
96  }
void Copy_State_to_Micro(const amrex::MultiFab &cons_in) override
Definition: ERF_InitSatAdj.cpp:44
Here is the call graph for this function:

◆ Update_Micro_Vars() [2/2]

void SatAdj::Update_Micro_Vars ( amrex::MultiFab &  cons_in,
const amrex::MultiFab *  base_state 
)
overridevirtual

Reimplemented from NullMoist.

◆ Update_State_Vars()

void SatAdj::Update_State_Vars ( amrex::MultiFab &  cons_in,
const amrex::MultiFab &   
)
inlineoverridevirtual

Reimplemented from NullMoist.

102  {
103  if (!m_do_cond) { return; }
104  this->Copy_Micro_to_State(cons_in);
105  }
void Copy_Micro_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_UpdateSatAdj.cpp:13
Here is the call graph for this function:

Member Data Documentation

◆ dt

amrex::Real SatAdj::dt
private

Referenced by Advance().

◆ m_do_cond

bool SatAdj::m_do_cond
private

◆ m_fac_cond

amrex::Real SatAdj::m_fac_cond
private

Referenced by Define().

◆ m_geom

amrex::Geometry SatAdj::m_geom
private

◆ m_qmoist_size

int SatAdj::m_qmoist_size = 0
private

Referenced by Qmoist_Ptr(), and Qmoist_Size().

◆ m_rdOcp

amrex::Real SatAdj::m_rdOcp
private

Referenced by Define().

◆ mic_fab_vars

amrex::Array<FabPtr, MicVar_SatAdj::NumVars> SatAdj::mic_fab_vars
private

◆ n_qstate_moist_numconc_size

int SatAdj::n_qstate_moist_numconc_size = 0
private

◆ n_qstate_moist_size

int SatAdj::n_qstate_moist_size = 2
private

Referenced by Qstate_Moist_Size().


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