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
357 if (eddyratio <=
zero)
then
371 if (eddyratio < 1.e-4_realtype)
then
373 else if (eddyratio < 1.0_realtype)
then
375 else if (eddyratio < 10.0_realtype)
then
390 f = chi4 - eddyratio * (chi3 + cv13)
391 df =
four * chi3 -
three * eddyratio * chi2
441 integer(kind=intType),
intent(in) :: mAdv, nAdv, offset
443 real(kind=realtype),
dimension(2:il, 2:jl, 2:kl, mAdv, mAdv), &
448 integer(kind=intType) :: i, j, k, ii, jj, nn
450 real(kind=realtype) :: oneoverdt, tmp
483 nadvloopunsteady:
do ii = 1, nadv
515 scratch(i, j, k, idvt + ii - 1) =
scratch(i, j, k, idvt + ii - 1) - oneoverdt * tmp
519 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) &
525 end do nadvloopunsteady
546 nadvloopspectral:
do ii = 1, nadv
569 scratch(i, j, k, idvt + ii - 1) =
scratch(i, j, k, idvt + ii - 1) -
dw(i, j, k, jj)
570 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + tmp
575 end do nadvloopspectral
596 logical,
intent(in) :: includeHalos
601 logical :: returnImmediately
602 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
608 returnimmediately = .false.
610 returnimmediately = .true.
613 returnimmediately = .true.
616 if (returnimmediately)
return
620 if (includehalos)
then
670 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
675 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
676 real(kind=realtype) :: chi, chi3, fv1, rnusa, cv13
685 #ifdef TAPENADE_REVERSE
686 isize = (iend - ibeg) + 1
687 jsize = (jend - jbeg) + 1
688 ksize = (kend - kbeg) + 1
691 do ii = 0, isize * jsize * ksize - 1
692 i = mod(ii, isize) + ibeg
693 j = mod(ii / isize, jsize) + jbeg
694 k = ii / ((isize * jsize)) + kbeg
701 chi = rnusa /
rlv(i, j, k)
703 fv1 = chi3 / (chi3 + cv13)
704 rev(i, j, k) = fv1 * rnusa
705 #ifdef TAPENADE_REVERSE
724 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
728 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
732 #ifdef TAPENADE_REVERSE
733 isize = (iend - ibeg) + 1
734 jsize = (jend - jbeg) + 1
735 ksize = (kend - kbeg) + 1
738 do ii = 0, isize * jsize * ksize - 1
739 i = mod(ii, isize) + ibeg
740 j = mod(ii / isize, jsize) + jbeg
741 k = ii / ((isize * jsize)) + kbeg
747 rev(i, j, k) = abs(
w(i, j, k,
irho) *
w(i, j, k,
itu1) /
w(i, j, k,
itu2))
748 #ifdef TAPENADE_REVERSE
770 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
774 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
775 real(kind=realtype) :: t1, t2, arg2, f2, vortmag
787 #ifdef TAPENADE_REVERSE
788 isize = (iend - ibeg) + 1
789 jsize = (jend - jbeg) + 1
790 ksize = (kend - kbeg) + 1
793 do ii = 0, isize * jsize * ksize - 1
794 i = mod(ii, isize) + ibeg
795 j = mod(ii / isize, jsize) + jbeg
796 k = ii / ((isize * jsize)) + kbeg
806 / (0.09_realtype *
w(i, j, k,
itu2) *
d2wall(i, j, k))
807 t2 = 500.0_realtype *
rlv(i, j, k) &
818 #ifdef TAPENADE_REVERSE
849 use blockpointers,
only:
nx,
ny,
nz,
il,
jl,
kl,
vol,
sfacei,
sfacej,
sfacek, &
859 integer(kind=intType),
intent(in) :: nAdv, mAdv, offset
861 real(kind=realtype),
dimension(2:il, 2:jl, 2:kl, mAdv, mAdv), &
866 integer(kind=intType) :: i, j, k, ii, jj, kk, iii
868 real(kind=realtype) :: qs, voli, xa, ya, za
869 real(kind=realtype) :: uu, dwt, dwtm1, dwtp1, dwti, dwtj, dwtk
871 real(kind=realtype),
dimension(mAdv) :: impl
891 #ifdef TAPENADE_REVERSE
893 do iii = 0,
nx *
ny *
nz - 1
895 j = mod(iii /
nx,
ny) + 2
896 k = iii / (
nx *
ny) + 2
912 xa = (
sk(i, j, k, 1) +
sk(i, j, k - 1, 1)) * voli
913 ya = (
sk(i, j, k, 2) +
sk(i, j, k - 1, 2)) * voli
914 za = (
sk(i, j, k, 3) +
sk(i, j, k - 1, 3)) * voli
916 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
922 velkdir:
if (uu >
zero)
then
942 dwtm1 =
w(i, j, k - 1, jj) -
w(i, j, k - 2, jj)
943 dwt =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
944 dwtp1 =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
952 if (dwt * dwtp1 >
zero)
then
953 if (abs(dwt) < abs(dwtp1))
then
954 dwtk = dwtk +
half * dwt
956 dwtk = dwtk +
half * dwtp1
960 if (dwt * dwtm1 >
zero)
then
961 if (abs(dwt) < abs(dwtm1))
then
962 dwtk = dwtk -
half * dwt
964 dwtk = dwtk -
half * dwtm1
972 dwtk =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
986 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
997 impl(kk) =
bmtk1(i, j, jj, kk + offset)
1000 impl(ii) = max(impl(ii),
zero)
1003 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1030 dwtm1 =
w(i, j, k, jj) -
w(i, j, k - 1, jj)
1031 dwt =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
1032 dwtp1 =
w(i, j, k + 2, jj) -
w(i, j, k + 1, jj)
1040 if (dwt * dwtp1 >
zero)
then
1041 if (abs(dwt) < abs(dwtp1))
then
1042 dwtk = dwtk -
half * dwt
1044 dwtk = dwtk -
half * dwtp1
1048 if (dwt * dwtm1 >
zero)
then
1049 if (abs(dwt) < abs(dwtm1))
then
1050 dwtk = dwtk +
half * dwt
1052 dwtk = dwtk +
half * dwtm1
1060 dwtk =
w(i, j, k + 1, jj) -
w(i, j, k, jj)
1072 #ifndef USE_TAPENADE
1073 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1084 impl(kk) =
bmtk2(i, j, jj, kk + offset)
1087 impl(ii) = max(impl(ii),
zero)
1090 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1097 #ifdef TAPENADE_REVERSE
1116 #ifdef TAPENADE_REVERSE
1118 do iii = 0,
nx *
ny *
nz - 1
1119 i = mod(iii,
nx) + 2
1120 j = mod(iii /
nx,
ny) + 2
1121 k = iii / (
nx *
ny) + 2
1138 xa = (
sj(i, j, k, 1) +
sj(i, j - 1, k, 1)) * voli
1139 ya = (
sj(i, j, k, 2) +
sj(i, j - 1, k, 2)) * voli
1140 za = (
sj(i, j, k, 3) +
sj(i, j - 1, k, 3)) * voli
1142 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
1147 veljdir:
if (uu >
zero)
then
1167 dwtm1 =
w(i, j - 1, k, jj) -
w(i, j - 2, k, jj)
1168 dwt =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1169 dwtp1 =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1177 if (dwt * dwtp1 >
zero)
then
1178 if (abs(dwt) < abs(dwtp1))
then
1179 dwtj = dwtj +
half * dwt
1181 dwtj = dwtj +
half * dwtp1
1185 if (dwt * dwtm1 >
zero)
then
1186 if (abs(dwt) < abs(dwtm1))
then
1187 dwtj = dwtj -
half * dwt
1189 dwtj = dwtj -
half * dwtm1
1197 dwtj =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1209 #ifndef USE_TAPENADE
1210 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
1221 impl(kk) =
bmtj1(i, k, jj, kk + offset)
1224 impl(ii) = max(impl(ii),
zero)
1227 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1253 dwtm1 =
w(i, j, k, jj) -
w(i, j - 1, k, jj)
1254 dwt =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1255 dwtp1 =
w(i, j + 2, k, jj) -
w(i, j + 1, k, jj)
1263 if (dwt * dwtp1 >
zero)
then
1264 if (abs(dwt) < abs(dwtp1))
then
1265 dwtj = dwtj -
half * dwt
1267 dwtj = dwtj -
half * dwtp1
1271 if (dwt * dwtm1 >
zero)
then
1272 if (abs(dwt) < abs(dwtm1))
then
1273 dwtj = dwtj +
half * dwt
1275 dwtj = dwtj +
half * dwtm1
1283 dwtj =
w(i, j + 1, k, jj) -
w(i, j, k, jj)
1295 #ifndef USE_TAPENADE
1296 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1307 impl(kk) =
bmtj2(i, k, jj, kk + offset)
1310 impl(ii) = max(impl(ii),
zero)
1313 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1320 #ifdef TAPENADE_REVERSE
1339 #ifdef TAPENADE_REVERSE
1341 do iii = 0,
nx *
ny *
nz - 1
1342 i = mod(iii,
nx) + 2
1343 j = mod(iii /
nx,
ny) + 2
1344 k = iii / (
nx *
ny) + 2
1361 xa = (
si(i, j, k, 1) +
si(i - 1, j, k, 1)) * voli
1362 ya = (
si(i, j, k, 2) +
si(i - 1, j, k, 2)) * voli
1363 za = (
si(i, j, k, 3) +
si(i - 1, j, k, 3)) * voli
1365 uu = xa *
w(i, j, k,
ivx) + ya *
w(i, j, k,
ivy) + za *
w(i, j, k,
ivz) - qs
1370 velidir:
if (uu >
zero)
then
1390 dwtm1 =
w(i - 1, j, k, jj) -
w(i - 2, j, k, jj)
1391 dwt =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1392 dwtp1 =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1400 if (dwt * dwtp1 >
zero)
then
1401 if (abs(dwt) < abs(dwtp1))
then
1402 dwti = dwti +
half * dwt
1404 dwti = dwti +
half * dwtp1
1408 if (dwt * dwtm1 >
zero)
then
1409 if (abs(dwt) < abs(dwtm1))
then
1410 dwti = dwti -
half * dwt
1412 dwti = dwti -
half * dwtm1
1420 dwti =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1432 #ifndef USE_TAPENADE
1433 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) + uu
1444 impl(kk) =
bmti1(j, k, jj, kk + offset)
1447 impl(ii) = max(impl(ii),
zero)
1450 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) + uu * impl(kk)
1476 dwtm1 =
w(i, j, k, jj) -
w(i - 1, j, k, jj)
1477 dwt =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1478 dwtp1 =
w(i + 2, j, k, jj) -
w(i + 1, j, k, jj)
1486 if (dwt * dwtp1 >
zero)
then
1487 if (abs(dwt) < abs(dwtp1))
then
1488 dwti = dwti -
half * dwt
1490 dwti = dwti -
half * dwtp1
1494 if (dwt * dwtm1 >
zero)
then
1495 if (abs(dwt) < abs(dwtm1))
then
1496 dwti = dwti +
half * dwt
1498 dwti = dwti +
half * dwtm1
1506 dwti =
w(i + 1, j, k, jj) -
w(i, j, k, jj)
1518 #ifndef USE_TAPENADE
1519 qq(i, j, k, ii, ii) = qq(i, j, k, ii, ii) - uu
1530 impl(kk) =
bmti2(j, k, jj, kk + offset)
1533 impl(ii) = max(impl(ii),
zero)
1536 qq(i, j, k, ii, kk) = qq(i, j, k, ii, kk) - uu * impl(kk)
1543 #ifdef TAPENADE_REVERSE
1561 #ifndef USE_TAPENADE
1582 integer(kind=intType),
intent(in) :: nb, ne
1584 real(kind=realtype),
dimension(2, nb:ne),
intent(inout) :: l, u, r
1585 real(kind=realtype),
dimension(2, 2, nb:ne),
intent(inout) :: c
1589 integer(kind=intType) :: n
1590 real(kind=realtype) :: deti, f11, f12, f21, f22, r1
1597 do n = ne - 1, nb, -1
1599 deti =
one / (c(1, 1, n + 1) * c(2, 2, n + 1) - c(1, 2, n + 1) * c(2, 1, n + 1))
1600 f11 = u(1, n) * c(2, 2, n + 1) * deti
1601 f12 = -u(1, n) * c(1, 2, n + 1) * deti
1602 f21 = -u(2, n) * c(2, 1, n + 1) * deti
1603 f22 = u(2, n) * c(1, 1, n + 1) * deti
1605 c(1, 1, n) = c(1, 1, n) - f11 * l(1, n + 1)
1606 c(1, 2, n) = c(1, 2, n) - f12 * l(2, n + 1)
1607 c(2, 1, n) = c(2, 1, n) - f21 * l(1, n + 1)
1608 c(2, 2, n) = c(2, 2, n) - f22 * l(2, n + 1)
1610 r(1, n) = r(1, n) - f11 * r(1, n + 1) - f12 * r(2, n + 1)
1611 r(2, n) = r(2, n) - f21 * r(1, n + 1) - f22 * r(2, n + 1)
1618 deti =
one / (c(1, 1, nb) * c(2, 2, nb) - c(1, 2, nb) * c(2, 1, nb))
1620 r(1, nb) = deti * (c(2, 2, nb) * r1 - c(1, 2, nb) * r(2, nb))
1621 r(2, nb) = -deti * (c(2, 1, nb) * r1 - c(1, 1, nb) * r(2, nb))
1625 r(1, n) = r(1, n) - l(1, n) * r(1, n - 1)
1626 r(2, n) = r(2, n) - l(2, n) * r(2, n - 1)
1628 deti =
one / (c(1, 1, n) * c(2, 2, n) - c(1, 2, n) * c(2, 1, n))
1630 r(1, n) = deti * (c(2, 2, n) * r1 - c(1, 2, n) * r(2, n))
1631 r(2, n) = -deti * (c(2, 1, n) * r1 - c(1, 1, n) * r(2, n))
1635 end subroutine tdia3
1652 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
1656 integer(kind=intType) :: i, j, k, nn, ii, iSize, jSize, kSize
1657 real(kind=realtype) :: tke, tep, tkea, tepa, tepl, tv2, tv2a
1658 real(kind=realtype) :: yp, utau
1660 real(kind=realtype),
dimension(itu1:itu5) :: tup
1661 real(kind=realtype),
dimension(:, :, :),
pointer :: ww
1662 real(kind=realtype),
dimension(:, :),
pointer :: rrlv, rrev
1663 real(kind=realtype),
dimension(:, :),
pointer :: dd2wall
1672 #ifdef TAPENADE_REVERSE
1673 isize = (iend - ibeg) + 1
1674 jsize = (jend - jbeg) + 1
1675 ksize = (kend - kbeg) + 1
1678 do ii = 0, isize * jsize * ksize - 1
1679 i = mod(ii, isize) + ibeg
1680 j = mod(ii / isize, jsize) + jbeg
1681 k = ii / ((isize * jsize)) + kbeg
1688 tke =
w(i, j, k,
itu1)
1689 tep =
w(i, j, k,
itu2)
1690 tv2 =
w(i, j, k,
itu3)
1697 #ifdef TAPENADE_REVERSE
1719 ww =>
w(2, 1:, 1:, 1:); rrlv =>
rlv(2, 1:, 1:)
1720 dd2wall =>
d2wall(2, :, :); rrev =>
rev(2, 1:, 1:)
1723 ww =>
w(
il, 1:, 1:, 1:); rrlv =>
rlv(
il, 1:, 1:)
1727 ww =>
w(1:, 2, 1:, 1:); rrlv =>
rlv(1:, 2, 1:)
1728 dd2wall =>
d2wall(:, 2, :); rrev =>
rev(1:, 2, 1:)
1731 ww =>
w(1:,
jl, 1:, 1:); rrlv =>
rlv(1:,
jl, 1:)
1735 ww =>
w(1:, 1:, 2, 1:); rrlv =>
rlv(1:, 1:, 2)
1736 dd2wall =>
d2wall(:, :, 2); rrev =>
rev(1:, 1:, 2)
1739 ww =>
w(1:, 1:,
kl, 1:); rrlv =>
rlv(1:, 1:,
kl)
1759 yp = ww(i, j,
irho) * dd2wall(i - 1, j - 1) * utau / rrlv(i, j)
1762 rrev(i, j) = tup(
itu5) * rrlv(i, j)
1767 end if testwallfunctions
1785 integer(kind=intType) :: i, j, k
1787 real(kind=realtype) :: sqrt3
1788 real(kind=realtype) :: tkea, tepa, tv2a, supi, rn2
1789 real(kind=realtype) :: rsct, rscl2, rnu, rstrain
1831 rstrain = sqrt(
strain2(i, j, k))
1832 rnu =
rlv(i, j, k) /
w(i, j, k,
irho)
1833 tkea = abs(
w(i, j, k,
itu1))
1834 tepa = abs(
w(i, j, k,
itu2))
1835 tv2a = abs(
w(i, j, k,
itu3))
1836 supi = tepa * tkea / max(sqrt3 * tv2a *
rvfcmu * rstrain,
eps)
1837 rn2 =
rvfcn**2 * (rnu * tepa)**1.5_realtype
1839 rsct = max(tkea,
six * sqrt(rnu * tepa))
1840 sct(i, j, k) = min(rsct, 0.6_realtype * supi)
1841 rscl2 = tkea * min(tkea**2, supi**2)
1842 scl2(i, j, k) =
rvfcl**2 * max(rscl2, rn2)
1856 rnu =
rlv(i, j, k) /
w(i, j, k,
irho)
1857 tkea = abs(
w(i, j, k,
itu1))
1858 tepa = abs(
w(i, j, k,
itu2))
1859 rn2 =
rvfcn**2 * (rnu * tepa)**1.5_realtype
1861 rsct = max(tkea,
six * sqrt(rnu * tepa))
1864 scl2(i, j, k) =
rvfcl**2 * max(rscl2, rn2)
1881 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
1885 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
1889 #ifdef TAPENADE_REVERSE
1890 isize = (iend - ibeg) + 1
1891 jsize = (jend - jbeg) + 1
1892 ksize = (kend - kbeg) + 1
1895 do ii = 0, isize * jsize * ksize - 1
1896 i = mod(ii, isize) + ibeg
1897 j = mod(ii / isize, jsize) + jbeg
1898 k = ii / ((isize * jsize)) + kbeg
1904 rev(i, j, k) = abs(
w(i, j, k,
irho) *
w(i, j, k,
itu1) *
w(i, j, k,
itu2))
1905 #ifdef TAPENADE_REVERSE
1914 #ifndef USE_TAPENADE
1926 integer(kind=intType),
intent(in) :: ntu1, ntu2
1930 integer(kind=intType) :: nn, sps
1940 domains:
do nn = 1, ndom
1969 integer(kind=intType),
intent(in) :: ntu1, ntu2, nn, sps
1973 integer(kind=intType) :: ii, mm, i, j, k
1982 nadvloop:
do ii = ntu1, ntu2
2006 dw(i, j, k, ii) =
dw(i, j, k, ii) &
2036 integer(kind=intType),
intent(in) :: pOffset
2040 integer(kind=intType) :: i, j, k, ip, jp, kp
2041 real(kind=realtype) :: rhoi, tmp
2065 tmp = rhoi *
rev(i, j, k) *
w(ip, jp, kp,
itu2)
2088 integer(kind=intType) :: i, j, k
2089 real(kind=realtype) :: kx, ky, kz, wwx, wwy, wwz
2090 real(kind=realtype) :: lnwip1, lnwim1, lnwjp1, lnwjm1
2091 real(kind=realtype) :: lnwkp1, lnwkm1
2107 kx =
w(i + 1, j, k,
itu1) *
si(i, j, k, 1) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 1) &
2108 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 1) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 1) &
2109 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 1) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 1)
2110 ky =
w(i + 1, j, k,
itu1) *
si(i, j, k, 2) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 2) &
2111 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 2) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 2) &
2112 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 2) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 2)
2113 kz =
w(i + 1, j, k,
itu1) *
si(i, j, k, 3) -
w(i - 1, j, k,
itu1) *
si(i - 1, j, k, 3) &
2114 +
w(i, j + 1, k,
itu1) *
sj(i, j, k, 3) -
w(i, j - 1, k,
itu1) *
sj(i, j - 1, k, 3) &
2115 +
w(i, j, k + 1,
itu1) *
sk(i, j, k, 3) -
w(i, j, k - 1,
itu1) *
sk(i, j, k - 1, 3)
2120 lnwip1 = log(abs(
w(i + 1, j, k,
itu2)))
2121 lnwim1 = log(abs(
w(i - 1, j, k,
itu2)))
2122 lnwjp1 = log(abs(
w(i, j + 1, k,
itu2)))
2123 lnwjm1 = log(abs(
w(i, j - 1, k,
itu2)))
2124 lnwkp1 = log(abs(
w(i, j, k + 1,
itu2)))
2125 lnwkm1 = log(abs(
w(i, j, k - 1,
itu2)))
2129 wwx = lnwip1 *
si(i, j, k, 1) - lnwim1 *
si(i - 1, j, k, 1) &
2130 + lnwjp1 *
sj(i, j, k, 1) - lnwjm1 *
sj(i, j - 1, k, 1) &
2131 + lnwkp1 *
sk(i, j, k, 1) - lnwkm1 *
sk(i, j, k - 1, 1)
2132 wwy = lnwip1 *
si(i, j, k, 2) - lnwim1 *
si(i - 1, j, k, 2) &
2133 + lnwjp1 *
sj(i, j, k, 2) - lnwjm1 *
sj(i, j - 1, k, 2) &
2134 + lnwkp1 *
sk(i, j, k, 2) - lnwkm1 *
sk(i, j, k - 1, 2)
2135 wwz = lnwip1 *
si(i, j, k, 3) - lnwim1 *
si(i - 1, j, k, 3) &
2136 + lnwjp1 *
sj(i, j, k, 3) - lnwjm1 *
sj(i, j - 1, k, 3) &
2137 + lnwkp1 *
sk(i, j, k, 3) - lnwkm1 *
sk(i, j, k - 1, 3)
2142 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 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)