17 real(kind=realtype),
intent(in) :: rho, p, u, v, w
18 real(kind=realtype),
intent(out) :: ttot
22 integer(kind=intType) :: i
24 real(kind=realtype) :: govgm1, t, kin
37 kin =
half * (u * u + v * v + w * w)
38 ttot = t * (
one + rho * kin / (govgm1 * p))
49 "Variable cp formulation not implemented yet")
67 integer(kind=intType),
intent(in) :: mm
68 real(kind=realtype),
dimension(mm),
intent(in) :: t
69 real(kind=realtype),
dimension(mm),
intent(out) :: gamma
73 integer(kind=intType) :: i, ii, nn, start
74 real(kind=realtype) :: cp, t2
135 else if (t(i) >=
cptrange(nn - 1))
then
155 cp = cp +
cptempfit(nn)%constants(ii) * t2
160 gamma(i) = cp / (cp -
one)
181 real(kind=realtype),
intent(in) :: rho, p, u, v, w
182 real(kind=realtype),
intent(out) :: ptot
186 real(kind=realtype),
parameter :: dtstop = 0.01_realtype
190 integer(kind=intType) :: i, ii, mm, nn, nnt, start
192 real(kind=realtype) :: govgm1, kin
193 real(kind=realtype) :: t, t2, tt, dt, h, htot, cp, scale, alp
194 real(kind=realtype) :: intcport, intcportt, intcporttt
207 kin =
half * (u * u + v * v + w * w)
208 ptot = p * ((
one + rho * kin / (govgm1 * p))**govgm1)
237 intcportt = cp * log(t)
248 intcportt = cp * log(t)
273 else if (t >=
cptrange(nn - 1))
then
294 if (
cptempfit(nn)%exponents(ii) == -1_inttype)
then
295 h = h +
cptempfit(nn)%constants(ii) * log(t)
299 h = h +
cptempfit(nn)%constants(ii) * t2 / mm
302 if (
cptempfit(nn)%exponents(ii) == 0_inttype)
then
303 intcportt = intcportt &
308 intcportt = intcportt &
320 htot = (h +
half * (u * u + v * v + w * w)) / scale
325 if (htot <=
cphint(0))
then
358 if (htot >
cphint(nnt))
then
366 else if (htot >=
cphint(nnt - 1))
then
402 cp = cp +
cptempfit(nnt)%constants(ii) * t2
408 if (
cptempfit(nnt)%exponents(ii) == -1_inttype)
then
409 h = h +
cptempfit(nnt)%constants(ii) * log(tt)
411 h = h +
cptempfit(nnt)%constants(ii) * t2 * tt &
425 if (abs(dt) < dtstop)
exit
436 intcporttt = (
cv0 +
one) * log(tt)
438 intcporttt = (
cvn +
one) * log(tt)
443 if (
cptempfit(nnt)%exponents(ii) == 0_inttype)
then
444 intcporttt = intcporttt &
449 intcporttt = intcporttt &
459 intcport = intcporttt - intcportt
464 do mm = (nn + 1), nnt
467 if (ii == 0_inttype)
then
470 intcport = intcport +
cptempfit(ii)%intCpovrt_2
476 intcport = intcport -
cptempfit(mm)%intCpovrt_1
482 ptot = p * exp(intcport)
500 real(kind=realtype),
PARAMETER :: twothird =
two *
third
501 integer(kind=intType) :: i, j, k, ii
502 real(kind=realtype) :: pp
503 logical :: correctForK
508 if (correctfork)
then
509 #ifdef TAPENADE_REVERSE
511 do ii = 0,
ie *
je *
ke - 1
513 j = mod(ii /
ie,
je) + 1
514 k = ii / (
ie *
je) + 1
520 pp =
p(i, j, k) - twothird *
w(i, j, k,
irho) *
w(i, j, k,
itu1)
522 #ifdef TAPENADE_REVERSE
530 #ifdef TAPENADE_REVERSE
532 do ii = 0,
ie *
je *
ke - 1
534 j = mod(ii /
ie,
je) + 1
535 k = ii / (
ie *
je) + 1
542 #ifdef TAPENADE_REVERSE
570 integer(kind=intType),
intent(in) :: iStart, iEnd, jStart, jEnd
571 integer(kind=intType),
intent(in) :: kStart, kEnd
572 logical,
intent(in) :: correctForK
576 integer(kind=intType) :: i, j, k, ii, iSize, jSize, kSize
577 real(kind=realtype) :: ovgm1, factk, scale
593 isize = (iend - istart) + 1
594 jsize = (jend - jstart) + 1
595 ksize = (kend - kstart) + 1
598 if (correctfork)
then
599 #ifdef TAPENADE_REVERSE
601 do ii = 0, isize * jsize * ksize - 1
602 i = mod(ii, isize) + istart
603 j = mod(ii / (isize), jsize) + jstart
604 k = ii / ((isize * jsize)) + kstart
610 w(i, j, k,
irhoe) = ovgm1 *
p(i, j, k) &
612 +
w(i, j, k,
ivy)**2 &
613 +
w(i, j, k,
ivz)**2) - &
616 #ifdef TAPENADE_REVERSE
625 #ifdef TAPENADE_REVERSE
627 do ii = 0, isize * jsize * ksize - 1
628 i = mod(ii, isize) + istart
629 j = mod(ii / (isize), jsize) + jstart
630 k = ii / ((isize * jsize)) + kstart
636 w(i, j, k,
irhoe) = ovgm1 *
p(i, j, k) &
638 +
w(i, j, k,
ivy)**2 &
639 +
w(i, j, k,
ivz)**2)
640 #ifdef TAPENADE_REVERSE
674 subroutine etot(rho, u, v, w, p, k, etotal, correctForK)
687 real(kind=realtype),
intent(in) :: rho, p, k
688 real(kind=realtype),
intent(in) :: u, v, w
689 real(kind=realtype),
intent(out) :: etotal
690 logical,
intent(in) :: correctForK
695 integer(kind=intType) :: i
699 call eint(rho, p, k, etotal, correctfork)
700 etotal = rho * (etotal &
701 +
half * (u * u + v * v + w * w))
707 subroutine eint(rho, p, k, einternal, correctForK)
724 real(kind=realtype),
intent(in) :: rho, p, k
725 real(kind=realtype),
intent(out) :: einternal
726 logical,
intent(in) :: correctForK
730 real(kind=realtype),
parameter :: twothird =
two *
third
734 integer(kind=intType) :: i, nn, mm, ii, start
736 real(kind=realtype) :: ovgm1, factk, pp, t, t2, scale
751 einternal = ovgm1 * p / rho
756 if (correctfork)
then
760 einternal = einternal - factk * k
779 if (correctfork) pp = pp - twothird * rho * k
824 else if (t >=
cptrange(nn - 1))
then
843 if (
cptempfit(nn)%exponents(ii) == -1)
then
844 einternal = einternal &
849 einternal = einternal &
854 einternal = scale * einternal
860 if (correctfork) einternal = einternal + k
879 logical,
intent(in) :: includeHalos
882 integer(kind=intType) :: i, j, k, ii
883 real(kind=realtype) :: gm1, v2
884 integer(kind=intType) :: iBeg, iEnd, iSize, jBeg, jEnd, jSize, kBeg, kEnd, kSize
888 if (includehalos)
then
904 #ifdef TAPENADE_REVERSE
905 isize = (iend - ibeg) + 1
906 jsize = (jend - jbeg) + 1
907 ksize = (kend - kbeg) + 1
910 do ii = 0, isize * jsize * ksize - 1
911 i = mod(ii, isize) + ibeg
912 j = mod(ii / (isize), jsize) + jbeg
913 k = ii / ((isize * jsize)) + kbeg
919 v2 =
w(i, j, k,
ivx)**2 +
w(i, j, k,
ivy)**2 +
w(i, j, k,
ivz)**2
921 p(i, j, k) = max(
p(i, j, k), 1.e-4_realtype *
pinfcorr)
923 #ifdef TAPENADE_REVERSE
950 integer(kind=intType),
intent(in) :: iBeg, iEnd, jBeg, jEnd, kBeg, kEnd
951 integer(kind=intType),
intent(in) :: pointerOffset
955 real(kind=realtype),
parameter :: dtstop = 0.01_realtype
956 real(kind=realtype),
parameter :: twothird =
two *
third
960 integer(kind=intType) :: i, j, k, ip, jp, kp, nn, ii, start
962 real(kind=realtype) :: gm1, factk, v2, scale, e0, e
963 real(kind=realtype) :: trefinv, t, dt, t2, alp, cv
986 kp = k + pointeroffset
988 jp = j + pointeroffset
990 ip = i + pointeroffset
992 v2 =
w(ip, jp, kp,
ivx)**2 +
w(ip, jp, kp,
ivy)**2 &
993 +
w(ip, jp, kp,
ivz)**2
997 1.e-5_realtype *
pinf)
1006 kp = k + pointeroffset
1008 jp = j + pointeroffset
1010 ip = i + pointeroffset
1013 + factk *
w(ip, jp, kp,
irho) &
1014 *
w(ip, jp, kp,
itu1)
1036 kp = k + pointeroffset
1038 jp = j + pointeroffset
1040 ip = i + pointeroffset
1046 v2 =
w(ip, jp, kp,
ivx)**2 +
w(ip, jp, kp,
ivy)**2 &
1047 +
w(ip, jp, kp,
ivz)**2
1057 kp = k + pointeroffset
1059 jp = j + pointeroffset
1061 ip = i + pointeroffset
1066 e0 = scale *
w(i, j, k,
irhoe)
1070 if (e0 <=
cpeint(0))
then
1102 if (e0 >
cpeint(nn))
then
1111 else if (e0 >=
cpeint(nn - 1))
then
1149 cv = cv +
cptempfit(nn)%constants(ii) * t2
1155 if (
cptempfit(nn)%exponents(ii) == -1_inttype)
then
1156 e = e +
cptempfit(nn)%constants(ii) * log(t)
1158 e = e +
cptempfit(nn)%constants(ii) * t2 * t &
1172 if (abs(dt) < dtstop)
exit
1188 1.e-5_realtype *
pinf)
1191 + twothird *
w(ip, jp, kp,
irho) &
1192 *
w(ip, jp, kp,
itu1)
1217 logical,
intent(in) :: includeHalos
1221 real(kind=realtype),
parameter :: twothird =
two *
third
1225 integer(kind=intType) :: i, j, k, ii
1226 real(kind=realtype) :: musuth, tsuth, ssuth, t, pp
1227 logical :: correctForK
1228 integer(kind=intType) :: iBeg, iEnd, iSize, jBeg, jEnd, jSize, kBeg, kEnd, kSize
1245 if (includehalos)
then
1264 if (correctfork)
then
1265 #ifdef TAPENADE_REVERSE
1266 isize = (iend - ibeg) + 1
1267 jsize = (jend - jbeg) + 1
1268 ksize = (kend - kbeg) + 1
1271 do ii = 0, isize * jsize * ksize - 1
1272 i = mod(ii, isize) + ibeg
1273 j = mod(ii / (isize), jsize) + jbeg
1274 k = ii / ((isize * jsize)) + kbeg
1280 pp =
p(i, j, k) - twothird *
w(i, j, k,
irho) *
w(i, j, k,
itu1)
1282 rlv(i, j, k) = musuth * ((tsuth + ssuth) / (t + ssuth)) &
1283 * ((t / tsuth)**1.5_realtype)
1284 #ifdef TAPENADE_REVERSE
1294 #ifdef TAPENADE_REVERSE
1295 isize = (iend - ibeg) + 1
1296 jsize = (jend - jbeg) + 1
1297 ksize = (kend - kbeg) + 1
1300 do ii = 0, isize * jsize * ksize - 1
1301 i = mod(ii, isize) + ibeg
1302 j = mod(ii / (isize), jsize) + jbeg
1303 k = ii / ((isize * jsize)) + kbeg
1313 rlv(i, j, k) = musuth * ((tsuth + ssuth) / (t + ssuth)) &
1314 * ((t / tsuth)**1.5_realtype)
1315 #ifdef TAPENADE_REVERSE
1334 real(kind=realtype),
dimension(3) :: refdir1, refdir2
1385 real(kind=realtype),
intent(in) :: t
1387 real(kind=realtype),
dimension(3),
intent(out) :: rotationpoint
1388 real(kind=realtype),
dimension(3, 3),
intent(out) :: rotationmatrix
1392 integer(kind=intType) :: i, j
1394 real(kind=realtype) :: phi, dphix, dphiy, dphiz
1395 real(kind=realtype) :: cosx, cosy, cosz, sinx, siny, sinz
1397 real(kind=realtype),
dimension(3, 3) :: dm, m
1451 dm(1, 1) = -cosy * sinz * dphiz
1452 dm(1, 2) = (-cosx * cosz - sinx * siny * sinz) * dphiz
1453 dm(1, 3) = (sinx * cosz - cosx * siny * sinz) * dphiz
1455 dm(2, 1) = cosy * cosz * dphiz
1456 dm(2, 2) = (sinx * siny * cosz - cosx * sinz) * dphiz
1457 dm(2, 3) = (cosx * siny * cosz + sinx * sinz) * dphiz
1465 dm(1, 1) = dm(1, 1) - siny * cosz * dphiy
1466 dm(1, 2) = dm(1, 2) + sinx * cosy * cosz * dphiy
1467 dm(1, 3) = dm(1, 3) + cosx * cosy * cosz * dphiy
1469 dm(2, 1) = dm(2, 1) - siny * sinz * dphiy
1470 dm(2, 2) = dm(2, 2) + sinx * cosy * sinz * dphiy
1471 dm(2, 3) = dm(2, 3) + cosx * cosy * sinz * dphiy
1473 dm(3, 1) = dm(3, 1) - cosy * dphiy
1474 dm(3, 2) = dm(3, 2) - sinx * siny * dphiy
1475 dm(3, 3) = dm(3, 3) - cosx * siny * dphiy
1479 dm(1, 2) = dm(1, 2) + (sinx * sinz + cosx * siny * cosz) * dphix
1480 dm(1, 3) = dm(1, 3) + (cosx * sinz - sinx * siny * cosz) * dphix
1482 dm(2, 2) = dm(2, 2) + (cosx * siny * sinz - sinx * cosz) * dphix
1483 dm(2, 3) = dm(2, 3) - (sinx * siny * sinz + cosx * cosz) * dphix
1485 dm(3, 2) = dm(3, 2) + cosx * cosy * dphix
1486 dm(3, 3) = dm(3, 3) - sinx * cosy * dphix
1490 m(1, 1) = cosy * cosz
1491 m(2, 1) = cosy * sinz
1494 m(1, 2) = sinx * siny * cosz - cosx * sinz
1495 m(2, 2) = sinx * siny * sinz + cosx * cosz
1496 m(3, 2) = sinx * cosy
1498 m(1, 3) = cosx * siny * cosz + sinx * sinz
1499 m(2, 3) = cosx * siny * sinz - sinx * cosz
1500 m(3, 3) = cosx * cosy
1508 rotationmatrix(i, j) = dm(i, 1) * m(j, 1) + dm(i, 2) * m(j, 2) &
1509 + dm(i, 3) * m(j, 3)
1532 windDirection, liftIndex)
1557 real(kind=realtype),
dimension(3),
intent(in) :: refdirection
1558 real(kind=realtype) :: alpha, beta
1559 real(kind=realtype),
dimension(3),
intent(out) :: winddirection
1560 integer(kind=intType) :: liftIndex
1564 real(kind=realtype) :: rnorm, x1, y1, z1, xbn, ybn, zbn, xw, yw, zw
1565 real(kind=realtype) :: tmp
1569 rnorm = sqrt(refdirection(1)**2 + refdirection(2)**2 + refdirection(3)**2)
1570 xbn = refdirection(1) / rnorm
1571 ybn = refdirection(2) / rnorm
1572 zbn = refdirection(3) / rnorm
1586 if (liftindex == 2)
then
1600 elseif (liftindex == 3)
then
1614 call terminate(
'getDirVector',
'Invalid Lift Direction')
1618 winddirection(1) = xw
1619 winddirection(2) = yw
1620 winddirection(3) = zw
1639 integer(kind=intType),
intent(in) :: iaxis
1640 real(kind=
realtype),
intent(in) :: angle, x, y, z
1641 real(kind=
realtype),
intent(out) :: xp, yp, zp
1650 xp = 1.*x + 0.*y + 0.*z
1651 yp = 0.*x + cos(angle) * y + sin(angle) * z
1652 zp = 0.*x - sin(angle) * y + cos(angle) * z
1657 xp = cos(angle) * x + 0.*y - sin(angle) * z
1658 yp = 0.*x + 1.*y + 0.*z
1659 zp = sin(angle) * x + 0.*y + cos(angle) * z
1664 xp = cos(angle) * x + sin(angle) * y + 0.*z
1665 yp = -sin(angle) * x + cos(angle) * y + 0.*z
1666 zp = 0.*x + 0.*y + 1.*z
1669 write (*, *)
"vectorRotation called with invalid arguments"
1687 integer(kind=intType) :: i, j, k
1688 integer(kind=intType) :: k1, kk
1689 integer(kind=intType) :: istart, iend, isize, ii
1690 integer(kind=intType) :: jstart, jend, jsize
1691 integer(kind=intType) :: kstart, kend, ksize
1693 real(kind=realtype) :: oneoverv, ubar, vbar, wbar, a2
1694 real(kind=realtype) :: sx, sx1, sy, sy1, sz, sz1
1705 #ifdef TAPENADE_REVERSE
1707 do ii = 0,
il *
jl *
ke - 1
1709 j = mod(ii /
il,
jl) + 1
1710 k = ii / (
il *
jl) + 1
1720 sx =
sk(i, j, k - 1, 1) +
sk(i + 1, j, k - 1, 1) &
1721 +
sk(i, j + 1, k - 1, 1) +
sk(i + 1, j + 1, k - 1, 1) &
1722 +
sk(i, j, k, 1) +
sk(i + 1, j, k, 1) &
1723 +
sk(i, j + 1, k, 1) +
sk(i + 1, j + 1, k, 1)
1724 sy =
sk(i, j, k - 1, 2) +
sk(i + 1, j, k - 1, 2) &
1725 +
sk(i, j + 1, k - 1, 2) +
sk(i + 1, j + 1, k - 1, 2) &
1726 +
sk(i, j, k, 2) +
sk(i + 1, j, k, 2) &
1727 +
sk(i, j + 1, k, 2) +
sk(i + 1, j + 1, k, 2)
1728 sz =
sk(i, j, k - 1, 3) +
sk(i + 1, j, k - 1, 3) &
1729 +
sk(i, j + 1, k - 1, 3) +
sk(i + 1, j + 1, k - 1, 3) &
1730 +
sk(i, j, k, 3) +
sk(i + 1, j, k, 3) &
1731 +
sk(i, j + 1, k, 3) +
sk(i + 1, j + 1, k, 3)
1738 +
w(i, j + 1, k,
ivx) +
w(i + 1, j + 1, k,
ivx))
1740 +
w(i, j + 1, k,
ivy) +
w(i + 1, j + 1, k,
ivy))
1742 +
w(i, j + 1, k,
ivz) +
w(i + 1, j + 1, k,
ivz))
1744 a2 =
fourth * (
aa(i, j, k) +
aa(i + 1, j, k) +
aa(i, j + 1, k) +
aa(i + 1, j + 1, k))
1752 ux(i, j, k - 1) =
ux(i, j, k - 1) + ubar * sx
1753 uy(i, j, k - 1) =
uy(i, j, k - 1) + ubar * sy
1754 uz(i, j, k - 1) =
uz(i, j, k - 1) + ubar * sz
1756 vx(i, j, k - 1) =
vx(i, j, k - 1) + vbar * sx
1757 vy(i, j, k - 1) =
vy(i, j, k - 1) + vbar * sy
1758 vz(i, j, k - 1) =
vz(i, j, k - 1) + vbar * sz
1760 wx(i, j, k - 1) =
wx(i, j, k - 1) + wbar * sx
1761 wy(i, j, k - 1) =
wy(i, j, k - 1) + wbar * sy
1762 wz(i, j, k - 1) =
wz(i, j, k - 1) + wbar * sz
1764 qx(i, j, k - 1) =
qx(i, j, k - 1) - a2 * sx
1765 qy(i, j, k - 1) =
qy(i, j, k - 1) - a2 * sy
1766 qz(i, j, k - 1) =
qz(i, j, k - 1) - a2 * sz
1770 ux(i, j, k) =
ux(i, j, k) - ubar * sx
1771 uy(i, j, k) =
uy(i, j, k) - ubar * sy
1772 uz(i, j, k) =
uz(i, j, k) - ubar * sz
1774 vx(i, j, k) =
vx(i, j, k) - vbar * sx
1775 vy(i, j, k) =
vy(i, j, k) - vbar * sy
1776 vz(i, j, k) =
vz(i, j, k) - vbar * sz
1778 wx(i, j, k) =
wx(i, j, k) - wbar * sx
1779 wy(i, j, k) =
wy(i, j, k) - wbar * sy
1780 wz(i, j, k) =
wz(i, j, k) - wbar * sz
1782 qx(i, j, k) =
qx(i, j, k) + a2 * sx
1783 qy(i, j, k) =
qy(i, j, k) + a2 * sy
1784 qz(i, j, k) =
qz(i, j, k) + a2 * sz
1786 #ifdef TAPENADE_REVERSE
1798 #ifdef TAPENADE_REVERSE
1800 do ii = 0,
il *
je *
kl - 1
1802 j = mod(ii /
il,
je) + 1
1803 k = ii / (
il *
je) + 1
1814 sx =
sj(i, j - 1, k, 1) +
sj(i + 1, j - 1, k, 1) &
1815 +
sj(i, j - 1, k + 1, 1) +
sj(i + 1, j - 1, k + 1, 1) &
1816 +
sj(i, j, k, 1) +
sj(i + 1, j, k, 1) &
1817 +
sj(i, j, k + 1, 1) +
sj(i + 1, j, k + 1, 1)
1818 sy =
sj(i, j - 1, k, 2) +
sj(i + 1, j - 1, k, 2) &
1819 +
sj(i, j - 1, k + 1, 2) +
sj(i + 1, j - 1, k + 1, 2) &
1820 +
sj(i, j, k, 2) +
sj(i + 1, j, k, 2) &
1821 +
sj(i, j, k + 1, 2) +
sj(i + 1, j, k + 1, 2)
1822 sz =
sj(i, j - 1, k, 3) +
sj(i + 1, j - 1, k, 3) &
1823 +
sj(i, j - 1, k + 1, 3) +
sj(i + 1, j - 1, k + 1, 3) &
1824 +
sj(i, j, k, 3) +
sj(i + 1, j, k, 3) &
1825 +
sj(i, j, k + 1, 3) +
sj(i + 1, j, k + 1, 3)
1832 +
w(i, j, k + 1,
ivx) +
w(i + 1, j, k + 1,
ivx))
1834 +
w(i, j, k + 1,
ivy) +
w(i + 1, j, k + 1,
ivy))
1836 +
w(i, j, k + 1,
ivz) +
w(i + 1, j, k + 1,
ivz))
1838 a2 =
fourth * (
aa(i, j, k) +
aa(i + 1, j, k) +
aa(i, j, k + 1) +
aa(i + 1, j, k + 1))
1846 ux(i, j - 1, k) =
ux(i, j - 1, k) + ubar * sx
1847 uy(i, j - 1, k) =
uy(i, j - 1, k) + ubar * sy
1848 uz(i, j - 1, k) =
uz(i, j - 1, k) + ubar * sz
1850 vx(i, j - 1, k) =
vx(i, j - 1, k) + vbar * sx
1851 vy(i, j - 1, k) =
vy(i, j - 1, k) + vbar * sy
1852 vz(i, j - 1, k) =
vz(i, j - 1, k) + vbar * sz
1854 wx(i, j - 1, k) =
wx(i, j - 1, k) + wbar * sx
1855 wy(i, j - 1, k) =
wy(i, j - 1, k) + wbar * sy
1856 wz(i, j - 1, k) =
wz(i, j - 1, k) + wbar * sz
1858 qx(i, j - 1, k) =
qx(i, j - 1, k) - a2 * sx
1859 qy(i, j - 1, k) =
qy(i, j - 1, k) - a2 * sy
1860 qz(i, j - 1, k) =
qz(i, j - 1, k) - a2 * sz
1864 ux(i, j, k) =
ux(i, j, k) - ubar * sx
1865 uy(i, j, k) =
uy(i, j, k) - ubar * sy
1866 uz(i, j, k) =
uz(i, j, k) - ubar * sz
1868 vx(i, j, k) =
vx(i, j, k) - vbar * sx
1869 vy(i, j, k) =
vy(i, j, k) - vbar * sy
1870 vz(i, j, k) =
vz(i, j, k) - vbar * sz
1872 wx(i, j, k) =
wx(i, j, k) - wbar * sx
1873 wy(i, j, k) =
wy(i, j, k) - wbar * sy
1874 wz(i, j, k) =
wz(i, j, k) - wbar * sz
1876 qx(i, j, k) =
qx(i, j, k) + a2 * sx
1877 qy(i, j, k) =
qy(i, j, k) + a2 * sy
1878 qz(i, j, k) =
qz(i, j, k) + a2 * sz
1880 #ifdef TAPENADE_REVERSE
1892 #ifdef TAPENADE_REVERSE
1894 do ii = 0,
ie *
jl *
kl - 1
1896 j = mod(ii /
ie,
jl) + 1
1897 k = ii / (
ie *
jl) + 1
1908 sx =
si(i - 1, j, k, 1) +
si(i - 1, j + 1, k, 1) &
1909 +
si(i - 1, j, k + 1, 1) +
si(i - 1, j + 1, k + 1, 1) &
1910 +
si(i, j, k, 1) +
si(i, j + 1, k, 1) &
1911 +
si(i, j, k + 1, 1) +
si(i, j + 1, k + 1, 1)
1912 sy =
si(i - 1, j, k, 2) +
si(i - 1, j + 1, k, 2) &
1913 +
si(i - 1, j, k + 1, 2) +
si(i - 1, j + 1, k + 1, 2) &
1914 +
si(i, j, k, 2) +
si(i, j + 1, k, 2) &
1915 +
si(i, j, k + 1, 2) +
si(i, j + 1, k + 1, 2)
1916 sz =
si(i - 1, j, k, 3) +
si(i - 1, j + 1, k, 3) &
1917 +
si(i - 1, j, k + 1, 3) +
si(i - 1, j + 1, k + 1, 3) &
1918 +
si(i, j, k, 3) +
si(i, j + 1, k, 3) &
1919 +
si(i, j, k + 1, 3) +
si(i, j + 1, k + 1, 3)
1926 +
w(i, j, k + 1,
ivx) +
w(i, j + 1, k + 1,
ivx))
1928 +
w(i, j, k + 1,
ivy) +
w(i, j + 1, k + 1,
ivy))
1930 +
w(i, j, k + 1,
ivz) +
w(i, j + 1, k + 1,
ivz))
1932 a2 =
fourth * (
aa(i, j, k) +
aa(i, j + 1, k) +
aa(i, j, k + 1) +
aa(i, j + 1, k + 1))
1940 ux(i - 1, j, k) =
ux(i - 1, j, k) + ubar * sx
1941 uy(i - 1, j, k) =
uy(i - 1, j, k) + ubar * sy
1942 uz(i - 1, j, k) =
uz(i - 1, j, k) + ubar * sz
1944 vx(i - 1, j, k) =
vx(i - 1, j, k) + vbar * sx
1945 vy(i - 1, j, k) =
vy(i - 1, j, k) + vbar * sy
1946 vz(i - 1, j, k) =
vz(i - 1, j, k) + vbar * sz
1948 wx(i - 1, j, k) =
wx(i - 1, j, k) + wbar * sx
1949 wy(i - 1, j, k) =
wy(i - 1, j, k) + wbar * sy
1950 wz(i - 1, j, k) =
wz(i - 1, j, k) + wbar * sz
1952 qx(i - 1, j, k) =
qx(i - 1, j, k) - a2 * sx
1953 qy(i - 1, j, k) =
qy(i - 1, j, k) - a2 * sy
1954 qz(i - 1, j, k) =
qz(i - 1, j, k) - a2 * sz
1958 ux(i, j, k) =
ux(i, j, k) - ubar * sx
1959 uy(i, j, k) =
uy(i, j, k) - ubar * sy
1960 uz(i, j, k) =
uz(i, j, k) - ubar * sz
1962 vx(i, j, k) =
vx(i, j, k) - vbar * sx
1963 vy(i, j, k) =
vy(i, j, k) - vbar * sy
1964 vz(i, j, k) =
vz(i, j, k) - vbar * sz
1966 wx(i, j, k) =
wx(i, j, k) - wbar * sx
1967 wy(i, j, k) =
wy(i, j, k) - wbar * sy
1968 wz(i, j, k) =
wz(i, j, k) - wbar * sz
1970 qx(i, j, k) =
qx(i, j, k) + a2 * sx
1971 qy(i, j, k) =
qy(i, j, k) + a2 * sy
1972 qz(i, j, k) =
qz(i, j, k) + a2 * sz
1974 #ifdef TAPENADE_REVERSE
1983 #ifdef TAPENADE_REVERSE
1985 do ii = 0,
il *
jl *
kl - 1
1987 j = mod(ii /
il,
jl) + 1
1988 k = ii / (
il *
jl) + 1
1996 oneoverv =
one / (
vol(i, j, k) +
vol(i, j, k + 1) &
1997 +
vol(i + 1, j, k) +
vol(i + 1, j, k + 1) &
1998 +
vol(i, j + 1, k) +
vol(i, j + 1, k + 1) &
1999 +
vol(i + 1, j + 1, k) +
vol(i + 1, j + 1, k + 1))
2004 ux(i, j, k) =
ux(i, j, k) * oneoverv
2005 uy(i, j, k) =
uy(i, j, k) * oneoverv
2006 uz(i, j, k) =
uz(i, j, k) * oneoverv
2008 vx(i, j, k) =
vx(i, j, k) * oneoverv
2009 vy(i, j, k) =
vy(i, j, k) * oneoverv
2010 vz(i, j, k) =
vz(i, j, k) * oneoverv
2012 wx(i, j, k) =
wx(i, j, k) * oneoverv
2013 wy(i, j, k) =
wy(i, j, k) * oneoverv
2014 wz(i, j, k) =
wz(i, j, k) * oneoverv
2016 qx(i, j, k) =
qx(i, j, k) * oneoverv
2017 qy(i, j, k) =
qy(i, j, k) * oneoverv
2018 qz(i, j, k) =
qz(i, j, k) * oneoverv
2019 #ifdef TAPENADE_REVERSE
2034 #ifndef USE_TAPENADE
2039 use blockpointers,
only:
il,
jl,
kl,
vol,
ux,
uy,
uz,
vx,
vy,
vz, &
2044 integer(kind=intType) :: i, j, k
2045 real(kind=realtype) :: oneoverv
2058 oneoverv =
one / (
vol(i, j, k) +
vol(i, j, k + 1) &
2059 +
vol(i + 1, j, k) +
vol(i + 1, j, k + 1) &
2060 +
vol(i, j + 1, k) +
vol(i, j + 1, k + 1) &
2061 +
vol(i + 1, j + 1, k) +
vol(i + 1, j + 1, k + 1))
2066 ux(i, j, k) =
ux(i, j, k) * oneoverv
2067 uy(i, j, k) =
uy(i, j, k) * oneoverv
2068 uz(i, j, k) =
uz(i, j, k) * oneoverv
2070 vx(i, j, k) =
vx(i, j, k) * oneoverv
2071 vy(i, j, k) =
vy(i, j, k) * oneoverv
2072 vz(i, j, k) =
vz(i, j, k) * oneoverv
2074 wx(i, j, k) =
wx(i, j, k) * oneoverv
2075 wy(i, j, k) =
wy(i, j, k) * oneoverv
2076 wz(i, j, k) =
wz(i, j, k) * oneoverv
2078 qx(i, j, k) =
qx(i, j, k) * oneoverv
2079 qy(i, j, k) =
qy(i, j, k) * oneoverv
2080 qz(i, j, k) =
qz(i, j, k) * oneoverv
2100 real(kind=realtype),
parameter :: twothird =
two *
third
2104 integer(kind=intType),
intent(in) :: i, j, k
2105 real(kind=realtype),
intent(in) :: scale
2106 logical,
intent(in) :: correctForK
2110 integer(kind=intType) :: nn, mm, ii, start
2112 real(kind=realtype) :: pp, t, t2, cv,
eint
2117 if (correctfork) pp = pp - twothird &
2166 else if (t >=
cptrange(nn - 1))
then
2188 cv = cv +
cptempfit(nn)%constants(ii) * t2
2190 if (
cptempfit(nn)%exponents(ii) == -1)
then
2208 +
w(i, j, k,
ivy)**2 &
2209 +
w(i, j, k,
ivz)**2))
real(kind=realtype), dimension(:, :, :), pointer gamma
real(kind=realtype), dimension(:, :, :), pointer qz
real(kind=realtype), dimension(:, :, :), pointer qy
real(kind=realtype), dimension(:, :, :), pointer aa
real(kind=realtype), dimension(:, :, :), pointer uz
real(kind=realtype), dimension(:, :, :), pointer p
real(kind=realtype), dimension(:, :, :, :), pointer w
real(kind=realtype), dimension(:, :, :), pointer uy
real(kind=realtype), dimension(:, :, :), pointer wx
real(kind=realtype), dimension(:, :, :), pointer rlv
real(kind=realtype), dimension(:, :, :, :), pointer si
real(kind=realtype), dimension(:, :, :, :), pointer sj
real(kind=realtype), dimension(:, :, :), pointer qx
real(kind=realtype), dimension(:, :, :), pointer vz
real(kind=realtype), dimension(:, :, :, :), pointer sk
real(kind=realtype), dimension(:, :, :), pointer ux
real(kind=realtype), dimension(:, :, :), pointer wy
real(kind=realtype), dimension(:, :, :), pointer wz
real(kind=realtype), dimension(:, :, :), pointer vol
real(kind=realtype), dimension(:, :, :), pointer vy
real(kind=realtype), dimension(:, :, :), pointer vx
integer(kind=inttype), parameter cptempcurvefits
real(kind=realtype), parameter zero
real(kind=realtype), parameter third
real(kind=realtype), parameter five
real(kind=realtype), parameter one
real(kind=realtype), parameter half
real(kind=realtype), parameter two
integer(kind=inttype), parameter cpconstant
real(kind=realtype), parameter fourth
real(kind=realtype), dimension(:), allocatable cptrange
integer(kind=inttype) cpnparts
real(kind=realtype), dimension(:), allocatable cphint
type(cptempfittype), dimension(:), allocatable cptempfit
real(kind=realtype), dimension(:), allocatable cpeint
subroutine getdirvector(refDirection, alpha, beta, windDirection, liftIndex)
subroutine computepressure(iBeg, iEnd, jBeg, jEnd, kBeg, kEnd, pointerOffset)
subroutine allnodalgradients
subroutine computeetotcellcpfit(i, j, k, scale, correctForK)
subroutine eint(rho, p, k, einternal, correctForK)
subroutine fixallnodalgradientsfromad
subroutine computespeedofsoundsquared
subroutine derivativerotmatrixrigid(rotationMatrix, rotationPoint, t)
subroutine computepressuresimple(includeHalos)
subroutine computelamviscosity(includeHalos)
subroutine adjustinflowangle()
subroutine computeetotblock(iStart, iEnd, jStart, jEnd, kStart, kEnd, correctForK)
subroutine vectorrotation(xp, yp, zp, iaxis, angle, x, y, z)
subroutine computegamma(T, gamma, mm)
subroutine computettot(rho, u, v, w, p, Ttot)
subroutine etot(rho, u, v, w, p, k, etotal, correctForK)
subroutine computeptot(rho, u, v, w, p, ptot)
real(kind=realtype) gammainf
real(kind=realtype) pinfcorr
real(kind=realtype) muref
integer, parameter realtype
real(kind=realtype) function derivativerigidrotangle(degreePolRot, coefPolRot, degreeFourRot, omegaFourRot, cosCoefFourRot, sinCoefFourRot, t)
real(kind=realtype) function rigidrotangle(degreePolRot, coefPolRot, degreeFourRot, omegaFourRot, cosCoefFourRot, sinCoefFourRot, t)
logical function getcorrectfork()
subroutine setpointers(nn, mm, ll)
subroutine terminate(routineName, errorMessage)