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)
140 do concurrent(e = 1:coef%msh%nelv)
141 do concurrent(i = 1:coef%Xh%lxyz)
143 beta11 = a11%x(i,1,1,e)**2 + a21%x(i,1,1,e)**2 + a31%x(i,1,1,e)**2
144 beta22 = a12%x(i,1,1,e)**2 + a22%x(i,1,1,e)**2 + a32%x(i,1,1,e)**2
145 beta33 = a13%x(i,1,1,e)**2 + a23%x(i,1,1,e)**2 + a33%x(i,1,1,e)**2
146 beta12 = a11%x(i,1,1,e)*a12%x(i,1,1,e) + &
147 a21%x(i,1,1,e)*a22%x(i,1,1,e) + &
148 a31%x(i,1,1,e)*a32%x(i,1,1,e)
149 beta13 = a11%x(i,1,1,e)*a13%x(i,1,1,e) + &
150 a21%x(i,1,1,e)*a23%x(i,1,1,e) + &
151 a31%x(i,1,1,e)*a33%x(i,1,1,e)
152 beta23 = a12%x(i,1,1,e)*a13%x(i,1,1,e) + &
153 a22%x(i,1,1,e)*a23%x(i,1,1,e) + &
154 a32%x(i,1,1,e)*a33%x(i,1,1,e)
156 b_beta = beta11*beta22 - beta12*beta12 + beta11*beta33 &
157 - beta13*beta13 + beta22*beta33 - beta23*beta23
159 b_beta =
max(0.0_rp, b_beta)
162 aijaij = beta11 + beta22 + beta33
164 nut%x(i,1,1,e) = c*delta%x(i,1,1,e)*delta%x(i,1,1,e) &
165 * sqrt(b_beta/(aijaij +
neko_eps)) &
176 gmag = sqrt(
vlsc2(g, g, 3))
180 call neko_error(
"The gravity vector must have at least one nonzero component")
182 call grad(dtdx%x, dtdy%x, dtdz%x, temperature%x, coef)
183 do concurrent(e = 1:coef%msh%nelv)
184 do concurrent(i = 1:coef%Xh%lxyz)
187 buoyancy = (-g(1) * dtdx%x(i,1,1,e) - &
188 g(2) * dtdy%x(i,1,1,e) - &
189 g(3) * dtdz%x(i,1,1,e)) / ref_temp
193 du_n(1) = a11%x(i,1,1,e)*n(1) + a12%x(i,1,1,e)*n(2) +&
195 du_n(2) = a21%x(i,1,1,e)*n(1) + a22%x(i,1,1,e)*n(2) +&
197 du_n(3) = a31%x(i,1,1,e)*n(1) + a32%x(i,1,1,e)*n(2) +&
201 du_parallel = du_n(1)*n(1) + du_n(2)*n(2) + du_n(3)*n(3)
204 do concurrent(j = 1:3)
205 sh(j) = du_n(j) - du_parallel*n(j)
209 shear_sq = sh(1)*sh(1) + sh(2)*sh(2) + sh(3)*sh(3)
212 ri = buoyancy / (shear_sq +
neko_eps)
214 if (ri .le. ri_c)
then
215 correction = sqrt(1 - ri/ri_c)
216 nut%x(i,1,1,e) = correction * nut%x(i,1,1,e)
226 call col2(nut%x, coef%mult, nut%dof%size())