ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_ImplicitDiff_S.cpp File Reference
Include dependency graph for ERF_ImplicitDiff_S.cpp:

Macros

#define INSTANTIATE_IMPLICIT_DIFF_FOR_MOM(STAGDIR)
 

Functions

void ImplicitDiffForState_S (const Box &bx, const Box &domain, const int level, const Real dt, const GpuArray< Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const Array4< Real > &cell_data, const Gpu::DeviceVector< Real > &stretched_dz_d, const Array4< const Real > &hfx_z, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const BCRec *bc_ptr, const bool use_SurfLayer, const Real implicit_fac)
 
template<int stagdir>
void ImplicitDiffForMom_S (const Box &bx, const Box &domain, const int level, const Real dt, const Array4< const Real > &cell_data, const Array4< Real > &face_data, const Array4< const Real > &tau_corr, const Gpu::DeviceVector< Real > &stretched_dz_d, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const BCRec *bc_ptr, const bool use_SurfLayer, const Real implicit_fac)
 

Macro Definition Documentation

◆ INSTANTIATE_IMPLICIT_DIFF_FOR_MOM

#define INSTANTIATE_IMPLICIT_DIFF_FOR_MOM (   STAGDIR)
Value:
template void ImplicitDiffForMom_S<STAGDIR> ( \
const Box&, \
const Box&, \
const int, \
const Real, \
const Array4<const Real>&, \
const Array4< Real>&, \
const Array4<const Real>&, \
const Gpu::DeviceVector<Real>&, \
const Array4<const Real>&, \
const SolverChoice&, \
const BCRec*, \
const bool, \
const Real);
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_DataStruct.H:128

Function Documentation

◆ ImplicitDiffForMom_S()

template<int stagdir>
void ImplicitDiffForMom_S ( const Box &  bx,
const Box &  domain,
const int  level,
const Real  dt,
const Array4< const Real > &  cell_data,
const Array4< Real > &  face_data,
const Array4< const Real > &  tau_corr,
const Gpu::DeviceVector< Real > &  stretched_dz_d,
const Array4< const Real > &  mu_turb,
const SolverChoice solverChoice,
const BCRec *  bc_ptr,
const bool  use_SurfLayer,
const Real  implicit_fac 
)

Function for computing the implicit contribution to the vertical diffusion of momentum, with a vertically stretched grid over flat terrain.

This function (explicitly instantiated below) handles staggering in x, y, or z through the template parameter, stagdir.

Parameters
[in]bxcell-centered box to loop over
[in]domainbox of the whole domain
[in]dttime step
[in]cell_dataconserved cell-centered rho
[in,out]face_dataconserved momentum
[in]tau_corrstress contribution to momentum that will be corrected by the implicit solve
[in]stretched_dz_darray over z of dz[k]
[in]mu_turbturbulent viscosity
[in]solverChoicecontainer of parameters
[in]bc_ptrcontainer with boundary conditions
[in]use_SurfLayerwhether we have turned on subgrid diffusion
[in]implicit_facif 1 then fully implicit; if 0 then fully explicit
185 {
186  BL_PROFILE_VAR("ImplicitDiffForMom_S()",ImplicitDiffForMom_S);
187 
188  // setup quantities for getRhoAlphaAtFaces()
189  DiffChoice dc = solverChoice.diffChoice;
190  TurbChoice tc = solverChoice.turbChoice[level];
192  bool l_turb = tc.use_kturb;
193  Real mu_eff = (l_consA) ? 2.0 * dc.dynamic_viscosity / dc.rho0_trans
194  : 2.0 * dc.dynamic_viscosity;
195 
196  // g(S*) coefficient
197  // stagdir==0: tau_corr = 0.5 * du/dz * mu_tot
198  // stagdir==1: tau_corr = 0.5 * dv/dz * mu_tot
199  // stagdir==2: tau_corr = dw/dz * mu_tot
200  constexpr Real gfac = (stagdir == 2) ? 2.0/3.0 : 1.0;
201 
202  // offsets used to average to faces
203  constexpr int ioff = (stagdir == 0) ? 1 : 0;
204  constexpr int joff = (stagdir == 1) ? 1 : 0;
205 
206  // Box bounds
207  int ilo = bx.smallEnd(0);
208  int ihi = bx.bigEnd(0);
209  int jlo = bx.smallEnd(1);
210  int jhi = bx.bigEnd(1);
211  int klo = bx.smallEnd(2);
212  int khi = bx.bigEnd(2);
213  amrex::ignore_unused(ilo, ihi, jlo, jhi);
214 
215  // Temporary FABs for tridiagonal solve (allocated on column)
216  // A[k] * x[k-1] + B[k] * x[k] + C[k+1] = RHS[k]
217  amrex::FArrayBox RHS_fab, soln_fab, coeffA_fab, coeffB_fab, inv_coeffB_fab, coeffC_fab;
218  RHS_fab.resize(bx,1, amrex::The_Async_Arena());
219  soln_fab.resize(bx,1, amrex::The_Async_Arena());
220  coeffA_fab.resize(bx,1, amrex::The_Async_Arena());
221  coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
222  inv_coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
223  coeffC_fab.resize(bx,1, amrex::The_Async_Arena());
224  auto const& RHS_a = RHS_fab.array();
225  auto const& soln_a = soln_fab.array();
226  auto const& coeffA_a = coeffA_fab.array(); // lower diagonal
227  auto const& coeffB_a = coeffB_fab.array(); // diagonal
228  auto const& inv_coeffB_a = inv_coeffB_fab.array();
229  auto const& coeffC_a = coeffC_fab.array(); // upper diagonal
230 
231  const auto& dom_lo = lbound(domain);
232  const auto& dom_hi = ubound(domain);
233  auto dz_ptr = stretched_dz_d.data();
234 
235  int bc_comp = BCVars::xvel_bc + stagdir;
236  bool ext_dir_on_zlo = (bc_ptr[bc_comp].lo(2) == ERFBCType::ext_dir ||
237  bc_ptr[bc_comp].lo(2) == ERFBCType::ext_dir_prim);
238  bool ext_dir_on_zhi = (bc_ptr[bc_comp].hi(2) == ERFBCType::ext_dir ||
239  bc_ptr[bc_comp].hi(2) == ERFBCType::ext_dir_prim);
240  bool foextrap_on_zhi = (bc_ptr[bc_comp].hi(2) == ERFBCType::foextrap);
241  amrex::ignore_unused(foextrap_on_zhi);
242 
243  AMREX_ASSERT_WITH_MESSAGE(ext_dir_on_zlo || ext_dir_on_zhi || use_SurfLayer,
244  "Unexpected lower BC used with implicit vertical diffusion");
245  AMREX_ASSERT_WITH_MESSAGE(foextrap_on_zhi,
246  "Unexpected upper BC used with implicit vertical diffusion");
247  if (stagdir < 2 && (ext_dir_on_zlo || ext_dir_on_zhi)) {
248  amrex::Warning("No-slip walls have not been fully tested");
249  }
250 
251 #ifdef AMREX_USE_GPU
252  ParallelFor(makeSlab(bx,2,0), [=] AMREX_GPU_DEVICE (int i, int j, int)
253  {
254 #else
255  for (int j(jlo); j<=jhi; ++j) {
256  for (int i(ilo); i<=ihi; ++i) {
257 #endif
258  // Build the coefficients and RHS
259  for (int k(klo); k <= khi; k++)
260  {
261  // Note: either ioff or joff are 1
262  Real rhoface = 0.5 * (cell_data(i,j,k,Rho_comp) + cell_data(i-ioff,j-joff,k,Rho_comp));
263 
264  Real rhoAlpha_lo, rhoAlpha_hi;
265  getRhoAlphaForFaces(i, j, k, ioff, joff, rhoAlpha_lo, rhoAlpha_hi,
266  cell_data, mu_turb, mu_eff,
267  l_consA, l_turb);
268 
269  Real dz_inv = 1.0 / dz_ptr[k];
270  Real dz_inv_lo = (k == dom_lo.z) ? dz_inv
271  : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
272  Real dz_inv_hi = (k == dom_hi.z) ? dz_inv
273  : 2.0 / (dz_ptr[k] + dz_ptr[k+1]);
274 
275  // Face data currently holds the _fully_ explicit solution, which
276  // will be used to determine the velocity gradient for the bottom
277  // BC
278  RHS_a(i,j,k) = face_data(i,j,k); // Note this is momentum but solution will be velocity
279 
280  // Notes:
281  //
282  // - In DiffusionSrcForMom (e.g., for x-mom)
283  //
284  // Real diffContrib = ...
285  // + (tau13(i,j,k+1) - tau13(i,j,k)) / dz_ptr[k]
286  // rho_u_rhs(i,j,k) -= diffContrib; // note the negative sign
287  //
288  // - We need to scale the explicit _part_ of `tau13` (for x-mom) by (1 - implicit_fac)
289  // The part that needs to be scaled is stored in `tau_corr`.
290  // E.g., tau13 = 0.5 * (du/dz + dw/dx)
291  // tau13_corr = 0.5 * du/dz
292  //
293  // - The momentum (`face_data`) was set to `S_old + S_rhs * dt`
294  // prior to including "ERF_Implicit.H". Recall that S_rhs includes
295  // sources from advection and other forcings, not just diffusion.
296  //
297  // - To correct momentum, we need to subtract `implicit_fac * diffContrib_corr`
298  // from S_rhs to recover `(1 - implicit_fac) * diffContrib_corr`,
299  // where `diffContrib_corr = -d(tau_corr)/dz`. The negative sign
300  // comes from our convention for the RHS diffusion source.
301  //
302  // Subtracting a negative gives the += below; multiply by dt to
303  // get the intermediate momentum on the RHS of the tridiagonal
304  // system.
305  RHS_a(i,j,k) += implicit_fac * gfac * (tau_corr(i,j,k+1) - tau_corr(i,j,k))*dz_inv * dt;
306 
307  // This represents the face-centered finite difference of two
308  // edge-centered finite differences (hi and lo)
309  coeffA_a(i,j,k) = -implicit_fac * gfac * rhoAlpha_lo * dt * dz_inv * dz_inv_lo;
310  coeffC_a(i,j,k) = -implicit_fac * gfac * rhoAlpha_hi * dt * dz_inv * dz_inv_hi;
311 
312  // Setup BCs
313  if (k == dom_lo.z) {
314  if (ext_dir_on_zlo) {
315  // This can be a no-slip wall (u = v = w = 0), slip wall (w = 0), or surface layer (w = 0)
316  if (stagdir==2) {
317  coeffC_a(i,j,klo) = 0.;
318  RHS_a(i,j,klo) = 0.;
319  } else {
320  // first-order:
321  // u(klo) - (u(klo+1) - u(klo))/dz_hi * dz/2 = u_dir
322  coeffC_a(i,j,klo) = -0.5 * dz_inv_hi / dz_inv;
323  RHS_a(i,j,klo) = face_data(i,j,klo-1); // Dirichlet value
324  }
325  } else if (use_SurfLayer) {
326  // Match explicit grad(u) at the surface
327  Real uhi = 2.0 * face_data(i,j,klo ) / (cell_data(i,j,klo ,Rho_comp) + cell_data(i-ioff,j-joff,klo ,Rho_comp));
328  Real ulo = 2.0 * face_data(i,j,klo-1) / (cell_data(i,j,klo-1,Rho_comp) + cell_data(i-ioff,j-joff,klo-1,Rho_comp));
329  RHS_a(i,j,klo) += coeffA_a(i,j,klo) * (uhi - ulo);
330  }
331 
332  // default is foextrap
333  coeffA_a(i,j,klo) = 0.;
334  }
335  if (k == dom_hi.z) {
336  if (ext_dir_on_zhi) {
337  if (stagdir==2) {
338  coeffA_a(i,j,khi) = 0.;
339  RHS_a(i,j,khi) = 0.;
340  } else {
341  // first-order:
342  // u(khi) + (u(khi) - u(khi-1))/dz_lo * dz/2 = u_dir
343  coeffA_a(i,j,khi) = -0.5 * dz_inv_lo / dz_inv;
344  RHS_a(i,j,khi) = face_data(i,j,khi+1); // Dirichlet value
345  }
346  }
347 
348  // default is foextrap
349  coeffC_a(i,j,khi) = 0.;
350  }
351 
352  coeffB_a(i,j,k) = rhoface - coeffA_a(i,j,k) - coeffC_a(i,j,k);
353  } // k
354 
355  SolveTridiag(i,j,klo,khi,soln_a,coeffA_a,coeffB_a,inv_coeffB_a,coeffC_a,RHS_a);
356  for (int k(klo); k<=khi; ++k) {
357  Real rhoface = 0.5 * (cell_data(i,j,k,Rho_comp) + cell_data(i-ioff,j-joff,k,Rho_comp));
358  face_data(i,j,k) = rhoface * soln_a(i,j,k);
359  }
360 
361 #ifdef AMREX_USE_GPU
362  });
363 #else
364  } // i
365  } // j
366 #endif
367 }
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void getRhoAlphaForFaces(int i, int j, int k, int ioff, int joff, amrex::Real &rhoAlpha_lo, amrex::Real &rhoAlpha_hi, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Real mu_eff, bool l_consA, bool l_turb)
Definition: ERF_GetRhoAlphaForFaces.H:5
void ImplicitDiffForMom_S(const Box &bx, const Box &domain, const int level, const Real dt, const Array4< const Real > &cell_data, const Array4< Real > &face_data, const Array4< const Real > &tau_corr, const Gpu::DeviceVector< Real > &stretched_dz_d, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const BCRec *bc_ptr, const bool use_SurfLayer, const Real implicit_fac)
Definition: ERF_ImplicitDiff_S.cpp:172
#define Rho_comp
Definition: ERF_IndexDefines.H:36
const auto & dom_hi
Definition: ERF_SetupVertDiff.H:2
bool l_turb
Definition: ERF_SetupVertDiff.H:8
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
bool l_consA
Definition: ERF_SetupVertDiff.H:7
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void SolveTridiag(int i, int j, int klo, int khi, const amrex::Array4< amrex::Real > &soln_a, const amrex::Array4< const amrex::Real > &coeffA_a, const amrex::Array4< amrex::Real > &coeffB_a, const amrex::Array4< amrex::Real > &inv_coeffB_a, const amrex::Array4< const amrex::Real > &coeffC_a, const amrex::Array4< const amrex::Real > &RHS_a)
Definition: ERF_SolveTridiag.H:6
@ xvel_bc
Definition: ERF_IndexDefines.H:87
@ foextrap
Definition: ERF_IndexDefines.H:208
@ ext_dir
Definition: ERF_IndexDefines.H:209
@ ext_dir_prim
Definition: ERF_IndexDefines.H:211
Definition: ERF_DiffStruct.H:19
amrex::Real rho0_trans
Definition: ERF_DiffStruct.H:91
MolecDiffType molec_diff_type
Definition: ERF_DiffStruct.H:84
amrex::Real dynamic_viscosity
Definition: ERF_DiffStruct.H:96
DiffChoice diffChoice
Definition: ERF_DataStruct.H:992
amrex::Vector< TurbChoice > turbChoice
Definition: ERF_DataStruct.H:995
Definition: ERF_TurbStruct.H:41
bool use_kturb
Definition: ERF_TurbStruct.H:396
Here is the call graph for this function:

◆ ImplicitDiffForState_S()

void ImplicitDiffForState_S ( const Box &  bx,
const Box &  domain,
const int  level,
const Real  dt,
const GpuArray< Real, AMREX_SPACEDIM *2 > &  bc_neumann_vals,
const Array4< Real > &  cell_data,
const Gpu::DeviceVector< Real > &  stretched_dz_d,
const Array4< const Real > &  hfx_z,
const Array4< const Real > &  mu_turb,
const SolverChoice solverChoice,
const BCRec *  bc_ptr,
const bool  use_SurfLayer,
const Real  implicit_fac 
)

Function for computing the implicit contribution to the vertical diffusion of theta, with a vertically stretched grid over flat terrain.

Parameters
[in]bxcell-centered box to loop over
[in]domainbox of the whole domain
[in]dttime step
[in]bc_neumann_valsvalues of derivatives if bc_type == Neumann
[in,out]cell_dataconserved cell-centered rho, rho theta
[in]stretched_dz_darray over z of dz[k]
[in,out]hfx_zheat flux in z-dir
[in]mu_turbturbulent viscosity
[in]solverChoicecontainer of parameters
[in]bc_ptrcontainer with boundary conditions
[in]use_SurfLayerwhether we have turned on subgrid diffusion
[in]implicit_facif 1 then fully implicit; if 0 then fully explicit
39 {
40  BL_PROFILE_VAR("ImplicitDiffForState_S()",ImplicitDiffForState_S);
41 
42  // setup quantities for getRhoAlpha()
43 #include "ERF_SetupVertDiff.H"
44  const int n = RhoTheta_comp;
45  const int qty_index = RhoTheta_comp;
46  const int prim_index = qty_index - 1;
47  const int prim_scal_index = (qty_index >= RhoScalar_comp && qty_index < RhoScalar_comp+NSCALARS) ? PrimScalar_comp : prim_index;
48 
49  // Box bounds
50  int ilo = bx.smallEnd(0);
51  int ihi = bx.bigEnd(0);
52  int jlo = bx.smallEnd(1);
53  int jhi = bx.bigEnd(1);
54  int klo = bx.smallEnd(2);
55  int khi = bx.bigEnd(2);
56  amrex::ignore_unused(ilo, ihi, jlo, jhi);
57 
58  // Temporary FABs for tridiagonal solve (allocated on column)
59  // A[k] * x[k-1] + B[k] * x[k] + C[k+1] = RHS[k]
60  amrex::FArrayBox RHS_fab, soln_fab, coeffA_fab, coeffB_fab, inv_coeffB_fab, coeffC_fab;
61  RHS_fab.resize(bx,1, amrex::The_Async_Arena());
62  soln_fab.resize(bx,1, amrex::The_Async_Arena());
63  coeffA_fab.resize(bx,1, amrex::The_Async_Arena());
64  coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
65  inv_coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
66  coeffC_fab.resize(bx,1, amrex::The_Async_Arena());
67  auto const& RHS_a = RHS_fab.array();
68  auto const& soln_a = soln_fab.array();
69  auto const& coeffA_a = coeffA_fab.array(); // lower diagonal
70  auto const& coeffB_a = coeffB_fab.array(); // diagonal
71  auto const& inv_coeffB_a = inv_coeffB_fab.array();
72  auto const& coeffC_a = coeffC_fab.array(); // upper diagonal
73 
74  auto dz_ptr = stretched_dz_d.data();
75 
76  int bc_comp = qty_index;
77  bool foextrap_on_zlo = (bc_ptr[bc_comp].lo(2) == ERFBCType::foextrap);
78  bool foextrap_on_zhi = (bc_ptr[bc_comp].hi(2) == ERFBCType::foextrap);
79  bool neumann_on_zlo = (bc_ptr[bc_comp].lo(2) == ERFBCType::neumann);
80  bool neumann_on_zhi = (bc_ptr[bc_comp].hi(2) == ERFBCType::neumann);
81  amrex::ignore_unused(foextrap_on_zlo, foextrap_on_zhi);
82 
83  AMREX_ASSERT_WITH_MESSAGE(foextrap_on_zlo || neumann_on_zlo || use_SurfLayer,
84  "Unexpected lower BC used with implicit vertical diffusion");
85  AMREX_ASSERT_WITH_MESSAGE(foextrap_on_zhi || neumann_on_zhi,
86  "Unexpected upper BC used with implicit vertical diffusion");
87 
88 #ifdef AMREX_USE_GPU
89  ParallelFor(makeSlab(bx,2,0), [=] AMREX_GPU_DEVICE (int i, int j, int)
90  {
91 #else
92  for (int j(jlo); j<=jhi; ++j) {
93  for (int i(ilo); i<=ihi; ++i) {
94 #endif
95  // Build the coefficients and RHS
96  for (int k(klo); k <= khi; k++)
97  {
98  Real rhoAlpha_lo, rhoAlpha_hi;
99  getRhoAlpha(i, j, k, rhoAlpha_lo, rhoAlpha_hi,
100  cell_data, mu_turb, d_alpha_eff, d_eddy_diff_idz,
101  prim_index, prim_scal_index, l_consA, l_turb);
102 
103  Real dz_inv = 1.0 / dz_ptr[k];
104  Real dz_inv_lo = (k == dom_lo.z) ? dz_inv
105  : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
106  Real dz_inv_hi = (k == dom_hi.z) ? dz_inv
107  : 2.0 / (dz_ptr[k] + dz_ptr[k+1]);
108 
109  RHS_a(i,j,k) = cell_data(i,j,k,n); // Note this is rho*theta, whereas solution will be theta
110 
111  // This represents the cell-centered finite difference of two
112  // face-centered finite differences (hi and lo)
113  coeffA_a(i,j,k) = -implicit_fac * rhoAlpha_lo * dt * dz_inv * dz_inv_lo;
114  coeffC_a(i,j,k) = -implicit_fac * rhoAlpha_hi * dt * dz_inv * dz_inv_hi;
115 
116  // Setup BCs
117  if (k == dom_lo.z) {
118  if (use_SurfLayer) {
119  RHS_a(i,j,klo) += implicit_fac * dt * dz_inv * hfx_z(i,j,0);
120  } else if (neumann_on_zlo) {
121  RHS_a(i,j,klo) += coeffA_a(i,j,klo) * bc_neumann_vals[2] / dz_inv_lo;
122  }
123 
124  coeffA_a(i,j,klo) = 0.;
125  }
126  if (k == dom_hi.z) {
127  if (neumann_on_zhi) {
128  RHS_a(i,j,khi) -= coeffC_a(i,j,khi) * bc_neumann_vals[5] / dz_inv_hi;
129  }
130 
131  coeffC_a(i,j,khi) = 0.;
132  }
133 
134  coeffB_a(i,j,k) = cell_data(i,j,k,Rho_comp) - coeffA_a(i,j,k) - coeffC_a(i,j,k);
135  } // k
136 
137  SolveTridiag(i,j,klo,khi,soln_a,coeffA_a,coeffB_a,inv_coeffB_a,coeffC_a,RHS_a);
138  for (int k(klo); k<=khi; ++k) {
139  cell_data(i,j,k,n) = cell_data(i,j,k,Rho_comp) * soln_a(i,j,k);
140  }
141 
142 #ifdef AMREX_USE_GPU
143  });
144 #else
145  } // i
146  } // j
147 #endif
148 }
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void getRhoAlpha(int i, int j, int k, amrex::Real &rhoAlpha_lo, amrex::Real &rhoAlpha_hi, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Real *d_alpha_eff, const int *d_eddy_diff_idz, int prim_index, int prim_scal_index, bool l_consA, bool l_turb)
Definition: ERF_GetRhoAlpha.H:5
void ImplicitDiffForState_S(const Box &bx, const Box &domain, const int level, const Real dt, const GpuArray< Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const Array4< Real > &cell_data, const Gpu::DeviceVector< Real > &stretched_dz_d, const Array4< const Real > &hfx_z, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const BCRec *bc_ptr, const bool use_SurfLayer, const Real implicit_fac)
Definition: ERF_ImplicitDiff_S.cpp:27
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:40
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define PrimScalar_comp
Definition: ERF_IndexDefines.H:52
int * d_eddy_diff_idz
Definition: ERF_SetupVertDiff.H:107
Real * d_alpha_eff
Definition: ERF_SetupVertDiff.H:104
@ neumann
Definition: ERF_IndexDefines.H:213
Here is the call graph for this function: