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 &lev)
 
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
 

Additional Inherited Members

- Protected Member Functions inherited from NullMoist
void set_anelastic_reference_pressure_mode (const SolverChoice &sc)
 
void assert_base_state_available (const amrex::MultiFab *base_state) const
 
- Protected Attributes inherited from NullMoist
int m_level {0}
 
bool m_use_anelastic_reference_pressure {false}
 

Member Typedef Documentation

◆ FabPtr

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

Constructor & Destructor Documentation

◆ SatAdj()

SatAdj::SatAdj ( )
inline
53 {}

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

◆ Advance()

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

Reimplemented from NullMoist.

113  {
114  dt = dt_advance;
115 
116  this->AdvanceSatAdj(solverChoice);
117  }
void AdvanceSatAdj(const SolverChoice &)
Definition: ERF_SatAdj.cpp:11
amrex::Real dt
Definition: ERF_SatAdj.H:343
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:244
amrex::Real m_fac_cond
Definition: ERF_SatAdj.H:346
amrex::Array< FabPtr, MicVar_SatAdj::NumVars > mic_fab_vars
Definition: ERF_SatAdj.H:351
amrex::Real m_rdOcp
Definition: ERF_SatAdj.H:347
bool m_do_cond
Definition: ERF_SatAdj.H:348
@ tabs
Definition: ERF_Kessler.H:27
@ qv
Definition: ERF_Kessler.H:31
@ pres
Definition: ERF_SatAdj.H:39
@ T
Definition: ERF_IndexDefines.H:128
@ p
Definition: ERF_WSM6.H:280

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:340
@ rho
Definition: ERF_SatAdj.H:36
@ 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.

64  {
65  m_fac_cond = lcond / sc.c_p;
66  m_rdOcp = sc.rdOcp;
67  m_do_cond = (!sc.uses_shoc_family());
69  }
constexpr amrex::Real lcond
Definition: ERF_MicrophysicsConstants.H:109
void set_anelastic_reference_pressure_mode(const SolverChoice &sc)
Definition: ERF_NullMoist.H:155
amrex::Real rdOcp
Ratio of dry-air gas constant to c_p.
Definition: ERF_DataStruct.H:2062
bool uses_shoc_family() const noexcept
Query whether any SHOC-family PBL scheme is active.
Definition: ERF_DataStruct.H:2177
amrex::Real c_p
Specific heat at constant pressure for dry air [J/(kg-K)].
Definition: ERF_DataStruct.H:2061
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:43

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

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.

121  {
123  return nullptr;
124  }
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
int m_qmoist_size
Definition: ERF_SatAdj.H:331
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.

139  {
140  a_idx.clear();
141  a_names.clear();
142  }

◆ Qmoist_Size()

int SatAdj::Qmoist_Size ( )
inlineoverridevirtual

Reimplemented from NullMoist.

127 { 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:337

◆ Qstate_Moist_Size()

int SatAdj::Qstate_Moist_Size ( )
inlineoverridevirtual

Reimplemented from NullMoist.

130 { return SatAdj::n_qstate_moist_size; }
int n_qstate_moist_size
Definition: ERF_SatAdj.H:334

◆ SatAdjMoistureTol()

AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real SatAdj::SatAdjMoistureTol ( const amrex::Real  qtot)
inlinestatic
231  {
233  * amrex::max(amrex::Real(1.0), std::abs(qtot));
234  }
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.

95  {
96  if (!m_do_cond) { return; }
97  this->Copy_State_to_Micro(cons_in);
98  }
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.

104  {
105  if (!m_do_cond) { return; }
106  this->Copy_Micro_to_State(cons_in);
107  }
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: