20 real(kind=realtype),
parameter :: thresvolume = 1.e-2_realtype
21 real(kind=realtype),
parameter :: halocellratio = 1e-10_realtype
25 integer(kind=intType) :: i, j, k, n, m, l, ii
26 integer(kind=intType) :: mm
27 real(kind=realtype) :: fact, mult
28 real(kind=realtype) :: xp, yp, zp, vp1, vp2, vp3, vp4, vp5, vp6
29 real(kind=realtype) :: xxp, yyp, zzp
30 real(kind=realtype),
dimension(3) :: v1, v2
51 xp =
eighth * (
x(i, j, k, 1) +
x(i, m, k, 1) &
52 +
x(i, m, n, 1) +
x(i, j, n, 1) &
53 +
x(l, j, k, 1) +
x(l, m, k, 1) &
54 +
x(l, m, n, 1) +
x(l, j, n, 1))
55 yp =
eighth * (
x(i, j, k, 2) +
x(i, m, k, 2) &
56 +
x(i, m, n, 2) +
x(i, j, n, 2) &
57 +
x(l, j, k, 2) +
x(l, m, k, 2) &
58 +
x(l, m, n, 2) +
x(l, j, n, 2))
59 zp =
eighth * (
x(i, j, k, 3) +
x(i, m, k, 3) &
60 +
x(i, m, n, 3) +
x(i, j, n, 3) &
61 +
x(l, j, k, 3) +
x(l, m, k, 3) &
62 +
x(l, m, n, 3) +
x(l, j, n, 3))
68 call volpym(
x(i, j, k, 1),
x(i, j, k, 2),
x(i, j, k, 3), &
69 x(i, j, n, 1),
x(i, j, n, 2),
x(i, j, n, 3), &
70 x(i, m, n, 1),
x(i, m, n, 2),
x(i, m, n, 3), &
71 x(i, m, k, 1),
x(i, m, k, 2),
x(i, m, k, 3), vp1)
73 call volpym(
x(l, j, k, 1),
x(l, j, k, 2),
x(l, j, k, 3), &
74 x(l, m, k, 1),
x(l, m, k, 2),
x(l, m, k, 3), &
75 x(l, m, n, 1),
x(l, m, n, 2),
x(l, m, n, 3), &
76 x(l, j, n, 1),
x(l, j, n, 2),
x(l, j, n, 3), vp2)
78 call volpym(
x(i, j, k, 1),
x(i, j, k, 2),
x(i, j, k, 3), &
79 x(l, j, k, 1),
x(l, j, k, 2),
x(l, j, k, 3), &
80 x(l, j, n, 1),
x(l, j, n, 2),
x(l, j, n, 3), &
81 x(i, j, n, 1),
x(i, j, n, 2),
x(i, j, n, 3), vp3)
83 call volpym(
x(i, m, k, 1),
x(i, m, k, 2),
x(i, m, k, 3), &
84 x(i, m, n, 1),
x(i, m, n, 2),
x(i, m, n, 3), &
85 x(l, m, n, 1),
x(l, m, n, 2),
x(l, m, n, 3), &
86 x(l, m, k, 1),
x(l, m, k, 2),
x(l, m, k, 3), vp4)
88 call volpym(
x(i, j, k, 1),
x(i, j, k, 2),
x(i, j, k, 3), &
89 x(i, m, k, 1),
x(i, m, k, 2),
x(i, m, k, 3), &
90 x(l, m, k, 1),
x(l, m, k, 2),
x(l, m, k, 3), &
91 x(l, j, k, 1),
x(l, j, k, 2),
x(l, j, k, 3), vp5)
93 call volpym(
x(i, j, n, 1),
x(i, j, n, 2),
x(i, j, n, 3), &
94 x(l, j, n, 1),
x(l, j, n, 2),
x(l, j, n, 3), &
95 x(l, m, n, 1),
x(l, m, n, 2),
x(l, m, n, 3), &
96 x(i, m, n, 1),
x(i, m, n, 2),
x(i, m, n, 3), vp6)
102 vol(i, j, k) =
sixth * (vp1 + vp2 + vp3 + vp4 + vp5 + vp6)
105 vol(i, j, k) = abs(
vol(i, j, k))
114 if (
vol(1, j, k) /
vol(2, j, k) < halocellratio)
then
115 vol(1, j, k) =
vol(2, j, k)
117 if (
vol(
ie, j, k) /
vol(
il, j, k) < halocellratio)
then
125 if (
vol(i, 1, k) /
vol(i, 2, k) < halocellratio)
then
126 vol(i, 1, k) =
vol(i, 2, k)
128 if (
vol(i,
je, k) /
vol(i,
jl, k) < halocellratio)
then
136 if (
vol(i, j, 1) /
vol(i, j, 2) < halocellratio)
then
137 vol(i, j, 1) =
vol(i, j, 2)
139 if (
vol(i, j,
ke) /
vol(i, j,
kl) < halocellratio)
then
147 subroutine volpym(xa, ya, za, xb, yb, zb, xc, yc, zc, xd, yd, zd, volume)
166 real(kind=
realtype),
intent(in) :: xa, ya, za, xb, yb, zb
167 real(kind=
realtype),
intent(in) :: xc, yc, zc,
xd, yd, zd
169 volume = (xp -
fourth * (xa + xb + xc +
xd)) &
170 * ((ya - yc) * (zb - zd) - (za - zc) * (yb - yd)) + &
171 (yp -
fourth * (ya + yb + yc + yd)) &
172 * ((za - zc) * (xb -
xd) - (xa - xc) * (zb - zd)) + &
173 (zp -
fourth * (za + zb + zc + zd)) &
174 * ((xa - xc) * (yb - yd) - (ya - yc) * (xb -
xd))
185 integer(kind=intType) :: i, j, k, n, m, l, ii
186 real(kind=realtype) :: fact
187 real(kind=realtype) :: xxp, yyp, zzp
188 real(kind=realtype),
dimension(3) :: v1, v2
215 do ii = 0,
ke *
je * (
ie + 1) - 1
216 i = mod(ii,
ie + 1) + 0
217 j = mod(ii / (
ie + 1),
je) + 1
218 k = ii / ((
ie + 1) *
je) + 1
225 v1(1) =
x(i, j, n, 1) -
x(i, m, k, 1)
226 v1(2) =
x(i, j, n, 2) -
x(i, m, k, 2)
227 v1(3) =
x(i, j, n, 3) -
x(i, m, k, 3)
229 v2(1) =
x(i, j, k, 1) -
x(i, m, n, 1)
230 v2(2) =
x(i, j, k, 2) -
x(i, m, n, 2)
231 v2(3) =
x(i, j, k, 3) -
x(i, m, n, 3)
237 si(i, j, k, 1) = fact * (v1(2) * v2(3) - v1(3) * v2(2))
238 si(i, j, k, 2) = fact * (v1(3) * v2(1) - v1(1) * v2(3))
239 si(i, j, k, 3) = fact * (v1(1) * v2(2) - v1(2) * v2(1))
244 do ii = 0,
ke * (
je + 1) *
ie - 1
246 j = mod(ii /
ie,
je + 1) + 0
247 k = ii / (
ie * (
je + 1)) + 1
253 v1(1) =
x(i, j, n, 1) -
x(l, j, k, 1)
254 v1(2) =
x(i, j, n, 2) -
x(l, j, k, 2)
255 v1(3) =
x(i, j, n, 3) -
x(l, j, k, 3)
257 v2(1) =
x(l, j, n, 1) -
x(i, j, k, 1)
258 v2(2) =
x(l, j, n, 2) -
x(i, j, k, 2)
259 v2(3) =
x(l, j, n, 3) -
x(i, j, k, 3)
265 sj(i, j, k, 1) = fact * (v1(2) * v2(3) - v1(3) * v2(2))
266 sj(i, j, k, 2) = fact * (v1(3) * v2(1) - v1(1) * v2(3))
267 sj(i, j, k, 3) = fact * (v1(1) * v2(2) - v1(2) * v2(1))
273 do ii = 0, (
ke + 1) *
je *
ie - 1
275 j = mod(ii /
ie,
je) + 1
276 k = ii / (
ie *
je) + 0
282 v1(1) =
x(i, j, k, 1) -
x(l, m, k, 1)
283 v1(2) =
x(i, j, k, 2) -
x(l, m, k, 2)
284 v1(3) =
x(i, j, k, 3) -
x(l, m, k, 3)
286 v2(1) =
x(l, j, k, 1) -
x(i, m, k, 1)
287 v2(2) =
x(l, j, k, 2) -
x(i, m, k, 2)
288 v2(3) =
x(l, j, k, 3) -
x(i, m, k, 3)
294 sk(i, j, k, 1) = fact * (v1(2) * v2(3) - v1(3) * v2(2))
295 sk(i, j, k, 2) = fact * (v1(3) * v2(1) - v1(1) * v2(3))
296 sk(i, j, k, 3) = fact * (v1(1) * v2(2) - v1(2) * v2(1))
314 integer(kind=intType) :: i, j, ii
315 integer(kind=intType) :: mm
316 real(kind=realtype) :: fact, mult
317 real(kind=realtype) :: xxp, yyp, zzp
321 bocoloop:
do mm = 1,
nbocos
332 xxp =
si(1, i, j, 1); yyp =
si(1, i, j, 2); zzp =
si(1, i, j, 3)
335 xxp =
si(
il, i, j, 1); yyp =
si(
il, i, j, 2); zzp =
si(
il, i, j, 3)
338 xxp =
sj(i, 1, j, 1); yyp =
sj(i, 1, j, 2); zzp =
sj(i, 1, j, 3)
341 xxp =
sj(i,
jl, j, 1); yyp =
sj(i,
jl, j, 2); zzp =
sj(i,
jl, j, 3)
344 xxp =
sk(i, j, 1, 1); yyp =
sk(i, j, 1, 2); zzp =
sk(i, j, 1, 3)
347 xxp =
sk(i, j,
kl, 1); yyp =
sk(i, j,
kl, 2); zzp =
sk(i, j,
kl, 3)
353 fact = sqrt(xxp * xxp + yyp * yyp + zzp * zzp)
354 if (fact >
zero) fact = mult / fact
358 bcdata(mm)%norm(i, j, 1) = fact * xxp
359 bcdata(mm)%norm(i, j, 2) = fact * yyp
360 bcdata(mm)%norm(i, j, 3) = fact * zzp
381 integer(kind=intType) :: mm, i, j, k
382 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, iiMax, jjMax
384 real(kind=realtype) :: length, dot
385 real(kind=realtype),
dimension(3) :: v1, v2, norm
391 x(0, j, k, 1) =
two *
x(1, j, k, 1) -
x(2, j, k, 1)
392 x(0, j, k, 2) =
two *
x(1, j, k, 2) -
x(2, j, k, 2)
393 x(0, j, k, 3) =
two *
x(1, j, k, 3) -
x(2, j, k, 3)
405 x(i, 0, k, 1) =
two *
x(i, 1, k, 1) -
x(i, 2, k, 1)
406 x(i, 0, k, 2) =
two *
x(i, 1, k, 2) -
x(i, 2, k, 2)
407 x(i, 0, k, 3) =
two *
x(i, 1, k, 3) -
x(i, 2, k, 3)
419 x(i, j, 0, 1) =
two *
x(i, j, 1, 1) -
x(i, j, 2, 1)
420 x(i, j, 0, 2) =
two *
x(i, j, 1, 2) -
x(i, j, 2, 2)
421 x(i, j, 0, 3) =
two *
x(i, j, 1, 3) -
x(i, j, 2, 3)
434 loopbocos:
do mm = 1,
nbocos
443 norm(1) =
bcdata(mm)%symNorm(1)
444 norm(2) =
bcdata(mm)%symNorm(2)
445 norm(3) =
bcdata(mm)%symNorm(3)
447 length = sqrt(norm(1)**2 + norm(2)**2 + norm(3)**2)
451 norm(1) = norm(1) / length
452 norm(2) = norm(2) / length
453 norm(3) = norm(3) / length
455 testsingular:
if (length >
eps)
then
462 if (ibeg == 1) ibeg = 0
463 if (iend == iimax) iend = iimax + 1
465 if (jbeg == 1) jbeg = 0
466 if (jend == jjmax) jend = jjmax + 1
470 v1(1) =
x(1, i, j, 1) -
x(2, i, j, 1)
471 v1(2) =
x(1, i, j, 2) -
x(2, i, j, 2)
472 v1(3) =
x(1, i, j, 3) -
x(2, i, j, 3)
473 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
475 x(0, i, j, 1) =
x(2, i, j, 1) + dot * norm(1)
476 x(0, i, j, 2) =
x(2, i, j, 2) + dot * norm(2)
477 x(0, i, j, 3) =
x(2, i, j, 3) + dot * norm(3)
485 if (ibeg == 1) ibeg = 0
486 if (iend == iimax) iend = iimax + 1
488 if (jbeg == 1) jbeg = 0
489 if (jend == jjmax) jend = jjmax + 1
493 v1(1) =
x(
il, i, j, 1) -
x(
nx, i, j, 1)
494 v1(2) =
x(
il, i, j, 2) -
x(
nx, i, j, 2)
495 v1(3) =
x(
il, i, j, 3) -
x(
nx, i, j, 3)
496 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
498 x(
ie, i, j, 1) =
x(
nx, i, j, 1) + dot * norm(1)
499 x(
ie, i, j, 2) =
x(
nx, i, j, 2) + dot * norm(2)
500 x(
ie, i, j, 3) =
x(
nx, i, j, 3) + dot * norm(3)
508 if (ibeg == 1) ibeg = 0
509 if (iend == iimax) iend = iimax + 1
511 if (jbeg == 1) jbeg = 0
512 if (jend == jjmax) jend = jjmax + 1
516 v1(1) =
x(i, 1, j, 1) -
x(i, 2, j, 1)
517 v1(2) =
x(i, 1, j, 2) -
x(i, 2, j, 2)
518 v1(3) =
x(i, 1, j, 3) -
x(i, 2, j, 3)
519 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
521 x(i, 0, j, 1) =
x(i, 2, j, 1) + dot * norm(1)
522 x(i, 0, j, 2) =
x(i, 2, j, 2) + dot * norm(2)
523 x(i, 0, j, 3) =
x(i, 2, j, 3) + dot * norm(3)
531 if (ibeg == 1) ibeg = 0
532 if (iend == iimax) iend = iimax + 1
534 if (jbeg == 1) jbeg = 0
535 if (jend == jjmax) jend = jjmax + 1
539 v1(1) =
x(i,
jl, j, 1) -
x(i,
ny, j, 1)
540 v1(2) =
x(i,
jl, j, 2) -
x(i,
ny, j, 2)
541 v1(3) =
x(i,
jl, j, 3) -
x(i,
ny, j, 3)
542 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
544 x(i,
je, j, 1) =
x(i,
ny, j, 1) + dot * norm(1)
545 x(i,
je, j, 2) =
x(i,
ny, j, 2) + dot * norm(2)
546 x(i,
je, j, 3) =
x(i,
ny, j, 3) + dot * norm(3)
554 if (ibeg == 1) ibeg = 0
555 if (iend == iimax) iend = iimax + 1
557 if (jbeg == 1) jbeg = 0
558 if (jend == jjmax) jend = jjmax + 1
562 v1(1) =
x(i, j, 1, 1) -
x(i, j, 2, 1)
563 v1(2) =
x(i, j, 1, 2) -
x(i, j, 2, 2)
564 v1(3) =
x(i, j, 1, 3) -
x(i, j, 2, 3)
565 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
567 x(i, j, 0, 1) =
x(i, j, 2, 1) + dot * norm(1)
568 x(i, j, 0, 2) =
x(i, j, 2, 2) + dot * norm(2)
569 x(i, j, 0, 3) =
x(i, j, 2, 3) + dot * norm(3)
577 if (ibeg == 1) ibeg = 0
578 if (iend == iimax) iend = iimax + 1
580 if (jbeg == 1) jbeg = 0
581 if (jend == jjmax) jend = jjmax + 1
585 v1(1) =
x(i, j,
kl, 1) -
x(i, j,
nz, 1)
586 v1(2) =
x(i, j,
kl, 2) -
x(i, j,
nz, 2)
587 v1(3) =
x(i, j,
kl, 3) -
x(i, j,
nz, 3)
588 dot =
two * (v1(1) * norm(1) + v1(2) * norm(2) &
590 x(i, j,
ke, 1) =
x(i, j,
nz, 1) + dot * norm(1)
591 x(i, j,
ke, 2) =
x(i, j,
nz, 2) + dot * norm(2)
592 x(i, j,
ke, 3) =
x(i, j,
nz, 3) + dot * norm(3)
610 integer(kind=intType) :: i, j, k, ii, nTurb
611 real(kind=realtype) :: ovol
615 #ifdef TAPENADE_REVERSE
617 do ii = 0,
nx *
ny *
nz - 1
619 j = mod(ii /
nx,
ny) + 2
620 k = ii / (
nx *
ny) + 2
627 dw(i, j, k, 1:
nwf) =
dw(i, j, k, 1:
nwf) * ovol
629 #ifdef TAPENADE_REVERSE
647 integer(kind=intType) :: i, j, k, l
653 dw(i, j, k, l) = (
dw(i, j, k, l) +
fw(i, j, k, l)) &
integer(kind=inttype), dimension(:), pointer knend
integer(kind=inttype), dimension(:), pointer inend
integer(kind=inttype), dimension(:), pointer knbeg
integer(kind=inttype), dimension(:), pointer jnbeg
integer(kind=inttype), dimension(:, :, :), pointer iblank
integer(kind=inttype), dimension(:), pointer bcfaceid
real(kind=realtype), dimension(:, :, :, :), pointer si
integer(kind=inttype) nbocos
real(kind=realtype), dimension(:, :, :), pointer volref
real(kind=realtype), dimension(:, :, :, :), pointer sj
integer(kind=inttype), dimension(:), pointer jnend
integer(kind=inttype), dimension(:), pointer bctype
real(kind=realtype), dimension(:, :, :, :), pointer dw
real(kind=realtype), dimension(:, :, :, :), pointer sk
real(kind=realtype), dimension(:, :, :), pointer vol
real(kind=realtype), dimension(:, :, :, :), pointer xd
real(kind=realtype), dimension(:, :, :, :), pointer fw
real(kind=realtype), dimension(:, :, :, :), pointer x
integer(kind=inttype), dimension(:), pointer inbeg
real(kind=realtype), parameter zero
integer(kind=inttype), parameter imax
integer(kind=inttype), parameter kmin
integer(kind=inttype), parameter jmax
real(kind=realtype), parameter eps
real(kind=realtype), parameter eighth
integer(kind=inttype), parameter symm
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
real(kind=realtype), parameter sixth
integer(kind=inttype) nt1
integer(kind=inttype) nwf
integer(kind=inttype) nt2
integer, parameter realtype