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