11 use blockpointers,
only:
nx,
ny,
nz,
il,
jl,
kl,
w,
si,
sj,
sk,
vol,
sectionid,
scratch
19 integer(kind=intType) :: i, j, k, ii
21 real(kind=realtype) :: uux, uuy, uuz, vvx, vvy, vvz, wwx, wwy, wwz
22 real(kind=realtype) :: qxx, qyy, qzz, qxy, qxz, qyz, sijsij
23 real(kind=realtype) :: oxy, oxz, oyz, oijoij
24 real(kind=realtype) :: fact, omegax, omegay, omegaz
42 #ifdef TAPENADE_REVERSE
44 do ii = 0,
nx *
ny *
nz - 1
46 j = mod(ii /
nx,
ny) + 2
47 k = ii / (
nx *
ny) + 2
59 uux =
w(i + 1, j, k,
ivx) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 1) &
60 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 1) &
61 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 1)
62 uuy =
w(i + 1, j, k,
ivx) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 2) &
63 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 2) &
64 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 2)
65 uuz =
w(i + 1, j, k,
ivx) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 3) &
66 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 3) &
67 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 3)
71 vvx =
w(i + 1, j, k,
ivy) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 1) &
72 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 1) &
73 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 1)
74 vvy =
w(i + 1, j, k,
ivy) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 2) &
75 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 2) &
76 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 2)
77 vvz =
w(i + 1, j, k,
ivy) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 3) &
78 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 3) &
79 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 3)
83 wwx =
w(i + 1, j, k,
ivz) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 1) &
84 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 1) &
85 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 1)
86 wwy =
w(i + 1, j, k,
ivz) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 2) &
87 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 2) &
88 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 2)
89 wwz =
w(i + 1, j, k,
ivz) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 3) &
90 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 3) &
91 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 3)
103 qxy = fact *
half * (uuy + vvx)
104 qxz = fact *
half * (uuz + wwx)
105 qyz = fact *
half * (vvz + wwy)
107 oxy = fact *
half * (vvx - uuy) - omegaz
108 oxz = fact *
half * (uuz - wwx) - omegay
109 oyz = fact *
half * (wwy - vvz) - omegax
113 sijsij =
two * (qxy**2 + qxz**2 + qyz**2) &
114 + qxx**2 + qyy**2 + qzz**2
115 oijoij =
two * (oxy**2 + oxz**2 + oyz**2)
120 #ifdef TAPENADE_REVERSE
138 use blockpointers,
only:
nx,
ny,
nz,
il,
jl,
kl,
w,
si,
sj,
sk,
vol,
sectionid,
scratch
143 real(kind=realtype),
parameter :: f23 =
two *
third
147 integer(kind=intType) :: i, j, k, ii
148 real(kind=realtype) :: uux, uuy, uuz, vvx, vvy, vvz, wwx, wwy, wwz
149 real(kind=realtype) :: div2, fact, sxx, syy, szz, sxy, sxz, syz
156 #ifdef TAPENADE_REVERSE
158 do ii = 0,
nx *
ny *
nz - 1
160 j = mod(ii /
nx,
ny) + 2
161 k = ii / (
nx *
ny) + 2
173 uux =
w(i + 1, j, k,
ivx) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 1) &
174 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 1) &
175 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 1)
176 uuy =
w(i + 1, j, k,
ivx) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 2) &
177 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 2) &
178 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 2)
179 uuz =
w(i + 1, j, k,
ivx) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 3) &
180 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 3) &
181 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 3)
185 vvx =
w(i + 1, j, k,
ivy) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 1) &
186 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 1) &
187 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 1)
188 vvy =
w(i + 1, j, k,
ivy) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 2) &
189 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 2) &
190 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 2)
191 vvz =
w(i + 1, j, k,
ivy) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 3) &
192 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 3) &
193 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 3)
197 wwx =
w(i + 1, j, k,
ivz) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 1) &
198 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 1) &
199 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 1)
200 wwy =
w(i + 1, j, k,
ivz) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 2) &
201 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 2) &
202 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 2)
203 wwz =
w(i + 1, j, k,
ivz) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 3) &
204 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 3) &
205 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 3)
214 sxx =
two * fact * uux
215 syy =
two * fact * vvy
216 szz =
two * fact * wwz
218 sxy = fact * (uuy + vvx)
219 sxz = fact * (uuz + wwx)
220 syz = fact * (vvz + wwy)
224 div2 = f23 * (sxx + syy + szz)**2
229 + sxx**2 + syy**2 + szz**2) - div2
230 #ifdef TAPENADE_REVERSE
248 use blockpointers,
only:
nx,
ny,
nz,
il,
jl,
kl,
w,
si,
sj,
sk,
vol,
sectionid,
scratch
255 integer :: i, j, k, ii
257 real(kind=realtype) :: uuy, uuz, vvx, vvz, wwx, wwy
258 real(kind=realtype) :: fact, vortx, vorty, vortz
259 real(kind=realtype) :: omegax, omegay, omegaz
271 #ifdef TAPENADE_REVERSE
273 do ii = 0,
nx *
ny *
nz - 1
275 j = mod(ii /
nx,
ny) + 2
276 k = ii / (
nx *
ny) + 2
288 uuy =
w(i + 1, j, k,
ivx) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 2) &
289 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 2) &
290 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 2)
291 uuz =
w(i + 1, j, k,
ivx) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivx) *
si(i - 1, j, k, 3) &
292 +
w(i, j + 1, k,
ivx) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivx) *
sj(i, j - 1, k, 3) &
293 +
w(i, j, k + 1,
ivx) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivx) *
sk(i, j, k - 1, 3)
297 vvx =
w(i + 1, j, k,
ivy) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 1) &
298 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 1) &
299 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 1)
300 vvz =
w(i + 1, j, k,
ivy) *
si(i, j, k, 3) -
w(i - 1, j, k,
ivy) *
si(i - 1, j, k, 3) &
301 +
w(i, j + 1, k,
ivy) *
sj(i, j, k, 3) -
w(i, j - 1, k,
ivy) *
sj(i, j - 1, k, 3) &
302 +
w(i, j, k + 1,
ivy) *
sk(i, j, k, 3) -
w(i, j, k - 1,
ivy) *
sk(i, j, k - 1, 3)
306 wwx =
w(i + 1, j, k,
ivz) *
si(i, j, k, 1) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 1) &
307 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 1) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 1) &
308 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 1) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 1)
309 wwy =
w(i + 1, j, k,
ivz) *
si(i, j, k, 2) -
w(i - 1, j, k,
ivz) *
si(i - 1, j, k, 2) &
310 +
w(i, j + 1, k,
ivz) *
sj(i, j, k, 2) -
w(i, j - 1, k,
ivz) *
sj(i, j - 1, k, 2) &
311 +
w(i, j, k + 1,
ivz) *
sk(i, j, k, 2) -
w(i, j, k - 1,
ivz) *
sk(i, j, k - 1, 2)
318 vortx = fact * (wwy - vvz) -
two * omegax
319 vorty = fact * (uuz - wwx) -
two * omegay
320 vortz = fact * (vvx - uuy) -
two * omegaz
324 scratch(i, j, k,
ivort) = vortx**2 + vorty**2 + vortz**2
325 #ifdef TAPENADE_REVERSE
348 real(kind=realtype),
intent(in) :: eddyratio, nulam
352 real(kind=realtype) :: cv13, chi, chi2, chi3, chi4, f, df, dchi
356 if (eddyratio <=
zero)
then
370 if (eddyratio < 1.e-4_realtype)
then
372 else if (eddyratio < 1.0_realtype)
then
374 else if (eddyratio < 10.0_realtype)
then
389 f = chi4 - eddyratio * (chi3 + cv13)
390 df =
four * chi3 -
three * eddyratio * chi2
440 integer(kind=intType),
intent(in) :: mAdv, nAdv, offset
442 real(kind=realtype),
dimension(2:il, 2:jl, 2:kl, mAdv, mAdv), &
447 integer(kind=intType) :: i, j, k, ii, jj, nn
449 real(kind=realtype) :: oneoverdt, tmp
482 nadvloopunsteady:
do ii = 1, nadv
514 scratch(i, j, k, idvt + ii - 1) =
scratch(i, j, k, idvt + ii - 1) - oneoverdt * tmp
518 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) &
524 end do nadvloopunsteady
545 nadvloopspectral:
do ii = 1, nadv
568 scratch(i, j, k, idvt + ii - 1) =
scratch(i, j, k, idvt + ii - 1) -
dw(i, j, k, jj)
569 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + tmp
574 end do nadvloopspectral
595 logical,
intent(in) :: includeHalos
600 logical :: returnImmediately
601 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
607 returnimmediately = .false.
609 returnimmediately = .true.
612 returnimmediately = .true.
615 if (returnimmediately)
return
619 if (includehalos)
then
669 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
674 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
675 real(kind=realtype) :: chi, chi3, fv1, rnusa, cv13
683 #ifdef TAPENADE_REVERSE
684 isize = (iend - ibeg) + 1
685 jsize = (jend - jbeg) + 1
686 ksize = (kend - kbeg) + 1
689 do ii = 0, isize * jsize * ksize - 1
690 i = mod(ii, isize) + ibeg
691 j = mod(ii / isize, jsize) + jbeg
692 k = ii / ((isize * jsize)) + kbeg
699 chi = rnusa /
rlv(i, j, k)
701 fv1 = chi3 / (chi3 + cv13)
702 rev(i, j, k) = fv1 * rnusa
703 #ifdef TAPENADE_REVERSE
722 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
726 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
730 #ifdef TAPENADE_REVERSE
731 isize = (iend - ibeg) + 1
732 jsize = (jend - jbeg) + 1
733 ksize = (kend - kbeg) + 1
736 do ii = 0, isize * jsize * ksize - 1
737 i = mod(ii, isize) + ibeg
738 j = mod(ii / isize, jsize) + jbeg
739 k = ii / ((isize * jsize)) + kbeg
745 rev(i, j, k) = abs(
w(i, j, k,
irho) *
w(i, j, k,
itu1) /
w(i, j, k,
itu2))
746 #ifdef TAPENADE_REVERSE
768 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
772 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
773 real(kind=realtype) :: t1, t2, arg2, f2, vortmag
784 #ifdef TAPENADE_REVERSE
785 isize = (iend - ibeg) + 1
786 jsize = (jend - jbeg) + 1
787 ksize = (kend - kbeg) + 1
790 do ii = 0, isize * jsize * ksize - 1
791 i = mod(ii, isize) + ibeg
792 j = mod(ii / isize, jsize) + jbeg
793 k = ii / ((isize * jsize)) + kbeg
803 / (0.09_realtype *
w(i, j, k,
itu2) *
d2wall(i, j, k))
804 t2 = 500.0_realtype *
rlv(i, j, k) &
815 #ifdef TAPENADE_REVERSE
846 use blockpointers,
only:
nx,
ny,
nz,
il,
jl,
kl,
vol,
sfacei,
sfacej,
sfacek, &
856 integer(kind=intType),
intent(in) :: nAdv, mAdv, offset
858 real(kind=realtype),
dimension(2:il, 2:jl, 2:kl, mAdv, mAdv), &
863 integer(kind=intType) :: i, j, k, ii, jj, kk, iii
865 real(kind=realtype) :: qs, voli, xa, ya, za
866 real(kind=realtype) :: uu, dwt, dwtm1, dwtp1, dwti, dwtj, dwtk
868 real(kind=realtype),
dimension(mAdv) :: impl
888 #ifdef TAPENADE_REVERSE
890 do iii = 0,
nx *
ny *
nz - 1
892 j = mod(iii /
nx,
ny) + 2
893 k = iii / (
nx *
ny) + 2
909 xa = (
sk(i, j, k, 1) +
sk(i, j, k - 1, 1)) * voli
910 ya = (
sk(i, j, k, 2) +
sk(i, j, k - 1, 2)) * voli
911 za = (
sk(i, j, k, 3) +
sk(i, j, k - 1, 3)) * voli
913 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
919 velkdir:
if (uu >
zero)
then
939 dwtm1 =
w(i, j, k - 1, jj) -
w(i, j, k - 2, jj)
940 dwt =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
941 dwtp1 =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
949 if (dwt * dwtp1 >
zero)
then
950 if (abs(dwt) < abs(dwtp1))
then
951 dwtk = dwtk +
half * dwt
953 dwtk = dwtk +
half * dwtp1
957 if (dwt * dwtm1 >
zero)
then
958 if (abs(dwt) < abs(dwtm1))
then
959 dwtk = dwtk -
half * dwt
961 dwtk = dwtk -
half * dwtm1
969 dwtk =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
983 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
994 impl(kk) =
bmtk1(i, j, jj, kk + offset)
997 impl(ii) = max(impl(ii),
zero)
1000 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1027 dwtm1 =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
1028 dwt =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
1029 dwtp1 =
w(i, j, k + 2, jj) -
w(i, j, k + 1, jj)
1037 if (dwt * dwtp1 >
zero)
then
1038 if (abs(dwt) < abs(dwtp1))
then
1039 dwtk = dwtk -
half * dwt
1041 dwtk = dwtk -
half * dwtp1
1045 if (dwt * dwtm1 >
zero)
then
1046 if (abs(dwt) < abs(dwtm1))
then
1047 dwtk = dwtk +
half * dwt
1049 dwtk = dwtk +
half * dwtm1
1057 dwtk =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
1069 #ifndef USE_TAPENADE
1070 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1081 impl(kk) =
bmtk2(i, j, jj, kk + offset)
1084 impl(ii) = max(impl(ii),
zero)
1087 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1094 #ifdef TAPENADE_REVERSE
1113 #ifdef TAPENADE_REVERSE
1115 do iii = 0,
nx *
ny *
nz - 1
1116 i = mod(iii,
nx) + 2
1117 j = mod(iii /
nx,
ny) + 2
1118 k = iii / (
nx *
ny) + 2
1135 xa = (
sj(i, j, k, 1) +
sj(i, j - 1, k, 1)) * voli
1136 ya = (
sj(i, j, k, 2) +
sj(i, j - 1, k, 2)) * voli
1137 za = (
sj(i, j, k, 3) +
sj(i, j - 1, k, 3)) * voli
1139 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
1144 veljdir:
if (uu >
zero)
then
1164 dwtm1 =
w(i, j - 1, k, jj) -
w(i, j - 2, k, jj)
1165 dwt =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1166 dwtp1 =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1174 if (dwt * dwtp1 >
zero)
then
1175 if (abs(dwt) < abs(dwtp1))
then
1176 dwtj = dwtj +
half * dwt
1178 dwtj = dwtj +
half * dwtp1
1182 if (dwt * dwtm1 >
zero)
then
1183 if (abs(dwt) < abs(dwtm1))
then
1184 dwtj = dwtj -
half * dwt
1186 dwtj = dwtj -
half * dwtm1
1194 dwtj =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1206 #ifndef USE_TAPENADE
1207 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
1218 impl(kk) =
bmtj1(i, k, jj, kk + offset)
1221 impl(ii) = max(impl(ii),
zero)
1224 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1250 dwtm1 =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1251 dwt =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1252 dwtp1 =
w(i, j + 2, k, jj) -
w(i, j + 1, k, jj)
1260 if (dwt * dwtp1 >
zero)
then
1261 if (abs(dwt) < abs(dwtp1))
then
1262 dwtj = dwtj -
half * dwt
1264 dwtj = dwtj -
half * dwtp1
1268 if (dwt * dwtm1 >
zero)
then
1269 if (abs(dwt) < abs(dwtm1))
then
1270 dwtj = dwtj +
half * dwt
1272 dwtj = dwtj +
half * dwtm1
1280 dwtj =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1292 #ifndef USE_TAPENADE
1293 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1304 impl(kk) =
bmtj2(i, k, jj, kk + offset)
1307 impl(ii) = max(impl(ii),
zero)
1310 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1317 #ifdef TAPENADE_REVERSE
1336 #ifdef TAPENADE_REVERSE
1338 do iii = 0,
nx *
ny *
nz - 1
1339 i = mod(iii,
nx) + 2
1340 j = mod(iii /
nx,
ny) + 2
1341 k = iii / (
nx *
ny) + 2
1358 xa = (
si(i, j, k, 1) +
si(i - 1, j, k, 1)) * voli
1359 ya = (
si(i, j, k, 2) +
si(i - 1, j, k, 2)) * voli
1360 za = (
si(i, j, k, 3) +
si(i - 1, j, k, 3)) * voli
1362 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
1367 velidir:
if (uu >
zero)
then
1387 dwtm1 =
w(i - 1, j, k, jj) -
w(i - 2, j, k, jj)
1388 dwt =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1389 dwtp1 =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1397 if (dwt * dwtp1 >
zero)
then
1398 if (abs(dwt) < abs(dwtp1))
then
1399 dwti = dwti +
half * dwt
1401 dwti = dwti +
half * dwtp1
1405 if (dwt * dwtm1 >
zero)
then
1406 if (abs(dwt) < abs(dwtm1))
then
1407 dwti = dwti -
half * dwt
1409 dwti = dwti -
half * dwtm1
1417 dwti =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1429 #ifndef USE_TAPENADE
1430 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
1441 impl(kk) =
bmti1(j, k, jj, kk + offset)
1444 impl(ii) = max(impl(ii),
zero)
1447 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1473 dwtm1 =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1474 dwt =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1475 dwtp1 =
w(i + 2, j, k, jj) -
w(i + 1, j, k, jj)
1483 if (dwt * dwtp1 >
zero)
then
1484 if (abs(dwt) < abs(dwtp1))
then
1485 dwti = dwti -
half * dwt
1487 dwti = dwti -
half * dwtp1
1491 if (dwt * dwtm1 >
zero)
then
1492 if (abs(dwt) < abs(dwtm1))
then
1493 dwti = dwti +
half * dwt
1495 dwti = dwti +
half * dwtm1
1503 dwti =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1515 #ifndef USE_TAPENADE
1516 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1527 impl(kk) =
bmti2(j, k, jj, kk + offset)
1530 impl(ii) = max(impl(ii),
zero)
1533 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1540 #ifdef TAPENADE_REVERSE
1558 #ifndef USE_TAPENADE
1579 integer(kind=intType),
intent(in) :: nb, ne
1581 real(kind=realtype),
dimension(2, nb:ne),
intent(inout) :: l, u, r
1582 real(kind=realtype),
dimension(2, 2, nb:ne),
intent(inout) :: c
1586 integer(kind=intType) :: n
1587 real(kind=realtype) :: deti, f11, f12, f21, f22, r1
1594 do n = ne - 1, nb, -1
1596 deti =
one / (c(1, 1, n + 1) * c(2, 2, n + 1) - c(1, 2, n + 1) * c(2, 1, n + 1))
1597 f11 = u(1, n) * c(2, 2, n + 1) * deti
1598 f12 = -u(1, n) * c(1, 2, n + 1) * deti
1599 f21 = -u(2, n) * c(2, 1, n + 1) * deti
1600 f22 = u(2, n) * c(1, 1, n + 1) * deti
1602 c(1, 1, n) = c(1, 1, n) - f11 * l(1, n + 1)
1603 c(1, 2, n) = c(1, 2, n) - f12 * l(2, n + 1)
1604 c(2, 1, n) = c(2, 1, n) - f21 * l(1, n + 1)
1605 c(2, 2, n) = c(2, 2, n) - f22 * l(2, n + 1)
1607 r(1, n) = r(1, n) - f11 * r(1, n + 1) - f12 * r(2, n + 1)
1608 r(2, n) = r(2, n) - f21 * r(1, n + 1) - f22 * r(2, n + 1)
1615 deti =
one / (c(1, 1, nb) * c(2, 2, nb) - c(1, 2, nb) * c(2, 1, nb))
1617 r(1, nb) = deti * (c(2, 2, nb) * r1 - c(1, 2, nb) * r(2, nb))
1618 r(2, nb) = -deti * (c(2, 1, nb) * r1 - c(1, 1, nb) * r(2, nb))
1622 r(1, n) = r(1, n) - l(1, n) * r(1, n - 1)
1623 r(2, n) = r(2, n) - l(2, n) * r(2, n - 1)
1625 deti =
one / (c(1, 1, n) * c(2, 2, n) - c(1, 2, n) * c(2, 1, n))
1627 r(1, n) = deti * (c(2, 2, n) * r1 - c(1, 2, n) * r(2, n))
1628 r(2, n) = -deti * (c(2, 1, n) * r1 - c(1, 1, n) * r(2, n))
1632 end subroutine tdia3
1649 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
1653 integer(kind=intType) :: i, j, k, nn, ii, iSize, jSize, kSize
1654 real(kind=realtype) :: tke, tep, tkea, tepa, tepl, tv2, tv2a
1655 real(kind=realtype) :: yp, utau
1657 real(kind=realtype),
dimension(itu1:itu5) :: tup
1658 real(kind=realtype),
dimension(:, :, :),
pointer :: ww
1659 real(kind=realtype),
dimension(:, :),
pointer :: rrlv, rrev
1660 real(kind=realtype),
dimension(:, :),
pointer :: dd2wall
1668 #ifdef TAPENADE_REVERSE
1669 isize = (iend - ibeg) + 1
1670 jsize = (jend - jbeg) + 1
1671 ksize = (kend - kbeg) + 1
1674 do ii = 0, isize * jsize * ksize - 1
1675 i = mod(ii, isize) + ibeg
1676 j = mod(ii / isize, jsize) + jbeg
1677 k = ii / ((isize * jsize)) + kbeg
1684 tke =
w(i, j, k,
itu1)
1685 tep =
w(i, j, k,
itu2)
1686 tv2 =
w(i, j, k,
itu3)
1693 #ifdef TAPENADE_REVERSE
1715 ww =>
w(2, 1:, 1:, 1:); rrlv =>
rlv(2, 1:, 1:)
1716 dd2wall =>
d2wall(2, :, :); rrev =>
rev(2, 1:, 1:)
1719 ww =>
w(
il, 1:, 1:, 1:); rrlv =>
rlv(
il, 1:, 1:)
1723 ww =>
w(1:, 2, 1:, 1:); rrlv =>
rlv(1:, 2, 1:)
1724 dd2wall =>
d2wall(:, 2, :); rrev =>
rev(1:, 2, 1:)
1727 ww =>
w(1:,
jl, 1:, 1:); rrlv =>
rlv(1:,
jl, 1:)
1731 ww =>
w(1:, 1:, 2, 1:); rrlv =>
rlv(1:, 1:, 2)
1732 dd2wall =>
d2wall(:, :, 2); rrev =>
rev(1:, 1:, 2)
1735 ww =>
w(1:, 1:,
kl, 1:); rrlv =>
rlv(1:, 1:,
kl)
1755 yp = ww(i, j,
irho) * dd2wall(i - 1, j - 1) * utau / rrlv(i, j)
1758 rrev(i, j) = tup(
itu5) * rrlv(i, j)
1763 end if testwallfunctions
1781 integer(kind=intType) :: i, j, k
1783 real(kind=realtype) :: sqrt3
1784 real(kind=realtype) :: tkea, tepa, tv2a, supi, rn2
1785 real(kind=realtype) :: rsct, rscl2, rnu, rstrain
1826 rstrain = sqrt(
strain2(i, j, k))
1827 rnu =
rlv(i, j, k) /
w(i, j, k,
irho)
1828 tkea = abs(
w(i, j, k,
itu1))
1829 tepa = abs(
w(i, j, k,
itu2))
1830 tv2a = abs(
w(i, j, k,
itu3))
1831 supi = tepa * tkea / max(sqrt3 * tv2a *
rvfcmu * rstrain,
eps)
1832 rn2 =
rvfcn**2 * (rnu * tepa)**1.5_realtype
1834 rsct = max(tkea,
six * sqrt(rnu * tepa))
1835 sct(i, j, k) = min(rsct, 0.6_realtype * supi)
1836 rscl2 = tkea * min(tkea**2, supi**2)
1837 scl2(i, j, k) =
rvfcl**2 * max(rscl2, rn2)
1851 rnu =
rlv(i, j, k) /
w(i, j, k,
irho)
1852 tkea = abs(
w(i, j, k,
itu1))
1853 tepa = abs(
w(i, j, k,
itu2))
1854 rn2 =
rvfcn**2 * (rnu * tepa)**1.5_realtype
1856 rsct = max(tkea,
six * sqrt(rnu * tepa))
1859 scl2(i, j, k) =
rvfcl**2 * max(rscl2, rn2)
1876 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
1880 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
1884 #ifdef TAPENADE_REVERSE
1885 isize = (iend - ibeg) + 1
1886 jsize = (jend - jbeg) + 1
1887 ksize = (kend - kbeg) + 1
1890 do ii = 0, isize * jsize * ksize - 1
1891 i = mod(ii, isize) + ibeg
1892 j = mod(ii / isize, jsize) + jbeg
1893 k = ii / ((isize * jsize)) + kbeg
1899 rev(i, j, k) = abs(
w(i, j, k,
irho) *
w(i, j, k,
itu1) *
w(i, j, k,
itu2))
1900 #ifdef TAPENADE_REVERSE
1909 #ifndef USE_TAPENADE
1921 integer(kind=intType),
intent(in) :: ntu1, ntu2
1925 integer(kind=intType) :: nn, sps
1935 domains:
do nn = 1, ndom
1964 integer(kind=intType),
intent(in) :: ntu1, ntu2, nn, sps
1968 integer(kind=intType) :: ii, mm, i, j, k
1977 nadvloop:
do ii = ntu1, ntu2
2001 dw(i, j, k, ii) =
dw(i, j, k, ii) &
2031 integer(kind=intType),
intent(in) :: pOffset
2035 integer(kind=intType) :: i, j, k, ip, jp, kp
2036 real(kind=realtype) :: rhoi, tmp
2059 tmp = rhoi *
rev(i, j, k) *
w(ip, jp, kp,
itu2)
2082 integer(kind=intType) :: i, j, k
2083 real(kind=realtype) :: kx, ky, kz, wwx, wwy, wwz
2084 real(kind=realtype) :: lnwip1, lnwim1, lnwjp1, lnwjm1
2085 real(kind=realtype) :: lnwkp1, lnwkm1
2101 kx =
w(i + 1, j, k,
itu1) *
si(i, j, k, 1) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 1) &
2102 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 1) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 1) &
2103 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 1) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 1)
2104 ky =
w(i + 1, j, k,
itu1) *
si(i, j, k, 2) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 2) &
2105 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 2) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 2) &
2106 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 2) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 2)
2107 kz =
w(i + 1, j, k,
itu1) *
si(i, j, k, 3) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 3) &
2108 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 3) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 3) &
2109 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 3) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 3)
2114 lnwip1 = log(abs(
w(i + 1, j, k,
itu2)))
2115 lnwim1 = log(abs(
w(i - 1, j, k,
itu2)))
2116 lnwjp1 = log(abs(
w(i, j + 1, k,
itu2)))
2117 lnwjm1 = log(abs(
w(i, j - 1, k,
itu2)))
2118 lnwkp1 = log(abs(
w(i, j, k + 1,
itu2)))
2119 lnwkm1 = log(abs(
w(i, j, k - 1,
itu2)))
2123 wwx = lnwip1 *
si(i, j, k, 1) - lnwim1 *
si(i - 1, j, k, 1) &
2124 + lnwjp1 *
sj(i, j, k, 1) - lnwjm1 *
sj(i, j - 1, k, 1) &
2125 + lnwkp1 *
sk(i, j, k, 1) - lnwkm1 *
sk(i, j, k - 1, 1)
2126 wwy = lnwip1 *
si(i, j, k, 2) - lnwim1 *
si(i - 1, j, k, 2) &
2127 + lnwjp1 *
sj(i, j, k, 2) - lnwjm1 *
sj(i, j - 1, k, 2) &
2128 + lnwkp1 *
sk(i, j, k, 2) - lnwkm1 *
sk(i, j, k - 1, 2)
2129 wwz = lnwip1 *
si(i, j, k, 3) - lnwim1 *
si(i - 1, j, k, 3) &
2130 + lnwjp1 *
sj(i, j, k, 3) - lnwjm1 *
sj(i, j - 1, k, 3) &
2131 + lnwkp1 *
sk(i, j, k, 3) - lnwkm1 *
sk(i, j, k - 1, 3)
2136 kwcd(i, j, k) =
fourth * (kx * wwx + ky * wwy + kz * wwz) / (
vol(i, j, k)**2)
real(kind=realtype), dimension(:, :, :, :), pointer bmtk2
real(kind=realtype), dimension(:, :, :), pointer sfacek
logical addgridvelocities
real(kind=realtype), dimension(:, :, :, :), pointer bmti1
integer(kind=inttype) nviscbocos
real(kind=realtype), dimension(:, :, :, :), pointer bmtj1
real(kind=realtype), dimension(:, :, :, :), pointer bmti2
real(kind=realtype), dimension(:, :, :, :), pointer w
real(kind=realtype), dimension(:, :, :, :), pointer scratch
real(kind=realtype), dimension(:, :, :), pointer sfacei
type(viscsubfacetype), dimension(:), pointer viscsubface
real(kind=realtype), dimension(:, :, :), pointer d2wall
real(kind=realtype), dimension(:, :, :), pointer rlv
integer(kind=inttype), dimension(:), pointer bcfaceid
real(kind=realtype), dimension(:, :, :, :), pointer si
real(kind=realtype), dimension(:, :, :, :), pointer sj
integer(kind=inttype) sectionid
real(kind=realtype), dimension(:, :, :), pointer rev
real(kind=realtype), dimension(:, :, :, :), pointer bmtj2
real(kind=realtype), dimension(:, :, :, :), pointer dw
real(kind=realtype), dimension(:, :, :, :), pointer sk
real(kind=realtype), dimension(:, :, :), pointer vol
real(kind=realtype), dimension(:, :, :), pointer sfacej
real(kind=realtype), dimension(:, :, :, :), pointer bmtk1
real(kind=realtype), dimension(:, :, :, :, :), pointer wold
integer(kind=inttype), parameter strain
integer(kind=inttype), parameter spalartallmarasedwards
integer(kind=inttype), parameter spalartallmaras
real(kind=realtype), parameter zero
real(kind=realtype), parameter three
integer(kind=inttype), parameter imax
integer(kind=inttype), parameter kmin
real(kind=realtype), parameter four
real(kind=realtype), parameter third
integer(kind=inttype), parameter jmax
real(kind=realtype), parameter six
real(kind=realtype), parameter eps
real(kind=realtype), parameter thresholdreal
integer(kind=inttype), parameter ktau
integer(kind=inttype), parameter vorticity
integer(kind=inttype), parameter komegawilcox
integer(kind=inttype), parameter timespectral
integer(kind=inttype), parameter komegamodified
real(kind=realtype), parameter one
real(kind=realtype), parameter half
integer(kind=inttype), parameter katolaunder
integer(kind=inttype), parameter imin
real(kind=realtype), parameter two
real(kind=realtype), parameter fourth
integer(kind=inttype), parameter mentersst
integer(kind=inttype), parameter secondorder
integer(kind=inttype), parameter kmax
integer(kind=inttype), parameter jmin
integer(kind=inttype), parameter v2f
real(kind=realtype), dimension(:), allocatable winf
real(kind=realtype) timeref
integer(kind=inttype) noldlevels
integer(kind=inttype) currentlevel
integer(kind=inttype) groundlevel
real(kind=realtype), dimension(:), allocatable coeftime
real(kind=realtype), parameter rssta1
real(kind=realtype) rvflimite
real(kind=realtype) rvfcmu
real(kind=realtype), parameter rvfcn
real(kind=realtype) rvfcl
real(kind=realtype), parameter rsacv1
real(kind=realtype), parameter rkwbeta1
type(sectiontype), dimension(:), allocatable sections
subroutine curvetupyp(tup, yp, ntu1, ntu2)
real(kind=realtype), dimension(:, :, :), pointer vort
real(kind=realtype), dimension(:, :, :), pointer scl2
real(kind=realtype), dimension(:, :, :), pointer kwcd
real(kind=realtype), dimension(:, :, :), pointer prod
real(kind=realtype), dimension(:, :, :), pointer strain2
real(kind=realtype), dimension(:, :, :, :), pointer dvt
real(kind=realtype), dimension(:, :, :), pointer sct
subroutine vfeddyviscosity(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd)
subroutine initkomega(pOffset)
subroutine unsteadyturbterm(mAdv, nAdv, offset, qq)
real(kind=realtype) function sanuknowneddyratio(eddyRatio, nuLam)
subroutine saeddyviscosity(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd)
subroutine computeeddyviscosity(includeHalos)
subroutine ssteddyviscosity(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd)
subroutine tdia3(nb, ne, l, c, u, r)
subroutine turbadvection(mAdv, nAdv, offset, qq)
subroutine prodkatolaunder
subroutine unsteadyturbspectral(ntu1, ntu2)
subroutine kweddyviscosity(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd)
subroutine unsteadyturbspectral_block(ntu1, ntu2, nn, sps)
subroutine kteddyviscosity(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd)
subroutine setpointers(nn, mm, ll)