ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Diffusion.H
Go to the documentation of this file.
1 /** \file ERF_Diffusion.H */
2 
3 #ifndef ERF_DIFFUSION_H_
4 #define ERF_DIFFUSION_H_
5 
6 #include "AMReX.H"
7 #include "AMReX_MultiFab.H"
8 #include "AMReX_BCRec.H"
9 
10 #include "ERF_DataStruct.H"
11 #include "ERF_IndexDefines.H"
12 #include "ERF_SurfaceLayer.H"
13 #include "ERF_EB.H"
14 #include "ERF_ScalarDiffusion.H"
15 
16 /** \brief Add stress-divergence diffusion source terms to the momentum RHS. */
17 void DiffusionSrcForMom (const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
18  const amrex::Array4< amrex::Real>& rho_u_rhs,
19  const amrex::Array4< amrex::Real>& rho_v_rhs,
20  const amrex::Array4< amrex::Real>& rho_w_rhs,
21  const amrex::Array4<const amrex::Real>& tau11 ,
22  const amrex::Array4<const amrex::Real>& tau22 ,
23  const amrex::Array4<const amrex::Real>& tau33 ,
24  const amrex::Array4<const amrex::Real>& tau12 , const amrex::Array4<const amrex::Real>& tau21,
25  const amrex::Array4<const amrex::Real>& tau13 , const amrex::Array4<const amrex::Real>& tau31,
26  const amrex::Array4<const amrex::Real>& tau23 , const amrex::Array4<const amrex::Real>& tau32,
27  const amrex::Array4<const amrex::Real>& detJ_arr ,
28  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
29  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
30  const amrex::Array4<const amrex::Real>& mf_mx ,
31  const amrex::Array4<const amrex::Real>& mf_ux ,
32  const amrex::Array4<const amrex::Real>& mf_vx ,
33  const amrex::Array4<const amrex::Real>& mf_my ,
34  const amrex::Array4<const amrex::Real>& mf_uy ,
35  const amrex::Array4<const amrex::Real>& mf_vy ,
36  const bool use_stretched_dz, const bool use_variable_dz);
37 
38 /** \brief Add embedded-boundary stress-divergence diffusion source terms to the momentum RHS. */
39 void DiffusionSrcForMom_EB (const amrex::MFIter& mfi,
40  [[maybe_unused]] const amrex::Box& domain,
41  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
42  const amrex::Array4< amrex::Real>& rho_u_rhs,
43  const amrex::Array4< amrex::Real>& rho_v_rhs,
44  const amrex::Array4< amrex::Real>& rho_w_rhs,
45  const amrex::Array4<const amrex::Real>& u_arr ,
46  const amrex::Array4<const amrex::Real>& v_arr ,
47  const amrex::Array4<const amrex::Real>& w_arr ,
48  const amrex::Array4<const amrex::Real>& tau11 ,
49  const amrex::Array4<const amrex::Real>& tau22 ,
50  const amrex::Array4<const amrex::Real>& tau33 ,
51  const amrex::Array4<const amrex::Real>& tau12 ,
52  const amrex::Array4<const amrex::Real>& tau13 ,
53  const amrex::Array4<const amrex::Real>& tau23 ,
54  const amrex::Array4<const amrex::Real>& u_tau_eb13 ,
55  const amrex::Array4<const amrex::Real>& u_tau_eb23 ,
56  const amrex::Array4<const amrex::Real>& v_tau_eb13 ,
57  const amrex::Array4<const amrex::Real>& v_tau_eb23 ,
58  const amrex::Array4<const amrex::Real>& w_tau_eb13 ,
59  const amrex::Array4<const amrex::Real>& w_tau_eb23 ,
60  const amrex::Real* dx_arr,
61  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
62  const amrex::Array4<const amrex::Real>& mf_mx ,
63  const amrex::Array4<const amrex::Real>& mf_ux ,
64  const amrex::Array4<const amrex::Real>& mf_vx ,
65  const amrex::Array4<const amrex::Real>& mf_my ,
66  const amrex::Array4<const amrex::Real>& mf_uy ,
67  const amrex::Array4<const amrex::Real>& mf_vy ,
68  const SolverChoice& solverChoice,
69  const eb_& ebfact,
70  [[maybe_unused]] const amrex::BCRec* bc_ptr);
71 
72 /**
73  * \brief Add regular-grid state diffusion on a uniform grid without terrain.
74  *
75  * This public routine is the native adapter: for each conserved component it
76  * resolves `scalar_comp = qty_comp - 1`, the coefficient/eddy category, BC
77  * slot, prescribed surface fluxes, diagnostic outputs, scratch `flux_comp`,
78  * and tendency `rhs_comp`. The component-explicit numerical face operators
79  * are declared in ERF_ScalarDiffusion.H and do not infer those selections
80  * from a conserved-state index. Their molecular coefficient is kinematic
81  * alpha with ConstantAlpha and density-weighted rhoAlpha with Constant.
82  * `rho_comp` selects density independently when ConstantAlpha is used;
83  * `eddy_h_comp` and `eddy_v_comp` select density-weighted turbulence
84  * coefficients independently of the scalar storage component.
85  *
86  * The raw vertical face flux is `F_z = -K d_z(chi)`. On terrain the
87  * transformed vertical numerator is
88  * `G_z = F_z - m_x h_xi Fbar_x - m_y h_eta Fbar_y`, and the mapped
89  * conservative transfer is `T_z = G_z/(m_x m_y)`. These quantities have
90  * distinct meanings. Semi-implicit integration scales only raw `F_z`; the
91  * terrain cross terms remain explicit.
92  */
93 void DiffusionSrcForState_N (const amrex::Box& bx, const amrex::Box& domain,
94  int start_comp, int num_comp,
95  const amrex::Array4<const amrex::Real>& u,
96  const amrex::Array4<const amrex::Real>& v,
97  const amrex::Array4<const amrex::Real>& cell_data,
98  const amrex::Array4<const amrex::Real>& cell_prim,
99  const amrex::Array4<amrex::Real>& cell_rhs,
100  const amrex::Array4<amrex::Real>& xflux,
101  const amrex::Array4<amrex::Real>& yflux,
102  const amrex::Array4<amrex::Real>& zflux,
103  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
104  const amrex::Array4<const amrex::Real>& mf_mx,
105  const amrex::Array4<const amrex::Real>& mf_ux,
106  const amrex::Array4<const amrex::Real>& mf_vx,
107  const amrex::Array4<const amrex::Real>& mf_my,
108  const amrex::Array4<const amrex::Real>& mf_uy,
109  const amrex::Array4<const amrex::Real>& mf_vy,
110  amrex::Array4< amrex::Real>& hfx_x,
111  amrex::Array4< amrex::Real>& hfx_y,
112  amrex::Array4< amrex::Real>& hfx_z,
113  amrex::Array4< amrex::Real>& qfx1_x,
114  amrex::Array4< amrex::Real>& qfx1_y,
115  amrex::Array4< amrex::Real>& qfx1_z,
116  amrex::Array4< amrex::Real>& qfx2_z,
117  const amrex::Array4<const amrex::Real>& mu_turb,
118  const SolverChoice& solverChoice,
119  const int level,
120  const amrex::BCRec* bc_ptr,
121  const bool use_SurfLayer,
122  const amrex::Vector<std::unique_ptr<SurfaceLayer>>& SurfLayer,
123  const amrex::Real implicit_fac);
124 
125 /** \brief Native adapter for regular scalar diffusion on a vertically stretched grid. */
126 void DiffusionSrcForState_S (const amrex::Box& bx, const amrex::Box& domain,
127  int start_comp, int num_comp,
128  const amrex::Array4<const amrex::Real>& cell_data,
129  const amrex::Array4<const amrex::Real>& cell_prim,
130  const amrex::Array4<amrex::Real>& cell_rhs,
131  const amrex::Array4<amrex::Real>& xflux,
132  const amrex::Array4<amrex::Real>& yflux,
133  const amrex::Array4<amrex::Real>& zflux,
134  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
135  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
136  const amrex::Array4<const amrex::Real>& mf_mx,
137  const amrex::Array4<const amrex::Real>& mf_ux,
138  const amrex::Array4<const amrex::Real>& mf_vx,
139  const amrex::Array4<const amrex::Real>& mf_my,
140  const amrex::Array4<const amrex::Real>& mf_uy,
141  const amrex::Array4<const amrex::Real>& mf_vy,
142  amrex::Array4< amrex::Real>& hfx_x,
143  amrex::Array4< amrex::Real>& hfx_y,
144  amrex::Array4< amrex::Real>& hfx_z,
145  amrex::Array4< amrex::Real>& qfx1_x,
146  amrex::Array4< amrex::Real>& qfx1_y,
147  amrex::Array4< amrex::Real>& qfx1_z,
148  amrex::Array4< amrex::Real>& qfx2_z,
149  const amrex::Array4<const amrex::Real>& mu_turb,
150  const SolverChoice& solverChoice,
151  const int level,
152  const amrex::BCRec* bc_ptr,
153  const bool use_SurfLayer,
154  const amrex::Vector<std::unique_ptr<SurfaceLayer>>& SurfLayer,
155  const amrex::Real implicit_fac);
156 
157 /** \brief Native adapter for regular scalar diffusion on terrain-following coordinates. */
158 void DiffusionSrcForState_T (const amrex::Box& bx, const amrex::Box& domain,
159  int start_comp, int num_comp,
160  const bool& rotate,
161  const amrex::Array4<const amrex::Real>& cell_data,
162  const amrex::Array4<const amrex::Real>& cell_prim,
163  const amrex::Array4<amrex::Real>& cell_rhs,
164  const amrex::Array4<amrex::Real>& xflux,
165  const amrex::Array4<amrex::Real>& yflux,
166  const amrex::Array4<amrex::Real>& zflux,
167  const amrex::Array4<const amrex::Real>& z_nd,
168  const amrex::Array4<const amrex::Real>& z_cc,
169  const amrex::Array4<const amrex::Real>& ax,
170  const amrex::Array4<const amrex::Real>& ay,
171  const amrex::Array4<const amrex::Real>& az,
172  const amrex::Array4<const amrex::Real>& detJ,
173  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
174  const amrex::Array4<const amrex::Real>& mf_mx,
175  const amrex::Array4<const amrex::Real>& mf_ux,
176  const amrex::Array4<const amrex::Real>& mf_vx,
177  const amrex::Array4<const amrex::Real>& mf_my,
178  const amrex::Array4<const amrex::Real>& mf_uy,
179  const amrex::Array4<const amrex::Real>& mf_vy,
180  amrex::Array4< amrex::Real>& hfx_x,
181  amrex::Array4< amrex::Real>& hfx_y,
182  amrex::Array4< amrex::Real>& hfx_z,
183  amrex::Array4< amrex::Real>& qfx1_x,
184  amrex::Array4< amrex::Real>& qfx1_y,
185  amrex::Array4< amrex::Real>& qfx1_z,
186  amrex::Array4< amrex::Real>& qfx2_z,
187  const amrex::Array4<const amrex::Real>& mu_turb,
188  const SolverChoice& solverChoice,
189  const int level,
190  const amrex::BCRec* bc_ptr,
191  const bool use_SurfLayer,
192  const amrex::Vector<std::unique_ptr<SurfaceLayer>>& SurfLayer,
193  const amrex::Real implicit_fac);
194 
195 /** \brief Add state diffusion source terms for embedded-boundary cells. */
196 void DiffusionSrcForState_EB (const amrex::Box& bx, const amrex::Box& domain,
197  int start_comp, int num_comp,
198  const amrex::Array4<const amrex::Real>& u,
199  const amrex::Array4<const amrex::Real>& v,
200  const amrex::Array4<const amrex::Real>& cell_data,
201  const amrex::Array4<const amrex::Real>& cell_prim,
202  const amrex::Array4<amrex::Real>& cell_rhs,
203  const amrex::Array4<amrex::Real>& xflux,
204  const amrex::Array4<amrex::Real>& yflux,
205  const amrex::Array4<amrex::Real>& zflux,
206  const amrex::Array4<const amrex::EBCellFlag>& cfg_arr,
207  const amrex::Array4<const amrex::Real>& ax_arr,
208  const amrex::Array4<const amrex::Real>& ay_arr,
209  const amrex::Array4<const amrex::Real>& az_arr,
210  const amrex::Array4<const amrex::Real>& detJ,
211  const amrex::Array4<const amrex::Real>& barea_arr,
212  const amrex::Array4<const amrex::Real>& bcent_arr,
213  const amrex::Real* dx_arr,
214  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
215  amrex::Array4< amrex::Real>& hfx_z,
216  amrex::Array4< amrex::Real>& qfx1_z,
217  amrex::Array4< amrex::Real>& qfx2_z,
218  amrex::Array4< amrex::Real>& hfx_EB,
219  const amrex::Array4<const amrex::Real>& mu_turb,
220  const SolverChoice& solverChoice,
221  const int level,
222  const amrex::BCRec* bc_ptr,
223  const bool use_SurfLayer,
224  const amrex::Vector<std::unique_ptr<SurfaceLayer>>& SurfLayer);
225 
226 /** \brief Compute embedded-boundary stress components for constant viscosity. */
227 void ComputeStressConsVisc_EB (amrex::Box bxcc,
228  amrex::Box tbxxy,
229  amrex::Box tbxxz,
230  amrex::Box tbxyz,
231  amrex::Real mu_eff,
232  const amrex::Array4<const amrex::Real>& cell_data,
233  amrex::Array4<amrex::Real>& tau11,
234  amrex::Array4<amrex::Real>& tau22,
235  amrex::Array4<amrex::Real>& tau33,
236  amrex::Array4<amrex::Real>& tau12,
237  amrex::Array4<amrex::Real>& tau13,
238  amrex::Array4<amrex::Real>& tau23,
239  const amrex::Array4<const amrex::Real>& er_arr,
240  amrex::Array4<const amrex::Real>& vfrac,
241  amrex::Array4<amrex::Real>& tau13i,
242  amrex::Array4<amrex::Real>& tau23i,
243  amrex::Array4<amrex::Real>& tau33i);
244 
245 /** \brief Compute stress components for constant viscosity on a uniform grid without terrain. */
246 void ComputeStressConsVisc_N (amrex::Box bxcc,
247  amrex::Box tbxxy,
248  amrex::Box tbxxz,
249  amrex::Box tbxyz,
250  amrex::Real mu_eff,
251  const amrex::Array4<const amrex::Real>& cell_data,
252  amrex::Array4<amrex::Real>& tau11,
253  amrex::Array4<amrex::Real>& tau22,
254  amrex::Array4<amrex::Real>& tau33,
255  amrex::Array4<amrex::Real>& tau12,
256  amrex::Array4<amrex::Real>& tau13,
257  amrex::Array4<amrex::Real>& tau23,
258  const amrex::Array4<const amrex::Real>& er_arr,
259  amrex::Array4<amrex::Real>& tau13i,
260  amrex::Array4<amrex::Real>& tau23i,
261  amrex::Array4<amrex::Real>& tau33i);
262 
263 /** \brief Compute stress components for constant viscosity on a vertically stretched grid. */
264 void ComputeStressConsVisc_S (amrex::Box bxcc,
265  amrex::Box tbxxy,
266  amrex::Box tbxxz,
267  amrex::Box tbxyz,
268  amrex::Real mu_eff,
269  const amrex::Array4<const amrex::Real>& cell_data,
270  amrex::Array4<amrex::Real>& tau11,
271  amrex::Array4<amrex::Real>& tau22,
272  amrex::Array4<amrex::Real>& tau33,
273  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
274  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
275  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
276  const amrex::Array4<const amrex::Real>& er_arr,
277  const amrex::Array4<const amrex::Real>& mf_mx,
278  const amrex::Array4<const amrex::Real>& mf_ux,
279  const amrex::Array4<const amrex::Real>& mf_vx,
280  const amrex::Array4<const amrex::Real>& mf_my,
281  const amrex::Array4<const amrex::Real>& mf_uy,
282  const amrex::Array4<const amrex::Real>& mf_vy,
283  amrex::Array4<amrex::Real>& tau13i,
284  amrex::Array4<amrex::Real>& tau23i,
285  amrex::Array4<amrex::Real>& tau33i);
286 
287 /** \brief Compute stress components for constant viscosity on terrain-following coordinates. */
288 void ComputeStressConsVisc_T (amrex::Box bxcc,
289  amrex::Box tbxxy,
290  amrex::Box tbxxz,
291  amrex::Box tbxyz,
292  amrex::Real mu_eff,
293  const amrex::Array4<const amrex::Real>& cell_data,
294  amrex::Array4<amrex::Real>& tau11,
295  amrex::Array4<amrex::Real>& tau22,
296  amrex::Array4<amrex::Real>& tau33,
297  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
298  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
299  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
300  const amrex::Array4<const amrex::Real>& er_arr,
301  const amrex::Array4<const amrex::Real>& z_nd,
302  const amrex::Array4<const amrex::Real>& detJ,
303  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
304  const amrex::Array4<const amrex::Real>& mf_mx,
305  const amrex::Array4<const amrex::Real>& mf_ux,
306  const amrex::Array4<const amrex::Real>& mf_vx,
307  const amrex::Array4<const amrex::Real>& mf_my,
308  const amrex::Array4<const amrex::Real>& mf_uy,
309  const amrex::Array4<const amrex::Real>& mf_vy,
310  amrex::Array4<amrex::Real>& tau13i,
311  amrex::Array4<amrex::Real>& tau23i,
312  amrex::Array4<amrex::Real>& tau33i,
313  const bool implicit_metric);
314 
315 /** \brief Compute embedded-boundary stress components for variable viscosity. */
316 void ComputeStressVarVisc_EB (amrex::Box bxcc,
317  amrex::Box tbxxy,
318  amrex::Box tbxxz,
319  amrex::Box tbxyz,
320  amrex::Real mu_eff,
321  const amrex::Array4<const amrex::Real>& mu_turb,
322  const amrex::Array4<const amrex::Real>& cell_data,
323  amrex::Array4<amrex::Real>& tau11,
324  amrex::Array4<amrex::Real>& tau22,
325  amrex::Array4<amrex::Real>& tau33,
326  amrex::Array4<amrex::Real>& tau12,
327  amrex::Array4<amrex::Real>& tau13,
328  amrex::Array4<amrex::Real>& tau23,
329  const amrex::Array4<const amrex::Real>& er_arr,
330  amrex::Array4<const amrex::Real>& vfrac,
331  amrex::Array4<amrex::Real>& tau13i,
332  amrex::Array4<amrex::Real>& tau23i,
333  amrex::Array4<amrex::Real>& tau33i);
334 
335 /** \brief Compute stress components for variable viscosity on a uniform grid without terrain. */
336 void ComputeStressVarVisc_N (amrex::Box bxcc,
337  amrex::Box tbxxy,
338  amrex::Box tbxxz,
339  amrex::Box tbxyz,
340  amrex::Real mu_eff,
341  const amrex::Array4<const amrex::Real>& mu_turb,
342  const amrex::Array4<const amrex::Real>& cell_data,
343  amrex::Array4<amrex::Real>& tau11,
344  amrex::Array4<amrex::Real>& tau22,
345  amrex::Array4<amrex::Real>& tau33,
346  amrex::Array4<amrex::Real>& tau12,
347  amrex::Array4<amrex::Real>& tau13,
348  amrex::Array4<amrex::Real>& tau23,
349  const amrex::Array4<const amrex::Real>& er_arr,
350  amrex::Array4<amrex::Real>& tau13i,
351  amrex::Array4<amrex::Real>& tau23i,
352  amrex::Array4<amrex::Real>& tau33i);
353 
354 /** \brief Compute stress components for variable viscosity on a vertically stretched grid. */
355 void ComputeStressVarVisc_S (amrex::Box bxcc,
356  amrex::Box tbxxy,
357  amrex::Box tbxxz,
358  amrex::Box tbxyz,
359  amrex::Real mu_eff,
360  const amrex::Array4<const amrex::Real>& mu_turb,
361  const amrex::Array4<const amrex::Real>& cell_data,
362  amrex::Array4<amrex::Real>& tau11,
363  amrex::Array4<amrex::Real>& tau22,
364  amrex::Array4<amrex::Real>& tau33,
365  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
366  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
367  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
368  const amrex::Array4<const amrex::Real>& er_arr,
369  const amrex::Array4<const amrex::Real>& mf_mx,
370  const amrex::Array4<const amrex::Real>& mf_ux,
371  const amrex::Array4<const amrex::Real>& mf_vx,
372  const amrex::Array4<const amrex::Real>& mf_my,
373  const amrex::Array4<const amrex::Real>& mf_uy,
374  const amrex::Array4<const amrex::Real>& mf_vy,
375  amrex::Array4<amrex::Real>& tau13i,
376  amrex::Array4<amrex::Real>& tau23i,
377  amrex::Array4<amrex::Real>& tau33i);
378 
379 /** \brief Compute stress components for variable viscosity on terrain-following coordinates. */
380 void ComputeStressVarVisc_T (amrex::Box bxcc,
381  amrex::Box tbxxy,
382  amrex::Box tbxxz,
383  amrex::Box tbxyz,
384  amrex::Real mu_eff,
385  const amrex::Array4<const amrex::Real>& mu_turb,
386  const amrex::Array4<const amrex::Real>& cell_data,
387  amrex::Array4<amrex::Real>& tau11,
388  amrex::Array4<amrex::Real>& tau22,
389  amrex::Array4<amrex::Real>& tau33,
390  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
391  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
392  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
393  const amrex::Array4<const amrex::Real>& er_arr,
394  const amrex::Array4<const amrex::Real>& z_nd,
395  const amrex::Array4<const amrex::Real>& detJ,
396  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
397  const amrex::Array4<const amrex::Real>& mf_mx,
398  const amrex::Array4<const amrex::Real>& mf_ux,
399  const amrex::Array4<const amrex::Real>& mf_vx,
400  const amrex::Array4<const amrex::Real>& mf_my,
401  const amrex::Array4<const amrex::Real>& mf_uy,
402  const amrex::Array4<const amrex::Real>& mf_vy,
403  amrex::Array4<amrex::Real>& tau13i,
404  amrex::Array4<amrex::Real>& tau23i,
405  amrex::Array4<amrex::Real>& tau33i,
406  const bool implicit_metric);
407 
408 /** \brief Compute embedded-boundary strain-rate components. */
409 void ComputeStrain_EB (const amrex::MFIter& mfi,
410  amrex::Box bxcc, amrex::Box tbxxy,
411  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
412  const amrex::Array4<const amrex::Real>& u,
413  const amrex::Array4<const amrex::Real>& v,
414  const amrex::Array4<const amrex::Real>& w,
415  amrex::Array4<amrex::Real>& tau11,
416  amrex::Array4<amrex::Real>& tau22,
417  amrex::Array4<amrex::Real>& tau33,
418  amrex::Array4<amrex::Real>& tau12,
419  amrex::Array4<amrex::Real>& tau13,
420  amrex::Array4<amrex::Real>& tau23,
421  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
422  const amrex::BCRec* bc_ptr,
423  const eb_& ebfact,
424  amrex::Array4<amrex::Real>& tau13i,
425  amrex::Array4<amrex::Real>& tau23i);
426 
427 /** \brief Compute strain-rate components on a uniform grid without terrain. */
428 void ComputeStrain_N (amrex::Box bxcc, amrex::Box tbxxy,
429  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
430  const amrex::Array4<const amrex::Real>& u,
431  const amrex::Array4<const amrex::Real>& v,
432  const amrex::Array4<const amrex::Real>& w,
433  amrex::Array4<amrex::Real>& tau11,
434  amrex::Array4<amrex::Real>& tau22,
435  amrex::Array4<amrex::Real>& tau33,
436  amrex::Array4<amrex::Real>& tau12,
437  amrex::Array4<amrex::Real>& tau13,
438  amrex::Array4<amrex::Real>& tau23,
439  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
440  const amrex::Array4<const amrex::Real>& mf_mx,
441  const amrex::Array4<const amrex::Real>& mf_ux,
442  const amrex::Array4<const amrex::Real>& mf_vx,
443  const amrex::Array4<const amrex::Real>& mf_my,
444  const amrex::Array4<const amrex::Real>& mf_uy,
445  const amrex::Array4<const amrex::Real>& mf_vy,
446  const amrex::BCRec* bc_ptr,
447  amrex::Array4<amrex::Real>& tau13i,
448  amrex::Array4<amrex::Real>& tau23i);
449 
450 /** \brief Compute strain-rate components on a vertically stretched grid. */
451 void ComputeStrain_S (amrex::Box bxcc, amrex::Box tbxxy,
452  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
453  const amrex::Array4<const amrex::Real>& u,
454  const amrex::Array4<const amrex::Real>& v,
455  const amrex::Array4<const amrex::Real>& w,
456  amrex::Array4<amrex::Real>& tau11,
457  amrex::Array4<amrex::Real>& tau22,
458  amrex::Array4<amrex::Real>& tau33,
459  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
460  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
461  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
462  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
463  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
464  const amrex::Array4<const amrex::Real>& mf_mx,
465  const amrex::Array4<const amrex::Real>& mf_ux,
466  const amrex::Array4<const amrex::Real>& mf_vx,
467  const amrex::Array4<const amrex::Real>& mf_my,
468  const amrex::Array4<const amrex::Real>& mf_uy,
469  const amrex::Array4<const amrex::Real>& mf_vy,
470  const amrex::BCRec* bc_ptr,
471  amrex::Array4<amrex::Real>& tau13i,
472  amrex::Array4<amrex::Real>& tau23i);
473 
474 /** \brief Compute strain-rate components on terrain-following coordinates. */
475 void ComputeStrain_T (amrex::Box bxcc, amrex::Box tbxxy,
476  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
477  const amrex::Array4<const amrex::Real>& u,
478  const amrex::Array4<const amrex::Real>& v,
479  const amrex::Array4<const amrex::Real>& w,
480  amrex::Array4<amrex::Real>& tau11,
481  amrex::Array4<amrex::Real>& tau22,
482  amrex::Array4<amrex::Real>& tau33,
483  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
484  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
485  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
486  const amrex::Array4<const amrex::Real>& z_nd,
487  const amrex::Array4<const amrex::Real>& detJ,
488  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
489  const amrex::Array4<const amrex::Real>& mf_mx,
490  const amrex::Array4<const amrex::Real>& mf_ux,
491  const amrex::Array4<const amrex::Real>& mf_vx,
492  const amrex::Array4<const amrex::Real>& mf_my,
493  const amrex::Array4<const amrex::Real>& mf_uy,
494  const amrex::Array4<const amrex::Real>& mf_vy,
495  const amrex::BCRec* bc_ptr,
496  amrex::Array4<amrex::Real>& tau13i,
497  amrex::Array4<amrex::Real>& tau23i);
498 
499 /** \brief Apply implicit vertical state diffusion on a uniform grid without terrain. */
500 void ImplicitDiffForStateLU_N (const amrex::Box& bx,
501  const amrex::Box& domain,
502  const int level,
503  const int n,
504  const double dt,
505  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
506  const amrex::Array4< amrex::Real>& cell_data,
507  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
508  const amrex::Array4<const amrex::Real>& hfx_z,
509  const amrex::Array4<const amrex::Real>& mu_turb,
510  const SolverChoice& solverChoice,
511  const amrex::BCRec* bc_ptr,
512  const bool use_SurfLayer,
513  const amrex::Real implicit_fac,
514  const bool use_mrf_countergradient = false);
515 
516 /** \brief Apply implicit vertical state diffusion on a vertically stretched grid. */
517 void ImplicitDiffForStateLU_S (const amrex::Box& bx,
518  const amrex::Box& domain,
519  const int level,
520  const int n,
521  const double dt,
522  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
523  const amrex::Array4< amrex::Real>& cell_data,
524  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
525  const amrex::Array4<const amrex::Real>& hfx_z,
526  const amrex::Array4<const amrex::Real>& mu_turb,
527  const SolverChoice& solverChoice,
528  const amrex::BCRec* bc_ptr,
529  const bool use_SurfLayer,
530  const amrex::Real implicit_fac,
531  const bool use_mrf_countergradient = false);
532 
533 /** \brief Apply implicit vertical state diffusion on terrain-following coordinates. */
534 void ImplicitDiffForStateLU_T (const amrex::Box& bx,
535  const amrex::Box& domain,
536  const int level,
537  const int n,
538  const double dt,
539  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
540  const amrex::Array4< amrex::Real>& cell_data,
541  const amrex::Array4<const amrex::Real>& z_nd,
542  const amrex::Array4<const amrex::Real>& detJ,
543  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
544  const amrex::Array4<const amrex::Real>& hfx_z,
545  const amrex::Array4<const amrex::Real>& mu_turb,
546  const SolverChoice& solverChoice,
547  const amrex::BCRec* bc_ptr,
548  const bool use_SurfLayer,
549  const amrex::Real implicit_fac,
550  const bool use_mrf_countergradient = false,
551  const amrex::Array4<const amrex::Real>& mf_mx = {},
552  const amrex::Array4<const amrex::Real>& mf_my = {},
553  const bool implicit_metric = false);
554 
555 /**
556  * \brief Apply implicit vertical momentum diffusion on a uniform grid without terrain.
557  *
558  * col_kext holds, on a z-slab with one ghost cell in x and y, the [klo,khi] extent of the
559  * grid column over each (i,j); it is used to restrict each face column's tridiagonal solve
560  * to the range covered by both of the cell columns adjacent to it. See ERF::define_column_kextent.
561  */
562 template <int stagdir>
563 void ImplicitDiffForMomLU_N (const amrex::Box& bx,
564  const amrex::Box& domain,
565  const int level,
566  const double dt,
567  const amrex::Array4<const int >& col_kext,
568  const amrex::Array4<const amrex::Real>& cell_data,
569  const amrex::Array4< amrex::Real>& face_data,
570  const amrex::Array4<const amrex::Real>& tau,
571  const amrex::Array4<const amrex::Real>& tau_corr,
572  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
573  const amrex::Array4<const amrex::Real>& mu_turb,
574  const SolverChoice& solverChoice,
575  const amrex::BCRec* bc_ptr,
576  const bool use_SurfLayer,
577  const amrex::Real implicit_fac,
578  const bool use_ysu_mom_countergradient);
579 
580 /** \brief Apply implicit vertical momentum diffusion on a vertically stretched grid. */
581 template <int stagdir>
582 void ImplicitDiffForMomLU_S (const amrex::Box& bx,
583  const amrex::Box& domain,
584  const int level,
585  const double dt,
586  const amrex::Array4<const int >& col_kext,
587  const amrex::Array4<const amrex::Real>& cell_data,
588  const amrex::Array4< amrex::Real>& face_data,
589  const amrex::Array4<const amrex::Real>& tau,
590  const amrex::Array4<const amrex::Real>& tau_corr,
591  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
592  const amrex::Array4<const amrex::Real>& mu_turb,
593  const SolverChoice& solverChoice,
594  const amrex::BCRec* bc_ptr,
595  const bool use_SurfLayer,
596  const amrex::Real implicit_fac,
597  const bool use_ysu_mom_countergradient);
598 
599 /** \brief Apply implicit vertical momentum diffusion on terrain-following coordinates. */
600 template <int stagdir>
601 void ImplicitDiffForMomLU_T (const amrex::Box& bx,
602  const amrex::Box& domain,
603  const int level,
604  const double dt,
605  const amrex::Array4<const int >& col_kext,
606  const amrex::Array4<const amrex::Real>& cell_data,
607  const amrex::Array4< amrex::Real>& face_data,
608  const amrex::Array4<const amrex::Real>& tau,
609  const amrex::Array4<const amrex::Real>& tau_corr,
610  const amrex::Array4<const amrex::Real>& z_nd,
611  const amrex::Array4<const amrex::Real>& detJ,
612  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
613  const amrex::Array4<const amrex::Real>& mu_turb,
614  const SolverChoice& solverChoice,
615  const amrex::BCRec* bc_ptr,
616  const bool use_SurfLayer,
617  const amrex::Real implicit_fac,
618  const bool use_ysu_mom_countergradient,
619  const amrex::Array4<const amrex::Real>& mf_x,
620  const amrex::Array4<const amrex::Real>& mf_y,
621  const bool implicit_metric);
622 #endif
@ tau12
Definition: ERF_DataStruct.H:48
@ tau23
Definition: ERF_DataStruct.H:48
@ tau33
Definition: ERF_DataStruct.H:48
@ tau22
Definition: ERF_DataStruct.H:48
@ tau11
Definition: ERF_DataStruct.H:48
@ tau32
Definition: ERF_DataStruct.H:48
@ tau31
Definition: ERF_DataStruct.H:48
@ tau21
Definition: ERF_DataStruct.H:48
@ tau13
Definition: ERF_DataStruct.H:48
void DiffusionSrcForState_S(const amrex::Box &bx, const amrex::Box &domain, int start_comp, int num_comp, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &cell_rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &hfx_x, amrex::Array4< amrex::Real > &hfx_y, amrex::Array4< amrex::Real > &hfx_z, amrex::Array4< amrex::Real > &qfx1_x, amrex::Array4< amrex::Real > &qfx1_y, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Vector< std::unique_ptr< SurfaceLayer >> &SurfLayer, const amrex::Real implicit_fac)
Native adapter for regular scalar diffusion on a vertically stretched grid.
void ComputeStressConsVisc_T(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &er_arr, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i, const bool implicit_metric)
Compute stress components for constant viscosity on terrain-following coordinates.
void DiffusionSrcForMom(const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &tau11, const amrex::Array4< const amrex::Real > &tau22, const amrex::Array4< const amrex::Real > &tau33, const amrex::Array4< const amrex::Real > &tau12, const amrex::Array4< const amrex::Real > &tau21, const amrex::Array4< const amrex::Real > &tau13, const amrex::Array4< const amrex::Real > &tau31, const amrex::Array4< const amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &detJ_arr, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const bool use_stretched_dz, const bool use_variable_dz)
Add stress-divergence diffusion source terms to the momentum RHS.
void ComputeStressConsVisc_N(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &er_arr, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute stress components for constant viscosity on a uniform grid without terrain.
void DiffusionSrcForState_N(const amrex::Box &bx, const amrex::Box &domain, int start_comp, int num_comp, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &cell_rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &hfx_x, amrex::Array4< amrex::Real > &hfx_y, amrex::Array4< amrex::Real > &hfx_z, amrex::Array4< amrex::Real > &qfx1_x, amrex::Array4< amrex::Real > &qfx1_y, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Vector< std::unique_ptr< SurfaceLayer >> &SurfLayer, const amrex::Real implicit_fac)
Add regular-grid state diffusion on a uniform grid without terrain.
void ImplicitDiffForMomLU_N(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, const amrex::Array4< const int > &col_kext, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &face_data, const amrex::Array4< const amrex::Real > &tau, const amrex::Array4< const amrex::Real > &tau_corr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_ysu_mom_countergradient)
Apply implicit vertical momentum diffusion on a uniform grid without terrain.
void DiffusionSrcForState_EB(const amrex::Box &bx, const amrex::Box &domain, int start_comp, int num_comp, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &cell_rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::Array4< const amrex::EBCellFlag > &cfg_arr, const amrex::Array4< const amrex::Real > &ax_arr, const amrex::Array4< const amrex::Real > &ay_arr, const amrex::Array4< const amrex::Real > &az_arr, const amrex::Array4< const amrex::Real > &detJ, const amrex::Array4< const amrex::Real > &barea_arr, const amrex::Array4< const amrex::Real > &bcent_arr, const amrex::Real *dx_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, amrex::Array4< amrex::Real > &hfx_z, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, amrex::Array4< amrex::Real > &hfx_EB, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Vector< std::unique_ptr< SurfaceLayer >> &SurfLayer)
Add state diffusion source terms for embedded-boundary cells.
void ComputeStrain_EB(const amrex::MFIter &mfi, amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::BCRec *bc_ptr, const eb_ &ebfact, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i)
Compute embedded-boundary strain-rate components.
void ComputeStrain_T(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i)
Compute strain-rate components on terrain-following coordinates.
void ComputeStressConsVisc_EB(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &er_arr, amrex::Array4< const amrex::Real > &vfrac, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute embedded-boundary stress components for constant viscosity.
void ComputeStressVarVisc_EB(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &er_arr, amrex::Array4< const amrex::Real > &vfrac, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute embedded-boundary stress components for variable viscosity.
void ImplicitDiffForStateLU_N(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false)
Apply implicit vertical state diffusion on a uniform grid without terrain.
void ImplicitDiffForMomLU_S(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, const amrex::Array4< const int > &col_kext, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &face_data, const amrex::Array4< const amrex::Real > &tau, const amrex::Array4< const amrex::Real > &tau_corr, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_ysu_mom_countergradient)
Apply implicit vertical momentum diffusion on a vertically stretched grid.
void ComputeStressConsVisc_S(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &er_arr, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute stress components for constant viscosity on a vertically stretched grid.
void ComputeStrain_N(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i)
Compute strain-rate components on a uniform grid without terrain.
void ImplicitDiffForStateLU_T(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false, const amrex::Array4< const amrex::Real > &mf_mx={}, const amrex::Array4< const amrex::Real > &mf_my={}, const bool implicit_metric=false)
Apply implicit vertical state diffusion on terrain-following coordinates.
void ImplicitDiffForMomLU_T(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, const amrex::Array4< const int > &col_kext, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &face_data, const amrex::Array4< const amrex::Real > &tau, const amrex::Array4< const amrex::Real > &tau_corr, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_ysu_mom_countergradient, const amrex::Array4< const amrex::Real > &mf_x, const amrex::Array4< const amrex::Real > &mf_y, const bool implicit_metric)
Apply implicit vertical momentum diffusion on terrain-following coordinates.
void ComputeStressVarVisc_T(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &er_arr, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i, const bool implicit_metric)
Compute stress components for variable viscosity on terrain-following coordinates.
void ComputeStressVarVisc_S(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Array4< const amrex::Real > &er_arr, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute stress components for variable viscosity on a vertically stretched grid.
void DiffusionSrcForMom_EB(const amrex::MFIter &mfi, [[maybe_unused]] const amrex::Box &domain, const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &w_arr, const amrex::Array4< const amrex::Real > &tau11, const amrex::Array4< const amrex::Real > &tau22, const amrex::Array4< const amrex::Real > &tau33, const amrex::Array4< const amrex::Real > &tau12, const amrex::Array4< const amrex::Real > &tau13, const amrex::Array4< const amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &u_tau_eb13, const amrex::Array4< const amrex::Real > &u_tau_eb23, const amrex::Array4< const amrex::Real > &v_tau_eb13, const amrex::Array4< const amrex::Real > &v_tau_eb23, const amrex::Array4< const amrex::Real > &w_tau_eb13, const amrex::Array4< const amrex::Real > &w_tau_eb23, const amrex::Real *dx_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const SolverChoice &solverChoice, const eb_ &ebfact, [[maybe_unused]] const amrex::BCRec *bc_ptr)
Add embedded-boundary stress-divergence diffusion source terms to the momentum RHS.
void ImplicitDiffForStateLU_S(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false)
Apply implicit vertical state diffusion on a vertically stretched grid.
void DiffusionSrcForState_T(const amrex::Box &bx, const amrex::Box &domain, int start_comp, int num_comp, const bool &rotate, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &cell_rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &z_cc, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, amrex::Array4< amrex::Real > &hfx_x, amrex::Array4< amrex::Real > &hfx_y, amrex::Array4< amrex::Real > &hfx_z, amrex::Array4< amrex::Real > &qfx1_x, amrex::Array4< amrex::Real > &qfx1_y, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Vector< std::unique_ptr< SurfaceLayer >> &SurfLayer, const amrex::Real implicit_fac)
Native adapter for regular scalar diffusion on terrain-following coordinates.
void ComputeStressVarVisc_N(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Real mu_eff, const amrex::Array4< const amrex::Real > &mu_turb, const amrex::Array4< const amrex::Real > &cell_data, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &er_arr, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i, amrex::Array4< amrex::Real > &tau33i)
Compute stress components for variable viscosity on a uniform grid without terrain.
void ComputeStrain_S(amrex::Box bxcc, amrex::Box tbxxy, amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, amrex::Array4< amrex::Real > &tau11, amrex::Array4< amrex::Real > &tau22, amrex::Array4< amrex::Real > &tau33, amrex::Array4< amrex::Real > &tau12, amrex::Array4< amrex::Real > &tau21, amrex::Array4< amrex::Real > &tau13, amrex::Array4< amrex::Real > &tau31, amrex::Array4< amrex::Real > &tau23, amrex::Array4< amrex::Real > &tau32, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, amrex::Array4< amrex::Real > &tau13i, amrex::Array4< amrex::Real > &tau23i)
Compute strain-rate components on a vertically stretched grid.
Declares the embedded-boundary factory manager used by ERF levels.
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Owns and exposes cell-centered and face-centered EB factories.
Definition: ERF_EB.H:24
Definition: ERF_DataStruct.H:685