ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SetupVertDiff.H
Go to the documentation of this file.
1 /** \cond */
2  const auto& dom_lo = lbound(domain);
3  const auto& dom_hi = ubound(domain);
4  amrex::ignore_unused(dom_lo, dom_hi);
5 
6  DiffChoice diffChoice = solverChoice.diffChoice;
7  TurbChoice turbChoice = solverChoice.turbChoice[level];
8 
9  bool l_consA = (diffChoice.molec_diff_type == MolecDiffType::ConstantAlpha);
10  bool l_turb = turbChoice.use_kturb;
11 
12  // Theta, KE, Scalar
13  Vector<Real> alpha_eff(NPRIMVAR_max, zero);
14  if (l_consA) {
15  for (int i = 0; i < NPRIMVAR_max; ++i) {
16  switch (i) {
17  case PrimTheta_comp:
18  alpha_eff[PrimTheta_comp] = diffChoice.alpha_T;
19  break;
20  case PrimScalar_comp:
21  alpha_eff[PrimScalar_comp] = diffChoice.alpha_C;
22  break;
23  case PrimQ1_comp:
24  alpha_eff[PrimQ1_comp] = diffChoice.alpha_C;
25  break;
26  case PrimQ2_comp:
27  alpha_eff[PrimQ2_comp] = diffChoice.alpha_C;
28  break;
29  case PrimQ3_comp:
30  alpha_eff[PrimQ3_comp] = diffChoice.alpha_C;
31  break;
32  case PrimQ4_comp:
33  alpha_eff[PrimQ4_comp] = diffChoice.alpha_C;
34  break;
35  case PrimQ5_comp:
36  alpha_eff[PrimQ5_comp] = diffChoice.alpha_C;
37  break;
38  case PrimQ6_comp:
39  alpha_eff[PrimQ6_comp] = diffChoice.alpha_C;
40  break;
41  default:
42  alpha_eff[i] = zero;
43  break;
44  }
45  }
46  } else {
47  for (int i = 0; i < NPRIMVAR_max; ++i) {
48  switch (i) {
49  case PrimTheta_comp:
50  alpha_eff[PrimTheta_comp] = diffChoice.rhoAlpha_T;
51  break;
52  case PrimScalar_comp:
53  alpha_eff[PrimScalar_comp] = diffChoice.rhoAlpha_C;
54  break;
55  case PrimQ1_comp:
56  alpha_eff[PrimQ1_comp] = diffChoice.rhoAlpha_C;
57  break;
58  case PrimQ2_comp:
59  alpha_eff[PrimQ2_comp] = diffChoice.rhoAlpha_C;
60  break;
61  case PrimQ3_comp:
62  alpha_eff[PrimQ3_comp] = diffChoice.rhoAlpha_C;
63  break;
64  case PrimQ4_comp:
65  alpha_eff[PrimQ4_comp] = diffChoice.rhoAlpha_C;
66  break;
67  case PrimQ5_comp:
68  alpha_eff[PrimQ5_comp] = diffChoice.rhoAlpha_C;
69  break;
70  case PrimQ6_comp:
71  alpha_eff[PrimQ6_comp] = diffChoice.rhoAlpha_C;
72  break;
73  default:
74  alpha_eff[i] = zero;
75  break;
76  }
77  }
78  }
79 
80  // The number of quantities following Scalar_h must be equal to the number
81  // of quantities in the conserved state following RhoScalar_comp -- this is
82  // currently all the moist quantities, which tops out at 11 for the Morrison model
83  Vector<int> eddy_diff_idz{EddyDiff::Theta_v, EddyDiff::KE_v, EddyDiff::Scalar_v,
88 
89  // Device vectors
90  Gpu::AsyncVector<Real> alpha_eff_d;
91  Gpu::AsyncVector<int> eddy_diff_idz_d;
92  alpha_eff_d.resize(alpha_eff.size());
93  eddy_diff_idz_d.resize(eddy_diff_idz.size());
94 
95  Gpu::copy(Gpu::hostToDevice, alpha_eff.begin() , alpha_eff.end() , alpha_eff_d.begin());
96  Gpu::copy(Gpu::hostToDevice, eddy_diff_idz.begin(), eddy_diff_idz.end(), eddy_diff_idz_d.begin());
97 
98  // Capture pointers for device code
99  Real* d_alpha_eff = alpha_eff_d.data();
100  [[maybe_unused]] int* d_eddy_diff_idz = eddy_diff_idz_d.data();
101 /** \endcond */
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
#define PrimQ1_comp
Definition: ERF_IndexDefines.H:58
#define NPRIMVAR_max
Definition: ERF_IndexDefines.H:33
#define PrimQ2_comp
Definition: ERF_IndexDefines.H:59
#define PrimQ4_comp
Definition: ERF_IndexDefines.H:61
#define PrimQ6_comp
Definition: ERF_IndexDefines.H:63
#define PrimQ5_comp
Definition: ERF_IndexDefines.H:62
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:55
#define PrimScalar_comp
Definition: ERF_IndexDefines.H:57
#define PrimQ3_comp
Definition: ERF_IndexDefines.H:60
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ Theta_v
Definition: ERF_IndexDefines.H:212
@ Scalar_v
Definition: ERF_IndexDefines.H:214
@ Q_v
Definition: ERF_IndexDefines.H:215
@ KE_v
Definition: ERF_IndexDefines.H:213
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_TurbStruct.H:114
bool use_kturb
Whether any turbulence model is active.
Definition: ERF_TurbStruct.H:660