17 logical,
intent(in) :: onlyRadii
21 integer(kind=intType) :: sps, nn
29 domains:
do nn = 1, ndom
53 use blockpointers,
only:
ie,
je,
ke,
il,
jl,
kl,
w,
p,
rlv,
rev, &
54 radi,
radj,
radk,
si,
sj,
sk,
sfacei,
sfacej,
sfacek,
dtl,
gamma,
vol, &
69 logical,
intent(in) :: onlyRadii
73 real(kind=realtype),
parameter :: b = 2.0_realtype
77 integer(kind=intType) :: i, j, k, ii
79 real(kind=realtype) :: plim, rlim, clim2
80 real(kind=realtype) :: uux, uuy, uuz, cc2, qsi, qsj, qsk, sx, sy, sz, rmu
81 real(kind=realtype) :: ri, rj, rk, rij, rjk, rki
82 real(kind=realtype) :: vsi, vsj, vsk, rfl, dpi, dpj, dpk
83 real(kind=realtype) :: sface, tmp
85 logical :: radiiNeeded, doScaling
96 if (onlyradii .and. (.not. radiineeded))
return
103 rlim = 0.001_realtype *
rhoinf
123 #ifdef TAPENADE_REVERSE
125 do ii = 0,
ie *
je *
ke - 1
127 j = mod(ii /
ie,
je) + 1
128 k = ii / (
ie *
je) + 1
136 uux =
w(i, j, k,
ivx)
137 uuy =
w(i, j, k,
ivy)
138 uuz =
w(i, j, k,
ivz)
139 cc2 =
gamma(i, j, k) *
p(i, j, k) /
w(i, j, k,
irho)
140 cc2 = max(cc2, clim2)
152 sx =
si(i - 1, j, k, 1) +
si(i, j, k, 1)
153 sy =
si(i - 1, j, k, 2) +
si(i, j, k, 2)
154 sz =
si(i - 1, j, k, 3) +
si(i, j, k, 3)
156 qsi = uux * sx + uuy * sy + uuz * sz - sface
158 ri =
half * (abs(qsi) &
168 sx =
sj(i, j - 1, k, 1) +
sj(i, j, k, 1)
169 sy =
sj(i, j - 1, k, 2) +
sj(i, j, k, 2)
170 sz =
sj(i, j - 1, k, 3) +
sj(i, j, k, 3)
172 qsj = uux * sx + uuy * sy + uuz * sz - sface
174 rj =
half * (abs(qsj) &
184 sx =
sk(i, j, k - 1, 1) +
sk(i, j, k, 1)
185 sy =
sk(i, j, k - 1, 2) +
sk(i, j, k, 2)
186 sz =
sk(i, j, k - 1, 3) +
sk(i, j, k, 3)
188 qsk = uux * sx + uuy * sy + uuz * sz - sface
190 rk =
half * (abs(qsk) &
195 if (.not. onlyradii)
dtl(i, j, k) = ri + rj + rk
213 rij = (ri / rj)**
adis
214 rjk = (rj / rk)**
adis
215 rki = (rk / ri)**
adis
230 #ifdef TAPENADE_REVERSE
239 call terminate(
"timeStep",
"Turkel preconditioner not implemented yet")
243 "choi merkle preconditioner not implemented yet")
248 testradiionly:
if (.not. onlyradii)
then
279 sx =
si(i, j, k, 1) +
si(i - 1, j, k, 1)
280 sy =
si(i, j, k, 2) +
si(i - 1, j, k, 2)
281 sz =
si(i, j, k, 3) +
si(i - 1, j, k, 3)
283 vsi = rmu * (sx * sx + sy * sy + sz * sz)
284 dtl(i, j, k) =
dtl(i, j, k) + vsi
289 sx =
sj(i, j, k, 1) +
sj(i, j - 1, k, 1)
290 sy =
sj(i, j, k, 2) +
sj(i, j - 1, k, 2)
291 sz =
sj(i, j, k, 3) +
sj(i, j - 1, k, 3)
293 vsj = rmu * (sx * sx + sy * sy + sz * sz)
294 dtl(i, j, k) =
dtl(i, j, k) + vsj
299 sx =
sk(i, j, k, 1) +
sk(i, j, k - 1, 1)
300 sy =
sk(i, j, k, 2) +
sk(i, j, k - 1, 2)
301 sz =
sk(i, j, k, 3) +
sk(i, j, k - 1, 3)
303 vsk = rmu * (sx * sx + sy * sy + sz * sz)
304 dtl(i, j, k) =
dtl(i, j, k) + vsk
326 dtl(i, j, k) =
dtl(i, j, k) + tmp *
vol(i, j, k)
340 dpi = abs(
p(i + 1, j, k) -
two *
p(i, j, k) +
p(i - 1, j, k)) &
341 / (
p(i + 1, j, k) +
two *
p(i, j, k) +
p(i - 1, j, k) + plim)
342 dpj = abs(
p(i, j + 1, k) -
two *
p(i, j, k) +
p(i, j - 1, k)) &
343 / (
p(i, j + 1, k) +
two *
p(i, j, k) +
p(i, j - 1, k) + plim)
344 dpk = abs(
p(i, j, k + 1) -
two *
p(i, j, k) +
p(i, j, k - 1)) &
345 / (
p(i, j, k + 1) +
two *
p(i, j, k) +
p(i, j, k - 1) + plim)
346 rfl =
one / (
one + b * (dpi + dpj + dpk))
348 dtl(i, j, k) = rfl /
dtl(i, j, k)
371 integer(kind=intType),
intent(in) :: sps
372 logical,
intent(in) :: useOldCoor
373 real(kind=realtype),
dimension(*),
intent(in) :: t
376 integer(kind=intType) :: nn
380 domains:
do nn = 1, ndom
405 integer(kind=intType),
intent(in) :: nn, sps
406 integer :: i, j, k, mm, ii, ie_l, je_l, ke_l
407 real(kind=
realtype) :: x_vc, y_vc, z_vc
408 real(kind=
realtype) :: x_fc, y_fc, z_fc
410 real(kind=
realtype) :: velxfreestream, velyfreestream, velzfreestream
422 ie_l = flowdoms(nn, 1, sps)%ie
423 je_l = flowdoms(nn, 1, sps)%je
424 ke_l = flowdoms(nn, 1, sps)%ke
430 s(i, j, k, 1) = velxfreestream
431 s(i, j, k, 2) = velyfreestream
432 s(i, j, k, 3) = velzfreestream
441 ie_l = flowdoms(nn, 1, mm)%ie
442 je_l = flowdoms(nn, 1, mm)%je
443 ke_l = flowdoms(nn, 1, mm)%ke
449 x_vc =
eighth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k - 1, 1) + &
450 flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 1) &
451 + flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 1) + &
452 flowdoms(nn, 1, mm)%x(i, j, k - 1, 1) &
453 + flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 1) + &
454 flowdoms(nn, 1, mm)%x(i, j - 1, k, 1) &
455 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 1) + &
456 flowdoms(nn, 1, mm)%x(i, j, k, 1))
458 y_vc =
eighth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k - 1, 2) + &
459 flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 2) &
460 + flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 2) + &
461 flowdoms(nn, 1, mm)%x(i, j, k - 1, 2) &
462 + flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 2) + &
463 flowdoms(nn, 1, mm)%x(i, j - 1, k, 2) &
464 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 2) + &
465 flowdoms(nn, 1, mm)%x(i, j, k, 2))
467 z_vc =
eighth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k - 1, 3) + &
468 flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 3) &
469 + flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 3) + &
470 flowdoms(nn, 1, mm)%x(i, j, k - 1, 3) &
471 + flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 3) + &
472 flowdoms(nn, 1, mm)%x(i, j - 1, k, 3) &
473 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 3) + &
474 flowdoms(nn, 1, mm)%x(i, j, k, 3))
476 s(i, j, k, 1) =
s(i, j, k, 1) +
dscalar(1, sps, mm) * x_vc
477 s(i, j, k, 2) =
s(i, j, k, 2) +
dscalar(1, sps, mm) * y_vc
478 s(i, j, k, 3) =
s(i, j, k, 3) +
dscalar(1, sps, mm) * z_vc
495 ie_l = flowdoms(nn, 1, sps)%ie
496 je_l = flowdoms(nn, 1, sps)%je
497 ke_l = flowdoms(nn, 1, sps)%ke
504 sfacei(i, j, k) = velxfreestream *
si(i, j, k, 1) + velyfreestream *
si(i, j, k, 2) &
505 + velzfreestream *
si(i, j, k, 3)
516 sfacej(i, j, k) = velxfreestream *
sj(i, j, k, 1) + velyfreestream *
sj(i, j, k, 2) &
517 + velzfreestream *
sj(i, j, k, 3)
528 sfacek(i, j, k) = velxfreestream *
sk(i, j, k, 1) + velyfreestream *
sk(i, j, k, 2) &
529 + velzfreestream *
sk(i, j, k, 3)
539 ie_l = flowdoms(nn, 1, mm)%ie
540 je_l = flowdoms(nn, 1, mm)%je
541 ke_l = flowdoms(nn, 1, mm)%ke
548 x_fc =
fourth * (flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 1) + &
549 flowdoms(nn, 1, mm)%x(i, j, k, 1) &
550 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 1) + &
551 flowdoms(nn, 1, mm)%x(i, j, k - 1, 1))
552 y_fc =
fourth * (flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 2) + &
553 flowdoms(nn, 1, mm)%x(i, j, k, 2) &
554 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 2) + &
555 flowdoms(nn, 1, mm)%x(i, j, k - 1, 2))
556 z_fc =
fourth * (flowdoms(nn, 1, mm)%x(i, j - 1, k - 1, 3) + &
557 flowdoms(nn, 1, mm)%x(i, j, k, 3) &
558 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 3) + &
559 flowdoms(nn, 1, mm)%x(i, j, k - 1, 3))
562 +
dscalar(1, sps, mm) * x_fc *
si(i, j, k, 1) &
563 +
dscalar(1, sps, mm) * y_fc *
si(i, j, k, 2) &
564 +
dscalar(1, sps, mm) * z_fc *
si(i, j, k, 3)
575 x_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 1) + &
576 flowdoms(nn, 1, mm)%x(i, j, k, 1) &
577 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 1) + &
578 flowdoms(nn, 1, mm)%x(i, j, k - 1, 1))
579 y_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 2) + &
580 flowdoms(nn, 1, mm)%x(i, j, k, 2) &
581 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 2) + &
582 flowdoms(nn, 1, mm)%x(i, j, k - 1, 2))
583 z_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j, k - 1, 3) + &
584 flowdoms(nn, 1, mm)%x(i, j, k, 3) &
585 + flowdoms(nn, 1, mm)%x(i - 1, j, k, 3) + &
586 flowdoms(nn, 1, mm)%x(i, j, k - 1, 3))
589 +
dscalar(1, sps, mm) * x_fc *
sj(i, j, k, 1) &
590 +
dscalar(1, sps, mm) * y_fc *
sj(i, j, k, 2) &
591 +
dscalar(1, sps, mm) * z_fc *
sj(i, j, k, 3)
602 x_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 1) + &
603 flowdoms(nn, 1, mm)%x(i, j, k, 1) &
604 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 1) + &
605 flowdoms(nn, 1, mm)%x(i - 1, j, k, 1))
606 y_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 2) + &
607 flowdoms(nn, 1, mm)%x(i, j, k, 2) &
608 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 2) + &
609 flowdoms(nn, 1, mm)%x(i - 1, j, k, 2))
610 z_fc =
fourth * (flowdoms(nn, 1, mm)%x(i - 1, j - 1, k, 3) + &
611 flowdoms(nn, 1, mm)%x(i, j, k, 3) &
612 + flowdoms(nn, 1, mm)%x(i, j - 1, k, 3) + &
613 flowdoms(nn, 1, mm)%x(i - 1, j, k, 3))
616 +
dscalar(1, sps, mm) * x_fc *
sk(i, j, k, 1) &
617 +
dscalar(1, sps, mm) * y_fc *
sk(i, j, k, 2) &
618 +
dscalar(1, sps, mm) * z_fc *
sk(i, j, k, 3)
657 integer(kind=intType),
intent(in) :: sps, nn
658 logical,
intent(in) :: useOldCoor
660 real(kind=realtype),
dimension(*),
intent(in) :: t
664 integer(kind=intType) :: mm
665 integer(kind=intType) :: i, j, k, ii, iie, jje, kke
667 real(kind=realtype) :: oneover4dt, oneover8dt
668 real(kind=realtype) :: velxgrid, velygrid, velzgrid, ainf
669 real(kind=realtype) :: velxgrid0, velygrid0, velzgrid0
671 real(kind=realtype),
dimension(3) :: sc, xc, xxc
672 real(kind=realtype),
dimension(3) :: rotcenter, rotrate
674 real(kind=realtype),
dimension(3) :: rotationpoint
675 real(kind=realtype),
dimension(3, 3) :: rotationmatrix, &
678 real(kind=realtype) :: tnew, told
679 real(kind=realtype),
dimension(:, :),
pointer :: sface
681 real(kind=realtype),
dimension(:, :, :),
pointer :: xx, ss
682 real(kind=realtype),
dimension(:, :, :, :),
pointer :: xxold
684 real(kind=realtype) :: intervalmach, alphats, alphaincrement, &
685 betats, betaincrement
686 real(kind=realtype),
dimension(3) :: veldir
687 real(kind=realtype),
dimension(3) :: refdirection
727 velxgrid0 = rotationmatrix(1, 1) * velxgrid0 &
728 + rotationmatrix(1, 2) * velygrid0 &
729 + rotationmatrix(1, 3) * velzgrid0
730 velygrid0 = rotationmatrix(2, 1) * velxgrid0 &
731 + rotationmatrix(2, 2) * velygrid0 &
732 + rotationmatrix(2, 3) * velzgrid0
733 velzgrid0 = rotationmatrix(3, 1) * velxgrid0 &
734 + rotationmatrix(3, 2) * velygrid0 &
735 + rotationmatrix(3, 3) * velzgrid0
746 alphats =
alpha + alphaincrement
748 refdirection(:) = zero
749 refdirection(1) = one
754 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
755 velygrid0 = (ainf *
machgrid) * (-veldir(2))
756 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
765 betats =
beta + betaincrement
767 refdirection(:) = zero
768 refdirection(1) = one
773 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
774 velygrid0 = (ainf *
machgrid) * (-veldir(2))
775 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
787 call terminate(
'gridVelocityFineLevel',
'altitude motion not yet implemented...')
789 call terminate(
'gridVelocityFineLevel',
'Not a recognized Stability Motion')
797 testuseoldcoor:
if (useoldcoor)
then
811 oneover8dt = half * oneover4dt
827 sc(1) = (
x(i - 1, j - 1, k - 1, 1) +
x(i, j - 1, k - 1, 1) &
828 +
x(i - 1, j, k - 1, 1) +
x(i, j, k - 1, 1) &
829 +
x(i - 1, j - 1, k, 1) +
x(i, j - 1, k, 1) &
830 +
x(i - 1, j, k, 1) +
x(i, j, k, 1)) &
832 sc(2) = (
x(i - 1, j - 1, k - 1, 2) +
x(i, j - 1, k - 1, 2) &
833 +
x(i - 1, j, k - 1, 2) +
x(i, j, k - 1, 2) &
834 +
x(i - 1, j - 1, k, 2) +
x(i, j - 1, k, 2) &
835 +
x(i - 1, j, k, 2) +
x(i, j, k, 2)) &
837 sc(3) = (
x(i - 1, j - 1, k - 1, 3) +
x(i, j - 1, k - 1, 3) &
838 +
x(i - 1, j, k - 1, 3) +
x(i, j, k - 1, 3) &
839 +
x(i - 1, j - 1, k, 3) +
x(i, j - 1, k, 3) &
840 +
x(i - 1, j, k, 3) +
x(i, j, k, 3)) &
847 sc(1) = sc(1) + (
xold(ii, i - 1, j - 1, k - 1, 1) &
848 +
xold(ii, i, j - 1, k - 1, 1) &
849 +
xold(ii, i - 1, j, k - 1, 1) &
850 +
xold(ii, i, j, k - 1, 1) &
851 +
xold(ii, i - 1, j - 1, k, 1) &
852 +
xold(ii, i, j - 1, k, 1) &
853 +
xold(ii, i - 1, j, k, 1) &
854 +
xold(ii, i, j, k, 1)) &
856 sc(2) = sc(2) + (
xold(ii, i - 1, j - 1, k - 1, 2) &
857 +
xold(ii, i, j - 1, k - 1, 2) &
858 +
xold(ii, i - 1, j, k - 1, 2) &
859 +
xold(ii, i, j, k - 1, 2) &
860 +
xold(ii, i - 1, j - 1, k, 2) &
861 +
xold(ii, i, j - 1, k, 2) &
862 +
xold(ii, i - 1, j, k, 2) &
863 +
xold(ii, i, j, k, 2)) &
865 sc(3) = sc(3) + (
xold(ii, i - 1, j - 1, k - 1, 3) &
866 +
xold(ii, i, j - 1, k - 1, 3) &
867 +
xold(ii, i - 1, j, k - 1, 3) &
868 +
xold(ii, i, j, k - 1, 3) &
869 +
xold(ii, i - 1, j - 1, k, 3) &
870 +
xold(ii, i, j - 1, k, 3) &
871 +
xold(ii, i - 1, j, k, 3) &
872 +
xold(ii, i, j, k, 3)) &
879 s(i, j, k, 1) = sc(1) * oneover8dt
880 s(i, j, k, 2) = sc(2) * oneover8dt
881 s(i, j, k, 3) = sc(3) * oneover8dt
890 loopdir:
do mm = 1, 3
896 iie =
ie; jje =
je; kke =
ke
899 iie =
je; jje =
ie; kke =
ke
902 iie =
ke; jje =
ie; kke =
je
918 xx =>
x(i, :, :, :); xxold =>
xold(:, i, :, :, :)
919 ss =>
si(i, :, :, :); sface =>
sfacei(i, :, :)
922 xx =>
x(:, i, :, :); xxold =>
xold(:, :, i, :, :)
923 ss =>
sj(:, i, :, :); sface =>
sfacej(:, i, :)
926 xx =>
x(:, :, i, :); xxold =>
xold(:, :, :, i, :)
927 ss =>
sk(:, :, i, :); sface =>
sfacek(:, :, i)
944 sc(1) =
coeftime(0) * (xx(j + 1, k + 1, 1) + xx(j, k + 1, 1) &
945 + xx(j + 1, k, 1) + xx(j, k, 1))
946 sc(2) =
coeftime(0) * (xx(j + 1, k + 1, 2) + xx(j, k + 1, 2) &
947 + xx(j + 1, k, 2) + xx(j, k, 2))
948 sc(3) =
coeftime(0) * (xx(j + 1, k + 1, 3) + xx(j, k + 1, 3) &
949 + xx(j + 1, k, 3) + xx(j, k, 3))
957 * (xxold(ii, j + 1, k + 1, 1) &
958 + xxold(ii, j, k + 1, 1) &
959 + xxold(ii, j + 1, k, 1) &
960 + xxold(ii, j, k, 1))
962 * (xxold(ii, j + 1, k + 1, 2) &
963 + xxold(ii, j, k + 1, 2) &
964 + xxold(ii, j + 1, k, 2) &
965 + xxold(ii, j, k, 2))
967 * (xxold(ii, j + 1, k + 1, 3) &
968 + xxold(ii, j, k + 1, 3) &
969 + xxold(ii, j + 1, k, 3) &
970 + xxold(ii, j, k, 3))
977 sface(j, k) = sc(1) * ss(j, k, 1) + sc(2) * ss(j, k, 2) &
978 + sc(3) * ss(j, k, 3)
979 sface(j, k) = sface(j, k) * oneover4dt
1001 velxgrid = velxgrid0
1002 velygrid = velygrid0
1003 velzgrid = velzgrid0
1017 xc(1) = eighth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k - 1, 1) &
1018 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 1) &
1019 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 1) &
1020 + flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 1) &
1021 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 1) &
1022 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 1) &
1023 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 1) &
1025 xc(2) = eighth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k - 1, 2) &
1026 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 2) &
1027 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 2) &
1028 + flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 2) &
1029 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 2) &
1030 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 2) &
1031 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 2) &
1033 xc(3) = eighth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k - 1, 3) &
1034 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 3) &
1035 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 3) &
1036 + flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 3) &
1037 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 3) &
1038 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 3) &
1039 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 3) &
1045 xxc(1) = xc(1) - rotcenter(1)
1046 xxc(2) = xc(2) - rotcenter(2)
1047 xxc(3) = xc(3) - rotcenter(3)
1052 sc(1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1053 sc(2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1054 sc(3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1059 xxc(1) = xc(1) - rotationpoint(1)
1060 xxc(2) = xc(2) - rotationpoint(2)
1061 xxc(3) = xc(3) - rotationpoint(3)
1067 s(i, j, k, 1) = sc(1) + velxgrid &
1068 + derivrotationmatrix(1, 1) * xxc(1) &
1069 + derivrotationmatrix(1, 2) * xxc(2) &
1070 + derivrotationmatrix(1, 3) * xxc(3)
1071 s(i, j, k, 2) = sc(2) + velygrid &
1072 + derivrotationmatrix(2, 1) * xxc(1) &
1073 + derivrotationmatrix(2, 2) * xxc(2) &
1074 + derivrotationmatrix(2, 3) * xxc(3)
1075 s(i, j, k, 3) = sc(3) + velzgrid &
1076 + derivrotationmatrix(3, 1) * xxc(1) &
1077 + derivrotationmatrix(3, 2) * xxc(2) &
1078 + derivrotationmatrix(3, 3) * xxc(3)
1099 xc(1) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 1) + &
1100 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 1) &
1101 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 1) + &
1103 xc(2) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 2) + &
1104 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 2) &
1105 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 2) + &
1107 xc(3) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k - 1, 3) + &
1108 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 3) &
1109 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 3) + &
1113 velxgrid, velygrid, velzgrid, derivrotationmatrix, sc)
1118 sfacei(i, j, k) = sc(1) *
si(i, j, k, 1) + sc(2) *
si(i, j, k, 2) &
1119 + sc(3) *
si(i, j, k, 3)
1132 xc(1) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 1) + &
1133 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 1) &
1134 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 1) + &
1136 xc(2) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 2) + &
1137 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 2) &
1138 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 2) + &
1140 xc(3) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 3) + &
1141 flowdoms(nn,
groundlevel, sps)%x(i, j, k - 1, 3) &
1142 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k - 1, 3) + &
1146 velxgrid, velygrid, velzgrid, derivrotationmatrix, sc)
1151 sfacej(i, j, k) = sc(1) *
sj(i, j, k, 1) + sc(2) *
sj(i, j, k, 2) &
1152 + sc(3) *
sj(i, j, k, 3)
1165 xc(1) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 1) + &
1166 flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 1) &
1167 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 1) + &
1169 xc(2) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 2) + &
1170 flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 2) &
1171 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 2) + &
1173 xc(3) = fourth * (flowdoms(nn,
groundlevel, sps)%x(i, j - 1, k, 3) + &
1174 flowdoms(nn,
groundlevel, sps)%x(i - 1, j, k, 3) &
1175 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, k, 3) + &
1179 velxgrid, velygrid, velzgrid, derivrotationmatrix, sc)
1184 sfacek(i, j, k) = sc(1) *
sk(i, j, k, 1) + sc(2) *
sk(i, j, k, 2) &
1185 + sc(3) *
sk(i, j, k, 3)
1190 end if testuseoldcoor
1195 subroutine cellfacevelocities(xc, rotCenter, rotRate, velxGrid, velyGrid, velzGrid, derivRotationMatrix, sc)
1205 real(kind=realtype),
dimension(3),
intent(in) :: xc, rotcenter, rotrate
1206 real(kind=realtype),
intent(in) :: velxgrid, velygrid, velzgrid
1207 real(kind=realtype),
dimension(3, 3),
intent(in) :: derivrotationmatrix
1208 real(kind=realtype),
dimension(3),
intent(out) :: sc
1212 real(kind=realtype),
dimension(3) :: rotationpoint, xxc
1217 xxc(1) = xc(1) - rotcenter(1)
1218 xxc(2) = xc(2) - rotcenter(2)
1219 xxc(3) = xc(3) - rotcenter(3)
1224 sc(1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1225 sc(2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1226 sc(3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1231 xxc(1) = xc(1) - rotationpoint(1)
1232 xxc(2) = xc(2) - rotationpoint(2)
1233 xxc(3) = xc(3) - rotationpoint(3)
1239 sc(1) = sc(1) + velxgrid &
1240 + derivrotationmatrix(1, 1) * xxc(1) &
1241 + derivrotationmatrix(1, 2) * xxc(2) &
1242 + derivrotationmatrix(1, 3) * xxc(3)
1243 sc(2) = sc(2) + velygrid &
1244 + derivrotationmatrix(2, 1) * xxc(1) &
1245 + derivrotationmatrix(2, 2) * xxc(2) &
1246 + derivrotationmatrix(2, 3) * xxc(3)
1247 sc(3) = sc(3) + velzgrid &
1248 + derivrotationmatrix(3, 1) * xxc(1) &
1249 + derivrotationmatrix(3, 2) * xxc(2) &
1250 + derivrotationmatrix(3, 3) * xxc(3)
1254 #ifndef USE_TAPENADE
1268 integer(kind=intType),
intent(in) :: sps
1269 logical,
intent(in) :: useOldCoor
1270 real(kind=realtype),
dimension(*),
intent(in) :: t
1273 integer(kind=intType) :: nn
1277 domains:
do nn = 1, ndom
1317 integer(kind=intType),
intent(in) :: sps, nn
1318 logical,
intent(in) :: useOldCoor
1320 real(kind=realtype),
dimension(*),
intent(in) :: t
1324 integer(kind=intType) :: mm, i, j, level, ii
1326 real(kind=realtype) :: oneover4dt
1327 real(kind=realtype) :: velxgrid, velygrid, velzgrid, ainf
1328 real(kind=realtype) :: velxgrid0, velygrid0, velzgrid0
1330 real(kind=realtype),
dimension(3) :: xc, xxc
1331 real(kind=realtype),
dimension(3) :: rotcenter, rotrate
1333 real(kind=realtype),
dimension(3) :: rotationpoint
1334 real(kind=realtype),
dimension(3, 3) :: rotationmatrix, &
1337 real(kind=realtype) :: tnew, told
1339 real(kind=realtype),
dimension(:, :, :),
pointer :: uslip
1340 real(kind=realtype),
dimension(:, :, :),
pointer :: xface
1341 real(kind=realtype),
dimension(:, :, :, :),
pointer :: xfaceold
1343 real(kind=realtype) :: intervalmach, alphats, alphaincrement, &
1344 betats, betaincrement
1345 real(kind=realtype),
dimension(3) :: veldir
1346 real(kind=realtype),
dimension(3) :: refdirection
1350 testuseoldcoor:
if (useoldcoor)
then
1352 #ifndef USE_TAPENADE
1372 uslip =>
bcdata(mm)%uSlip
1380 xface =>
x(1, :, :, :); xfaceold =>
xold(:, 1, :, :, :)
1383 xface =>
x(
il, :, :, :); xfaceold =>
xold(:,
il, :, :, :)
1386 xface =>
x(:, 1, :, :); xfaceold =>
xold(:, :, 1, :, :)
1389 xface =>
x(:,
jl, :, :); xfaceold =>
xold(:, :,
jl, :, :)
1392 xface =>
x(:, :, 1, :); xfaceold =>
xold(:, :, :, 1, :)
1395 xface =>
x(:, :,
kl, :); xfaceold =>
xold(:, :, :,
kl, :)
1413 rotcenter =
cgnsdoms(j)%bocoInfo(i)%rotCenter
1429 xc(1) = xface(i + 1, j + 1, 1) + xface(i + 1, j, 1) &
1430 + xface(i, j + 1, 1) + xface(i, j, 1)
1431 xc(2) = xface(i + 1, j + 1, 2) + xface(i + 1, j, 2) &
1432 + xface(i, j + 1, 2) + xface(i, j, 2)
1433 xc(3) = xface(i + 1, j + 1, 3) + xface(i + 1, j, 3) &
1434 + xface(i, j + 1, 3) + xface(i, j, 3)
1442 uslip(i, j, 1) =
coeftime(0) * xc(1)
1443 uslip(i, j, 2) =
coeftime(0) * xc(2)
1444 uslip(i, j, 3) =
coeftime(0) * xc(3)
1451 uslip(i, j, 1) = uslip(i, j, 1) +
coeftime(level) &
1452 * (xfaceold(level, i + 1, j + 1, 1) &
1453 + xfaceold(level, i + 1, j, 1) &
1454 + xfaceold(level, i, j + 1, 1) &
1455 + xfaceold(level, i, j, 1))
1457 uslip(i, j, 2) = uslip(i, j, 2) +
coeftime(level) &
1458 * (xfaceold(level, i + 1, j + 1, 2) &
1459 + xfaceold(level, i + 1, j, 2) &
1460 + xfaceold(level, i, j + 1, 2) &
1461 + xfaceold(level, i, j, 2))
1463 uslip(i, j, 3) = uslip(i, j, 3) +
coeftime(level) &
1464 * (xfaceold(level, i + 1, j + 1, 3) &
1465 + xfaceold(level, i + 1, j, 3) &
1466 + xfaceold(level, i, j + 1, 3) &
1467 + xfaceold(level, i, j, 3))
1473 uslip(i, j, 1) = uslip(i, j, 1) * oneover4dt
1474 uslip(i, j, 2) = uslip(i, j, 2) * oneover4dt
1475 uslip(i, j, 3) = uslip(i, j, 3) * oneover4dt
1484 xc(1) =
fourth * xc(1) - rotcenter(1)
1485 xc(2) =
fourth * xc(2) - rotcenter(2)
1486 xc(3) =
fourth * xc(3) - rotcenter(3)
1491 uslip(i, j, 1) = uslip(i, j, 1) &
1492 + rotrate(2) * xc(3) - rotrate(3) * xc(2)
1493 uslip(i, j, 2) = uslip(i, j, 2) &
1494 + rotrate(3) * xc(1) - rotrate(1) * xc(3)
1495 uslip(i, j, 3) = uslip(i, j, 3) &
1496 + rotrate(1) * xc(2) - rotrate(2) * xc(1)
1532 #ifndef USE_TAPENADE
1552 velxgrid0 = rotationmatrix(1, 1) * velxgrid0 &
1553 + rotationmatrix(1, 2) * velygrid0 &
1554 + rotationmatrix(1, 3) * velzgrid0
1555 velygrid0 = rotationmatrix(2, 1) * velxgrid0 &
1556 + rotationmatrix(2, 2) * velygrid0 &
1557 + rotationmatrix(2, 3) * velzgrid0
1558 velzgrid0 = rotationmatrix(3, 1) * velxgrid0 &
1559 + rotationmatrix(3, 2) * velygrid0 &
1560 + rotationmatrix(3, 3) * velzgrid0
1569 alphats =
alpha + alphaincrement
1571 refdirection(:) =
zero
1572 refdirection(1) =
one
1577 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
1578 velygrid0 = (ainf *
machgrid) * (-veldir(2))
1579 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
1588 betats =
beta + betaincrement
1590 refdirection(:) =
zero
1591 refdirection(1) =
one
1596 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
1597 velygrid0 = (ainf *
machgrid) * (-veldir(2))
1598 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
1610 call terminate(
'gridVelocityFineLevel',
'altitude motion not yet implemented...')
1612 call terminate(
'gridVelocityFineLevel',
'Not a recognized Stability Motion')
1630 velxgrid = velxgrid0
1631 velygrid = velygrid0
1632 velzgrid = velzgrid0
1650 + flowdoms(nn,
groundlevel, sps)%x(1, i, j - 1, 1) &
1651 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j, 1) &
1652 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j - 1, 1))
1654 + flowdoms(nn,
groundlevel, sps)%x(1, i, j - 1, 2) &
1655 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j, 2) &
1656 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j - 1, 2))
1658 + flowdoms(nn,
groundlevel, sps)%x(1, i, j - 1, 3) &
1659 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j, 3) &
1660 + flowdoms(nn,
groundlevel, sps)%x(1, i - 1, j - 1, 3))
1665 xxc(1) = xc(1) - rotcenter(1)
1666 xxc(2) = xc(2) - rotcenter(2)
1667 xxc(3) = xc(3) - rotcenter(3)
1672 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1673 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1674 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1679 xxc(1) = xc(1) - rotationpoint(1)
1680 xxc(2) = xc(2) - rotationpoint(2)
1681 xxc(3) = xc(3) - rotationpoint(3)
1687 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
1688 + derivrotationmatrix(1, 1) * xxc(1) &
1689 + derivrotationmatrix(1, 2) * xxc(2) &
1690 + derivrotationmatrix(1, 3) * xxc(3)
1691 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
1692 + derivrotationmatrix(2, 1) * xxc(1) &
1693 + derivrotationmatrix(2, 2) * xxc(2) &
1694 + derivrotationmatrix(2, 3) * xxc(3)
1695 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
1696 + derivrotationmatrix(3, 1) * xxc(1) &
1697 + derivrotationmatrix(3, 2) * xxc(2) &
1698 + derivrotationmatrix(3, 3) * xxc(3)
1728 xxc(1) = xc(1) - rotcenter(1)
1729 xxc(2) = xc(2) - rotcenter(2)
1730 xxc(3) = xc(3) - rotcenter(3)
1735 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1736 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1737 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1742 xxc(1) = xc(1) - rotationpoint(1)
1743 xxc(2) = xc(2) - rotationpoint(2)
1744 xxc(3) = xc(3) - rotationpoint(3)
1750 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
1751 + derivrotationmatrix(1, 1) * xxc(1) &
1752 + derivrotationmatrix(1, 2) * xxc(2) &
1753 + derivrotationmatrix(1, 3) * xxc(3)
1754 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
1755 + derivrotationmatrix(2, 1) * xxc(1) &
1756 + derivrotationmatrix(2, 2) * xxc(2) &
1757 + derivrotationmatrix(2, 3) * xxc(3)
1758 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
1759 + derivrotationmatrix(3, 1) * xxc(1) &
1760 + derivrotationmatrix(3, 2) * xxc(2) &
1761 + derivrotationmatrix(3, 3) * xxc(3)
1776 + flowdoms(nn,
groundlevel, sps)%x(i, 1, j - 1, 1) &
1777 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j, 1) &
1778 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j - 1, 1))
1780 + flowdoms(nn,
groundlevel, sps)%x(i, 1, j - 1, 2) &
1781 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j, 2) &
1782 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j - 1, 2))
1784 + flowdoms(nn,
groundlevel, sps)%x(i, 1, j - 1, 3) &
1785 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j, 3) &
1786 + flowdoms(nn,
groundlevel, sps)%x(i - 1, 1, j - 1, 3))
1791 xxc(1) = xc(1) - rotcenter(1)
1792 xxc(2) = xc(2) - rotcenter(2)
1793 xxc(3) = xc(3) - rotcenter(3)
1798 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1799 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1800 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1805 xxc(1) = xc(1) - rotationpoint(1)
1806 xxc(2) = xc(2) - rotationpoint(2)
1807 xxc(3) = xc(3) - rotationpoint(3)
1813 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
1814 + derivrotationmatrix(1, 1) * xxc(1) &
1815 + derivrotationmatrix(1, 2) * xxc(2) &
1816 + derivrotationmatrix(1, 3) * xxc(3)
1817 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
1818 + derivrotationmatrix(2, 1) * xxc(1) &
1819 + derivrotationmatrix(2, 2) * xxc(2) &
1820 + derivrotationmatrix(2, 3) * xxc(3)
1821 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
1822 + derivrotationmatrix(3, 1) * xxc(1) &
1823 + derivrotationmatrix(3, 2) * xxc(2) &
1824 + derivrotationmatrix(3, 3) * xxc(3)
1854 xxc(1) = xc(1) - rotcenter(1)
1855 xxc(2) = xc(2) - rotcenter(2)
1856 xxc(3) = xc(3) - rotcenter(3)
1861 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1862 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1863 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1868 xxc(1) = xc(1) - rotationpoint(1)
1869 xxc(2) = xc(2) - rotationpoint(2)
1870 xxc(3) = xc(3) - rotationpoint(3)
1876 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
1877 + derivrotationmatrix(1, 1) * xxc(1) &
1878 + derivrotationmatrix(1, 2) * xxc(2) &
1879 + derivrotationmatrix(1, 3) * xxc(3)
1880 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
1881 + derivrotationmatrix(2, 1) * xxc(1) &
1882 + derivrotationmatrix(2, 2) * xxc(2) &
1883 + derivrotationmatrix(2, 3) * xxc(3)
1884 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
1885 + derivrotationmatrix(3, 1) * xxc(1) &
1886 + derivrotationmatrix(3, 2) * xxc(2) &
1887 + derivrotationmatrix(3, 3) * xxc(3)
1902 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, 1, 1) &
1903 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, 1, 1) &
1904 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, 1, 1))
1906 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, 1, 2) &
1907 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, 1, 2) &
1908 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, 1, 2))
1910 + flowdoms(nn,
groundlevel, sps)%x(i, j - 1, 1, 3) &
1911 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j, 1, 3) &
1912 + flowdoms(nn,
groundlevel, sps)%x(i - 1, j - 1, 1, 3))
1917 xxc(1) = xc(1) - rotcenter(1)
1918 xxc(2) = xc(2) - rotcenter(2)
1919 xxc(3) = xc(3) - rotcenter(3)
1924 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1925 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1926 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1931 xxc(1) = xc(1) - rotationpoint(1)
1932 xxc(2) = xc(2) - rotationpoint(2)
1933 xxc(3) = xc(3) - rotationpoint(3)
1939 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
1940 + derivrotationmatrix(1, 1) * xxc(1) &
1941 + derivrotationmatrix(1, 2) * xxc(2) &
1942 + derivrotationmatrix(1, 3) * xxc(3)
1943 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
1944 + derivrotationmatrix(2, 1) * xxc(1) &
1945 + derivrotationmatrix(2, 2) * xxc(2) &
1946 + derivrotationmatrix(2, 3) * xxc(3)
1947 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
1948 + derivrotationmatrix(3, 1) * xxc(1) &
1949 + derivrotationmatrix(3, 2) * xxc(2) &
1950 + derivrotationmatrix(3, 3) * xxc(3)
1980 xxc(1) = xc(1) - rotcenter(1)
1981 xxc(2) = xc(2) - rotcenter(2)
1982 xxc(3) = xc(3) - rotcenter(3)
1987 bcdata(mm)%uSlip(i, j, 1) = rotrate(2) * xxc(3) - rotrate(3) * xxc(2)
1988 bcdata(mm)%uSlip(i, j, 2) = rotrate(3) * xxc(1) - rotrate(1) * xxc(3)
1989 bcdata(mm)%uSlip(i, j, 3) = rotrate(1) * xxc(2) - rotrate(2) * xxc(1)
1994 xxc(1) = xc(1) - rotationpoint(1)
1995 xxc(2) = xc(2) - rotationpoint(2)
1996 xxc(3) = xc(3) - rotationpoint(3)
2002 bcdata(mm)%uSlip(i, j, 1) =
bcdata(mm)%uSlip(i, j, 1) + velxgrid &
2003 + derivrotationmatrix(1, 1) * xxc(1) &
2004 + derivrotationmatrix(1, 2) * xxc(2) &
2005 + derivrotationmatrix(1, 3) * xxc(3)
2006 bcdata(mm)%uSlip(i, j, 2) =
bcdata(mm)%uSlip(i, j, 2) + velygrid &
2007 + derivrotationmatrix(2, 1) * xxc(1) &
2008 + derivrotationmatrix(2, 2) * xxc(2) &
2009 + derivrotationmatrix(2, 3) * xxc(3)
2010 bcdata(mm)%uSlip(i, j, 3) =
bcdata(mm)%uSlip(i, j, 3) + velzgrid &
2011 + derivrotationmatrix(3, 1) * xxc(1) &
2012 + derivrotationmatrix(3, 2) * xxc(2) &
2013 + derivrotationmatrix(3, 3) * xxc(3)
2021 end if testuseoldcoor
2025 #ifndef USE_TAPENADE
2039 integer(kind=intType),
intent(in) :: sps
2042 integer(kind=intType) :: nn, level, nLevels
2044 nlevels = ubound(flowdoms, 2)
2046 domains:
do nn = 1, ndom
2074 integer(kind=intType),
intent(in) :: sps
2078 integer(kind=intType) :: mm
2079 integer(kind=intType) :: i, j
2081 real(kind=realtype) :: weight, mult
2083 real(kind=realtype),
dimension(:, :),
pointer :: sface
2084 real(kind=realtype),
dimension(:, :, :),
pointer :: ss
2103 bocoloop:
do mm = 1,
nbocos
2107 testassoc:
if (
associated(
bcdata(mm)%rFace))
then
2124 weight = sqrt(
si(1, i, j, 1)**2 +
si(1, i, j, 2)**2 &
2125 +
si(1, i, j, 3)**2)
2126 if (weight >
zero) weight = mult / weight
2145 weight = sqrt(
si(
il, i, j, 1)**2 +
si(
il, i, j, 2)**2 &
2146 +
si(
il, i, j, 3)**2)
2147 if (weight >
zero) weight = mult / weight
2166 weight = sqrt(
sj(i, 1, j, 1)**2 +
sj(i, 1, j, 2)**2 &
2167 +
sj(i, 1, j, 3)**2)
2168 if (weight >
zero) weight = mult / weight
2187 weight = sqrt(
sj(i,
jl, j, 1)**2 +
sj(i,
jl, j, 2)**2 &
2188 +
sj(i,
jl, j, 3)**2)
2189 if (weight >
zero) weight = mult / weight
2208 weight = sqrt(
sk(i, j, 1, 1)**2 +
sk(i, j, 1, 2)**2 &
2209 +
sk(i, j, 1, 3)**2)
2210 if (weight >
zero) weight = mult / weight
2229 weight = sqrt(
sk(i, j,
kl, 1)**2 +
sk(i, j,
kl, 2)**2 &
2230 +
sk(i, j,
kl, 3)**2)
2231 if (weight >
zero) weight = mult / weight
2251 if (
associated(
bcdata(mm)%rFace)) &
2265 #ifndef USE_TAPENADE
2285 integer(kind=intType) :: i, j, k, l, sps, nn, mm, ll
2287 real(kind=realtype) :: told, tnew
2288 real(kind=realtype) :: vvx, vvy, vvz, vxi, veta, vzeta
2289 real(kind=realtype) :: t, anglex, angley, anglez
2290 real(kind=realtype) :: phi, cosphi, sinphi
2291 real(kind=realtype) :: xix, xiy, xiz, etax, etay, etaz
2292 real(kind=realtype) :: zetax, zetay, zetaz
2294 real(kind=realtype),
dimension(3) :: rotationpoint
2295 real(kind=realtype),
dimension(3, 3) :: rotationmatrix
2313 domains:
do nn = 1, ndom
2331 wold(mm, i, j, k, l) =
wold(ll, i, j, k, l)
2337 end do loopoldlevels
2351 wold(1, i, j, k, l) =
w(i, j, k, l)
2362 wold(1, i, j, k,
ivx) =
wold(1, i, j, k,
ivx) *
wold(1, i, j, k,
irho)
2363 wold(1, i, j, k,
ivy) =
wold(1, i, j, k,
ivy) *
wold(1, i, j, k,
irho)
2364 wold(1, i, j, k,
ivz) =
wold(1, i, j, k,
ivz) *
wold(1, i, j, k,
irho)
2376 vvx =
w(i, j, k,
ivx)
2377 vvy =
w(i, j, k,
ivy)
2378 vvz =
w(i, j, k,
ivz)
2380 w(i, j, k,
ivx) = rotationmatrix(1, 1) * vvx &
2381 + rotationmatrix(1, 2) * vvy &
2382 + rotationmatrix(1, 3) * vvz
2383 w(i, j, k,
ivy) = rotationmatrix(2, 1) * vvx &
2384 + rotationmatrix(2, 2) * vvy &
2385 + rotationmatrix(2, 3) * vvz
2386 w(i, j, k,
ivz) = rotationmatrix(3, 1) * vvx &
2387 + rotationmatrix(3, 2) * vvy &
2388 + rotationmatrix(3, 3) * vvz
2407 t =
one / max(
eps, sqrt(anglex**2 + angley**2 + anglez**2))
2416 phi = xix * anglex + xiy * angley + xiz * anglez
2428 vvx =
w(i, j, k,
ivx)
2429 vvy =
w(i, j, k,
ivy)
2430 vvz =
w(i, j, k,
ivz)
2437 vxi = vvx * xix + vvy * xiy + vvz * xiz
2439 etax = vvx - vxi * xix
2440 etay = vvy - vxi * xiy
2441 etaz = vvz - vxi * xiz
2443 t =
one / max(
eps, sqrt(etax**2 + etay**2 + etaz**2))
2450 veta = vvx * etax + vvy * etay + vvz * etaz
2456 zetax = xiy * etaz - xiz * etay
2457 zetay = xiz * etax - xix * etaz
2458 zetaz = xix * etay - xiy * etax
2463 vzeta = veta * sinphi
2464 veta = veta * cosphi
2468 w(i, j, k,
ivx) = vxi * xix + veta * etax + vzeta * zetax
2469 w(i, j, k,
ivy) = vxi * xiy + veta * etay + vzeta * zetay
2470 w(i, j, k,
ivz) = vxi * xiz + veta * etaz + vzeta * zetaz
2496 integer(kind=intType) :: sps, nn
2504 domains:
do nn = 1, ndom
2535 integer(kind=intType) :: mm, i, j
2537 real(kind=realtype) :: re, vvx, vvy, vvz, veln, veltmag
2539 real(kind=realtype),
dimension(:, :, :),
pointer :: ww, norm, uslip
2540 real(kind=realtype),
dimension(:, :),
pointer :: dd2wall, rrlv
2541 real(kind=realtype),
dimension(:, :),
pointer :: utau
2557 ww =>
w(2, 1:, 1:, :);
2558 dd2wall =>
d2wall(2, :, :); rrlv =>
rlv(2, 1:, 1:)
2563 ww =>
w(
il, 1:, 1:, :)
2569 ww =>
w(1:, 2, 1:, :)
2570 dd2wall =>
d2wall(:, 2, :); rrlv =>
rlv(1:, 2, 1:)
2575 ww =>
w(1:,
jl, 1:, :)
2581 ww =>
w(1:, 1:, 2, :)
2582 dd2wall =>
d2wall(:, :, 2); rrlv =>
rlv(1:, 1:, 2)
2587 ww =>
w(1:, 1:,
kl, :)
2596 uslip =>
bcdata(mm)%uSlip
2613 vvx = ww(i, j,
ivx) - uslip(i, j, 1)
2614 vvy = ww(i, j,
ivy) - uslip(i, j, 2)
2615 vvz = ww(i, j,
ivz) - uslip(i, j, 3)
2619 veln = vvx * norm(i, j, 1) + vvy * norm(i, j, 2) + vvz * norm(i, j, 3)
2623 veltmag = max(
eps, sqrt(vvx * vvx + vvy * vvy + vvz * vvz - veln * veln))
2630 re = ww(i, j,
irho) * veltmag * dd2wall(i - 1, j - 1) / rrlv(i, j)
2653 integer(kind=intType),
intent(in) :: sps
2654 logical,
intent(in) :: useOldCoor
2655 real(kind=realtype),
dimension(*),
intent(in) :: t
2658 integer(kind=intType) :: nn
2662 domains:
do nn = 1, ndom
2704 integer(kind=intType),
intent(in) :: sps
2705 logical,
intent(in) :: useOldCoor
2707 real(kind=realtype),
dimension(*),
intent(in) :: t
2711 integer(kind=intType) :: nn, mm
2712 integer(kind=intType) :: i, j, k, ii, iie, jje, kke
2714 real(kind=realtype) :: oneover4dt, oneover8dt
2715 real(kind=realtype) :: velxgrid, velygrid, velzgrid, ainf
2716 real(kind=realtype) :: velxgrid0, velygrid0, velzgrid0
2718 real(kind=realtype),
dimension(3) :: sc, xc, xxc
2719 real(kind=realtype),
dimension(3) :: rotcenter, rotrate
2721 real(kind=realtype),
dimension(3) :: rotationpoint
2722 real(kind=realtype),
dimension(3, 3) :: rotationmatrix, &
2725 real(kind=realtype) :: tnew, told
2726 real(kind=realtype),
dimension(:, :),
pointer :: sface
2727 real(kind=realtype),
dimension(:, :, :),
pointer :: svelo
2729 real(kind=realtype),
dimension(:, :, :),
pointer :: xx, ss
2730 real(kind=realtype),
dimension(:, :, :, :),
pointer :: xxold
2732 real(kind=realtype) :: intervalmach, alphats, alphaincrement, &
2733 betats, betaincrement
2734 real(kind=realtype),
dimension(3) :: veldir
2735 real(kind=realtype),
dimension(3) :: refdirection
2771 velxgrid0 = rotationmatrix(1, 1) * velxgrid0 &
2772 + rotationmatrix(1, 2) * velygrid0 &
2773 + rotationmatrix(1, 3) * velzgrid0
2774 velygrid0 = rotationmatrix(2, 1) * velxgrid0 &
2775 + rotationmatrix(2, 2) * velygrid0 &
2776 + rotationmatrix(2, 3) * velzgrid0
2777 velzgrid0 = rotationmatrix(3, 1) * velxgrid0 &
2778 + rotationmatrix(3, 2) * velygrid0 &
2779 + rotationmatrix(3, 3) * velzgrid0
2787 alphats =
alpha + alphaincrement
2789 refdirection(:) = zero
2790 refdirection(1) = one
2795 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
2796 velygrid0 = (ainf *
machgrid) * (-veldir(2))
2797 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
2806 betats =
beta + betaincrement
2808 refdirection(:) = zero
2809 refdirection(1) = one
2814 velxgrid0 = (ainf *
machgrid) * (-veldir(1))
2815 velygrid0 = (ainf *
machgrid) * (-veldir(2))
2816 velzgrid0 = (ainf *
machgrid) * (-veldir(3))
2828 call terminate(
'gridVelocityFineLevel',
'altitude motion not yet implemented...')
2830 call terminate(
'gridVelocityFineLevel',
'Not a recognized Stability Motion')
2848 oneover8dt = half * oneover4dt
2869 sc(1) = (
x(i - 1, j - 1, k - 1, 1) +
x(i, j - 1, k - 1, 1) &
2870 +
x(i - 1, j, k - 1, 1) +
x(i, j, k - 1, 1) &
2871 +
x(i - 1, j - 1, k, 1) +
x(i, j - 1, k, 1) &
2872 +
x(i - 1, j, k, 1) +
x(i, j, k, 1))
2873 sc(2) = (
x(i - 1, j - 1, k - 1, 2) +
x(i, j - 1, k - 1, 2) &
2874 +
x(i - 1, j, k - 1, 2) +
x(i, j, k - 1, 2) &
2875 +
x(i - 1, j - 1, k, 2) +
x(i, j - 1, k, 2) &
2876 +
x(i - 1, j, k, 2) +
x(i, j, k, 2))
2877 sc(3) = (
x(i - 1, j - 1, k - 1, 3) +
x(i, j - 1, k - 1, 3) &
2878 +
x(i - 1, j, k - 1, 3) +
x(i, j, k - 1, 3) &
2879 +
x(i - 1, j - 1, k, 3) +
x(i, j - 1, k, 3) &
2880 +
x(i - 1, j, k, 3) +
x(i, j, k, 3))
2886 sc(1) = sc(1) + (
xold(ii, i - 1, j - 1, k - 1, 1) &
2887 +
xold(ii, i, j - 1, k - 1, 1) &
2888 +
xold(ii, i - 1, j, k - 1, 1) &
2889 +
xold(ii, i, j, k - 1, 1) &
2890 +
xold(ii, i - 1, j - 1, k, 1) &
2891 +
xold(ii, i, j - 1, k, 1) &
2892 +
xold(ii, i - 1, j, k, 1) &
2893 +
xold(ii, i, j, k, 1)) &
2895 sc(2) = sc(2) + (
xold(ii, i - 1, j - 1, k - 1, 2) &
2896 +
xold(ii, i, j - 1, k - 1, 2) &
2897 +
xold(ii, i - 1, j, k - 1, 2) &
2898 +
xold(ii, i, j, k - 1, 2) &
2899 +
xold(ii, i - 1, j - 1, k, 2) &
2900 +
xold(ii, i, j - 1, k, 2) &
2901 +
xold(ii, i - 1, j, k, 2) &
2902 +
xold(ii, i, j, k, 2)) &
2904 sc(3) = sc(3) + (
xold(ii, i - 1, j - 1, k - 1, 3) &
2905 +
xold(ii, i, j - 1, k - 1, 3) &
2906 +
xold(ii, i - 1, j, k - 1, 3) &
2907 +
xold(ii, i, j, k - 1, 3) &
2908 +
xold(ii, i - 1, j - 1, k, 3) &
2909 +
xold(ii, i, j - 1, k, 3) &
2910 +
xold(ii, i - 1, j, k, 3) &
2911 +
xold(ii, i, j, k, 3)) &
2917 s(i, j, k, 1) = sc(1) * oneover8dt
2918 s(i, j, k, 2) = sc(2) * oneover8dt
2919 s(i, j, k, 3) = sc(3) * oneover8dt
2929 loopdir:
do mm = 1, 3
2935 iie =
ie; jje =
je; kke =
ke
2938 iie =
je; jje =
ie; kke =
ke
2941 iie =
ke; jje =
ie; kke =
je
2957 xx =>
x(i, :, :, :); xxold =>
xold(:, i, :, :, :)
2961 xx =>
x(:, i, :, :); xxold =>
xold(:, :, i, :, :)
2965 xx =>
x(:, :, i, :); xxold =>
xold(:, :, :, i, :)
2983 sc(1) = (xx(j + 1, k + 1, 1) + xx(j, k + 1, 1) &
2984 + xx(j + 1, k, 1) + xx(j, k, 1))
2985 sc(2) = (xx(j + 1, k + 1, 2) + xx(j, k + 1, 2) &
2986 + xx(j + 1, k, 2) + xx(j, k, 2))
2987 sc(3) = (xx(j + 1, k + 1, 3) + xx(j, k + 1, 3) &
2988 + xx(j + 1, k, 3) + xx(j, k, 3))
2991 sc(1) = sc(1) + (xxold(ii, j + 1, k + 1, 1) &
2992 + xxold(ii, j, k + 1, 1) &
2993 + xxold(ii, j + 1, k, 1) &
2994 + xxold(ii, j, k, 1)) &
2996 sc(2) = sc(2) + (xxold(ii, j + 1, k + 1, 2) &
2997 + xxold(ii, j, k + 1, 2) &
2998 + xxold(ii, j + 1, k, 2) &
2999 + xxold(ii, j, k, 2)) &
3001 sc(3) = sc(3) + (xxold(ii, j + 1, k + 1, 3) &
3002 + xxold(ii, j, k + 1, 3) &
3003 + xxold(ii, j + 1, k, 3) &
3004 + xxold(ii, j, k, 3)) &
3011 svelo(j, k, 1) = sc(1) * oneover4dt
3012 svelo(j, k, 2) = sc(2) * oneover4dt
3013 svelo(j, k, 3) = sc(3) * oneover4dt
3048 integer(kind=intType),
intent(in) :: sps
3049 logical,
intent(in) :: useOldCoor
3050 real(kind=realtype),
dimension(*),
intent(in) :: t
3053 integer(kind=intType) :: nn
3057 domains:
do nn = 1, ndom
3084 integer(kind=intType),
intent(in) :: sps
3085 logical,
intent(in) :: useOldCoor
3086 real(kind=realtype),
dimension(*),
intent(in) :: t
3090 integer(kind=intType) :: nn, mm
3091 integer(kind=intType) :: i, j, k, ii, iie, jje, kke
3093 real(kind=realtype) :: oneover4dt, oneover8dt
3094 real(kind=realtype),
dimension(3) :: sc, xc, xxc
3095 real(kind=realtype),
dimension(:, :),
pointer :: sface
3096 real(kind=realtype),
dimension(:, :, :),
pointer :: svelo
3097 real(kind=realtype),
dimension(:, :, :),
pointer :: xx, ss
3098 real(kind=realtype),
dimension(:, :, :, :),
pointer :: xxold
3106 loopdir:
do mm = 1, 3
3112 iie =
ie; jje =
je; kke =
ke
3115 iie =
je; jje =
ie; kke =
ke
3118 iie =
ke; jje =
ie; kke =
je
3134 ss =>
si(i, :, :, :); sface =>
sfacei(i, :, :)
3138 ss =>
sj(:, i, :, :); sface =>
sfacej(:, i, :)
3142 ss =>
sk(:, :, i, :); sface =>
sfacek(:, :, i)
3159 sface(j, k) = svelo(j, k, 1) * ss(j, k, 1) &
3160 + svelo(j, k, 2) * ss(j, k, 2) &
3161 + svelo(j, k, 3) * ss(j, k, 3)
3178 use blockpointers,
only:
si,
sj,
sk,
fw,
rlv,
d2wall,
w,
bcdata,
viscsubface, &
3186 real(kind=realtype),
intent(in) :: rfilv
3190 integer(kind=intType) :: i, j, nn
3192 real(kind=realtype) :: fact
3193 real(kind=realtype) :: tauxx, tauyy, tauzz
3194 real(kind=realtype) :: tauxy, tauxz, tauyz
3195 real(kind=realtype) :: rbar, ubar, vbar, wbar, vvx, vvy, vvz
3196 real(kind=realtype) :: fmx, fmy, fmz, frhoe
3197 real(kind=realtype) :: veln, velnx, velny, velnz, tx, ty, tz
3198 real(kind=realtype) :: veltx, velty, veltz, veltmag
3199 real(kind=realtype) :: txnx, txny, txnz, tynx, tyny, tynz
3200 real(kind=realtype) :: tznx, tzny, tznz
3201 real(kind=realtype) :: tautn, tauwall, utau, re
3203 real(kind=realtype),
dimension(:, :, :),
pointer :: ww1, ww2
3204 real(kind=realtype),
dimension(:, :, :),
pointer :: ss, rres
3205 real(kind=realtype),
dimension(:, :, :),
pointer :: norm
3206 real(kind=realtype),
dimension(:, :),
pointer :: rrlv2, dd2wall2
3224 ss =>
si(1, :, :, :); rres =>
fw(2, 1:, 1:, :)
3225 ww2 =>
w(2, 1:, 1:, :); ww1 =>
w(1, 1:, 1:, :)
3226 dd2wall2 =>
d2wall(2, :, :); rrlv2 =>
rlv(2, 1:, 1:)
3233 ss =>
si(
il, :, :, :); rres =>
fw(
il, 1:, 1:, :)
3234 ww2 =>
w(
il, 1:, 1:, :); ww1 =>
w(
ie, 1:, 1:, :)
3242 ss =>
sj(:, 1, :, :); rres =>
fw(1:, 2, 1:, :)
3243 ww2 =>
w(1:, 2, 1:, :); ww1 =>
w(1:, 1, 1:, :)
3244 dd2wall2 =>
d2wall(:, 2, :); rrlv2 =>
rlv(1:, 2, 1:)
3251 ss =>
sj(:,
jl, :, :); rres =>
fw(1:,
jl, 1:, :)
3252 ww2 =>
w(1:,
jl, 1:, :); ww1 =>
w(1:,
je, 1:, :)
3260 ss =>
sk(:, :, 1, :); rres =>
fw(1:, 1:, 2, :)
3261 ww2 =>
w(1:, 1:, 2, :); ww1 =>
w(1:, 1:, 1, :)
3262 dd2wall2 =>
d2wall(:, :, 2); rrlv2 =>
rlv(1:, 1:, 2)
3269 ss =>
sk(:, :,
kl, :); rres =>
fw(1:, 1:,
kl, :)
3270 ww2 =>
w(1:, 1:,
kl, :); ww1 =>
w(1:, 1:,
ke, :)
3303 ubar =
half * (ww2(i, j,
ivx) + ww1(i, j,
ivx))
3304 vbar =
half * (ww2(i, j,
ivy) + ww1(i, j,
ivy))
3305 wbar =
half * (ww2(i, j,
ivz) + ww1(i, j,
ivz))
3310 vvx = ww2(i, j,
ivx) - ubar
3311 vvy = ww2(i, j,
ivy) - vbar
3312 vvz = ww2(i, j,
ivz) - wbar
3316 veln = vvx * norm(i, j, 1) + vvy * norm(i, j, 2) + vvz * norm(i, j, 3)
3317 velnx = veln * norm(i, j, 1)
3318 velny = veln * norm(i, j, 2)
3319 velnz = veln * norm(i, j, 3)
3328 veltmag = max(
eps, sqrt(veltx**2 + velty**2 + veltz**2))
3330 tx = veltx / veltmag
3331 ty = velty / veltmag
3332 tz = veltz / veltmag
3341 txnx = -tx * norm(i, j, 1)
3342 txny = -tx * norm(i, j, 2)
3343 txnz = -tx * norm(i, j, 3)
3345 tynx = -ty * norm(i, j, 1)
3346 tyny = -ty * norm(i, j, 2)
3347 tynz = -ty * norm(i, j, 3)
3349 tznx = -tz * norm(i, j, 1)
3350 tzny = -tz * norm(i, j, 2)
3351 tznz = -tz * norm(i, j, 3)
3357 tautn = tauxx * txnx + tauyy * tyny + tauzz * tznz &
3358 + tauxy * (txny + tynx) &
3359 + tauxz * (txnz + tznx) &
3360 + tauyz * (tynz + tzny)
3367 re = ww2(i, j,
irho) * veltmag * dd2wall2(i - 1, j - 1) / rrlv2(i, j)
3373 tauwall = rbar * utau * utau
3380 tautn = rfilv * tauwall - tautn
3382 tauxx =
two * tautn * txnx
3383 tauyy =
two * tautn * tyny
3384 tauzz =
two * tautn * tznz
3386 tauxy = tautn * (txny + tynx)
3387 tauxz = tautn * (txnz + tznx)
3388 tauyz = tautn * (tynz + tzny)
3392 fmx = tauxx * ss(i, j, 1) + tauxy * ss(i, j, 2) &
3393 + tauxz * ss(i, j, 3)
3394 fmy = tauxy * ss(i, j, 1) + tauyy * ss(i, j, 2) &
3395 + tauyz * ss(i, j, 3)
3396 fmz = tauxz * ss(i, j, 1) + tauyz * ss(i, j, 2) &
3397 + tauzz * ss(i, j, 3)
3398 frhoe = (ubar * tauxx + vbar * tauxy + wbar * tauxz) * ss(i, j, 1) &
3399 + (ubar * tauxy + vbar * tauyy + wbar * tauyz) * ss(i, j, 2) &
3400 + (ubar * tauxz + vbar * tauyz + wbar * tauzz) * ss(i, j, 3)
3406 rres(i, j,
imx) = rres(i, j,
imx) - fact * fmx
3407 rres(i, j,
imy) = rres(i, j,
imy) - fact * fmy
3408 rres(i, j,
imz) = rres(i, j,
imz) - fact * fmz
3409 rres(i, j,
irhoe) = rres(i, j,
irhoe) - fact * frhoe
3436 #ifndef USE_TAPENADE
3451 integer(kind=intType),
intent(in) :: sps
3455 integer(kind=intType) :: i, j, iiMax, jjMax
3456 integer(kind=intType) :: if1, if2, jf1, jf2
3457 integer(kind=intType) :: nLevels, level, levm1, nn, mm
3459 integer(kind=intType),
dimension(:, :),
pointer :: iFine, jFine
3461 real(kind=realtype),
dimension(:, :, :),
pointer :: uslip
3462 real(kind=realtype),
dimension(:, :, :),
pointer :: uslipfine
3466 nlevels = ubound(flowdoms, 2)
3479 domains:
do nn = 1, ndom
3492 uslip =>
bcdata(mm)%uSlip
3493 uslipfine => flowdoms(nn, levm1, sps)%BCData(mm)%uSlip
3501 iimax =
jl; jjmax =
kl
3505 iimax =
il; jjmax =
kl
3509 iimax =
il; jjmax =
jl
3525 else if (j > jjmax)
then
3526 jf1 = jfine(jjmax, 2) + 1; jf2 = jf1
3528 jf1 = jfine(j, 1); jf2 = jfine(j, 2)
3540 else if (i > iimax)
then
3541 if1 = ifine(iimax, 2) + 1; if2 = if1
3543 if1 = ifine(i, 1); if2 = ifine(i, 2)
3549 uslip(i, j, 1) =
fourth * (uslipfine(if1, jf1, 1) &
3550 + uslipfine(if2, jf1, 1) &
3551 + uslipfine(if1, jf2, 1) &
3552 + uslipfine(if2, jf2, 1))
3554 uslip(i, j, 2) =
fourth * (uslipfine(if1, jf1, 2) &
3555 + uslipfine(if2, jf1, 2) &
3556 + uslipfine(if1, jf2, 2) &
3557 + uslipfine(if2, jf2, 2))
3559 uslip(i, j, 3) =
fourth * (uslipfine(if1, jf1, 3) &
3560 + uslipfine(if2, jf1, 3) &
3561 + uslipfine(if1, jf2, 3) &
3562 + uslipfine(if2, jf2, 3))
3588 integer(kind=intType),
intent(in) :: sps
3592 integer(kind=intType) :: nLevels, level, levm1, nn, mm
3593 integer(kind=intType) :: i, j, k, iie, jje, kke
3594 integer(kind=intType) :: ii, ii1, jj, jj1, kk, kk1
3596 integer(kind=intType),
dimension(:, :),
pointer :: iFine, jFine
3597 integer(kind=intType),
dimension(:, :),
pointer :: kFine
3599 real(kind=realtype) :: jjweight, kkweight, weight
3601 real(kind=realtype),
dimension(:),
pointer :: jweight, kweight
3603 real(kind=realtype),
dimension(:, :),
pointer :: sfine, sface
3604 real(kind=realtype),
dimension(:, :, :, :),
pointer :: sf
3609 nlevels = ubound(flowdoms, 2)
3614 domains:
do nn = 1, ndom
3636 sf => flowdoms(nn, levm1, sps)%s
3646 else if (k ==
ke)
then
3647 kk = flowdoms(nn, levm1, sps)%ke; kk1 = kk
3655 else if (j ==
je)
then
3656 jj = flowdoms(nn, levm1, sps)%je; jj1 = jj
3664 else if (i ==
ie)
then
3665 ii = flowdoms(nn, levm1, sps)%ie; ii1 = ii
3673 s(i, j, k, 1) = (sf(ii1, jj1, kk1, 1) + sf(ii, jj1, kk1, 1) &
3674 + sf(ii1, jj, kk1, 1) + sf(ii, jj, kk1, 1) &
3675 + sf(ii1, jj1, kk, 1) + sf(ii, jj1, kk, 1) &
3676 + sf(ii1, jj, kk, 1) + sf(ii, jj, kk, 1)) &
3678 s(i, j, k, 2) = (sf(ii1, jj1, kk1, 2) + sf(ii, jj1, kk1, 2) &
3679 + sf(ii1, jj, kk1, 2) + sf(ii, jj, kk1, 2) &
3680 + sf(ii1, jj1, kk, 2) + sf(ii, jj1, kk, 2) &
3681 + sf(ii1, jj, kk, 2) + sf(ii, jj, kk, 2)) &
3683 s(i, j, k, 3) = (sf(ii1, jj1, kk1, 3) + sf(ii, jj1, kk1, 3) &
3684 + sf(ii1, jj, kk1, 3) + sf(ii, jj, kk1, 3) &
3685 + sf(ii1, jj1, kk, 3) + sf(ii, jj1, kk, 3) &
3686 + sf(ii1, jj, kk, 3) + sf(ii, jj, kk, 3)) &
3696 loopcoarsedir:
do mm = 1, 3
3703 iie =
ie; jje =
je; kke =
ke
3708 iie =
je; jje =
ie; kke =
ke
3713 iie =
ke; jje =
ie; kke =
je
3732 else if (i < iie)
then
3735 ii = ifine(iie - 1, 2) + 1
3744 sfine => flowdoms(nn, levm1, sps)%sFaceI(ii, :, :)
3747 sfine => flowdoms(nn, levm1, sps)%sFaceJ(:, ii, :)
3750 sfine => flowdoms(nn, levm1, sps)%sFaceK(:, :, ii)
3762 kkweight = kweight(2)
3763 else if (k == kke)
then
3764 kk = kfine(kke - 1, 2) + 1; kk1 = kk
3765 kkweight = kweight(kke - 1)
3767 kk = kfine(k, 1); kk1 = kfine(k, 2)
3768 kweight = kweight(k)
3774 jjweight = jweight(2)
3775 else if (j == jje)
then
3776 jj = jfine(jje - 1, 2) + 1; jj1 = jj
3777 jweight = jweight(jje - 1)
3779 jj = jfine(j, 1); jj1 = jfine(j, 2)
3780 jjweight = jweight(j)
3787 weight = kkweight * jjweight
3788 sface(j, k) = weight * (sfine(jj1, kk1) &
3796 end do loopcoarsedir
3823 integer(kind=intType),
intent(in) :: level, sps
3827 integer :: size, procID, ierr, index
3828 integer,
dimension(mpi_status_size) :: mpiStatus
3830 integer(kind=intType) :: i, j, ii, jj
3831 integer(kind=intType) :: d1, i1, j1, k1, d2, i2, j2, k2
3833 real(kind=realtype) :: alp
3834 real(kind=realtype),
dimension(3) :: vv
3866 if (
flowdoms(d1, level, sps)%addGridVelocities)
then
3881 call mpi_isend(
sendbuffer(ii),
size, adflow_real, procid, &
3903 call mpi_irecv(
recvbuffer(ii),
size, adflow_real, procid, &
3932 if (
flowdoms(d2, level, sps)%addGridVelocities)
then
3933 if (
flowdoms(d1, level, sps)%addGridVelocities)
then
3934 flowdoms(d2, level, sps)%s(i2, j2, k2, 1) = &
3935 flowdoms(d1, level, sps)%s(i1, j1, k1, 1)
3936 flowdoms(d2, level, sps)%s(i2, j2, k2, 2) = &
3937 flowdoms(d1, level, sps)%s(i1, j1, k1, 2)
3938 flowdoms(d2, level, sps)%s(i2, j2, k2, 3) = &
3939 flowdoms(d1, level, sps)%s(i1, j1, k1, 3)
3965 call mpi_waitany(
size,
recvrequests, index, mpistatus, ierr)
3983 if (
flowdoms(d2, level, sps)%addGridVelocities)
then
3992 end do completerecvs
4006 call mpi_waitany(
size,
sendrequests, index, mpistatus, ierr)
4025 integer(kind=intType),
intent(in) :: level, sps, nPeriodic
4030 integer(kind=intType) :: nn, mm, ii, i, j, k
4031 real(kind=realtype) :: vx, vy, vz
4033 real(kind=realtype),
dimension(3, 3) :: rotmatrix
4037 do nn = 1, nperiodic
4041 rotmatrix = periodicdata(nn)%rotMatrix
4045 do ii = 1, periodicdata(nn)%nHalos
4049 mm = periodicdata(nn)%block(ii)
4050 i = periodicdata(nn)%indices(ii, 1)
4051 j = periodicdata(nn)%indices(ii, 2)
4052 k = periodicdata(nn)%indices(ii, 3)
4056 if (
flowdoms(mm, level, sps)%addGridVelocities)
then
4060 vx =
flowdoms(mm, level, sps)%s(i, j, k, 1)
4061 vy =
flowdoms(mm, level, sps)%s(i, j, k, 2)
4062 vz =
flowdoms(mm, level, sps)%s(i, j, k, 3)
4066 flowdoms(mm, level, sps)%s(i, j, k, 1) = rotmatrix(1, 1) * vx &
4067 + rotmatrix(1, 2) * vy &
4068 + rotmatrix(1, 3) * vz
4069 flowdoms(mm, level, sps)%s(i, j, k, 2) = rotmatrix(2, 1) * vx &
4070 + rotmatrix(2, 2) * vy &
4071 + rotmatrix(2, 3) * vz
4072 flowdoms(mm, level, sps)%s(i, j, k, 3) = rotmatrix(3, 1) * vx &
4073 + rotmatrix(3, 2) * vy &
4074 + rotmatrix(3, 3) * vz
type(blocktype), dimension(:, :, :), allocatable, target flowdoms
real(kind=realtype), dimension(:, :, :), pointer sfacek
real(kind=realtype), dimension(:, :, :), pointer gamma
logical addgridvelocities
real(kind=realtype), dimension(:, :, :), pointer radk
real(kind=realtype), dimension(:, :, :, :), pointer svelokale
integer(kind=inttype) nviscbocos
integer(kind=inttype), dimension(:, :), pointer mgifine
real(kind=realtype), dimension(:, :, :, :, :), pointer xold
real(kind=realtype), dimension(:, :, :), pointer p
real(kind=realtype), dimension(:, :, :), pointer radj
real(kind=realtype), dimension(:, :, :, :), pointer w
real(kind=realtype), dimension(:, :, :), pointer sfacei
type(viscsubfacetype), dimension(:), pointer viscsubface
integer(kind=inttype), dimension(:), pointer cgnssubface
real(kind=realtype), dimension(:, :, :), pointer d2wall
integer(kind=inttype), dimension(:, :), pointer mgjfine
real(kind=realtype), dimension(:, :, :, :), pointer svelojale
integer(kind=inttype) nbkglobal
real(kind=realtype), dimension(:, :, :), pointer rlv
integer(kind=inttype), dimension(:), pointer bcfaceid
real(kind=realtype), dimension(:, :, :, :), pointer sveloiale
real(kind=realtype), dimension(:, :, :, :), pointer si
integer(kind=inttype) nbocos
real(kind=realtype), dimension(:, :, :, :), pointer sj
integer(kind=inttype), dimension(:, :), pointer mgkfine
integer(kind=inttype) sectionid
real(kind=realtype), dimension(:, :, :, :), pointer s
real(kind=realtype), dimension(:, :, :), pointer rev
real(kind=realtype), dimension(:, :, :, :), pointer sk
real(kind=realtype), dimension(:), pointer mgkweight
real(kind=realtype), dimension(:, :, :), pointer vol
real(kind=realtype), dimension(:), pointer mgiweight
real(kind=realtype), dimension(:, :, :), pointer dtl
real(kind=realtype), dimension(:, :, :), pointer sfacej
real(kind=realtype), dimension(:, :, :, :), pointer fw
real(kind=realtype), dimension(:, :, :), pointer radi
real(kind=realtype), dimension(:, :, :, :), pointer x
real(kind=realtype), dimension(:), pointer mgjweight
real(kind=realtype), dimension(:, :, :, :, :), pointer wold
type(cgnsblockinfotype), dimension(:), allocatable cgnsdoms
real(kind=realtype), dimension(:), allocatable recvbuffer
integer, dimension(:), allocatable recvrequests
real(kind=realtype), dimension(:), allocatable sendbuffer
type(internalcommtype), dimension(:), allocatable internalcell_1st
integer, dimension(:), allocatable sendrequests
type(commtype), dimension(:), allocatable commpatterncell_1st
integer adflow_comm_world
real(kind=realtype), parameter zero
integer(kind=inttype), parameter imax
integer(kind=inttype), parameter kmin
real(kind=realtype), parameter pi
integer(kind=inttype), parameter jmax
real(kind=realtype), parameter eps
real(kind=realtype), parameter eighth
integer(kind=inttype), parameter turkel
integer(kind=inttype), parameter choimerkle
integer(kind=inttype), parameter timespectral
integer(kind=inttype), parameter noprecond
real(kind=realtype), parameter one
real(kind=realtype), parameter half
integer(kind=inttype), parameter imin
real(kind=realtype), parameter two
real(kind=realtype), parameter fourth
integer(kind=inttype), parameter kmax
integer(kind=inttype), parameter jmin
subroutine getdirvector(refDirection, alpha, beta, windDirection, liftIndex)
subroutine derivativerotmatrixrigid(rotationMatrix, rotationPoint, t)
real(kind=realtype) gammainf
real(kind=realtype) pinfcorr
real(kind=realtype) rhoinf
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) timeunsteady
real(kind=realtype) timeunsteadyrestart
integer, parameter realtype
type(sectiontype), dimension(:), allocatable sections
subroutine cellfacevelocities(xc, rotCenter, rotRate, velxGrid, velyGrid, velzGrid, derivRotationMatrix, sc)
subroutine correctperiodicgridvel(level, sps, nPeriodic, periodicData)
subroutine gridvelocitiescoarselevels(sps)
subroutine gridvelocitiesfinelevel_ts_block(nn, sps)
subroutine slipvelocitiesfinelevel(useOldCoor, t, sps)
subroutine slipvelocitiescoarselevels(sps)
subroutine gridvelocitiesfinelevelpart2_block(useOldCoor, t, sps)
subroutine normalvelocities_block(sps)
subroutine normalvelocitiesalllevels(sps)
subroutine slipvelocitiesfinelevel_block(useOldCoor, t, sps, nn)
subroutine gridvelocitiesfinelevel_block(useOldCoor, t, sps, nn)
subroutine gridvelocitiesfinelevelpart2(useOldCoor, t, sps)
subroutine timestep_block(onlyRadii)
subroutine gridvelocitiesfinelevelpart1(useOldCoor, t, sps)
subroutine gridvelocitiesfinelevel(useOldCoor, t, sps)
subroutine exchangecellgridvelocities(level, sps)
subroutine timestep(onlyRadii)
subroutine gridvelocitiesfinelevelpart1_block(useOldCoor, t, sps)
subroutine computeutau_block
real(kind=realtype) function curveupre(Re)
real(kind=realtype) function tsmach(degreePolMach, coefPolMach, degreeFourMach, omegaFourMach, cosCoefFourMach, sinCoefFourMach, t)
subroutine setcoeftimeintegrator
real(kind=realtype) function tsalpha(degreePolAlpha, coefPolAlpha, degreeFourAlpha, omegaFourAlpha, cosCoefFourAlpha, sinCoefFourAlpha, t)
real(kind=realtype) function tsbeta(degreePolBeta, coefPolBeta, degreeFourBeta, omegaFourBeta, cosCoefFourBeta, sinCoefFourBeta, t)
subroutine rotmatrixrigidbody(tNew, tOld, rotationMatrix, rotationPoint)
subroutine getdirangle(freeStreamAxis, liftAxis, liftIndex, alpha, beta)
subroutine setpointers(nn, mm, ll)
subroutine terminate(routineName, errorMessage)