ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_NativeScalarDiffusion.H
Go to the documentation of this file.
1 #ifndef ERF_NATIVE_SCALAR_DIFFUSION_H_
2 #define ERF_NATIVE_SCALAR_DIFFUSION_H_
3 
4 #include "ERF_ScalarDiffusion.H"
5 #include "ERF_IndexDefines.H"
6 
7 /** Native-only state/layout decisions resolved before entering a spatial
8  * kernel. This policy belongs to native conserved-state adapters and is not
9  * used by the reusable field-level numerical operations. */
11 {
13  int scalar_comp = 0;
14  int rhs_comp = 0;
15  int flux_comp = 0;
16  int bc_comp = 0;
17  bool is_theta = false;
18  bool is_q1 = false;
19  bool is_q2 = false;
21 };
22 
23 /** Resolve conserved-state identity to ERF's native coefficient category. */
25 ResolveNativeScalarDiffusionPolicy (const int qty_comp, const DiffChoice& choice)
26 {
28  policy.scalar_comp = qty_comp - 1;
29  policy.rhs_comp = qty_comp;
30  policy.flux_comp = 0;
31  policy.bc_comp =
32  (qty_comp >= RhoScalar_comp && qty_comp < RhoScalar_comp + NSCALARS)
34  : qty_comp;
35  if (policy.bc_comp > BCVars::RhoScalar_bc_comp) {
36  policy.bc_comp -= (NSCALARS - 1);
37  }
38  policy.is_theta = qty_comp == RhoTheta_comp;
39  policy.is_q1 = qty_comp == RhoQ1_comp;
40  policy.is_q2 = qty_comp == RhoQ2_comp;
42  policy.is_theta || qty_comp == RhoKE_comp || policy.is_q1;
43 
44  if (policy.is_theta) {
48  policy.coefficients.molecular_coeff = choice.alpha_T;
49  } else if (choice.molec_diff_type == MolecDiffType::Constant) {
50  policy.coefficients.molecular_coeff = choice.rhoAlpha_T;
51  }
52  } else if (qty_comp == RhoKE_comp) {
55  } else if (
56  qty_comp >= RhoScalar_comp && qty_comp < RhoScalar_comp + NSCALARS) {
60  policy.coefficients.molecular_coeff = choice.alpha_C;
61  } else if (choice.molec_diff_type == MolecDiffType::Constant) {
62  policy.coefficients.molecular_coeff = choice.rhoAlpha_C;
63  }
64  } else {
65  // Every q-state, including future appended species, uses the Q eddy
66  // category. Molecular diffusion is defined only through Q6.
69  if (qty_comp >= RhoQ1_comp && qty_comp <= RhoQ6_comp) {
71  policy.coefficients.molecular_coeff = choice.alpha_C;
72  } else if (choice.molec_diff_type == MolecDiffType::Constant) {
73  policy.coefficients.molecular_coeff = choice.rhoAlpha_C;
74  }
75  }
76  }
77  return policy;
78 }
79 
80 #endif // ERF_NATIVE_SCALAR_DIFFUSION_H_
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:46
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:43
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:49
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:48
#define RhoQ6_comp
Definition: ERF_IndexDefines.H:53
#define RhoKE_comp
Definition: ERF_IndexDefines.H:44
NativeScalarDiffusionPolicy ResolveNativeScalarDiffusionPolicy(const int qty_comp, const DiffChoice &choice)
Definition: ERF_NativeScalarDiffusion.H:25
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:96
@ Theta_v
Definition: ERF_IndexDefines.H:253
@ Scalar_v
Definition: ERF_IndexDefines.H:255
@ Q_v
Definition: ERF_IndexDefines.H:256
@ Q_h
Definition: ERF_IndexDefines.H:251
@ Scalar_h
Definition: ERF_IndexDefines.H:250
@ KE_v
Definition: ERF_IndexDefines.H:254
@ Theta_h
Definition: ERF_IndexDefines.H:248
@ KE_h
Definition: ERF_IndexDefines.H:249
Definition: ERF_DiffStruct.H:22
MolecDiffType molec_diff_type
Selected molecular transport model.
Definition: ERF_DiffStruct.H:94
amrex::Real rhoAlpha_T
Dynamic temperature diffusion coefficient [kg/(m-s)].
Definition: ERF_DiffStruct.H:104
amrex::Real alpha_C
Kinematic scalar diffusivity [m2/s].
Definition: ERF_DiffStruct.H:98
amrex::Real alpha_T
Kinematic temperature diffusivity [m2/s].
Definition: ERF_DiffStruct.H:97
amrex::Real rhoAlpha_C
Dynamic scalar diffusion coefficient [kg/(m-s)].
Definition: ERF_DiffStruct.H:105
Definition: ERF_NativeScalarDiffusion.H:11
int bc_comp
Definition: ERF_NativeScalarDiffusion.H:16
bool scale_raw_vertical_flux
Definition: ERF_NativeScalarDiffusion.H:20
int rhs_comp
Definition: ERF_NativeScalarDiffusion.H:14
int scalar_comp
Definition: ERF_NativeScalarDiffusion.H:13
ScalarDiffusionCoefficients coefficients
Definition: ERF_NativeScalarDiffusion.H:12
bool is_q1
Definition: ERF_NativeScalarDiffusion.H:18
bool is_theta
Definition: ERF_NativeScalarDiffusion.H:17
int flux_comp
Definition: ERF_NativeScalarDiffusion.H:15
bool is_q2
Definition: ERF_NativeScalarDiffusion.H:19
Definition: ERF_ScalarDiffusion.H:23
int eddy_v_comp
Definition: ERF_ScalarDiffusion.H:26
int eddy_h_comp
Definition: ERF_ScalarDiffusion.H:25
amrex::Real molecular_coeff
Definition: ERF_ScalarDiffusion.H:24