34submodule(
opr_sx) sx_lambda2
40 module subroutine opr_sx_lambda2(
lambda2, u, v, w, coef)
41 type(coef_t),
intent(in) :: coef
42 real(kind=rp),
intent(inout), &
43 dimension(coef%Xh%lx, coef%Xh%ly, coef%Xh%lz, coef%msh%nelv) ::
lambda2
44 real(kind=rp),
intent(in), &
45 dimension(coef%Xh%lx, coef%Xh%ly, coef%Xh%lz, coef%msh%nelv) :: u, v, w
47 associate(xh => coef%Xh, msh => coef%msh)
50 call sx_lambda2_lx18(
lambda2, u, v, w, &
51 xh%dx, xh%dy, xh%dz, &
52 coef%drdx, coef%dsdx, coef%dtdx, &
53 coef%drdy, coef%dsdy, coef%dtdy, &
54 coef%drdz, coef%dsdz, coef%dtdz, &
55 xh%w3, coef%B, msh%nelv)
57 call sx_lambda2_lx17(
lambda2, u, v, w, &
58 xh%dx, xh%dy, xh%dz, &
59 coef%drdx, coef%dsdx, coef%dtdx, &
60 coef%drdy, coef%dsdy, coef%dtdy, &
61 coef%drdz, coef%dsdz, coef%dtdz, &
62 xh%w3, coef%B, msh%nelv)
64 call sx_lambda2_lx16(
lambda2, u, v, w, &
65 xh%dx, xh%dy, xh%dz, &
66 coef%drdx, coef%dsdx, coef%dtdx, &
67 coef%drdy, coef%dsdy, coef%dtdy, &
68 coef%drdz, coef%dsdz, coef%dtdz, &
69 xh%w3, coef%B, msh%nelv)
71 call sx_lambda2_lx15(
lambda2, u, v, w, &
72 xh%dx, xh%dy, xh%dz, &
73 coef%drdx, coef%dsdx, coef%dtdx, &
74 coef%drdy, coef%dsdy, coef%dtdy, &
75 coef%drdz, coef%dsdz, coef%dtdz, &
76 xh%w3, coef%B, msh%nelv)
78 call sx_lambda2_lx14(
lambda2, u, v, w, &
79 xh%dx, xh%dy, xh%dz, &
80 coef%drdx, coef%dsdx, coef%dtdx, &
81 coef%drdy, coef%dsdy, coef%dtdy, &
82 coef%drdz, coef%dsdz, coef%dtdz, &
83 xh%w3, coef%B, msh%nelv)
85 call sx_lambda2_lx13(
lambda2, u, v, w, &
86 xh%dx, xh%dy, xh%dz, &
87 coef%drdx, coef%dsdx, coef%dtdx, &
88 coef%drdy, coef%dsdy, coef%dtdy, &
89 coef%drdz, coef%dsdz, coef%dtdz, &
90 xh%w3, coef%B, msh%nelv)
92 call sx_lambda2_lx12(
lambda2, u, v, w, &
93 xh%dx, xh%dy, xh%dz, &
94 coef%drdx, coef%dsdx, coef%dtdx, &
95 coef%drdy, coef%dsdy, coef%dtdy, &
96 coef%drdz, coef%dsdz, coef%dtdz, &
97 xh%w3, coef%B, msh%nelv)
99 call sx_lambda2_lx11(
lambda2, u, v, w, &
100 xh%dx, xh%dy, xh%dz, &
101 coef%drdx, coef%dsdx, coef%dtdx, &
102 coef%drdy, coef%dsdy, coef%dtdy, &
103 coef%drdz, coef%dsdz, coef%dtdz, &
104 xh%w3, coef%B, msh%nelv)
106 call sx_lambda2_lx10(
lambda2, u, v, w, &
107 xh%dx, xh%dy, xh%dz, &
108 coef%drdx, coef%dsdx, coef%dtdx, &
109 coef%drdy, coef%dsdy, coef%dtdy, &
110 coef%drdz, coef%dsdz, coef%dtdz, &
111 xh%w3, coef%B, msh%nelv)
113 call sx_lambda2_lx9(
lambda2, u, v, w, &
114 xh%dx, xh%dy, xh%dz, &
115 coef%drdx, coef%dsdx, coef%dtdx, &
116 coef%drdy, coef%dsdy, coef%dtdy, &
117 coef%drdz, coef%dsdz, coef%dtdz, &
118 xh%w3, coef%B, msh%nelv)
120 call sx_lambda2_lx8(
lambda2, u, v, w, &
121 xh%dx, xh%dy, xh%dz, &
122 coef%drdx, coef%dsdx, coef%dtdx, &
123 coef%drdy, coef%dsdy, coef%dtdy, &
124 coef%drdz, coef%dsdz, coef%dtdz, &
125 xh%w3, coef%B, msh%nelv)
127 call sx_lambda2_lx7(
lambda2, u, v, w, &
128 xh%dx, xh%dy, xh%dz, &
129 coef%drdx, coef%dsdx, coef%dtdx, &
130 coef%drdy, coef%dsdy, coef%dtdy, &
131 coef%drdz, coef%dsdz, coef%dtdz, &
132 xh%w3, coef%B, msh%nelv)
134 call sx_lambda2_lx6(
lambda2, u, v, w, &
135 xh%dx, xh%dy, xh%dz, &
136 coef%drdx, coef%dsdx, coef%dtdx, &
137 coef%drdy, coef%dsdy, coef%dtdy, &
138 coef%drdz, coef%dsdz, coef%dtdz, &
139 xh%w3, coef%B, msh%nelv)
141 call sx_lambda2_lx5(
lambda2, u, v, w, &
142 xh%dx, xh%dy, xh%dz, &
143 coef%drdx, coef%dsdx, coef%dtdx, &
144 coef%drdy, coef%dsdy, coef%dtdy, &
145 coef%drdz, coef%dsdz, coef%dtdz, &
146 xh%w3, coef%B, msh%nelv)
148 call sx_lambda2_lx4(
lambda2, u, v, w, &
149 xh%dx, xh%dy, xh%dz, &
150 coef%drdx, coef%dsdx, coef%dtdx, &
151 coef%drdy, coef%dsdy, coef%dtdy, &
152 coef%drdz, coef%dsdz, coef%dtdz, &
153 xh%w3, coef%B, msh%nelv)
155 call sx_lambda2_lx3(
lambda2, u, v, w, &
156 xh%dx, xh%dy, xh%dz, &
157 coef%drdx, coef%dsdx, coef%dtdx, &
158 coef%drdy, coef%dsdy, coef%dtdy, &
159 coef%drdz, coef%dsdz, coef%dtdz, &
160 xh%w3, coef%B, msh%nelv)
162 call sx_lambda2_lx2(
lambda2, u, v, w, &
163 xh%dx, xh%dy, xh%dz, &
164 coef%drdx, coef%dsdx, coef%dtdx, &
165 coef%drdy, coef%dsdy, coef%dtdy, &
166 coef%drdz, coef%dsdz, coef%dtdz, &
167 xh%w3, coef%B, msh%nelv)
169 call sx_lambda2_lx(
lambda2, u, v, w, &
170 xh%dx, xh%dy, xh%dz, &
171 coef%drdx, coef%dsdx, coef%dtdx, &
172 coef%drdy, coef%dsdy, coef%dtdy, &
173 coef%drdz, coef%dsdz, coef%dtdz, &
174 xh%w3, coef%B, msh%nelv, xh%lx)
178 end subroutine opr_sx_lambda2
180 subroutine sx_lambda2_lx(lambda2, u, v, w, dx, dy, dz, &
181 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n, lx)
182 integer,
intent(in) :: n, lx
183 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
184 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
185 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
186 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
187 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
188 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
189 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
190 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
191 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
192 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
193 real(kind=rp) :: grad(lx*lx*lx,3,3)
194 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
195 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
196 real(kind=rp) :: a11, a22, a33, a12, a13, a23
197 real(kind=rp) :: msk1, msk2, msk3
198 real(kind=rp) :: ur(lx, lx, lx)
199 real(kind=rp) :: vr(lx, lx, lx)
200 real(kind=rp) :: wr(lx, lx, lx)
201 real(kind=rp) :: us(lx, lx, lx)
202 real(kind=rp) :: vs(lx, lx, lx)
203 real(kind=rp) :: ws(lx, lx, lx)
204 real(kind=rp) :: ut(lx, lx, lx)
205 real(kind=rp) :: vt(lx, lx, lx)
206 real(kind=rp) :: wt(lx, lx, lx)
207 real(kind=rp) :: tmp1, tmp2, tmp3
208 integer :: e, i, j, k, l
217 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
218 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
219 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
234 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
235 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
236 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
251 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
252 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
253 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
261 do i = 1, lx * lx * lx
262 grad(1,1,1) = w3(i,1,1) &
263 * ( drdx(i,1,1,e) * ur(i,1,1) &
264 + dsdx(i,1,1,e) * us(i,1,1) &
265 + dtdx(i,1,1,e) * ut(i,1,1) )
266 grad(1,1,2) = w3(i,1,1) &
267 * ( dsdy(i,1,1,e) * us(i,1,1) &
268 + drdy(i,1,1,e) * ur(i,1,1) &
269 + dtdy(i,1,1,e) * ut(i,1,1) )
270 grad(1,1,3) = w3(i,1,1) &
271 * ( dtdz(i,1,1,e) * ut(i,1,1) &
272 + drdz(i,1,1,e) * ur(i,1,1) &
273 + dsdz(i,1,1,e) * us(i,1,1) )
275 grad(1,2,1) = w3(i,1,1) &
276 * ( drdx(i,1,1,e) * vr(i,1,1) &
277 + dsdx(i,1,1,e) * vs(i,1,1) &
278 + dtdx(i,1,1,e) * vt(i,1,1) )
279 grad(1,2,2) = w3(i,1,1) &
280 * ( dsdy(i,1,1,e) * vs(i,1,1) &
281 + drdy(i,1,1,e) * vr(i,1,1) &
282 + dtdy(i,1,1,e) * vt(i,1,1) )
283 grad(1,2,3) = w3(i,1,1) &
284 * ( dtdz(i,1,1,e) * vt(i,1,1) &
285 + drdz(i,1,1,e) * vr(i,1,1) &
286 + dsdz(i,1,1,e) * vs(i,1,1) )
288 grad(1,3,1) = w3(i,1,1) &
289 * ( drdx(i,1,1,e) * wr(i,1,1) &
290 + dsdx(i,1,1,e) * ws(i,1,1) &
291 + dtdx(i,1,1,e) * wt(i,1,1) )
292 grad(1,3,2) = w3(i,1,1) &
293 * ( dsdy(i,1,1,e) * ws(i,1,1) &
294 + drdy(i,1,1,e) * wr(i,1,1) &
295 + dtdy(i,1,1,e) * wt(i,1,1) )
296 grad(1,3,3) = w3(i,1,1) &
297 * ( dtdz(i,1,1,e) * wt(i,1,1) &
298 + drdz(i,1,1,e) * wr(i,1,1) &
299 + dsdz(i,1,1,e) * ws(i,1,1) )
303 do i = 1, lx * lx * lx
309 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
310 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
311 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
313 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
314 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
315 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
317 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
318 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
319 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
321 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
322 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
323 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
326 b = -(a11 + a22 + a33)
327 c = -(a12*a12 + a13*a13 + a23*a23 &
328 - a11 * a22 - a11 * a33 - a22 * a33)
329 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
330 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
333 q = (3.0 * c - b*b) / 9.0
334 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
335 theta = acos( r / sqrt(-q*q*q) )
337 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
338 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
339 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
341 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
342 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
343 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
344 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
345 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
346 .le. eigen(2) .and. eigen(2) .le. eigen(1))
347 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
348 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
349 .le. eigen(3) .and. eigen(3) .le. eigen(1))
351 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
353 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
356 end subroutine sx_lambda2_lx
358 subroutine sx_lambda2_lx18(lambda2, u, v, w, dx, dy, dz, &
359 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
360 integer,
parameter :: lx = 18
361 integer,
intent(in) :: n
362 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
363 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
364 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
365 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
366 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
367 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
368 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
369 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
370 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
371 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
372 real(kind=rp) :: grad(lx*lx*lx,3,3)
373 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
374 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
375 real(kind=rp) :: a11, a22, a33, a12, a13, a23
376 real(kind=rp) :: msk1, msk2, msk3
377 real(kind=rp) :: ur(lx, lx, lx)
378 real(kind=rp) :: vr(lx, lx, lx)
379 real(kind=rp) :: wr(lx, lx, lx)
380 real(kind=rp) :: us(lx, lx, lx)
381 real(kind=rp) :: vs(lx, lx, lx)
382 real(kind=rp) :: ws(lx, lx, lx)
383 real(kind=rp) :: ut(lx, lx, lx)
384 real(kind=rp) :: vt(lx, lx, lx)
385 real(kind=rp) :: wt(lx, lx, lx)
386 real(kind=rp) :: tmp1, tmp2, tmp3
387 integer :: e, i, j, k, l
396 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
397 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
398 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
413 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
414 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
415 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
430 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
431 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
432 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
440 do i = 1, lx * lx * lx
441 grad(1,1,1) = w3(i,1,1) &
442 * ( drdx(i,1,1,e) * ur(i,1,1) &
443 + dsdx(i,1,1,e) * us(i,1,1) &
444 + dtdx(i,1,1,e) * ut(i,1,1) )
445 grad(1,1,2) = w3(i,1,1) &
446 * ( dsdy(i,1,1,e) * us(i,1,1) &
447 + drdy(i,1,1,e) * ur(i,1,1) &
448 + dtdy(i,1,1,e) * ut(i,1,1) )
449 grad(1,1,3) = w3(i,1,1) &
450 * ( dtdz(i,1,1,e) * ut(i,1,1) &
451 + drdz(i,1,1,e) * ur(i,1,1) &
452 + dsdz(i,1,1,e) * us(i,1,1) )
454 grad(1,2,1) = w3(i,1,1) &
455 * ( drdx(i,1,1,e) * vr(i,1,1) &
456 + dsdx(i,1,1,e) * vs(i,1,1) &
457 + dtdx(i,1,1,e) * vt(i,1,1) )
458 grad(1,2,2) = w3(i,1,1) &
459 * ( dsdy(i,1,1,e) * vs(i,1,1) &
460 + drdy(i,1,1,e) * vr(i,1,1) &
461 + dtdy(i,1,1,e) * vt(i,1,1) )
462 grad(1,2,3) = w3(i,1,1) &
463 * ( dtdz(i,1,1,e) * vt(i,1,1) &
464 + drdz(i,1,1,e) * vr(i,1,1) &
465 + dsdz(i,1,1,e) * vs(i,1,1) )
467 grad(1,3,1) = w3(i,1,1) &
468 * ( drdx(i,1,1,e) * wr(i,1,1) &
469 + dsdx(i,1,1,e) * ws(i,1,1) &
470 + dtdx(i,1,1,e) * wt(i,1,1) )
471 grad(1,3,2) = w3(i,1,1) &
472 * ( dsdy(i,1,1,e) * ws(i,1,1) &
473 + drdy(i,1,1,e) * wr(i,1,1) &
474 + dtdy(i,1,1,e) * wt(i,1,1) )
475 grad(1,3,3) = w3(i,1,1) &
476 * ( dtdz(i,1,1,e) * wt(i,1,1) &
477 + drdz(i,1,1,e) * wr(i,1,1) &
478 + dsdz(i,1,1,e) * ws(i,1,1) )
482 do i = 1, lx * lx * lx
488 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
489 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
490 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
492 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
493 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
494 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
496 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
497 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
498 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
500 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
501 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
502 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
505 b = -(a11 + a22 + a33)
506 c = -(a12*a12 + a13*a13 + a23*a23 &
507 - a11 * a22 - a11 * a33 - a22 * a33)
508 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
509 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
512 q = (3.0 * c - b*b) / 9.0
513 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
514 theta = acos( r / sqrt(-q*q*q) )
516 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
517 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
518 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
520 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
521 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
522 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
523 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
524 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
525 .le. eigen(2) .and. eigen(2) .le. eigen(1))
526 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
527 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
528 .le. eigen(3) .and. eigen(3) .le. eigen(1))
530 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
532 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
535 end subroutine sx_lambda2_lx18
537 subroutine sx_lambda2_lx17(lambda2, u, v, w, dx, dy, dz, &
538 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
539 integer,
parameter :: lx = 17
540 integer,
intent(in) :: n
541 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
542 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
543 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
544 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
545 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
546 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
547 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
548 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
549 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
550 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
551 real(kind=rp) :: grad(lx*lx*lx,3,3)
552 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
553 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
554 real(kind=rp) :: a11, a22, a33, a12, a13, a23
555 real(kind=rp) :: msk1, msk2, msk3
556 real(kind=rp) :: ur(lx, lx, lx)
557 real(kind=rp) :: vr(lx, lx, lx)
558 real(kind=rp) :: wr(lx, lx, lx)
559 real(kind=rp) :: us(lx, lx, lx)
560 real(kind=rp) :: vs(lx, lx, lx)
561 real(kind=rp) :: ws(lx, lx, lx)
562 real(kind=rp) :: ut(lx, lx, lx)
563 real(kind=rp) :: vt(lx, lx, lx)
564 real(kind=rp) :: wt(lx, lx, lx)
565 real(kind=rp) :: tmp1, tmp2, tmp3
566 integer :: e, i, j, k, l
575 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
576 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
577 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
592 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
593 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
594 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
609 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
610 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
611 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
619 do i = 1, lx * lx * lx
620 grad(1,1,1) = w3(i,1,1) &
621 * ( drdx(i,1,1,e) * ur(i,1,1) &
622 + dsdx(i,1,1,e) * us(i,1,1) &
623 + dtdx(i,1,1,e) * ut(i,1,1) )
624 grad(1,1,2) = w3(i,1,1) &
625 * ( dsdy(i,1,1,e) * us(i,1,1) &
626 + drdy(i,1,1,e) * ur(i,1,1) &
627 + dtdy(i,1,1,e) * ut(i,1,1) )
628 grad(1,1,3) = w3(i,1,1) &
629 * ( dtdz(i,1,1,e) * ut(i,1,1) &
630 + drdz(i,1,1,e) * ur(i,1,1) &
631 + dsdz(i,1,1,e) * us(i,1,1) )
633 grad(1,2,1) = w3(i,1,1) &
634 * ( drdx(i,1,1,e) * vr(i,1,1) &
635 + dsdx(i,1,1,e) * vs(i,1,1) &
636 + dtdx(i,1,1,e) * vt(i,1,1) )
637 grad(1,2,2) = w3(i,1,1) &
638 * ( dsdy(i,1,1,e) * vs(i,1,1) &
639 + drdy(i,1,1,e) * vr(i,1,1) &
640 + dtdy(i,1,1,e) * vt(i,1,1) )
641 grad(1,2,3) = w3(i,1,1) &
642 * ( dtdz(i,1,1,e) * vt(i,1,1) &
643 + drdz(i,1,1,e) * vr(i,1,1) &
644 + dsdz(i,1,1,e) * vs(i,1,1) )
646 grad(1,3,1) = w3(i,1,1) &
647 * ( drdx(i,1,1,e) * wr(i,1,1) &
648 + dsdx(i,1,1,e) * ws(i,1,1) &
649 + dtdx(i,1,1,e) * wt(i,1,1) )
650 grad(1,3,2) = w3(i,1,1) &
651 * ( dsdy(i,1,1,e) * ws(i,1,1) &
652 + drdy(i,1,1,e) * wr(i,1,1) &
653 + dtdy(i,1,1,e) * wt(i,1,1) )
654 grad(1,3,3) = w3(i,1,1) &
655 * ( dtdz(i,1,1,e) * wt(i,1,1) &
656 + drdz(i,1,1,e) * wr(i,1,1) &
657 + dsdz(i,1,1,e) * ws(i,1,1) )
661 do i = 1, lx * lx * lx
667 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
668 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
669 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
671 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
672 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
673 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
675 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
676 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
677 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
679 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
680 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
681 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
684 b = -(a11 + a22 + a33)
685 c = -(a12*a12 + a13*a13 + a23*a23 &
686 - a11 * a22 - a11 * a33 - a22 * a33)
687 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
688 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
691 q = (3.0 * c - b*b) / 9.0
692 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
693 theta = acos( r / sqrt(-q*q*q) )
695 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
696 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
697 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
699 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
700 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
701 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
702 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
703 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
704 .le. eigen(2) .and. eigen(2) .le. eigen(1))
705 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
706 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
707 .le. eigen(3) .and. eigen(3) .le. eigen(1))
709 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
711 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
714 end subroutine sx_lambda2_lx17
716 subroutine sx_lambda2_lx16(lambda2, u, v, w, dx, dy, dz, &
717 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
718 integer,
parameter :: lx = 16
719 integer,
intent(in) :: n
720 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
721 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
722 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
723 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
724 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
725 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
726 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
727 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
728 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
729 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
730 real(kind=rp) :: grad(lx*lx*lx,3,3)
731 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
732 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
733 real(kind=rp) :: a11, a22, a33, a12, a13, a23
734 real(kind=rp) :: msk1, msk2, msk3
735 real(kind=rp) :: ur(lx, lx, lx)
736 real(kind=rp) :: vr(lx, lx, lx)
737 real(kind=rp) :: wr(lx, lx, lx)
738 real(kind=rp) :: us(lx, lx, lx)
739 real(kind=rp) :: vs(lx, lx, lx)
740 real(kind=rp) :: ws(lx, lx, lx)
741 real(kind=rp) :: ut(lx, lx, lx)
742 real(kind=rp) :: vt(lx, lx, lx)
743 real(kind=rp) :: wt(lx, lx, lx)
744 real(kind=rp) :: tmp1, tmp2, tmp3
745 integer :: e, i, j, k, l
754 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
755 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
756 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
771 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
772 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
773 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
788 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
789 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
790 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
798 do i = 1, lx * lx * lx
799 grad(1,1,1) = w3(i,1,1) &
800 * ( drdx(i,1,1,e) * ur(i,1,1) &
801 + dsdx(i,1,1,e) * us(i,1,1) &
802 + dtdx(i,1,1,e) * ut(i,1,1) )
803 grad(1,1,2) = w3(i,1,1) &
804 * ( dsdy(i,1,1,e) * us(i,1,1) &
805 + drdy(i,1,1,e) * ur(i,1,1) &
806 + dtdy(i,1,1,e) * ut(i,1,1) )
807 grad(1,1,3) = w3(i,1,1) &
808 * ( dtdz(i,1,1,e) * ut(i,1,1) &
809 + drdz(i,1,1,e) * ur(i,1,1) &
810 + dsdz(i,1,1,e) * us(i,1,1) )
812 grad(1,2,1) = w3(i,1,1) &
813 * ( drdx(i,1,1,e) * vr(i,1,1) &
814 + dsdx(i,1,1,e) * vs(i,1,1) &
815 + dtdx(i,1,1,e) * vt(i,1,1) )
816 grad(1,2,2) = w3(i,1,1) &
817 * ( dsdy(i,1,1,e) * vs(i,1,1) &
818 + drdy(i,1,1,e) * vr(i,1,1) &
819 + dtdy(i,1,1,e) * vt(i,1,1) )
820 grad(1,2,3) = w3(i,1,1) &
821 * ( dtdz(i,1,1,e) * vt(i,1,1) &
822 + drdz(i,1,1,e) * vr(i,1,1) &
823 + dsdz(i,1,1,e) * vs(i,1,1) )
825 grad(1,3,1) = w3(i,1,1) &
826 * ( drdx(i,1,1,e) * wr(i,1,1) &
827 + dsdx(i,1,1,e) * ws(i,1,1) &
828 + dtdx(i,1,1,e) * wt(i,1,1) )
829 grad(1,3,2) = w3(i,1,1) &
830 * ( dsdy(i,1,1,e) * ws(i,1,1) &
831 + drdy(i,1,1,e) * wr(i,1,1) &
832 + dtdy(i,1,1,e) * wt(i,1,1) )
833 grad(1,3,3) = w3(i,1,1) &
834 * ( dtdz(i,1,1,e) * wt(i,1,1) &
835 + drdz(i,1,1,e) * wr(i,1,1) &
836 + dsdz(i,1,1,e) * ws(i,1,1) )
840 do i = 1, lx * lx * lx
846 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
847 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
848 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
850 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
851 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
852 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
854 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
855 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
856 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
858 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
859 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
860 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
863 b = -(a11 + a22 + a33)
864 c = -(a12*a12 + a13*a13 + a23*a23 &
865 - a11 * a22 - a11 * a33 - a22 * a33)
866 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
867 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
870 q = (3.0 * c - b*b) / 9.0
871 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
872 theta = acos( r / sqrt(-q*q*q) )
874 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
875 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
876 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
878 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
879 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
880 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
881 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
882 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
883 .le. eigen(2) .and. eigen(2) .le. eigen(1))
884 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
885 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
886 .le. eigen(3) .and. eigen(3) .le. eigen(1))
888 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
890 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
893 end subroutine sx_lambda2_lx16
895 subroutine sx_lambda2_lx15(lambda2, u, v, w, dx, dy, dz, &
896 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
897 integer,
parameter :: lx = 15
898 integer,
intent(in) :: n
899 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
900 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
901 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
902 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
903 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
904 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
905 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
906 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
907 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
908 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
909 real(kind=rp) :: grad(lx*lx*lx,3,3)
910 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
911 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
912 real(kind=rp) :: a11, a22, a33, a12, a13, a23
913 real(kind=rp) :: msk1, msk2, msk3
914 real(kind=rp) :: ur(lx, lx, lx)
915 real(kind=rp) :: vr(lx, lx, lx)
916 real(kind=rp) :: wr(lx, lx, lx)
917 real(kind=rp) :: us(lx, lx, lx)
918 real(kind=rp) :: vs(lx, lx, lx)
919 real(kind=rp) :: ws(lx, lx, lx)
920 real(kind=rp) :: ut(lx, lx, lx)
921 real(kind=rp) :: vt(lx, lx, lx)
922 real(kind=rp) :: wt(lx, lx, lx)
923 real(kind=rp) :: tmp1, tmp2, tmp3
924 integer :: e, i, j, k, l
933 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
934 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
935 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
950 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
951 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
952 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
967 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
968 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
969 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
977 do i = 1, lx * lx * lx
978 grad(1,1,1) = w3(i,1,1) &
979 * ( drdx(i,1,1,e) * ur(i,1,1) &
980 + dsdx(i,1,1,e) * us(i,1,1) &
981 + dtdx(i,1,1,e) * ut(i,1,1) )
982 grad(1,1,2) = w3(i,1,1) &
983 * ( dsdy(i,1,1,e) * us(i,1,1) &
984 + drdy(i,1,1,e) * ur(i,1,1) &
985 + dtdy(i,1,1,e) * ut(i,1,1) )
986 grad(1,1,3) = w3(i,1,1) &
987 * ( dtdz(i,1,1,e) * ut(i,1,1) &
988 + drdz(i,1,1,e) * ur(i,1,1) &
989 + dsdz(i,1,1,e) * us(i,1,1) )
991 grad(1,2,1) = w3(i,1,1) &
992 * ( drdx(i,1,1,e) * vr(i,1,1) &
993 + dsdx(i,1,1,e) * vs(i,1,1) &
994 + dtdx(i,1,1,e) * vt(i,1,1) )
995 grad(1,2,2) = w3(i,1,1) &
996 * ( dsdy(i,1,1,e) * vs(i,1,1) &
997 + drdy(i,1,1,e) * vr(i,1,1) &
998 + dtdy(i,1,1,e) * vt(i,1,1) )
999 grad(1,2,3) = w3(i,1,1) &
1000 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1001 + drdz(i,1,1,e) * vr(i,1,1) &
1002 + dsdz(i,1,1,e) * vs(i,1,1) )
1004 grad(1,3,1) = w3(i,1,1) &
1005 * ( drdx(i,1,1,e) * wr(i,1,1) &
1006 + dsdx(i,1,1,e) * ws(i,1,1) &
1007 + dtdx(i,1,1,e) * wt(i,1,1) )
1008 grad(1,3,2) = w3(i,1,1) &
1009 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1010 + drdy(i,1,1,e) * wr(i,1,1) &
1011 + dtdy(i,1,1,e) * wt(i,1,1) )
1012 grad(1,3,3) = w3(i,1,1) &
1013 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1014 + drdz(i,1,1,e) * wr(i,1,1) &
1015 + dsdz(i,1,1,e) * ws(i,1,1) )
1019 do i = 1, lx * lx * lx
1025 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1026 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1027 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1029 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1030 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1031 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1033 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1034 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1035 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1037 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1038 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1039 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1042 b = -(a11 + a22 + a33)
1043 c = -(a12*a12 + a13*a13 + a23*a23 &
1044 - a11 * a22 - a11 * a33 - a22 * a33)
1045 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1046 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1049 q = (3.0 * c - b*b) / 9.0
1050 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1051 theta = acos( r / sqrt(-q*q*q) )
1053 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1054 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1055 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1057 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1058 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1059 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1060 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1061 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1062 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1063 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1064 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1065 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1067 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1069 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1072 end subroutine sx_lambda2_lx15
1074 subroutine sx_lambda2_lx14(lambda2, u, v, w, dx, dy, dz, &
1075 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1076 integer,
parameter :: lx = 14
1077 integer,
intent(in) :: n
1078 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1079 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1080 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1081 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1082 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1083 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1084 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1085 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1086 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1087 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1088 real(kind=rp) :: grad(lx*lx*lx,3,3)
1089 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1090 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1091 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1092 real(kind=rp) :: msk1, msk2, msk3
1093 real(kind=rp) :: ur(lx, lx, lx)
1094 real(kind=rp) :: vr(lx, lx, lx)
1095 real(kind=rp) :: wr(lx, lx, lx)
1096 real(kind=rp) :: us(lx, lx, lx)
1097 real(kind=rp) :: vs(lx, lx, lx)
1098 real(kind=rp) :: ws(lx, lx, lx)
1099 real(kind=rp) :: ut(lx, lx, lx)
1100 real(kind=rp) :: vt(lx, lx, lx)
1101 real(kind=rp) :: wt(lx, lx, lx)
1102 real(kind=rp) :: tmp1, tmp2, tmp3
1103 integer :: e, i, j, k, l
1112 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
1113 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
1114 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
1129 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
1130 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
1131 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
1146 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
1147 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
1148 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
1156 do i = 1, lx * lx * lx
1157 grad(1,1,1) = w3(i,1,1) &
1158 * ( drdx(i,1,1,e) * ur(i,1,1) &
1159 + dsdx(i,1,1,e) * us(i,1,1) &
1160 + dtdx(i,1,1,e) * ut(i,1,1) )
1161 grad(1,1,2) = w3(i,1,1) &
1162 * ( dsdy(i,1,1,e) * us(i,1,1) &
1163 + drdy(i,1,1,e) * ur(i,1,1) &
1164 + dtdy(i,1,1,e) * ut(i,1,1) )
1165 grad(1,1,3) = w3(i,1,1) &
1166 * ( dtdz(i,1,1,e) * ut(i,1,1) &
1167 + drdz(i,1,1,e) * ur(i,1,1) &
1168 + dsdz(i,1,1,e) * us(i,1,1) )
1170 grad(1,2,1) = w3(i,1,1) &
1171 * ( drdx(i,1,1,e) * vr(i,1,1) &
1172 + dsdx(i,1,1,e) * vs(i,1,1) &
1173 + dtdx(i,1,1,e) * vt(i,1,1) )
1174 grad(1,2,2) = w3(i,1,1) &
1175 * ( dsdy(i,1,1,e) * vs(i,1,1) &
1176 + drdy(i,1,1,e) * vr(i,1,1) &
1177 + dtdy(i,1,1,e) * vt(i,1,1) )
1178 grad(1,2,3) = w3(i,1,1) &
1179 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1180 + drdz(i,1,1,e) * vr(i,1,1) &
1181 + dsdz(i,1,1,e) * vs(i,1,1) )
1183 grad(1,3,1) = w3(i,1,1) &
1184 * ( drdx(i,1,1,e) * wr(i,1,1) &
1185 + dsdx(i,1,1,e) * ws(i,1,1) &
1186 + dtdx(i,1,1,e) * wt(i,1,1) )
1187 grad(1,3,2) = w3(i,1,1) &
1188 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1189 + drdy(i,1,1,e) * wr(i,1,1) &
1190 + dtdy(i,1,1,e) * wt(i,1,1) )
1191 grad(1,3,3) = w3(i,1,1) &
1192 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1193 + drdz(i,1,1,e) * wr(i,1,1) &
1194 + dsdz(i,1,1,e) * ws(i,1,1) )
1198 do i = 1, lx * lx * lx
1204 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1205 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1206 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1208 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1209 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1210 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1212 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1213 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1214 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1216 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1217 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1218 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1221 b = -(a11 + a22 + a33)
1222 c = -(a12*a12 + a13*a13 + a23*a23 &
1223 - a11 * a22 - a11 * a33 - a22 * a33)
1224 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1225 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1228 q = (3.0 * c - b*b) / 9.0
1229 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1230 theta = acos( r / sqrt(-q*q*q) )
1232 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1233 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1234 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1236 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1237 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1238 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1239 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1240 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1241 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1242 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1243 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1244 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1246 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1248 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1251 end subroutine sx_lambda2_lx14
1253 subroutine sx_lambda2_lx13(lambda2, u, v, w, dx, dy, dz, &
1254 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1255 integer,
parameter :: lx = 13
1256 integer,
intent(in) :: n
1257 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1258 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1259 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1260 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1261 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1262 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1263 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1264 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1265 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1266 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1267 real(kind=rp) :: grad(lx*lx*lx,3,3)
1268 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1269 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1270 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1271 real(kind=rp) :: msk1, msk2, msk3
1272 real(kind=rp) :: ur(lx, lx, lx)
1273 real(kind=rp) :: vr(lx, lx, lx)
1274 real(kind=rp) :: wr(lx, lx, lx)
1275 real(kind=rp) :: us(lx, lx, lx)
1276 real(kind=rp) :: vs(lx, lx, lx)
1277 real(kind=rp) :: ws(lx, lx, lx)
1278 real(kind=rp) :: ut(lx, lx, lx)
1279 real(kind=rp) :: vt(lx, lx, lx)
1280 real(kind=rp) :: wt(lx, lx, lx)
1281 real(kind=rp) :: tmp1, tmp2, tmp3
1282 integer :: e, i, j, k, l
1291 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
1292 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
1293 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
1308 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
1309 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
1310 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
1325 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
1326 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
1327 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
1335 do i = 1, lx * lx * lx
1336 grad(1,1,1) = w3(i,1,1) &
1337 * ( drdx(i,1,1,e) * ur(i,1,1) &
1338 + dsdx(i,1,1,e) * us(i,1,1) &
1339 + dtdx(i,1,1,e) * ut(i,1,1) )
1340 grad(1,1,2) = w3(i,1,1) &
1341 * ( dsdy(i,1,1,e) * us(i,1,1) &
1342 + drdy(i,1,1,e) * ur(i,1,1) &
1343 + dtdy(i,1,1,e) * ut(i,1,1) )
1344 grad(1,1,3) = w3(i,1,1) &
1345 * ( dtdz(i,1,1,e) * ut(i,1,1) &
1346 + drdz(i,1,1,e) * ur(i,1,1) &
1347 + dsdz(i,1,1,e) * us(i,1,1) )
1349 grad(1,2,1) = w3(i,1,1) &
1350 * ( drdx(i,1,1,e) * vr(i,1,1) &
1351 + dsdx(i,1,1,e) * vs(i,1,1) &
1352 + dtdx(i,1,1,e) * vt(i,1,1) )
1353 grad(1,2,2) = w3(i,1,1) &
1354 * ( dsdy(i,1,1,e) * vs(i,1,1) &
1355 + drdy(i,1,1,e) * vr(i,1,1) &
1356 + dtdy(i,1,1,e) * vt(i,1,1) )
1357 grad(1,2,3) = w3(i,1,1) &
1358 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1359 + drdz(i,1,1,e) * vr(i,1,1) &
1360 + dsdz(i,1,1,e) * vs(i,1,1) )
1362 grad(1,3,1) = w3(i,1,1) &
1363 * ( drdx(i,1,1,e) * wr(i,1,1) &
1364 + dsdx(i,1,1,e) * ws(i,1,1) &
1365 + dtdx(i,1,1,e) * wt(i,1,1) )
1366 grad(1,3,2) = w3(i,1,1) &
1367 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1368 + drdy(i,1,1,e) * wr(i,1,1) &
1369 + dtdy(i,1,1,e) * wt(i,1,1) )
1370 grad(1,3,3) = w3(i,1,1) &
1371 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1372 + drdz(i,1,1,e) * wr(i,1,1) &
1373 + dsdz(i,1,1,e) * ws(i,1,1) )
1377 do i = 1, lx * lx * lx
1383 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1384 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1385 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1387 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1388 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1389 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1391 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1392 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1393 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1395 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1396 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1397 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1400 b = -(a11 + a22 + a33)
1401 c = -(a12*a12 + a13*a13 + a23*a23 &
1402 - a11 * a22 - a11 * a33 - a22 * a33)
1403 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1404 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1407 q = (3.0 * c - b*b) / 9.0
1408 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1409 theta = acos( r / sqrt(-q*q*q) )
1411 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1412 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1413 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1415 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1416 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1417 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1418 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1419 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1420 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1421 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1422 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1423 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1425 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1427 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1430 end subroutine sx_lambda2_lx13
1432 subroutine sx_lambda2_lx12(lambda2, u, v, w, dx, dy, dz, &
1433 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1434 integer,
parameter :: lx = 12
1435 integer,
intent(in) :: n
1436 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1437 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1438 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1439 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1440 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1441 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1442 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1443 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1444 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1445 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1446 real(kind=rp) :: grad(lx*lx*lx,3,3)
1447 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1448 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1449 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1450 real(kind=rp) :: msk1, msk2, msk3
1451 real(kind=rp) :: ur(lx, lx, lx)
1452 real(kind=rp) :: vr(lx, lx, lx)
1453 real(kind=rp) :: wr(lx, lx, lx)
1454 real(kind=rp) :: us(lx, lx, lx)
1455 real(kind=rp) :: vs(lx, lx, lx)
1456 real(kind=rp) :: ws(lx, lx, lx)
1457 real(kind=rp) :: ut(lx, lx, lx)
1458 real(kind=rp) :: vt(lx, lx, lx)
1459 real(kind=rp) :: wt(lx, lx, lx)
1460 real(kind=rp) :: tmp1, tmp2, tmp3
1461 integer :: e, i, j, k, l
1470 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
1471 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
1472 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
1487 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
1488 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
1489 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
1504 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
1505 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
1506 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
1514 do i = 1, lx * lx * lx
1515 grad(1,1,1) = w3(i,1,1) &
1516 * ( drdx(i,1,1,e) * ur(i,1,1) &
1517 + dsdx(i,1,1,e) * us(i,1,1) &
1518 + dtdx(i,1,1,e) * ut(i,1,1) )
1519 grad(1,1,2) = w3(i,1,1) &
1520 * ( dsdy(i,1,1,e) * us(i,1,1) &
1521 + drdy(i,1,1,e) * ur(i,1,1) &
1522 + dtdy(i,1,1,e) * ut(i,1,1) )
1523 grad(1,1,3) = w3(i,1,1) &
1524 * ( dtdz(i,1,1,e) * ut(i,1,1) &
1525 + drdz(i,1,1,e) * ur(i,1,1) &
1526 + dsdz(i,1,1,e) * us(i,1,1) )
1528 grad(1,2,1) = w3(i,1,1) &
1529 * ( drdx(i,1,1,e) * vr(i,1,1) &
1530 + dsdx(i,1,1,e) * vs(i,1,1) &
1531 + dtdx(i,1,1,e) * vt(i,1,1) )
1532 grad(1,2,2) = w3(i,1,1) &
1533 * ( dsdy(i,1,1,e) * vs(i,1,1) &
1534 + drdy(i,1,1,e) * vr(i,1,1) &
1535 + dtdy(i,1,1,e) * vt(i,1,1) )
1536 grad(1,2,3) = w3(i,1,1) &
1537 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1538 + drdz(i,1,1,e) * vr(i,1,1) &
1539 + dsdz(i,1,1,e) * vs(i,1,1) )
1541 grad(1,3,1) = w3(i,1,1) &
1542 * ( drdx(i,1,1,e) * wr(i,1,1) &
1543 + dsdx(i,1,1,e) * ws(i,1,1) &
1544 + dtdx(i,1,1,e) * wt(i,1,1) )
1545 grad(1,3,2) = w3(i,1,1) &
1546 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1547 + drdy(i,1,1,e) * wr(i,1,1) &
1548 + dtdy(i,1,1,e) * wt(i,1,1) )
1549 grad(1,3,3) = w3(i,1,1) &
1550 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1551 + drdz(i,1,1,e) * wr(i,1,1) &
1552 + dsdz(i,1,1,e) * ws(i,1,1) )
1556 do i = 1, lx * lx * lx
1562 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1563 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1564 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1566 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1567 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1568 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1570 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1571 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1572 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1574 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1575 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1576 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1579 b = -(a11 + a22 + a33)
1580 c = -(a12*a12 + a13*a13 + a23*a23 &
1581 - a11 * a22 - a11 * a33 - a22 * a33)
1582 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1583 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1586 q = (3.0 * c - b*b) / 9.0
1587 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1588 theta = acos( r / sqrt(-q*q*q) )
1590 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1591 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1592 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1594 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1595 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1596 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1597 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1598 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1599 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1600 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1601 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1602 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1604 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1606 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1609 end subroutine sx_lambda2_lx12
1611 subroutine sx_lambda2_lx11(lambda2, u, v, w, dx, dy, dz, &
1612 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1613 integer,
parameter :: lx = 11
1614 integer,
intent(in) :: n
1615 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1616 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1617 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1618 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1619 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1620 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1621 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1622 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1623 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1624 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1625 real(kind=rp) :: grad(lx*lx*lx,3,3)
1626 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1627 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1628 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1629 real(kind=rp) :: msk1, msk2, msk3
1630 real(kind=rp) :: ur(lx, lx, lx)
1631 real(kind=rp) :: vr(lx, lx, lx)
1632 real(kind=rp) :: wr(lx, lx, lx)
1633 real(kind=rp) :: us(lx, lx, lx)
1634 real(kind=rp) :: vs(lx, lx, lx)
1635 real(kind=rp) :: ws(lx, lx, lx)
1636 real(kind=rp) :: ut(lx, lx, lx)
1637 real(kind=rp) :: vt(lx, lx, lx)
1638 real(kind=rp) :: wt(lx, lx, lx)
1639 real(kind=rp) :: tmp1, tmp2, tmp3
1640 integer :: e, i, j, k, l
1649 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
1650 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
1651 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
1666 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
1667 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
1668 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
1683 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
1684 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
1685 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
1693 do i = 1, lx * lx * lx
1694 grad(1,1,1) = w3(i,1,1) &
1695 * ( drdx(i,1,1,e) * ur(i,1,1) &
1696 + dsdx(i,1,1,e) * us(i,1,1) &
1697 + dtdx(i,1,1,e) * ut(i,1,1) )
1698 grad(1,1,2) = w3(i,1,1) &
1699 * ( dsdy(i,1,1,e) * us(i,1,1) &
1700 + drdy(i,1,1,e) * ur(i,1,1) &
1701 + dtdy(i,1,1,e) * ut(i,1,1) )
1702 grad(1,1,3) = w3(i,1,1) &
1703 * ( dtdz(i,1,1,e) * ut(i,1,1) &
1704 + drdz(i,1,1,e) * ur(i,1,1) &
1705 + dsdz(i,1,1,e) * us(i,1,1) )
1707 grad(1,2,1) = w3(i,1,1) &
1708 * ( drdx(i,1,1,e) * vr(i,1,1) &
1709 + dsdx(i,1,1,e) * vs(i,1,1) &
1710 + dtdx(i,1,1,e) * vt(i,1,1) )
1711 grad(1,2,2) = w3(i,1,1) &
1712 * ( dsdy(i,1,1,e) * vs(i,1,1) &
1713 + drdy(i,1,1,e) * vr(i,1,1) &
1714 + dtdy(i,1,1,e) * vt(i,1,1) )
1715 grad(1,2,3) = w3(i,1,1) &
1716 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1717 + drdz(i,1,1,e) * vr(i,1,1) &
1718 + dsdz(i,1,1,e) * vs(i,1,1) )
1720 grad(1,3,1) = w3(i,1,1) &
1721 * ( drdx(i,1,1,e) * wr(i,1,1) &
1722 + dsdx(i,1,1,e) * ws(i,1,1) &
1723 + dtdx(i,1,1,e) * wt(i,1,1) )
1724 grad(1,3,2) = w3(i,1,1) &
1725 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1726 + drdy(i,1,1,e) * wr(i,1,1) &
1727 + dtdy(i,1,1,e) * wt(i,1,1) )
1728 grad(1,3,3) = w3(i,1,1) &
1729 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1730 + drdz(i,1,1,e) * wr(i,1,1) &
1731 + dsdz(i,1,1,e) * ws(i,1,1) )
1735 do i = 1, lx * lx * lx
1741 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1742 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1743 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1745 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1746 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1747 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1749 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1750 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1751 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1753 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1754 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1755 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1758 b = -(a11 + a22 + a33)
1759 c = -(a12*a12 + a13*a13 + a23*a23 &
1760 - a11 * a22 - a11 * a33 - a22 * a33)
1761 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1762 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1765 q = (3.0 * c - b*b) / 9.0
1766 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1767 theta = acos( r / sqrt(-q*q*q) )
1769 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1770 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1771 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1773 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1774 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1775 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1776 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1777 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1778 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1779 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1780 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1781 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1783 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1785 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1788 end subroutine sx_lambda2_lx11
1790 subroutine sx_lambda2_lx10(lambda2, u, v, w, dx, dy, dz, &
1791 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1792 integer,
parameter :: lx = 10
1793 integer,
intent(in) :: n
1794 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1795 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1796 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1797 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1798 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1799 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1800 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1801 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1802 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1803 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1804 real(kind=rp) :: grad(lx*lx*lx,3,3)
1805 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1806 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1807 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1808 real(kind=rp) :: msk1, msk2, msk3
1809 real(kind=rp) :: ur(lx, lx, lx)
1810 real(kind=rp) :: vr(lx, lx, lx)
1811 real(kind=rp) :: wr(lx, lx, lx)
1812 real(kind=rp) :: us(lx, lx, lx)
1813 real(kind=rp) :: vs(lx, lx, lx)
1814 real(kind=rp) :: ws(lx, lx, lx)
1815 real(kind=rp) :: ut(lx, lx, lx)
1816 real(kind=rp) :: vt(lx, lx, lx)
1817 real(kind=rp) :: wt(lx, lx, lx)
1818 real(kind=rp) :: tmp1, tmp2, tmp3
1819 integer :: e, i, j, k, l
1828 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
1829 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
1830 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
1845 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
1846 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
1847 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
1862 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
1863 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
1864 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
1872 do i = 1, lx * lx * lx
1873 grad(1,1,1) = w3(i,1,1) &
1874 * ( drdx(i,1,1,e) * ur(i,1,1) &
1875 + dsdx(i,1,1,e) * us(i,1,1) &
1876 + dtdx(i,1,1,e) * ut(i,1,1) )
1877 grad(1,1,2) = w3(i,1,1) &
1878 * ( dsdy(i,1,1,e) * us(i,1,1) &
1879 + drdy(i,1,1,e) * ur(i,1,1) &
1880 + dtdy(i,1,1,e) * ut(i,1,1) )
1881 grad(1,1,3) = w3(i,1,1) &
1882 * ( dtdz(i,1,1,e) * ut(i,1,1) &
1883 + drdz(i,1,1,e) * ur(i,1,1) &
1884 + dsdz(i,1,1,e) * us(i,1,1) )
1886 grad(1,2,1) = w3(i,1,1) &
1887 * ( drdx(i,1,1,e) * vr(i,1,1) &
1888 + dsdx(i,1,1,e) * vs(i,1,1) &
1889 + dtdx(i,1,1,e) * vt(i,1,1) )
1890 grad(1,2,2) = w3(i,1,1) &
1891 * ( dsdy(i,1,1,e) * vs(i,1,1) &
1892 + drdy(i,1,1,e) * vr(i,1,1) &
1893 + dtdy(i,1,1,e) * vt(i,1,1) )
1894 grad(1,2,3) = w3(i,1,1) &
1895 * ( dtdz(i,1,1,e) * vt(i,1,1) &
1896 + drdz(i,1,1,e) * vr(i,1,1) &
1897 + dsdz(i,1,1,e) * vs(i,1,1) )
1899 grad(1,3,1) = w3(i,1,1) &
1900 * ( drdx(i,1,1,e) * wr(i,1,1) &
1901 + dsdx(i,1,1,e) * ws(i,1,1) &
1902 + dtdx(i,1,1,e) * wt(i,1,1) )
1903 grad(1,3,2) = w3(i,1,1) &
1904 * ( dsdy(i,1,1,e) * ws(i,1,1) &
1905 + drdy(i,1,1,e) * wr(i,1,1) &
1906 + dtdy(i,1,1,e) * wt(i,1,1) )
1907 grad(1,3,3) = w3(i,1,1) &
1908 * ( dtdz(i,1,1,e) * wt(i,1,1) &
1909 + drdz(i,1,1,e) * wr(i,1,1) &
1910 + dsdz(i,1,1,e) * ws(i,1,1) )
1914 do i = 1, lx * lx * lx
1920 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
1921 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
1922 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
1924 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
1925 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
1926 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
1928 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
1929 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
1930 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
1932 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
1933 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
1934 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
1937 b = -(a11 + a22 + a33)
1938 c = -(a12*a12 + a13*a13 + a23*a23 &
1939 - a11 * a22 - a11 * a33 - a22 * a33)
1940 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
1941 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
1944 q = (3.0 * c - b*b) / 9.0
1945 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
1946 theta = acos( r / sqrt(-q*q*q) )
1948 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
1949 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
1950 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
1952 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
1953 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
1954 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
1955 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
1956 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
1957 .le. eigen(2) .and. eigen(2) .le. eigen(1))
1958 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
1959 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
1960 .le. eigen(3) .and. eigen(3) .le. eigen(1))
1962 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
1964 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
1967 end subroutine sx_lambda2_lx10
1969 subroutine sx_lambda2_lx9(lambda2, u, v, w, dx, dy, dz, &
1970 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
1971 integer,
parameter :: lx = 9
1972 integer,
intent(in) :: n
1973 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
1974 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
1975 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
1976 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
1977 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
1978 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
1979 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
1980 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
1981 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
1982 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
1983 real(kind=rp) :: grad(lx*lx*lx,3,3)
1984 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
1985 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
1986 real(kind=rp) :: a11, a22, a33, a12, a13, a23
1987 real(kind=rp) :: msk1, msk2, msk3
1988 real(kind=rp) :: ur(lx, lx, lx)
1989 real(kind=rp) :: vr(lx, lx, lx)
1990 real(kind=rp) :: wr(lx, lx, lx)
1991 real(kind=rp) :: us(lx, lx, lx)
1992 real(kind=rp) :: vs(lx, lx, lx)
1993 real(kind=rp) :: ws(lx, lx, lx)
1994 real(kind=rp) :: ut(lx, lx, lx)
1995 real(kind=rp) :: vt(lx, lx, lx)
1996 real(kind=rp) :: wt(lx, lx, lx)
1997 real(kind=rp) :: tmp1, tmp2, tmp3
1998 integer :: e, i, j, k, l
2007 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2008 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2009 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2024 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2025 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2026 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2041 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2042 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2043 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2051 do i = 1, lx * lx * lx
2052 grad(1,1,1) = w3(i,1,1) &
2053 * ( drdx(i,1,1,e) * ur(i,1,1) &
2054 + dsdx(i,1,1,e) * us(i,1,1) &
2055 + dtdx(i,1,1,e) * ut(i,1,1) )
2056 grad(1,1,2) = w3(i,1,1) &
2057 * ( dsdy(i,1,1,e) * us(i,1,1) &
2058 + drdy(i,1,1,e) * ur(i,1,1) &
2059 + dtdy(i,1,1,e) * ut(i,1,1) )
2060 grad(1,1,3) = w3(i,1,1) &
2061 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2062 + drdz(i,1,1,e) * ur(i,1,1) &
2063 + dsdz(i,1,1,e) * us(i,1,1) )
2065 grad(1,2,1) = w3(i,1,1) &
2066 * ( drdx(i,1,1,e) * vr(i,1,1) &
2067 + dsdx(i,1,1,e) * vs(i,1,1) &
2068 + dtdx(i,1,1,e) * vt(i,1,1) )
2069 grad(1,2,2) = w3(i,1,1) &
2070 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2071 + drdy(i,1,1,e) * vr(i,1,1) &
2072 + dtdy(i,1,1,e) * vt(i,1,1) )
2073 grad(1,2,3) = w3(i,1,1) &
2074 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2075 + drdz(i,1,1,e) * vr(i,1,1) &
2076 + dsdz(i,1,1,e) * vs(i,1,1) )
2078 grad(1,3,1) = w3(i,1,1) &
2079 * ( drdx(i,1,1,e) * wr(i,1,1) &
2080 + dsdx(i,1,1,e) * ws(i,1,1) &
2081 + dtdx(i,1,1,e) * wt(i,1,1) )
2082 grad(1,3,2) = w3(i,1,1) &
2083 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2084 + drdy(i,1,1,e) * wr(i,1,1) &
2085 + dtdy(i,1,1,e) * wt(i,1,1) )
2086 grad(1,3,3) = w3(i,1,1) &
2087 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2088 + drdz(i,1,1,e) * wr(i,1,1) &
2089 + dsdz(i,1,1,e) * ws(i,1,1) )
2093 do i = 1, lx * lx * lx
2099 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2100 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2101 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2103 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2104 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
2105 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
2107 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
2108 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
2109 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
2111 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
2112 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
2113 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
2116 b = -(a11 + a22 + a33)
2117 c = -(a12*a12 + a13*a13 + a23*a23 &
2118 - a11 * a22 - a11 * a33 - a22 * a33)
2119 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
2120 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
2123 q = (3.0 * c - b*b) / 9.0
2124 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
2125 theta = acos( r / sqrt(-q*q*q) )
2127 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
2128 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
2129 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
2131 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
2132 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
2133 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
2134 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
2135 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
2136 .le. eigen(2) .and. eigen(2) .le. eigen(1))
2137 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
2138 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
2139 .le. eigen(3) .and. eigen(3) .le. eigen(1))
2141 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
2143 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
2146 end subroutine sx_lambda2_lx9
2148 subroutine sx_lambda2_lx8(lambda2, u, v, w, dx, dy, dz, &
2149 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
2150 integer,
parameter :: lx = 8
2151 integer,
intent(in) :: n
2152 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
2153 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
2154 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
2155 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
2156 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
2157 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
2158 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
2159 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
2160 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
2161 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
2162 real(kind=rp) :: grad(lx*lx*lx,3,3)
2163 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
2164 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
2165 real(kind=rp) :: a11, a22, a33, a12, a13, a23
2166 real(kind=rp) :: msk1, msk2, msk3
2167 real(kind=rp) :: ur(lx, lx, lx)
2168 real(kind=rp) :: vr(lx, lx, lx)
2169 real(kind=rp) :: wr(lx, lx, lx)
2170 real(kind=rp) :: us(lx, lx, lx)
2171 real(kind=rp) :: vs(lx, lx, lx)
2172 real(kind=rp) :: ws(lx, lx, lx)
2173 real(kind=rp) :: ut(lx, lx, lx)
2174 real(kind=rp) :: vt(lx, lx, lx)
2175 real(kind=rp) :: wt(lx, lx, lx)
2176 real(kind=rp) :: tmp1, tmp2, tmp3
2177 integer :: e, i, j, k, l
2186 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2187 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2188 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2203 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2204 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2205 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2220 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2221 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2222 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2230 do i = 1, lx * lx * lx
2231 grad(1,1,1) = w3(i,1,1) &
2232 * ( drdx(i,1,1,e) * ur(i,1,1) &
2233 + dsdx(i,1,1,e) * us(i,1,1) &
2234 + dtdx(i,1,1,e) * ut(i,1,1) )
2235 grad(1,1,2) = w3(i,1,1) &
2236 * ( dsdy(i,1,1,e) * us(i,1,1) &
2237 + drdy(i,1,1,e) * ur(i,1,1) &
2238 + dtdy(i,1,1,e) * ut(i,1,1) )
2239 grad(1,1,3) = w3(i,1,1) &
2240 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2241 + drdz(i,1,1,e) * ur(i,1,1) &
2242 + dsdz(i,1,1,e) * us(i,1,1) )
2244 grad(1,2,1) = w3(i,1,1) &
2245 * ( drdx(i,1,1,e) * vr(i,1,1) &
2246 + dsdx(i,1,1,e) * vs(i,1,1) &
2247 + dtdx(i,1,1,e) * vt(i,1,1) )
2248 grad(1,2,2) = w3(i,1,1) &
2249 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2250 + drdy(i,1,1,e) * vr(i,1,1) &
2251 + dtdy(i,1,1,e) * vt(i,1,1) )
2252 grad(1,2,3) = w3(i,1,1) &
2253 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2254 + drdz(i,1,1,e) * vr(i,1,1) &
2255 + dsdz(i,1,1,e) * vs(i,1,1) )
2257 grad(1,3,1) = w3(i,1,1) &
2258 * ( drdx(i,1,1,e) * wr(i,1,1) &
2259 + dsdx(i,1,1,e) * ws(i,1,1) &
2260 + dtdx(i,1,1,e) * wt(i,1,1) )
2261 grad(1,3,2) = w3(i,1,1) &
2262 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2263 + drdy(i,1,1,e) * wr(i,1,1) &
2264 + dtdy(i,1,1,e) * wt(i,1,1) )
2265 grad(1,3,3) = w3(i,1,1) &
2266 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2267 + drdz(i,1,1,e) * wr(i,1,1) &
2268 + dsdz(i,1,1,e) * ws(i,1,1) )
2272 do i = 1, lx * lx * lx
2278 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2279 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2280 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2282 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2283 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
2284 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
2286 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
2287 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
2288 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
2290 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
2291 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
2292 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
2295 b = -(a11 + a22 + a33)
2296 c = -(a12*a12 + a13*a13 + a23*a23 &
2297 - a11 * a22 - a11 * a33 - a22 * a33)
2298 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
2299 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
2302 q = (3.0 * c - b*b) / 9.0
2303 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
2304 theta = acos( r / sqrt(-q*q*q) )
2306 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
2307 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
2308 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
2310 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
2311 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
2312 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
2313 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
2314 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
2315 .le. eigen(2) .and. eigen(2) .le. eigen(1))
2316 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
2317 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
2318 .le. eigen(3) .and. eigen(3) .le. eigen(1))
2320 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
2322 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
2325 end subroutine sx_lambda2_lx8
2327 subroutine sx_lambda2_lx7(lambda2, u, v, w, dx, dy, dz, &
2328 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
2329 integer,
parameter :: lx = 7
2330 integer,
intent(in) :: n
2331 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
2332 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
2333 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
2334 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
2335 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
2336 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
2337 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
2338 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
2339 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
2340 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
2341 real(kind=rp) :: grad(lx*lx*lx,3,3)
2342 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
2343 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
2344 real(kind=rp) :: a11, a22, a33, a12, a13, a23
2345 real(kind=rp) :: msk1, msk2, msk3
2346 real(kind=rp) :: ur(lx, lx, lx)
2347 real(kind=rp) :: vr(lx, lx, lx)
2348 real(kind=rp) :: wr(lx, lx, lx)
2349 real(kind=rp) :: us(lx, lx, lx)
2350 real(kind=rp) :: vs(lx, lx, lx)
2351 real(kind=rp) :: ws(lx, lx, lx)
2352 real(kind=rp) :: ut(lx, lx, lx)
2353 real(kind=rp) :: vt(lx, lx, lx)
2354 real(kind=rp) :: wt(lx, lx, lx)
2355 real(kind=rp) :: tmp1, tmp2, tmp3
2356 integer :: e, i, j, k, l
2365 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2366 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2367 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2382 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2383 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2384 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2399 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2400 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2401 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2409 do i = 1, lx * lx * lx
2410 grad(1,1,1) = w3(i,1,1) &
2411 * ( drdx(i,1,1,e) * ur(i,1,1) &
2412 + dsdx(i,1,1,e) * us(i,1,1) &
2413 + dtdx(i,1,1,e) * ut(i,1,1) )
2414 grad(1,1,2) = w3(i,1,1) &
2415 * ( dsdy(i,1,1,e) * us(i,1,1) &
2416 + drdy(i,1,1,e) * ur(i,1,1) &
2417 + dtdy(i,1,1,e) * ut(i,1,1) )
2418 grad(1,1,3) = w3(i,1,1) &
2419 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2420 + drdz(i,1,1,e) * ur(i,1,1) &
2421 + dsdz(i,1,1,e) * us(i,1,1) )
2423 grad(1,2,1) = w3(i,1,1) &
2424 * ( drdx(i,1,1,e) * vr(i,1,1) &
2425 + dsdx(i,1,1,e) * vs(i,1,1) &
2426 + dtdx(i,1,1,e) * vt(i,1,1) )
2427 grad(1,2,2) = w3(i,1,1) &
2428 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2429 + drdy(i,1,1,e) * vr(i,1,1) &
2430 + dtdy(i,1,1,e) * vt(i,1,1) )
2431 grad(1,2,3) = w3(i,1,1) &
2432 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2433 + drdz(i,1,1,e) * vr(i,1,1) &
2434 + dsdz(i,1,1,e) * vs(i,1,1) )
2436 grad(1,3,1) = w3(i,1,1) &
2437 * ( drdx(i,1,1,e) * wr(i,1,1) &
2438 + dsdx(i,1,1,e) * ws(i,1,1) &
2439 + dtdx(i,1,1,e) * wt(i,1,1) )
2440 grad(1,3,2) = w3(i,1,1) &
2441 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2442 + drdy(i,1,1,e) * wr(i,1,1) &
2443 + dtdy(i,1,1,e) * wt(i,1,1) )
2444 grad(1,3,3) = w3(i,1,1) &
2445 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2446 + drdz(i,1,1,e) * wr(i,1,1) &
2447 + dsdz(i,1,1,e) * ws(i,1,1) )
2451 do i = 1, lx * lx * lx
2457 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2458 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2459 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2461 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2462 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
2463 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
2465 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
2466 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
2467 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
2469 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
2470 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
2471 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
2474 b = -(a11 + a22 + a33)
2475 c = -(a12*a12 + a13*a13 + a23*a23 &
2476 - a11 * a22 - a11 * a33 - a22 * a33)
2477 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
2478 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
2481 q = (3.0 * c - b*b) / 9.0
2482 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
2483 theta = acos( r / sqrt(-q*q*q) )
2485 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
2486 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
2487 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
2489 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
2490 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
2491 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
2492 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
2493 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
2494 .le. eigen(2) .and. eigen(2) .le. eigen(1))
2495 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
2496 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
2497 .le. eigen(3) .and. eigen(3) .le. eigen(1))
2499 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
2501 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
2504 end subroutine sx_lambda2_lx7
2506 subroutine sx_lambda2_lx6(lambda2, u, v, w, dx, dy, dz, &
2507 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
2508 integer,
parameter :: lx = 6
2509 integer,
intent(in) :: n
2510 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
2511 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
2512 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
2513 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
2514 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
2515 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
2516 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
2517 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
2518 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
2519 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
2520 real(kind=rp) :: grad(lx*lx*lx,3,3)
2521 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
2522 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
2523 real(kind=rp) :: a11, a22, a33, a12, a13, a23
2524 real(kind=rp) :: msk1, msk2, msk3
2525 real(kind=rp) :: ur(lx, lx, lx)
2526 real(kind=rp) :: vr(lx, lx, lx)
2527 real(kind=rp) :: wr(lx, lx, lx)
2528 real(kind=rp) :: us(lx, lx, lx)
2529 real(kind=rp) :: vs(lx, lx, lx)
2530 real(kind=rp) :: ws(lx, lx, lx)
2531 real(kind=rp) :: ut(lx, lx, lx)
2532 real(kind=rp) :: vt(lx, lx, lx)
2533 real(kind=rp) :: wt(lx, lx, lx)
2534 real(kind=rp) :: tmp1, tmp2, tmp3
2535 integer :: e, i, j, k, l
2544 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2545 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2546 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2561 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2562 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2563 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2578 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2579 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2580 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2588 do i = 1, lx * lx * lx
2589 grad(1,1,1) = w3(i,1,1) &
2590 * ( drdx(i,1,1,e) * ur(i,1,1) &
2591 + dsdx(i,1,1,e) * us(i,1,1) &
2592 + dtdx(i,1,1,e) * ut(i,1,1) )
2593 grad(1,1,2) = w3(i,1,1) &
2594 * ( dsdy(i,1,1,e) * us(i,1,1) &
2595 + drdy(i,1,1,e) * ur(i,1,1) &
2596 + dtdy(i,1,1,e) * ut(i,1,1) )
2597 grad(1,1,3) = w3(i,1,1) &
2598 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2599 + drdz(i,1,1,e) * ur(i,1,1) &
2600 + dsdz(i,1,1,e) * us(i,1,1) )
2602 grad(1,2,1) = w3(i,1,1) &
2603 * ( drdx(i,1,1,e) * vr(i,1,1) &
2604 + dsdx(i,1,1,e) * vs(i,1,1) &
2605 + dtdx(i,1,1,e) * vt(i,1,1) )
2606 grad(1,2,2) = w3(i,1,1) &
2607 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2608 + drdy(i,1,1,e) * vr(i,1,1) &
2609 + dtdy(i,1,1,e) * vt(i,1,1) )
2610 grad(1,2,3) = w3(i,1,1) &
2611 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2612 + drdz(i,1,1,e) * vr(i,1,1) &
2613 + dsdz(i,1,1,e) * vs(i,1,1) )
2615 grad(1,3,1) = w3(i,1,1) &
2616 * ( drdx(i,1,1,e) * wr(i,1,1) &
2617 + dsdx(i,1,1,e) * ws(i,1,1) &
2618 + dtdx(i,1,1,e) * wt(i,1,1) )
2619 grad(1,3,2) = w3(i,1,1) &
2620 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2621 + drdy(i,1,1,e) * wr(i,1,1) &
2622 + dtdy(i,1,1,e) * wt(i,1,1) )
2623 grad(1,3,3) = w3(i,1,1) &
2624 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2625 + drdz(i,1,1,e) * wr(i,1,1) &
2626 + dsdz(i,1,1,e) * ws(i,1,1) )
2630 do i = 1, lx * lx * lx
2636 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2637 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2638 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2640 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2641 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
2642 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
2644 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
2645 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
2646 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
2648 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
2649 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
2650 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
2653 b = -(a11 + a22 + a33)
2654 c = -(a12*a12 + a13*a13 + a23*a23 &
2655 - a11 * a22 - a11 * a33 - a22 * a33)
2656 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
2657 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
2660 q = (3.0 * c - b*b) / 9.0
2661 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
2662 theta = acos( r / sqrt(-q*q*q) )
2664 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
2665 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
2666 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
2668 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
2669 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
2670 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
2671 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
2672 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
2673 .le. eigen(2) .and. eigen(2) .le. eigen(1))
2674 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
2675 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
2676 .le. eigen(3) .and. eigen(3) .le. eigen(1))
2678 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
2680 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
2683 end subroutine sx_lambda2_lx6
2685 subroutine sx_lambda2_lx5(lambda2, u, v, w, dx, dy, dz, &
2686 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
2687 integer,
parameter :: lx = 5
2688 integer,
intent(in) :: n
2689 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
2690 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
2691 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
2692 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
2693 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
2694 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
2695 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
2696 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
2697 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
2698 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
2699 real(kind=rp) :: grad(lx*lx*lx,3,3)
2700 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
2701 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
2702 real(kind=rp) :: a11, a22, a33, a12, a13, a23
2703 real(kind=rp) :: msk1, msk2, msk3
2704 real(kind=rp) :: ur(lx, lx, lx)
2705 real(kind=rp) :: vr(lx, lx, lx)
2706 real(kind=rp) :: wr(lx, lx, lx)
2707 real(kind=rp) :: us(lx, lx, lx)
2708 real(kind=rp) :: vs(lx, lx, lx)
2709 real(kind=rp) :: ws(lx, lx, lx)
2710 real(kind=rp) :: ut(lx, lx, lx)
2711 real(kind=rp) :: vt(lx, lx, lx)
2712 real(kind=rp) :: wt(lx, lx, lx)
2713 real(kind=rp) :: tmp1, tmp2, tmp3
2714 integer :: e, i, j, k, l
2723 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2724 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2725 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2740 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2741 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2742 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2757 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2758 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2759 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2767 do i = 1, lx * lx * lx
2768 grad(1,1,1) = w3(i,1,1) &
2769 * ( drdx(i,1,1,e) * ur(i,1,1) &
2770 + dsdx(i,1,1,e) * us(i,1,1) &
2771 + dtdx(i,1,1,e) * ut(i,1,1) )
2772 grad(1,1,2) = w3(i,1,1) &
2773 * ( dsdy(i,1,1,e) * us(i,1,1) &
2774 + drdy(i,1,1,e) * ur(i,1,1) &
2775 + dtdy(i,1,1,e) * ut(i,1,1) )
2776 grad(1,1,3) = w3(i,1,1) &
2777 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2778 + drdz(i,1,1,e) * ur(i,1,1) &
2779 + dsdz(i,1,1,e) * us(i,1,1) )
2781 grad(1,2,1) = w3(i,1,1) &
2782 * ( drdx(i,1,1,e) * vr(i,1,1) &
2783 + dsdx(i,1,1,e) * vs(i,1,1) &
2784 + dtdx(i,1,1,e) * vt(i,1,1) )
2785 grad(1,2,2) = w3(i,1,1) &
2786 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2787 + drdy(i,1,1,e) * vr(i,1,1) &
2788 + dtdy(i,1,1,e) * vt(i,1,1) )
2789 grad(1,2,3) = w3(i,1,1) &
2790 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2791 + drdz(i,1,1,e) * vr(i,1,1) &
2792 + dsdz(i,1,1,e) * vs(i,1,1) )
2794 grad(1,3,1) = w3(i,1,1) &
2795 * ( drdx(i,1,1,e) * wr(i,1,1) &
2796 + dsdx(i,1,1,e) * ws(i,1,1) &
2797 + dtdx(i,1,1,e) * wt(i,1,1) )
2798 grad(1,3,2) = w3(i,1,1) &
2799 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2800 + drdy(i,1,1,e) * wr(i,1,1) &
2801 + dtdy(i,1,1,e) * wt(i,1,1) )
2802 grad(1,3,3) = w3(i,1,1) &
2803 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2804 + drdz(i,1,1,e) * wr(i,1,1) &
2805 + dsdz(i,1,1,e) * ws(i,1,1) )
2809 do i = 1, lx * lx * lx
2815 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2816 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2817 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2819 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2820 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
2821 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
2823 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
2824 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
2825 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
2827 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
2828 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
2829 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
2832 b = -(a11 + a22 + a33)
2833 c = -(a12*a12 + a13*a13 + a23*a23 &
2834 - a11 * a22 - a11 * a33 - a22 * a33)
2835 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
2836 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
2839 q = (3.0 * c - b*b) / 9.0
2840 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
2841 theta = acos( r / sqrt(-q*q*q) )
2843 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
2844 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
2845 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
2847 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
2848 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
2849 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
2850 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
2851 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
2852 .le. eigen(2) .and. eigen(2) .le. eigen(1))
2853 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
2854 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
2855 .le. eigen(3) .and. eigen(3) .le. eigen(1))
2857 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
2859 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
2862 end subroutine sx_lambda2_lx5
2864 subroutine sx_lambda2_lx4(lambda2, u, v, w, dx, dy, dz, &
2865 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
2866 integer,
parameter :: lx = 4
2867 integer,
intent(in) :: n
2868 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
2869 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
2870 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
2871 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
2872 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
2873 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
2874 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
2875 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
2876 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
2877 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
2878 real(kind=rp) :: grad(lx*lx*lx,3,3)
2879 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
2880 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
2881 real(kind=rp) :: a11, a22, a33, a12, a13, a23
2882 real(kind=rp) :: msk1, msk2, msk3
2883 real(kind=rp) :: ur(lx, lx, lx)
2884 real(kind=rp) :: vr(lx, lx, lx)
2885 real(kind=rp) :: wr(lx, lx, lx)
2886 real(kind=rp) :: us(lx, lx, lx)
2887 real(kind=rp) :: vs(lx, lx, lx)
2888 real(kind=rp) :: ws(lx, lx, lx)
2889 real(kind=rp) :: ut(lx, lx, lx)
2890 real(kind=rp) :: vt(lx, lx, lx)
2891 real(kind=rp) :: wt(lx, lx, lx)
2892 real(kind=rp) :: tmp1, tmp2, tmp3
2893 integer :: e, i, j, k, l
2902 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
2903 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
2904 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
2919 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
2920 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
2921 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
2936 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
2937 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
2938 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
2946 do i = 1, lx * lx * lx
2947 grad(1,1,1) = w3(i,1,1) &
2948 * ( drdx(i,1,1,e) * ur(i,1,1) &
2949 + dsdx(i,1,1,e) * us(i,1,1) &
2950 + dtdx(i,1,1,e) * ut(i,1,1) )
2951 grad(1,1,2) = w3(i,1,1) &
2952 * ( dsdy(i,1,1,e) * us(i,1,1) &
2953 + drdy(i,1,1,e) * ur(i,1,1) &
2954 + dtdy(i,1,1,e) * ut(i,1,1) )
2955 grad(1,1,3) = w3(i,1,1) &
2956 * ( dtdz(i,1,1,e) * ut(i,1,1) &
2957 + drdz(i,1,1,e) * ur(i,1,1) &
2958 + dsdz(i,1,1,e) * us(i,1,1) )
2960 grad(1,2,1) = w3(i,1,1) &
2961 * ( drdx(i,1,1,e) * vr(i,1,1) &
2962 + dsdx(i,1,1,e) * vs(i,1,1) &
2963 + dtdx(i,1,1,e) * vt(i,1,1) )
2964 grad(1,2,2) = w3(i,1,1) &
2965 * ( dsdy(i,1,1,e) * vs(i,1,1) &
2966 + drdy(i,1,1,e) * vr(i,1,1) &
2967 + dtdy(i,1,1,e) * vt(i,1,1) )
2968 grad(1,2,3) = w3(i,1,1) &
2969 * ( dtdz(i,1,1,e) * vt(i,1,1) &
2970 + drdz(i,1,1,e) * vr(i,1,1) &
2971 + dsdz(i,1,1,e) * vs(i,1,1) )
2973 grad(1,3,1) = w3(i,1,1) &
2974 * ( drdx(i,1,1,e) * wr(i,1,1) &
2975 + dsdx(i,1,1,e) * ws(i,1,1) &
2976 + dtdx(i,1,1,e) * wt(i,1,1) )
2977 grad(1,3,2) = w3(i,1,1) &
2978 * ( dsdy(i,1,1,e) * ws(i,1,1) &
2979 + drdy(i,1,1,e) * wr(i,1,1) &
2980 + dtdy(i,1,1,e) * wt(i,1,1) )
2981 grad(1,3,3) = w3(i,1,1) &
2982 * ( dtdz(i,1,1,e) * wt(i,1,1) &
2983 + drdz(i,1,1,e) * wr(i,1,1) &
2984 + dsdz(i,1,1,e) * ws(i,1,1) )
2988 do i = 1, lx * lx * lx
2994 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
2995 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
2996 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
2998 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
2999 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
3000 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
3002 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
3003 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
3004 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
3006 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
3007 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
3008 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
3011 b = -(a11 + a22 + a33)
3012 c = -(a12*a12 + a13*a13 + a23*a23 &
3013 - a11 * a22 - a11 * a33 - a22 * a33)
3014 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
3015 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
3018 q = (3.0 * c - b*b) / 9.0
3019 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
3020 theta = acos( r / sqrt(-q*q*q) )
3022 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
3023 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
3024 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
3026 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
3027 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
3028 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
3029 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
3030 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
3031 .le. eigen(2) .and. eigen(2) .le. eigen(1))
3032 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
3033 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
3034 .le. eigen(3) .and. eigen(3) .le. eigen(1))
3036 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
3038 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
3041 end subroutine sx_lambda2_lx4
3043 subroutine sx_lambda2_lx3(lambda2, u, v, w, dx, dy, dz, &
3044 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
3045 integer,
parameter :: lx = 3
3046 integer,
intent(in) :: n
3047 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
3048 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
3049 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
3050 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
3051 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
3052 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
3053 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
3054 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
3055 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
3056 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
3057 real(kind=rp) :: grad(lx*lx*lx,3,3)
3058 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
3059 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
3060 real(kind=rp) :: a11, a22, a33, a12, a13, a23
3061 real(kind=rp) :: msk1, msk2, msk3
3062 real(kind=rp) :: ur(lx, lx, lx)
3063 real(kind=rp) :: vr(lx, lx, lx)
3064 real(kind=rp) :: wr(lx, lx, lx)
3065 real(kind=rp) :: us(lx, lx, lx)
3066 real(kind=rp) :: vs(lx, lx, lx)
3067 real(kind=rp) :: ws(lx, lx, lx)
3068 real(kind=rp) :: ut(lx, lx, lx)
3069 real(kind=rp) :: vt(lx, lx, lx)
3070 real(kind=rp) :: wt(lx, lx, lx)
3071 real(kind=rp) :: tmp1, tmp2, tmp3
3072 integer :: e, i, j, k, l
3081 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
3082 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
3083 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
3098 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
3099 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
3100 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
3115 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
3116 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
3117 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
3125 do i = 1, lx * lx * lx
3126 grad(1,1,1) = w3(i,1,1) &
3127 * ( drdx(i,1,1,e) * ur(i,1,1) &
3128 + dsdx(i,1,1,e) * us(i,1,1) &
3129 + dtdx(i,1,1,e) * ut(i,1,1) )
3130 grad(1,1,2) = w3(i,1,1) &
3131 * ( dsdy(i,1,1,e) * us(i,1,1) &
3132 + drdy(i,1,1,e) * ur(i,1,1) &
3133 + dtdy(i,1,1,e) * ut(i,1,1) )
3134 grad(1,1,3) = w3(i,1,1) &
3135 * ( dtdz(i,1,1,e) * ut(i,1,1) &
3136 + drdz(i,1,1,e) * ur(i,1,1) &
3137 + dsdz(i,1,1,e) * us(i,1,1) )
3139 grad(1,2,1) = w3(i,1,1) &
3140 * ( drdx(i,1,1,e) * vr(i,1,1) &
3141 + dsdx(i,1,1,e) * vs(i,1,1) &
3142 + dtdx(i,1,1,e) * vt(i,1,1) )
3143 grad(1,2,2) = w3(i,1,1) &
3144 * ( dsdy(i,1,1,e) * vs(i,1,1) &
3145 + drdy(i,1,1,e) * vr(i,1,1) &
3146 + dtdy(i,1,1,e) * vt(i,1,1) )
3147 grad(1,2,3) = w3(i,1,1) &
3148 * ( dtdz(i,1,1,e) * vt(i,1,1) &
3149 + drdz(i,1,1,e) * vr(i,1,1) &
3150 + dsdz(i,1,1,e) * vs(i,1,1) )
3152 grad(1,3,1) = w3(i,1,1) &
3153 * ( drdx(i,1,1,e) * wr(i,1,1) &
3154 + dsdx(i,1,1,e) * ws(i,1,1) &
3155 + dtdx(i,1,1,e) * wt(i,1,1) )
3156 grad(1,3,2) = w3(i,1,1) &
3157 * ( dsdy(i,1,1,e) * ws(i,1,1) &
3158 + drdy(i,1,1,e) * wr(i,1,1) &
3159 + dtdy(i,1,1,e) * wt(i,1,1) )
3160 grad(1,3,3) = w3(i,1,1) &
3161 * ( dtdz(i,1,1,e) * wt(i,1,1) &
3162 + drdz(i,1,1,e) * wr(i,1,1) &
3163 + dsdz(i,1,1,e) * ws(i,1,1) )
3167 do i = 1, lx * lx * lx
3173 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
3174 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
3175 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
3177 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
3178 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
3179 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
3181 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
3182 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
3183 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
3185 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
3186 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
3187 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
3190 b = -(a11 + a22 + a33)
3191 c = -(a12*a12 + a13*a13 + a23*a23 &
3192 - a11 * a22 - a11 * a33 - a22 * a33)
3193 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
3194 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
3197 q = (3.0 * c - b*b) / 9.0
3198 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
3199 theta = acos( r / sqrt(-q*q*q) )
3201 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
3202 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
3203 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
3205 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
3206 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
3207 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
3208 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
3209 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
3210 .le. eigen(2) .and. eigen(2) .le. eigen(1))
3211 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
3212 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
3213 .le. eigen(3) .and. eigen(3) .le. eigen(1))
3215 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
3217 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
3220 end subroutine sx_lambda2_lx3
3222 subroutine sx_lambda2_lx2(lambda2, u, v, w, dx, dy, dz, &
3223 drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, w3, cB, n)
3224 integer,
parameter :: lx = 2
3225 integer,
intent(in) :: n
3226 real(kind=rp),
dimension(lx, lx, lx, n),
intent(inout) ::
lambda2
3227 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: u
3228 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: v
3229 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: w
3230 real(kind=rp),
dimension(lx, lx),
intent(in) :: dx, dy, dz
3231 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdx, dsdx, dtdx
3232 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdy, dsdy, dtdy
3233 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: drdz, dsdz, dtdz
3234 real(kind=rp),
dimension(lx, lx, lx, n),
intent(in) :: cb
3235 real(kind=rp),
dimension(lx, lx, lx),
intent(in) :: w3
3236 real(kind=rp) :: grad(lx*lx*lx,3,3)
3237 real(kind=rp) :: eigen(3), b, c, d, q, r, theta, l2
3238 real(kind=rp) :: s11, s22, s33, s12, s13, s23, o12, o13, o23
3239 real(kind=rp) :: a11, a22, a33, a12, a13, a23
3240 real(kind=rp) :: msk1, msk2, msk3
3241 real(kind=rp) :: ur(lx, lx, lx)
3242 real(kind=rp) :: vr(lx, lx, lx)
3243 real(kind=rp) :: wr(lx, lx, lx)
3244 real(kind=rp) :: us(lx, lx, lx)
3245 real(kind=rp) :: vs(lx, lx, lx)
3246 real(kind=rp) :: ws(lx, lx, lx)
3247 real(kind=rp) :: ut(lx, lx, lx)
3248 real(kind=rp) :: vt(lx, lx, lx)
3249 real(kind=rp) :: wt(lx, lx, lx)
3250 real(kind=rp) :: tmp1, tmp2, tmp3
3251 integer :: e, i, j, k, l
3260 tmp1 = tmp1 + dx(i,k) * u(k,j,1,e)
3261 tmp2 = tmp2 + dx(i,k) * v(k,j,1,e)
3262 tmp3 = tmp3 + dx(i,k) * w(k,j,1,e)
3277 tmp1 = tmp1 + dy(j,l) * u(i,l,k,e)
3278 tmp2 = tmp2 + dy(j,l) * v(i,l,k,e)
3279 tmp3 = tmp3 + dy(j,l) * w(i,l,k,e)
3294 tmp1 = tmp1 + dz(k,l) * u(i,1,l,e)
3295 tmp2 = tmp2 + dz(k,l) * v(i,1,l,e)
3296 tmp3 = tmp3 + dz(k,l) * w(i,1,l,e)
3304 do i = 1, lx * lx * lx
3305 grad(1,1,1) = w3(i,1,1) &
3306 * ( drdx(i,1,1,e) * ur(i,1,1) &
3307 + dsdx(i,1,1,e) * us(i,1,1) &
3308 + dtdx(i,1,1,e) * ut(i,1,1) )
3309 grad(1,1,2) = w3(i,1,1) &
3310 * ( dsdy(i,1,1,e) * us(i,1,1) &
3311 + drdy(i,1,1,e) * ur(i,1,1) &
3312 + dtdy(i,1,1,e) * ut(i,1,1) )
3313 grad(1,1,3) = w3(i,1,1) &
3314 * ( dtdz(i,1,1,e) * ut(i,1,1) &
3315 + drdz(i,1,1,e) * ur(i,1,1) &
3316 + dsdz(i,1,1,e) * us(i,1,1) )
3318 grad(1,2,1) = w3(i,1,1) &
3319 * ( drdx(i,1,1,e) * vr(i,1,1) &
3320 + dsdx(i,1,1,e) * vs(i,1,1) &
3321 + dtdx(i,1,1,e) * vt(i,1,1) )
3322 grad(1,2,2) = w3(i,1,1) &
3323 * ( dsdy(i,1,1,e) * vs(i,1,1) &
3324 + drdy(i,1,1,e) * vr(i,1,1) &
3325 + dtdy(i,1,1,e) * vt(i,1,1) )
3326 grad(1,2,3) = w3(i,1,1) &
3327 * ( dtdz(i,1,1,e) * vt(i,1,1) &
3328 + drdz(i,1,1,e) * vr(i,1,1) &
3329 + dsdz(i,1,1,e) * vs(i,1,1) )
3331 grad(1,3,1) = w3(i,1,1) &
3332 * ( drdx(i,1,1,e) * wr(i,1,1) &
3333 + dsdx(i,1,1,e) * ws(i,1,1) &
3334 + dtdx(i,1,1,e) * wt(i,1,1) )
3335 grad(1,3,2) = w3(i,1,1) &
3336 * ( dsdy(i,1,1,e) * ws(i,1,1) &
3337 + drdy(i,1,1,e) * wr(i,1,1) &
3338 + dtdy(i,1,1,e) * wt(i,1,1) )
3339 grad(1,3,3) = w3(i,1,1) &
3340 * ( dtdz(i,1,1,e) * wt(i,1,1) &
3341 + drdz(i,1,1,e) * wr(i,1,1) &
3342 + dsdz(i,1,1,e) * ws(i,1,1) )
3346 do i = 1, lx * lx * lx
3352 s12 = 0.5*(grad(i,1,2) + grad(i,2,1))
3353 s13 = 0.5*(grad(i,1,3) + grad(i,3,1))
3354 s23 = 0.5*(grad(i,2,3) + grad(i,3,2))
3356 o12 = 0.5*(grad(i,1,2) - grad(i,2,1))
3357 o13 = 0.5*(grad(i,1,3) - grad(i,3,1))
3358 o23 = 0.5*(grad(i,2,3) - grad(i,3,2))
3360 a11 = s11*s11 + s12*s12 + s13*s13 - o12*o12 - o13*o13
3361 a12 = s11 * s12 + s12 * s22 + s13 * s23 - o13 * o23
3362 a13 = s11 * s13 + s12 * s23 + s13 * s33 + o12 * o23
3364 a22 = s12*s12 + s22*s22 + s23*s23 - o12*o12 - o23*o23
3365 a23 = s12 * s13 + s22 * s23 + s23 * s33 - o12 * o13
3366 a33 = s13*s13 + s23*s23 + s33*s33 - o13*o13 - o23*o23
3369 b = -(a11 + a22 + a33)
3370 c = -(a12*a12 + a13*a13 + a23*a23 &
3371 - a11 * a22 - a11 * a33 - a22 * a33)
3372 d = -(2.0 * a12 * a13 * a23 - a11 * a23*a23 &
3373 - a22 * a13*a13 - a33 * a12*a12 + a11 * a22 * a33)
3376 q = (3.0 * c - b*b) / 9.0
3377 r = (9.0 * c * b - 27.0 * d - 2.0 * b*b*b) / 54.0
3378 theta = acos( r / sqrt(-q*q*q) )
3380 eigen(1) = 2.0 * sqrt(-q) * cos(theta / 3.0) - b / 3.0
3381 eigen(2) = 2.0 * sqrt(-q) * cos((theta + 2.0 *
pi) / 3.0) - b / 3.0
3382 eigen(3) = 2.0 * sqrt(-q) * cos((theta + 4.0 *
pi) / 3.0) - b / 3.0
3384 msk1 = merge(1.0_rp, 0.0_rp, eigen(2) .le. eigen(1) &
3385 .and. eigen(1) .le. eigen(3) .or. eigen(3) &
3386 .le. eigen(1) .and. eigen(1) .le. eigen(2) )
3387 msk2 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(2) &
3388 .and. eigen(2) .le. eigen(3) .or. eigen(3) &
3389 .le. eigen(2) .and. eigen(2) .le. eigen(1))
3390 msk3 = merge(1.0_rp, 0.0_rp, eigen(1) .le. eigen(3) &
3391 .and. eigen(3) .le. eigen(2) .or. eigen(2) &
3392 .le. eigen(3) .and. eigen(3) .le. eigen(1))
3394 l2 = msk1 * eigen(1) + msk2 * eigen(2) + msk3 * eigen(3)
3396 lambda2(i,1,1,e) = l2/(cb(i,1,1,e)**2)
3399 end subroutine sx_lambda2_lx2
3401end submodule sx_lambda2
A simulation component that computes lambda2 The values are stored in the field registry under the na...
real(kind=rp), parameter, public pi
Operators SX-Aurora backend.