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_Constants.H"
12 #include "ERF_IndexDefines.H"
13 #include "ERF_SurfaceLayer.H"
14 #include "ERF_EB.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 /** \brief Add state diffusion source terms on a uniform grid without terrain. */
73 void DiffusionSrcForState_N (const amrex::Box& bx, const amrex::Box& domain,
74  int start_comp, int num_comp,
75  const amrex::Array4<const amrex::Real>& u,
76  const amrex::Array4<const amrex::Real>& v,
77  const amrex::Array4<const amrex::Real>& cell_data,
78  const amrex::Array4<const amrex::Real>& cell_prim,
79  const amrex::Array4<amrex::Real>& cell_rhs,
80  const amrex::Array4<amrex::Real>& xflux,
81  const amrex::Array4<amrex::Real>& yflux,
82  const amrex::Array4<amrex::Real>& zflux,
83  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
84  const amrex::Array4<const amrex::Real>& SmnSmn_a,
85  const amrex::Array4<const amrex::Real>& mf_mx,
86  const amrex::Array4<const amrex::Real>& mf_ux,
87  const amrex::Array4<const amrex::Real>& mf_vx,
88  const amrex::Array4<const amrex::Real>& mf_my,
89  const amrex::Array4<const amrex::Real>& mf_uy,
90  const amrex::Array4<const amrex::Real>& mf_vy,
91  amrex::Array4< amrex::Real>& hfx_z,
92  amrex::Array4< amrex::Real>& qfx1_z,
93  amrex::Array4< amrex::Real>& qfx2_z,
94  amrex::Array4< amrex::Real>& diss,
95  const amrex::Array4<const amrex::Real>& mu_turb,
96  const SolverChoice& solverChoice,
97  const int level,
98  const amrex::Array4<const amrex::Real>& tm_arr,
99  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> grav_gpu,
100  const amrex::BCRec* bc_ptr,
101  const bool use_SurfLayer,
102  const amrex::Real implicit_fac);
103 
104 /** \brief Add state diffusion source terms on a vertically stretched grid. */
105 void DiffusionSrcForState_S (const amrex::Box& bx, const amrex::Box& domain,
106  int start_comp, int num_comp,
107  const amrex::Array4<const amrex::Real>& u,
108  const amrex::Array4<const amrex::Real>& v,
109  const amrex::Array4<const amrex::Real>& cell_data,
110  const amrex::Array4<const amrex::Real>& cell_prim,
111  const amrex::Array4<amrex::Real>& cell_rhs,
112  const amrex::Array4<amrex::Real>& xflux,
113  const amrex::Array4<amrex::Real>& yflux,
114  const amrex::Array4<amrex::Real>& zflux,
115  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
116  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
117  const amrex::Array4<const amrex::Real>& SmnSmn_a,
118  const amrex::Array4<const amrex::Real>& mf_mx,
119  const amrex::Array4<const amrex::Real>& mf_ux,
120  const amrex::Array4<const amrex::Real>& mf_vx,
121  const amrex::Array4<const amrex::Real>& mf_my,
122  const amrex::Array4<const amrex::Real>& mf_uy,
123  const amrex::Array4<const amrex::Real>& mf_vy,
124  amrex::Array4< amrex::Real>& hfx_z,
125  amrex::Array4< amrex::Real>& qfx1_z,
126  amrex::Array4< amrex::Real>& qfx2_z,
127  amrex::Array4< amrex::Real>& diss,
128  const amrex::Array4<const amrex::Real>& mu_turb,
129  const SolverChoice& solverChoice,
130  const int level,
131  const amrex::Array4<const amrex::Real>& tm_arr,
132  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> grav_gpu,
133  const amrex::BCRec* bc_ptr,
134  const bool use_SurfLayer,
135  const amrex::Real implicit_fac);
136 
137 /** \brief Add state diffusion source terms on terrain-following coordinates. */
138 void DiffusionSrcForState_T (const amrex::Box& bx, const amrex::Box& domain,
139  int start_comp, int num_comp,
140  const bool& rotate,
141  const amrex::Array4<const amrex::Real>& u,
142  const amrex::Array4<const amrex::Real>& v,
143  const amrex::Array4<const amrex::Real>& cell_data,
144  const amrex::Array4<const amrex::Real>& cell_prim,
145  const amrex::Array4<amrex::Real>& cell_rhs,
146  const amrex::Array4<amrex::Real>& xflux,
147  const amrex::Array4<amrex::Real>& yflux,
148  const amrex::Array4<amrex::Real>& zflux,
149  const amrex::Array4<const amrex::Real>& z_nd,
150  const amrex::Array4<const amrex::Real>& z_cc,
151  const amrex::Array4<const amrex::Real>& ax,
152  const amrex::Array4<const amrex::Real>& ay,
153  const amrex::Array4<const amrex::Real>& az,
154  const amrex::Array4<const amrex::Real>& detJ,
155  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
156  const amrex::Array4<const amrex::Real>& SmnSmn_a,
157  const amrex::Array4<const amrex::Real>& mf_mx,
158  const amrex::Array4<const amrex::Real>& mf_ux,
159  const amrex::Array4<const amrex::Real>& mf_vx,
160  const amrex::Array4<const amrex::Real>& mf_my,
161  const amrex::Array4<const amrex::Real>& mf_uy,
162  const amrex::Array4<const amrex::Real>& mf_vy,
163  amrex::Array4< amrex::Real>& hfx_x,
164  amrex::Array4< amrex::Real>& hfx_y,
165  amrex::Array4< amrex::Real>& hfx_z,
166  amrex::Array4< amrex::Real>& qfx1_x,
167  amrex::Array4< amrex::Real>& qfx1_y,
168  amrex::Array4< amrex::Real>& qfx1_z,
169  amrex::Array4< amrex::Real>& qfx2_z,
170  amrex::Array4< amrex::Real>& diss,
171  const amrex::Array4<const amrex::Real>& mu_turb,
172  const SolverChoice& solverChoice,
173  const int level,
174  const amrex::Array4<const amrex::Real>& tm_arr,
175  const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> grav_gpu,
176  const amrex::BCRec* bc_ptr,
177  const bool use_SurfLayer,
178  const amrex::Real implicit_fac);
179 
180 /** \brief Add state diffusion source terms for embedded-boundary cells. */
181 void DiffusionSrcForState_EB (const amrex::Box& bx, const amrex::Box& domain,
182  int start_comp, int num_comp,
183  const amrex::Array4<const amrex::Real>& u,
184  const amrex::Array4<const amrex::Real>& v,
185  const amrex::Array4<const amrex::Real>& cell_data,
186  const amrex::Array4<const amrex::Real>& cell_prim,
187  const amrex::Array4<amrex::Real>& cell_rhs,
188  const amrex::Array4<amrex::Real>& xflux,
189  const amrex::Array4<amrex::Real>& yflux,
190  const amrex::Array4<amrex::Real>& zflux,
191  const amrex::Array4<const amrex::EBCellFlag>& cfg_arr,
192  const amrex::Array4<const amrex::Real>& ax_arr,
193  const amrex::Array4<const amrex::Real>& ay_arr,
194  const amrex::Array4<const amrex::Real>& az_arr,
195  const amrex::Array4<const amrex::Real>& detJ,
196  const amrex::Array4<const amrex::Real>& barea_arr,
197  const amrex::Array4<const amrex::Real>& bcent_arr,
198  const amrex::Real* dx_arr,
199  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
200  amrex::Array4< amrex::Real>& hfx_z,
201  amrex::Array4< amrex::Real>& qfx1_z,
202  amrex::Array4< amrex::Real>& qfx2_z,
203  amrex::Array4< amrex::Real>& hfx_EB,
204  const amrex::Array4<const amrex::Real>& mu_turb,
205  const SolverChoice& solverChoice,
206  const int level,
207  const amrex::BCRec* bc_ptr,
208  const bool use_SurfLayer);
209 
210 /** \brief Compute embedded-boundary stress components for constant viscosity. */
211 void ComputeStressConsVisc_EB (amrex::Box bxcc,
212  amrex::Box tbxxy,
213  amrex::Box tbxxz,
214  amrex::Box tbxyz,
215  amrex::Real mu_eff,
216  const amrex::Array4<const amrex::Real>& cell_data,
217  amrex::Array4<amrex::Real>& tau11,
218  amrex::Array4<amrex::Real>& tau22,
219  amrex::Array4<amrex::Real>& tau33,
220  amrex::Array4<amrex::Real>& tau12,
221  amrex::Array4<amrex::Real>& tau13,
222  amrex::Array4<amrex::Real>& tau23,
223  const amrex::Array4<const amrex::Real>& er_arr,
224  amrex::Array4<const amrex::Real>& vfrac,
225  amrex::Array4<amrex::Real>& tau13i,
226  amrex::Array4<amrex::Real>& tau23i,
227  amrex::Array4<amrex::Real>& tau33i);
228 
229 /** \brief Compute stress components for constant viscosity on a uniform grid without terrain. */
230 void ComputeStressConsVisc_N (amrex::Box bxcc,
231  amrex::Box tbxxy,
232  amrex::Box tbxxz,
233  amrex::Box tbxyz,
234  amrex::Real mu_eff,
235  const amrex::Array4<const amrex::Real>& cell_data,
236  amrex::Array4<amrex::Real>& tau11,
237  amrex::Array4<amrex::Real>& tau22,
238  amrex::Array4<amrex::Real>& tau33,
239  amrex::Array4<amrex::Real>& tau12,
240  amrex::Array4<amrex::Real>& tau13,
241  amrex::Array4<amrex::Real>& tau23,
242  const amrex::Array4<const amrex::Real>& er_arr,
243  amrex::Array4<amrex::Real>& tau13i,
244  amrex::Array4<amrex::Real>& tau23i,
245  amrex::Array4<amrex::Real>& tau33i);
246 
247 /** \brief Compute stress components for constant viscosity on a vertically stretched grid. */
248 void ComputeStressConsVisc_S (amrex::Box bxcc,
249  amrex::Box tbxxy,
250  amrex::Box tbxxz,
251  amrex::Box tbxyz,
252  amrex::Real mu_eff,
253  const amrex::Array4<const amrex::Real>& cell_data,
254  amrex::Array4<amrex::Real>& tau11,
255  amrex::Array4<amrex::Real>& tau22,
256  amrex::Array4<amrex::Real>& tau33,
257  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
258  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
259  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
260  const amrex::Array4<const amrex::Real>& er_arr,
261  const amrex::Array4<const amrex::Real>& mf_mx,
262  const amrex::Array4<const amrex::Real>& mf_ux,
263  const amrex::Array4<const amrex::Real>& mf_vx,
264  const amrex::Array4<const amrex::Real>& mf_my,
265  const amrex::Array4<const amrex::Real>& mf_uy,
266  const amrex::Array4<const amrex::Real>& mf_vy,
267  amrex::Array4<amrex::Real>& tau13i,
268  amrex::Array4<amrex::Real>& tau23i,
269  amrex::Array4<amrex::Real>& tau33i);
270 
271 /** \brief Compute stress components for constant viscosity on terrain-following coordinates. */
272 void ComputeStressConsVisc_T (amrex::Box bxcc,
273  amrex::Box tbxxy,
274  amrex::Box tbxxz,
275  amrex::Box tbxyz,
276  amrex::Real mu_eff,
277  const amrex::Array4<const amrex::Real>& cell_data,
278  amrex::Array4<amrex::Real>& tau11,
279  amrex::Array4<amrex::Real>& tau22,
280  amrex::Array4<amrex::Real>& tau33,
281  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
282  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
283  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
284  const amrex::Array4<const amrex::Real>& er_arr,
285  const amrex::Array4<const amrex::Real>& z_nd,
286  const amrex::Array4<const amrex::Real>& detJ,
287  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
288  const amrex::Array4<const amrex::Real>& mf_mx,
289  const amrex::Array4<const amrex::Real>& mf_ux,
290  const amrex::Array4<const amrex::Real>& mf_vx,
291  const amrex::Array4<const amrex::Real>& mf_my,
292  const amrex::Array4<const amrex::Real>& mf_uy,
293  const amrex::Array4<const amrex::Real>& mf_vy,
294  amrex::Array4<amrex::Real>& tau13i,
295  amrex::Array4<amrex::Real>& tau23i,
296  amrex::Array4<amrex::Real>& tau33i);
297 
298 /** \brief Compute embedded-boundary stress components for variable viscosity. */
299 void ComputeStressVarVisc_EB (amrex::Box bxcc,
300  amrex::Box tbxxy,
301  amrex::Box tbxxz,
302  amrex::Box tbxyz,
303  amrex::Real mu_eff,
304  const amrex::Array4<const amrex::Real>& mu_turb,
305  const amrex::Array4<const amrex::Real>& cell_data,
306  amrex::Array4<amrex::Real>& tau11,
307  amrex::Array4<amrex::Real>& tau22,
308  amrex::Array4<amrex::Real>& tau33,
309  amrex::Array4<amrex::Real>& tau12,
310  amrex::Array4<amrex::Real>& tau13,
311  amrex::Array4<amrex::Real>& tau23,
312  const amrex::Array4<const amrex::Real>& er_arr,
313  amrex::Array4<const amrex::Real>& vfrac,
314  amrex::Array4<amrex::Real>& tau13i,
315  amrex::Array4<amrex::Real>& tau23i,
316  amrex::Array4<amrex::Real>& tau33i);
317 
318 /** \brief Compute stress components for variable viscosity on a uniform grid without terrain. */
319 void ComputeStressVarVisc_N (amrex::Box bxcc,
320  amrex::Box tbxxy,
321  amrex::Box tbxxz,
322  amrex::Box tbxyz,
323  amrex::Real mu_eff,
324  const amrex::Array4<const amrex::Real>& mu_turb,
325  const amrex::Array4<const amrex::Real>& cell_data,
326  amrex::Array4<amrex::Real>& tau11,
327  amrex::Array4<amrex::Real>& tau22,
328  amrex::Array4<amrex::Real>& tau33,
329  amrex::Array4<amrex::Real>& tau12,
330  amrex::Array4<amrex::Real>& tau13,
331  amrex::Array4<amrex::Real>& tau23,
332  const amrex::Array4<const amrex::Real>& er_arr,
333  amrex::Array4<amrex::Real>& tau13i,
334  amrex::Array4<amrex::Real>& tau23i,
335  amrex::Array4<amrex::Real>& tau33i);
336 
337 /** \brief Compute stress components for variable viscosity on a vertically stretched grid. */
338 void ComputeStressVarVisc_S (amrex::Box bxcc,
339  amrex::Box tbxxy,
340  amrex::Box tbxxz,
341  amrex::Box tbxyz,
342  amrex::Real mu_eff,
343  const amrex::Array4<const amrex::Real>& mu_turb,
344  const amrex::Array4<const amrex::Real>& cell_data,
345  amrex::Array4<amrex::Real>& tau11,
346  amrex::Array4<amrex::Real>& tau22,
347  amrex::Array4<amrex::Real>& tau33,
348  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
349  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
350  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
351  const amrex::Array4<const amrex::Real>& er_arr,
352  const amrex::Array4<const amrex::Real>& mf_mx,
353  const amrex::Array4<const amrex::Real>& mf_ux,
354  const amrex::Array4<const amrex::Real>& mf_vx,
355  const amrex::Array4<const amrex::Real>& mf_my,
356  const amrex::Array4<const amrex::Real>& mf_uy,
357  const amrex::Array4<const amrex::Real>& mf_vy,
358  amrex::Array4<amrex::Real>& tau13i,
359  amrex::Array4<amrex::Real>& tau23i,
360  amrex::Array4<amrex::Real>& tau33i);
361 
362 /** \brief Compute stress components for variable viscosity on terrain-following coordinates. */
363 void ComputeStressVarVisc_T (amrex::Box bxcc,
364  amrex::Box tbxxy,
365  amrex::Box tbxxz,
366  amrex::Box tbxyz,
367  amrex::Real mu_eff,
368  const amrex::Array4<const amrex::Real>& mu_turb,
369  const amrex::Array4<const amrex::Real>& cell_data,
370  amrex::Array4<amrex::Real>& tau11,
371  amrex::Array4<amrex::Real>& tau22,
372  amrex::Array4<amrex::Real>& tau33,
373  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
374  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
375  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
376  const amrex::Array4<const amrex::Real>& er_arr,
377  const amrex::Array4<const amrex::Real>& z_nd,
378  const amrex::Array4<const amrex::Real>& detJ,
379  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
380  const amrex::Array4<const amrex::Real>& mf_mx,
381  const amrex::Array4<const amrex::Real>& mf_ux,
382  const amrex::Array4<const amrex::Real>& mf_vx,
383  const amrex::Array4<const amrex::Real>& mf_my,
384  const amrex::Array4<const amrex::Real>& mf_uy,
385  const amrex::Array4<const amrex::Real>& mf_vy,
386  amrex::Array4<amrex::Real>& tau13i,
387  amrex::Array4<amrex::Real>& tau23i,
388  amrex::Array4<amrex::Real>& tau33i);
389 
390 /** \brief Compute embedded-boundary strain-rate components. */
391 void ComputeStrain_EB (const amrex::MFIter& mfi,
392  amrex::Box bxcc, amrex::Box tbxxy,
393  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
394  const amrex::Array4<const amrex::Real>& u,
395  const amrex::Array4<const amrex::Real>& v,
396  const amrex::Array4<const amrex::Real>& w,
397  amrex::Array4<amrex::Real>& tau11,
398  amrex::Array4<amrex::Real>& tau22,
399  amrex::Array4<amrex::Real>& tau33,
400  amrex::Array4<amrex::Real>& tau12,
401  amrex::Array4<amrex::Real>& tau13,
402  amrex::Array4<amrex::Real>& tau23,
403  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
404  const amrex::BCRec* bc_ptr,
405  const eb_& ebfact,
406  amrex::Array4<amrex::Real>& tau13i,
407  amrex::Array4<amrex::Real>& tau23i);
408 
409 /** \brief Compute strain-rate components on a uniform grid without terrain. */
410 void ComputeStrain_N (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::Array4<const amrex::Real>& mf_mx,
423  const amrex::Array4<const amrex::Real>& mf_ux,
424  const amrex::Array4<const amrex::Real>& mf_vx,
425  const amrex::Array4<const amrex::Real>& mf_my,
426  const amrex::Array4<const amrex::Real>& mf_uy,
427  const amrex::Array4<const amrex::Real>& mf_vy,
428  const amrex::BCRec* bc_ptr,
429  amrex::Array4<amrex::Real>& tau13i,
430  amrex::Array4<amrex::Real>& tau23i);
431 
432 /** \brief Compute strain-rate components on a vertically stretched grid. */
433 void ComputeStrain_S (amrex::Box bxcc, amrex::Box tbxxy,
434  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
435  const amrex::Array4<const amrex::Real>& u,
436  const amrex::Array4<const amrex::Real>& v,
437  const amrex::Array4<const amrex::Real>& w,
438  amrex::Array4<amrex::Real>& tau11,
439  amrex::Array4<amrex::Real>& tau22,
440  amrex::Array4<amrex::Real>& tau33,
441  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
442  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
443  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
444  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
445  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
446  const amrex::Array4<const amrex::Real>& mf_mx,
447  const amrex::Array4<const amrex::Real>& mf_ux,
448  const amrex::Array4<const amrex::Real>& mf_vx,
449  const amrex::Array4<const amrex::Real>& mf_my,
450  const amrex::Array4<const amrex::Real>& mf_uy,
451  const amrex::Array4<const amrex::Real>& mf_vy,
452  const amrex::BCRec* bc_ptr,
453  amrex::Array4<amrex::Real>& tau13i,
454  amrex::Array4<amrex::Real>& tau23i);
455 
456 /** \brief Compute strain-rate components on terrain-following coordinates. */
457 void ComputeStrain_T (amrex::Box bxcc, amrex::Box tbxxy,
458  amrex::Box tbxxz, amrex::Box tbxyz, amrex::Box domain,
459  const amrex::Array4<const amrex::Real>& u,
460  const amrex::Array4<const amrex::Real>& v,
461  const amrex::Array4<const amrex::Real>& w,
462  amrex::Array4<amrex::Real>& tau11,
463  amrex::Array4<amrex::Real>& tau22,
464  amrex::Array4<amrex::Real>& tau33,
465  amrex::Array4<amrex::Real>& tau12, amrex::Array4<amrex::Real>& tau21,
466  amrex::Array4<amrex::Real>& tau13, amrex::Array4<amrex::Real>& tau31,
467  amrex::Array4<amrex::Real>& tau23, amrex::Array4<amrex::Real>& tau32,
468  const amrex::Array4<const amrex::Real>& z_nd,
469  const amrex::Array4<const amrex::Real>& detJ,
470  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
471  const amrex::Array4<const amrex::Real>& mf_mx,
472  const amrex::Array4<const amrex::Real>& mf_ux,
473  const amrex::Array4<const amrex::Real>& mf_vx,
474  const amrex::Array4<const amrex::Real>& mf_my,
475  const amrex::Array4<const amrex::Real>& mf_uy,
476  const amrex::Array4<const amrex::Real>& mf_vy,
477  const amrex::BCRec* bc_ptr,
478  amrex::Array4<amrex::Real>& tau13i,
479  amrex::Array4<amrex::Real>& tau23i);
480 
481 /** \brief Apply implicit vertical state diffusion on a uniform grid without terrain. */
482 void ImplicitDiffForStateLU_N (const amrex::Box& bx,
483  const amrex::Box& domain,
484  const int level,
485  const int n,
486  const double dt,
487  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
488  const amrex::Array4< amrex::Real>& cell_data,
489  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
490  const amrex::Array4<const amrex::Real>& hfx_z,
491  const amrex::Array4<const amrex::Real>& mu_turb,
492  const SolverChoice& solverChoice,
493  const amrex::BCRec* bc_ptr,
494  const bool use_SurfLayer,
495  const amrex::Real implicit_fac,
496  const bool use_mrf_countergradient = false);
497 
498 /** \brief Apply implicit vertical state diffusion on a vertically stretched grid. */
499 void ImplicitDiffForStateLU_S (const amrex::Box& bx,
500  const amrex::Box& domain,
501  const int level,
502  const int n,
503  const double dt,
504  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
505  const amrex::Array4< amrex::Real>& cell_data,
506  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
507  const amrex::Array4<const amrex::Real>& hfx_z,
508  const amrex::Array4<const amrex::Real>& mu_turb,
509  const SolverChoice& solverChoice,
510  const amrex::BCRec* bc_ptr,
511  const bool use_SurfLayer,
512  const amrex::Real implicit_fac,
513  const bool use_mrf_countergradient = false);
514 
515 /** \brief Apply implicit vertical state diffusion on terrain-following coordinates. */
516 void ImplicitDiffForStateLU_T (const amrex::Box& bx,
517  const amrex::Box& domain,
518  const int level,
519  const int n,
520  const double dt,
521  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM*2>& bc_neumann_vals,
522  const amrex::Array4< amrex::Real>& cell_data,
523  const amrex::Array4<const amrex::Real>& z_nd,
524  const amrex::Array4<const amrex::Real>& detJ,
525  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
526  const amrex::Array4<const amrex::Real>& hfx_z,
527  const amrex::Array4<const amrex::Real>& mu_turb,
528  const SolverChoice& solverChoice,
529  const amrex::BCRec* bc_ptr,
530  const bool use_SurfLayer,
531  const amrex::Real implicit_fac,
532  const bool use_mrf_countergradient = false);
533 
534 /** \brief Apply implicit vertical momentum diffusion on a uniform grid without terrain. */
535 template <int stagdir>
536 void ImplicitDiffForMomLU_N (const amrex::Box& bx,
537  const amrex::Box& domain,
538  const int level,
539  const double dt,
540  const amrex::Array4<const amrex::Real>& cell_data,
541  const amrex::Array4< amrex::Real>& face_data,
542  const amrex::Array4<const amrex::Real>& tau,
543  const amrex::Array4<const amrex::Real>& tau_corr,
544  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
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_ysu_mom_countergradient);
551 
552 /** \brief Apply implicit vertical momentum diffusion on a vertically stretched grid. */
553 template <int stagdir>
554 void ImplicitDiffForMomLU_S (const amrex::Box& bx,
555  const amrex::Box& domain,
556  const int level,
557  const double dt,
558  const amrex::Array4<const amrex::Real>& cell_data,
559  const amrex::Array4< amrex::Real>& face_data,
560  const amrex::Array4<const amrex::Real>& tau,
561  const amrex::Array4<const amrex::Real>& tau_corr,
562  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
563  const amrex::Array4<const amrex::Real>& mu_turb,
564  const SolverChoice& solverChoice,
565  const amrex::BCRec* bc_ptr,
566  const bool use_SurfLayer,
567  const amrex::Real implicit_fac,
568  const bool use_ysu_mom_countergradient);
569 
570 /** \brief Apply implicit vertical momentum diffusion on terrain-following coordinates. */
571 template <int stagdir>
572 void ImplicitDiffForMomLU_T (const amrex::Box& bx,
573  const amrex::Box& domain,
574  const int level,
575  const double dt,
576  const amrex::Array4<const amrex::Real>& cell_data,
577  const amrex::Array4< amrex::Real>& face_data,
578  const amrex::Array4<const amrex::Real>& tau,
579  const amrex::Array4<const amrex::Real>& tau_corr,
580  const amrex::Array4<const amrex::Real>& z_nd,
581  const amrex::Array4<const amrex::Real>& detJ,
582  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
583  const amrex::Array4<const amrex::Real>& mu_turb,
584  const SolverChoice& solverChoice,
585  const amrex::BCRec* bc_ptr,
586  const bool use_SurfLayer,
587  const amrex::Real implicit_fac,
588  const bool use_ysu_mom_countergradient);
589 #endif
@ tau12
Definition: ERF_DataStruct.H:38
@ tau23
Definition: ERF_DataStruct.H:38
@ tau33
Definition: ERF_DataStruct.H:38
@ tau22
Definition: ERF_DataStruct.H:38
@ tau11
Definition: ERF_DataStruct.H:38
@ tau32
Definition: ERF_DataStruct.H:38
@ tau31
Definition: ERF_DataStruct.H:38
@ tau21
Definition: ERF_DataStruct.H:38
@ tau13
Definition: ERF_DataStruct.H:38
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)
Compute stress components for variable 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 ImplicitDiffForMomLU_S(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, 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 DiffusionSrcForState_S(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::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &SmnSmn_a, 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_z, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, amrex::Array4< amrex::Real > &diss, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > grav_gpu, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac)
Add state diffusion source terms on a vertically stretched grid.
void ImplicitDiffForMomLU_N(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, 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_T(const amrex::Box &bx, const amrex::Box &domain, int start_comp, int num_comp, const bool &rotate, 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::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 > &SmnSmn_a, 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, amrex::Array4< amrex::Real > &diss, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > grav_gpu, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac)
Add state diffusion source terms on terrain-following coordinates.
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_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)
Compute stress components for constant viscosity 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 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 > &SmnSmn_a, 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_z, amrex::Array4< amrex::Real > &qfx1_z, amrex::Array4< amrex::Real > &qfx2_z, amrex::Array4< amrex::Real > &diss, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > grav_gpu, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac)
Add state diffusion source terms on a uniform grid without terrain.
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 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)
Add state diffusion source terms for embedded-boundary cells.
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 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_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)
Apply implicit vertical state diffusion on terrain-following coordinates.
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 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 ImplicitDiffForMomLU_T(const amrex::Box &bx, const amrex::Box &domain, const int level, const double dt, 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)
Apply implicit vertical momentum diffusion on terrain-following coordinates.
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:241