ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_ComputeStress_EB.cpp File Reference
#include <ERF_Diffusion.H>
Include dependency graph for ERF_ComputeStress_EB.cpp:

Functions

void ComputeStressConsVisc_EB (Box bxcc, Box tbxxy, Box tbxxz, Box tbxyz, Real mu_eff, const Array4< const Real > &cell_data, Array4< Real > &tau11, Array4< Real > &tau22, Array4< Real > &tau33, Array4< Real > &tau12, Array4< Real > &tau13, Array4< Real > &tau23, const Array4< const Real > &er_arr, Array4< const Real > &vfrac, Array4< Real > &tau13i, Array4< Real > &tau23i, Array4< Real > &tau33i)
 
void ComputeStressVarVisc_EB (Box bxcc, Box tbxxy, Box tbxxz, Box tbxyz, Real mu_eff, const Array4< const Real > &mu_turb, const Array4< const Real > &cell_data, Array4< Real > &tau11, Array4< Real > &tau22, Array4< Real > &tau33, Array4< Real > &tau12, Array4< Real > &tau13, Array4< Real > &tau23, const Array4< const Real > &er_arr, Array4< const Real > &vfrac, Array4< Real > &tau13i, Array4< Real > &tau23i, Array4< Real > &tau33i)
 

Function Documentation

◆ ComputeStressConsVisc_EB()

void ComputeStressConsVisc_EB ( Box  bxcc,
Box  tbxxy,
Box  tbxxz,
Box  tbxyz,
Real  mu_eff,
const Array4< const Real > &  cell_data,
Array4< Real > &  tau11,
Array4< Real > &  tau22,
Array4< Real > &  tau33,
Array4< Real > &  tau12,
Array4< Real > &  tau13,
Array4< Real > &  tau23,
const Array4< const Real > &  er_arr,
Array4< const Real > &  vfrac,
Array4< Real > &  tau13i,
Array4< Real > &  tau23i,
Array4< Real > &  tau33i 
)

Function for computing the stress with constant viscosity for EB.

Parameters
[in]bxcccell center box for tau_ii
[in]tbxxynodal xy box for tau_12
[in]tbxxznodal xz box for tau_13
[in]tbxyznodal yz box for tau_23
[in]mu_effconstant molecular viscosity
[in]cell_datato access rho if ConstantAlpha
[in,out]tau1111 strain -> stress
[in,out]tau2222 strain -> stress
[in,out]tau3333 strain -> stress
[in,out]tau1212 strain -> stress
[in,out]tau1313 strain -> stress
[in,out]tau2323 strain -> stress
[in]er_arrexpansion rate
[in]vfracvolume fractions
[in,out]tau13icontribution to stress from du/dz
[in,out]tau23icontribution to stress from dv/dz
[in,out]tau33icontribution to stress from dw/dz
36 {
37  Real OneThird = (one/three);
38 
39  // NOTE: mu_eff includes factor of 2
40 
41  if (cell_data)
42  // constant alpha (stored in mu_eff)
43  {
44  // Cell centered strains
45  ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
46  {
47  Real rhoAlpha = cell_data(i, j, k, Rho_comp) * mu_eff;
48  if (tau33i) tau33i(i,j,k) = -rhoAlpha * tau33(i,j,k);
49  tau11(i,j,k) = -rhoAlpha * ( tau11(i,j,k) - OneThird*er_arr(i,j,k) );
50  tau22(i,j,k) = -rhoAlpha * ( tau22(i,j,k) - OneThird*er_arr(i,j,k) );
51  tau33(i,j,k) = -rhoAlpha * ( tau33(i,j,k) - OneThird*er_arr(i,j,k) );
52  });
53 
54  // Off-diagonal strains
55  ParallelFor(tbxxy,tbxxz,tbxyz,
56  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
57  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j-1,k) + vfrac(i-1,j-1,k);
58  Real rho_bar = zero;
59  if (vol_sum > Real(1.e-16)) {
60  rho_bar = ( vfrac(i-1,j,k) * cell_data(i-1, j , k, Rho_comp)
61  + vfrac(i,j,k) * cell_data(i, j , k, Rho_comp)
62  + vfrac(i-1,j-1,k) * cell_data(i-1, j-1, k, Rho_comp)
63  + vfrac(i,j-1,k) * cell_data(i, j-1, k, Rho_comp) ) / vol_sum;
64  } else {
65  rho_bar = fourth*( cell_data(i-1, j , k, Rho_comp) + cell_data(i, j , k, Rho_comp)
66  + cell_data(i-1, j-1, k, Rho_comp) + cell_data(i, j-1, k, Rho_comp) );
67  }
68  tau12(i,j,k) *= -rho_bar * mu_eff;
69  },
70  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
71  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j,k-1) + vfrac(i-1,j,k-1);
72  Real rho_bar = zero;
73  if (vol_sum > Real(1.e-16)) {
74  rho_bar = ( vfrac(i-1,j,k) * cell_data(i-1, j, k , Rho_comp)
75  + vfrac(i,j,k) * cell_data(i, j, k , Rho_comp)
76  + vfrac(i-1,j,k-1) * cell_data(i-1, j, k-1, Rho_comp)
77  + vfrac(i,j,k-1) * cell_data(i, j, k-1, Rho_comp) )/ vol_sum;
78  } else {
79  rho_bar = fourth*( cell_data(i-1, j, k , Rho_comp) + cell_data(i, j, k , Rho_comp)
80  + cell_data(i-1, j, k-1, Rho_comp) + cell_data(i, j, k-1, Rho_comp) );
81  }
82  tau13(i,j,k) *= -rho_bar * mu_eff;
83 
84  if (tau13i) tau13i(i,j,k) *= -rho_bar * mu_eff;
85  },
86  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
87  Real vol_sum = vfrac(i,j,k) + vfrac(i,j-1,k) + vfrac(i,j,k-1) + vfrac(i,j-1,k-1);
88  Real rho_bar = zero;
89  if (vol_sum > Real(1.e-16)) {
90  rho_bar = ( vfrac(i,j-1,k) * cell_data(i, j-1, k , Rho_comp)
91  + vfrac(i,j,k) * cell_data(i, j, k , Rho_comp)
92  + vfrac(i,j-1,k-1) * cell_data(i, j-1, k-1, Rho_comp)
93  + vfrac(i,j,k-1) * cell_data(i, j, k-1, Rho_comp) ) / vol_sum;
94  } else {
95  rho_bar = fourth*( cell_data(i, j-1, k , Rho_comp) + cell_data(i, j, k , Rho_comp)
96  + cell_data(i, j-1, k-1, Rho_comp) + cell_data(i, j, k-1, Rho_comp) );
97  }
98  tau23(i,j,k) *= -rho_bar * mu_eff;
99 
100  if (tau23i) tau23i(i,j,k) *= -rho_bar * mu_eff;
101  });
102  }
103  else
104  // constant mu_eff
105  {
106  // Cell centered strains
107  ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
108  {
109  if (tau33i) tau33i(i,j,k) = -mu_eff * tau33(i,j,k);
110  tau11(i,j,k) = -mu_eff * ( tau11(i,j,k) - OneThird*er_arr(i,j,k) );
111  tau22(i,j,k) = -mu_eff * ( tau22(i,j,k) - OneThird*er_arr(i,j,k) );
112  tau33(i,j,k) = -mu_eff * ( tau33(i,j,k) - OneThird*er_arr(i,j,k) );
113  });
114 
115  // Off-diagonal strains
116  ParallelFor(tbxxy,tbxxz,tbxyz,
117  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
118  tau12(i,j,k) *= -mu_eff;
119  },
120  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
121  tau13(i,j,k) *= -mu_eff;
122 
123  if (tau13i) tau13i(i,j,k) *= -mu_eff;
124  },
125  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
126  tau23(i,j,k) *= -mu_eff;
127 
128  if (tau23i) tau23i(i,j,k) *= -mu_eff;
129  });
130  }
131 }
constexpr amrex::Real three
Definition: ERF_Constants.H:11
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
@ 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
@ tau13
Definition: ERF_DataStruct.H:38
#define Rho_comp
Definition: ERF_IndexDefines.H:36
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19

Referenced by erf_make_tau_terms().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeStressVarVisc_EB()

void ComputeStressVarVisc_EB ( Box  bxcc,
Box  tbxxy,
Box  tbxxz,
Box  tbxyz,
Real  mu_eff,
const Array4< const Real > &  mu_turb,
const Array4< const Real > &  cell_data,
Array4< Real > &  tau11,
Array4< Real > &  tau22,
Array4< Real > &  tau33,
Array4< Real > &  tau12,
Array4< Real > &  tau13,
Array4< Real > &  tau23,
const Array4< const Real > &  er_arr,
Array4< const Real > &  vfrac,
Array4< Real > &  tau13i,
Array4< Real > &  tau23i,
Array4< Real > &  tau33i 
)

Function for computing the stress with variable viscosity for EB. rho_bar at off-diagonal locations uses vfrac-weighted averaging as in ComputeStressConsVisc_EB; mu_turb is averaged with the same vfrac weights.

Parameters
[in]bxcccell center box for tau_ii
[in]tbxxynodal xy box for tau_12
[in]tbxxznodal xz box for tau_13
[in]tbxyznodal yz box for tau_23
[in]mu_effconstant molecular viscosity
[in]mu_turbturbulent viscosity (cell-centered)
[in]cell_datato access rho if ConstantAlpha
[in,out]tau1111 strain -> stress
[in,out]tau2222 strain -> stress
[in,out]tau3333 strain -> stress
[in,out]tau1212 strain -> stress
[in,out]tau1313 strain -> stress
[in,out]tau2323 strain -> stress
[in]er_arrexpansion rate
[in]vfracvolume fractions
[in,out]tau13icontribution to stress from du/dz
[in,out]tau23icontribution to stress from dv/dz
[in,out]tau33icontribution to stress from dw/dz
168 {
169  Real OneThird = (one/three);
170 
171  // NOTE: mu_eff includes factor of 2
172 
173  if (cell_data)
174  // constant alpha (stored in mu_eff)
175  {
176  // Cell centered strains (no EB correction needed — cell-centered quantities)
177  ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
178  if (vfrac(i,j,k) > zero) {
179  Real rhoAlpha = cell_data(i, j, k, Rho_comp) * mu_eff;
180  Real mu_11 = rhoAlpha + two * mu_turb(i, j, k, EddyDiff::Mom_h);
181  Real mu_22 = mu_11;
182  Real mu_33 = rhoAlpha + two * mu_turb(i, j, k, EddyDiff::Mom_v);
183  if (tau33i) tau33i(i,j,k) = -mu_33 * tau33(i,j,k);
184  tau11(i,j,k) = -mu_11 * ( tau11(i,j,k) - OneThird*er_arr(i,j,k) );
185  tau22(i,j,k) = -mu_22 * ( tau22(i,j,k) - OneThird*er_arr(i,j,k) );
186  tau33(i,j,k) = -mu_33 * ( tau33(i,j,k) - OneThird*er_arr(i,j,k) );
187  } else {
188  if (tau33i) tau33i(i,j,k) = zero;
189  tau11(i,j,k) = zero;
190  tau22(i,j,k) = zero;
191  tau33(i,j,k) = zero;
192  }
193  });
194 
195  // Off-diagonal strains: vfrac-weighted rho_bar and mu_bar
196  ParallelFor(tbxxy,tbxxz,tbxyz,
197  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
198  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j-1,k) + vfrac(i-1,j-1,k);
199  Real rho_bar, mu_bar;
200  if (vol_sum > Real(1.e-16)) {
201  rho_bar = ( vfrac(i-1,j ,k) * cell_data(i-1, j , k, Rho_comp)
202  + vfrac(i ,j ,k) * cell_data(i , j , k, Rho_comp)
203  + vfrac(i-1,j-1,k) * cell_data(i-1, j-1, k, Rho_comp)
204  + vfrac(i ,j-1,k) * cell_data(i , j-1, k, Rho_comp) ) / vol_sum;
205  mu_bar = ( vfrac(i-1,j ,k) * mu_turb(i-1, j , k, EddyDiff::Mom_h)
206  + vfrac(i ,j ,k) * mu_turb(i , j , k, EddyDiff::Mom_h)
207  + vfrac(i-1,j-1,k) * mu_turb(i-1, j-1, k, EddyDiff::Mom_h)
208  + vfrac(i ,j-1,k) * mu_turb(i , j-1, k, EddyDiff::Mom_h) ) / vol_sum;
209  } else {
210  rho_bar = fourth*( cell_data(i-1, j , k, Rho_comp) + cell_data(i , j , k, Rho_comp)
211  + cell_data(i-1, j-1, k, Rho_comp) + cell_data(i , j-1, k, Rho_comp) );
212  mu_bar = fourth*( mu_turb(i-1, j , k, EddyDiff::Mom_h) + mu_turb(i , j , k, EddyDiff::Mom_h)
213  + mu_turb(i-1, j-1, k, EddyDiff::Mom_h) + mu_turb(i , j-1, k, EddyDiff::Mom_h) );
214  }
215  Real mu_12 = rho_bar*mu_eff + two*mu_bar;
216  tau12(i,j,k) *= -mu_12;
217  },
218  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
219  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j,k-1) + vfrac(i-1,j,k-1);
220  Real rho_bar, mu_bar;
221  if (vol_sum > Real(1.e-16)) {
222  rho_bar = ( vfrac(i-1,j,k ) * cell_data(i-1, j, k , Rho_comp)
223  + vfrac(i ,j,k ) * cell_data(i , j, k , Rho_comp)
224  + vfrac(i-1,j,k-1) * cell_data(i-1, j, k-1, Rho_comp)
225  + vfrac(i ,j,k-1) * cell_data(i , j, k-1, Rho_comp) ) / vol_sum;
226  mu_bar = ( vfrac(i-1,j,k ) * mu_turb(i-1, j, k , EddyDiff::Mom_v)
227  + vfrac(i ,j,k ) * mu_turb(i , j, k , EddyDiff::Mom_v)
228  + vfrac(i-1,j,k-1) * mu_turb(i-1, j, k-1, EddyDiff::Mom_v)
229  + vfrac(i ,j,k-1) * mu_turb(i , j, k-1, EddyDiff::Mom_v) ) / vol_sum;
230  } else {
231  rho_bar = fourth*( cell_data(i-1, j, k , Rho_comp) + cell_data(i , j, k , Rho_comp)
232  + cell_data(i-1, j, k-1, Rho_comp) + cell_data(i , j, k-1, Rho_comp) );
233  mu_bar = fourth*( mu_turb(i-1, j, k , EddyDiff::Mom_v) + mu_turb(i , j, k , EddyDiff::Mom_v)
234  + mu_turb(i-1, j, k-1, EddyDiff::Mom_v) + mu_turb(i , j, k-1, EddyDiff::Mom_v) );
235  }
236  Real mu_13 = rho_bar*mu_eff + two*mu_bar;
237  tau13(i,j,k) *= -mu_13;
238  if (tau13i) tau13i(i,j,k) *= -mu_13;
239  },
240  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
241  Real vol_sum = vfrac(i,j,k) + vfrac(i,j-1,k) + vfrac(i,j,k-1) + vfrac(i,j-1,k-1);
242  Real rho_bar, mu_bar;
243  if (vol_sum > Real(1.e-16)) {
244  rho_bar = ( vfrac(i,j-1,k ) * cell_data(i, j-1, k , Rho_comp)
245  + vfrac(i,j ,k ) * cell_data(i, j , k , Rho_comp)
246  + vfrac(i,j-1,k-1) * cell_data(i, j-1, k-1, Rho_comp)
247  + vfrac(i,j ,k-1) * cell_data(i, j , k-1, Rho_comp) ) / vol_sum;
248  mu_bar = ( vfrac(i,j-1,k ) * mu_turb(i, j-1, k , EddyDiff::Mom_v)
249  + vfrac(i,j ,k ) * mu_turb(i, j , k , EddyDiff::Mom_v)
250  + vfrac(i,j-1,k-1) * mu_turb(i, j-1, k-1, EddyDiff::Mom_v)
251  + vfrac(i,j ,k-1) * mu_turb(i, j , k-1, EddyDiff::Mom_v) ) / vol_sum;
252  } else {
253  rho_bar = fourth*( cell_data(i, j-1, k , Rho_comp) + cell_data(i, j , k , Rho_comp)
254  + cell_data(i, j-1, k-1, Rho_comp) + cell_data(i, j , k-1, Rho_comp) );
255  mu_bar = fourth*( mu_turb(i, j-1, k , EddyDiff::Mom_v) + mu_turb(i, j , k , EddyDiff::Mom_v)
256  + mu_turb(i, j-1, k-1, EddyDiff::Mom_v) + mu_turb(i, j , k-1, EddyDiff::Mom_v) );
257  }
258  Real mu_23 = rho_bar*mu_eff + two*mu_bar;
259  tau23(i,j,k) *= -mu_23;
260  if (tau23i) tau23i(i,j,k) *= -mu_23;
261  });
262  }
263  else
264  // constant mu_eff
265  {
266  // Cell centered strains
267  ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
268  if (vfrac(i,j,k) > zero) {
269  Real mu_11 = mu_eff + two * mu_turb(i, j, k, EddyDiff::Mom_h);
270  Real mu_22 = mu_11;
271  Real mu_33 = mu_eff + two * mu_turb(i, j, k, EddyDiff::Mom_v);
272  if (tau33i) tau33i(i,j,k) = -mu_33 * tau33(i,j,k);
273  tau11(i,j,k) = -mu_11 * ( tau11(i,j,k) - OneThird*er_arr(i,j,k) );
274  tau22(i,j,k) = -mu_22 * ( tau22(i,j,k) - OneThird*er_arr(i,j,k) );
275  tau33(i,j,k) = -mu_33 * ( tau33(i,j,k) - OneThird*er_arr(i,j,k) );
276  } else {
277  if (tau33i) tau33i(i,j,k) = zero;
278  tau11(i,j,k) = zero;
279  tau22(i,j,k) = zero;
280  tau33(i,j,k) = zero;
281  }
282  });
283 
284  // Off-diagonal strains: vfrac-weighted mu_bar
285  ParallelFor(tbxxy,tbxxz,tbxyz,
286  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
287  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j-1,k) + vfrac(i-1,j-1,k);
288  Real mu_bar;
289  if (vol_sum > Real(1.e-16)) {
290  mu_bar = ( vfrac(i-1,j ,k) * mu_turb(i-1, j , k, EddyDiff::Mom_h)
291  + vfrac(i ,j ,k) * mu_turb(i , j , k, EddyDiff::Mom_h)
292  + vfrac(i-1,j-1,k) * mu_turb(i-1, j-1, k, EddyDiff::Mom_h)
293  + vfrac(i ,j-1,k) * mu_turb(i , j-1, k, EddyDiff::Mom_h) ) / vol_sum;
294  } else {
295  mu_bar = fourth*( mu_turb(i-1, j , k, EddyDiff::Mom_h) + mu_turb(i , j , k, EddyDiff::Mom_h)
296  + mu_turb(i-1, j-1, k, EddyDiff::Mom_h) + mu_turb(i , j-1, k, EddyDiff::Mom_h) );
297  }
298  Real mu_12 = mu_eff + two*mu_bar;
299  tau12(i,j,k) *= -mu_12;
300  },
301  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
302  Real vol_sum = vfrac(i,j,k) + vfrac(i-1,j,k) + vfrac(i,j,k-1) + vfrac(i-1,j,k-1);
303  Real mu_bar;
304  if (vol_sum > Real(1.e-16)) {
305  mu_bar = ( vfrac(i-1,j,k ) * mu_turb(i-1, j, k , EddyDiff::Mom_v)
306  + vfrac(i ,j,k ) * mu_turb(i , j, k , EddyDiff::Mom_v)
307  + vfrac(i-1,j,k-1) * mu_turb(i-1, j, k-1, EddyDiff::Mom_v)
308  + vfrac(i ,j,k-1) * mu_turb(i , j, k-1, EddyDiff::Mom_v) ) / vol_sum;
309  } else {
310  mu_bar = fourth*( mu_turb(i-1, j, k , EddyDiff::Mom_v) + mu_turb(i , j, k , EddyDiff::Mom_v)
311  + mu_turb(i-1, j, k-1, EddyDiff::Mom_v) + mu_turb(i , j, k-1, EddyDiff::Mom_v) );
312  }
313  Real mu_13 = mu_eff + two*mu_bar;
314  tau13(i,j,k) *= -mu_13;
315  if (tau13i) tau13i(i,j,k) *= -mu_13;
316  },
317  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
318  Real vol_sum = vfrac(i,j,k) + vfrac(i,j-1,k) + vfrac(i,j,k-1) + vfrac(i,j-1,k-1);
319  Real mu_bar;
320  if (vol_sum > Real(1.e-16)) {
321  mu_bar = ( vfrac(i,j-1,k ) * mu_turb(i, j-1, k , EddyDiff::Mom_v)
322  + vfrac(i,j ,k ) * mu_turb(i, j , k , EddyDiff::Mom_v)
323  + vfrac(i,j-1,k-1) * mu_turb(i, j-1, k-1, EddyDiff::Mom_v)
324  + vfrac(i,j ,k-1) * mu_turb(i, j , k-1, EddyDiff::Mom_v) ) / vol_sum;
325  } else {
326  mu_bar = fourth*( mu_turb(i, j-1, k , EddyDiff::Mom_v) + mu_turb(i, j , k , EddyDiff::Mom_v)
327  + mu_turb(i, j-1, k-1, EddyDiff::Mom_v) + mu_turb(i, j , k-1, EddyDiff::Mom_v) );
328  }
329  Real mu_23 = mu_eff + two*mu_bar;
330  tau23(i,j,k) *= -mu_23;
331  if (tau23i) tau23i(i,j,k) *= -mu_23;
332  });
333  }
334 }
constexpr amrex::Real two
Definition: ERF_Constants.H:10
@ Mom_h
Definition: ERF_IndexDefines.H:206
@ Mom_v
Definition: ERF_IndexDefines.H:211

Referenced by erf_make_tau_terms().

Here is the call graph for this function:
Here is the caller graph for this function: