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
147 do i = 1, coef%Xh%lxyz
149 beta11 = a11%x(i,1,1,e)**2 + a21%x(i,1,1,e)**2 + a31%x(i,1,1,e)**2
150 beta22 = a12%x(i,1,1,e)**2 + a22%x(i,1,1,e)**2 + a32%x(i,1,1,e)**2
151 beta33 = a13%x(i,1,1,e)**2 + a23%x(i,1,1,e)**2 + a33%x(i,1,1,e)**2
152 beta12 = a11%x(i,1,1,e)*a12%x(i,1,1,e) + &
153 a21%x(i,1,1,e)*a22%x(i,1,1,e) + &
154 a31%x(i,1,1,e)*a32%x(i,1,1,e)
155 beta13 = a11%x(i,1,1,e)*a13%x(i,1,1,e) + &
156 a21%x(i,1,1,e)*a23%x(i,1,1,e) + &
157 a31%x(i,1,1,e)*a33%x(i,1,1,e)
158 beta23 = a12%x(i,1,1,e)*a13%x(i,1,1,e) + &
159 a22%x(i,1,1,e)*a23%x(i,1,1,e) + &
160 a32%x(i,1,1,e)*a33%x(i,1,1,e)
162 b_beta = beta11*beta22 - beta12*beta12 + beta11*beta33 &
163 - beta13*beta13 + beta22*beta33 - beta23*beta23
165 b_beta =
max(0.0_rp, b_beta)
168 aijaij = beta11 + beta22 + beta33
170 nut%x(i,1,1,e) = c*delta%x(i,1,1,e)*delta%x(i,1,1,e) &
171 * sqrt(b_beta/(aijaij +
neko_eps)) &
183 gmag = sqrt(
vlsc2(g, g, 3))
187 call neko_error(
"The gravity vector must have at least one nonzero component")
189 call grad(dtdx%x, dtdy%x, dtdz%x, temperature%x, coef)
192 do e = 1, coef%msh%nelv
197 do i = 1, coef%Xh%lxyz
200 buoyancy = (-g(1) * dtdx%x(i,1,1,e) - &
201 g(2) * dtdy%x(i,1,1,e) - &
202 g(3) * dtdz%x(i,1,1,e)) / ref_temp
206 du_n(1) = a11%x(i,1,1,e)*n(1) + a12%x(i,1,1,e)*n(2) +&
208 du_n(2) = a21%x(i,1,1,e)*n(1) + a22%x(i,1,1,e)*n(2) +&
210 du_n(3) = a31%x(i,1,1,e)*n(1) + a32%x(i,1,1,e)*n(2) +&
214 du_parallel = du_n(1)*n(1) + du_n(2)*n(2) + du_n(3)*n(3)
218 sh(j) = du_n(j) - du_parallel*n(j)
222 shear_sq = sh(1)*sh(1) + sh(2)*sh(2) + sh(3)*sh(3)
225 ri = buoyancy / (shear_sq +
neko_eps)
227 if (ri .le. ri_c)
then
228 correction = sqrt(1 - ri/ri_c)
229 nut%x(i,1,1,e) = correction * nut%x(i,1,1,e)
240 call col2(nut%x, coef%mult, nut%dof%size())