66 if_corr, scalar_name, ri_c, ref_temp, g)
67 logical,
intent(in) :: if_ext, if_corr
68 real(kind=
rp),
intent(in) :: t
69 integer,
intent(in) :: tstep
70 type(
coef_t),
intent(in) :: coef
71 type(
field_t),
intent(inout) :: nut
72 type(
field_t),
intent(in) :: delta
73 character(len=*),
intent(in) :: scalar_name
74 real(kind=
rp),
intent(in) :: c, ri_c, ref_temp
75 real(kind=
rp),
intent(in) :: g(3)
77 type(
field_t),
pointer :: a11, a12, a13, a21, a22, a23, a31, a32, a33
78 type(
field_t),
pointer :: u, v, w
79 type(
field_t),
pointer :: temperature, dtdx, dtdy, dtdz
81 real(kind=
rp) :: beta11
82 real(kind=
rp) :: beta12
83 real(kind=
rp) :: beta13
84 real(kind=
rp) :: beta22
85 real(kind=
rp) :: beta23
86 real(kind=
rp) :: beta33
87 real(kind=
rp) :: b_beta
88 real(kind=
rp) :: aijaij
89 integer :: temp_indices(9)
90 integer :: temp_indices_buoy(3)
92 real(kind=
rp) :: gmag, ri, correction, buoyancy, shear_sq
93 real(kind=
rp) :: n(3), du_n(3), sh(3)
94 real(kind=
rp) :: du_parallel
118 call dudxyz (a11%x, u%x, coef%drdx, coef%dsdx, coef%dtdx, coef)
119 call dudxyz (a12%x, u%x, coef%drdy, coef%dsdy, coef%dtdy, coef)
120 call dudxyz (a13%x, u%x, coef%drdz, coef%dsdz, coef%dtdz, coef)
122 call dudxyz (a21%x, v%x, coef%drdx, coef%dsdx, coef%dtdx, coef)
123 call dudxyz (a22%x, v%x, coef%drdy, coef%dsdy, coef%dtdy, coef)
124 call dudxyz (a23%x, v%x, coef%drdz, coef%dsdz, coef%dtdz, coef)
126 call dudxyz (a31%x, w%x, coef%drdx, coef%dsdx, coef%dtdx, coef)
127 call dudxyz (a32%x, w%x, coef%drdy, coef%dsdy, coef%dtdy, coef)
128 call dudxyz (a33%x, w%x, coef%drdz, coef%dsdz, coef%dtdz, coef)
142 do e = 1, coef%msh%nelv
146 do i = 1, coef%Xh%lxyz
148 beta11 = a11%x(i,1,1,e)**2 + a21%x(i,1,1,e)**2 + a31%x(i,1,1,e)**2
149 beta22 = a12%x(i,1,1,e)**2 + a22%x(i,1,1,e)**2 + a32%x(i,1,1,e)**2
150 beta33 = a13%x(i,1,1,e)**2 + a23%x(i,1,1,e)**2 + a33%x(i,1,1,e)**2
151 beta12 = a11%x(i,1,1,e)*a12%x(i,1,1,e) + &
152 a21%x(i,1,1,e)*a22%x(i,1,1,e) + &
153 a31%x(i,1,1,e)*a32%x(i,1,1,e)
154 beta13 = a11%x(i,1,1,e)*a13%x(i,1,1,e) + &
155 a21%x(i,1,1,e)*a23%x(i,1,1,e) + &
156 a31%x(i,1,1,e)*a33%x(i,1,1,e)
157 beta23 = a12%x(i,1,1,e)*a13%x(i,1,1,e) + &
158 a22%x(i,1,1,e)*a23%x(i,1,1,e) + &
159 a32%x(i,1,1,e)*a33%x(i,1,1,e)
161 b_beta = beta11*beta22 - beta12*beta12 + beta11*beta33 &
162 - beta13*beta13 + beta22*beta33 - beta23*beta23
164 b_beta =
max(0.0_rp, b_beta)
167 aijaij = beta11 + beta22 + beta33
169 nut%x(i,1,1,e) = c*delta%x(i,1,1,e)*delta%x(i,1,1,e) &
170 * sqrt(b_beta/(aijaij +
neko_eps)) &
182 gmag = sqrt(
vlsc2(g, g, 3))
186 call neko_error(
"The gravity vector must have at least one nonzero component")
188 call grad(dtdx%x, dtdy%x, dtdz%x, temperature%x, coef)
191 do e = 1, coef%msh%nelv
195 do i = 1, coef%Xh%lxyz
198 buoyancy = (-g(1) * dtdx%x(i,1,1,e) - &
199 g(2) * dtdy%x(i,1,1,e) - &
200 g(3) * dtdz%x(i,1,1,e)) / ref_temp
204 du_n(1) = a11%x(i,1,1,e)*n(1) + a12%x(i,1,1,e)*n(2) +&
206 du_n(2) = a21%x(i,1,1,e)*n(1) + a22%x(i,1,1,e)*n(2) +&
208 du_n(3) = a31%x(i,1,1,e)*n(1) + a32%x(i,1,1,e)*n(2) +&
212 du_parallel = du_n(1)*n(1) + du_n(2)*n(2) + du_n(3)*n(3)
216 sh(j) = du_n(j) - du_parallel*n(j)
220 shear_sq = sh(1)*sh(1) + sh(2)*sh(2) + sh(3)*sh(3)
223 ri = buoyancy / (shear_sq +
neko_eps)
225 if (ri .le. ri_c)
then
226 correction = sqrt(1 - ri/ri_c)
227 nut%x(i,1,1,e) = correction * nut%x(i,1,1,e)
238 call col2(nut%x, coef%mult, nut%dof%size())