102 SUBROUTINE w3uno2 (MX, MY, NX, NY, VELO, DT, DX1, DX2, Q,BCLOSE,&
103 INC, MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
175 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
176 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
178 REAL,
INTENT(IN) :: DT
179 REAL,
INTENT(INOUT) :: VELO(MY*(MX+1)), DX1(MY*(MX+1)), &
180 DX2(1-MY:MY*(MX+1)), Q(1-MY:MY*(MX+2))
181 LOGICAL,
INTENT(IN) :: BCLOSE
186 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
187 IAD00, IAD02, IADN0, IADN1, IADN2
189 INTEGER,
SAVE :: IENT
194 REAL :: CFL, VEL, QB, DQ, DQNZ, QCN, QBN, &
195 QBR, CFAC, FLA(1-MY:MY*MX)
200 REAL :: QBO, QN, XCFL
209 CALL strace (ient,
'W3UNO2')
213 WRITE (ndst,9000) mx, my, nx, ny, dt, bclose, inc, nb0, nb1, nb2
220 qmax = max( qmax , q(iy+(ix-1)*my) )
223 qmax = max( 0.01*qmax , 1.e-10 )
227 WRITE (ndst,9001)
'VELO'
229 WRITE (ndst,9002) (nint(100.*velo(iy+(ix-1)*my) &
230 *dt/dx1(iy+(ix-1)*my)),ix=1,nx)
232 WRITE (ndst,9001)
'Q'
234 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
236 WRITE (ndst,9001)
'MAPACT'
237 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
250 iadn0 = iad00 + my*nx
252 iadn2 = iad02 + my*nx
254 q(iy+iad00) = q(iy+iadn0)
255 q(iy+iadn1) = q( iy )
256 q(iy+iadn2) = q(iy+iad02)
257 velo(iy+iadn1) = velo( iy )
258 dx1(iy+iadn1) = dx1( iy )
259 dx2(iy+iad00) = dx1(iy+iadn0)
260 dx2(iy+iadn1) = dx1( iy )
269 WRITE (ndst,9011) nb0,
'CENTRAL'
275 vel = 0.5 * ( velo(ixy) + velo(ixy+inc) )
279 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
283 ixyd = ixyc + inc * int( sign(1.1,cfl) )
286 qb = q(ixyc)+sign(0.5, q(ixyd)-q(ixyc))*(dx1(ixyc)-abs(cfl)) &
287 *min(abs(q(ixyc+inc)-q(ixyc))/dx2(ixyc), &
288 abs(q(ixyc)-q(ixyc-inc))/dx2(ixyc-inc) )
299 iy2 = mod( ixy+inc , my )
300 ix2 = 1 + (ixy+inc)/my
301 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
302 q(ixy+inc), q(ixy+2*inc) )
303 IF ( qn .GT. 1.e-10 )
THEN
305 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
306 cfl, dt*velo(ixy)/dx1(ixy), &
307 dt*velo(ixy+inc)/dx1(ixy+inc), &
308 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
309 q(ixy+inc)*qn, q(ixy+2*inc)*qn
319 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
325 ixyc = ixy - inc * int( min( 0. , sign(1.1,vel) ) )
326 fla(ixy) = vel * dt * q(ixyc)
330 iy2 = mod( ixy+inc , my )
331 ix2 = 1 + (ixy+inc)/my
332 qn = max( q(ixy+inc), q(ixy) )
333 IF ( qn .GT. 1.e-10 )
THEN
335 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, xcfl, &
336 dt*velo(ixy)/dx2(ixy), &
337 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
346 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
352 ixyc = ixy - inc * int( min( 0. , sign(1.1,vel) ) )
353 fla(ixy) = vel * dt * q(ixyc)
357 iy2 = mod( ixy+inc , my )
358 ix2 = 1 + (ixy+inc)/my
359 qn = max( q(ixy+inc), q(ixy) )
360 IF ( qn .GT. 1.e-10 )
THEN
362 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, xcfl, &
363 dt*velo(ixy+inc)/dx2(ixy), &
364 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
376 fla(iy+iad00) = fla(iy+iadn0)
391 q(ixy) = max( 0., q(ixy)+( fla(ixy-inc)-fla(ixy) )/dx1(ixy) )
394 IF ( qold + q(ixy) .GT. 1.e-10 ) &
395 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
396 dt*fla(ixy-inc)/dx1(ixy), &
402 WRITE (ndst,9001)
'Q'
404 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
413 9000
FORMAT (
' TEST W3UNO2 : ARRAY DIMENSIONS :',2i6/ &
415 ' TIME STEP :',f8.1/ &
416 ' BCLOSE, INC :',l6,i6/ &
417 ' NB0, NB1, NB2 :',3i6)
420 9001
FORMAT (
' TEST W3UNO2 : DUMP ARRAY ',a,
' :')
421 9002
FORMAT ( 1x,43i3)
422 9003
FORMAT ( 1x,21i6)
425 9005
FORMAT (
' TEST W3UNO2 : GLOBAL CLOSURE (1)')
429 9010
FORMAT (
' TEST W3UNO2 : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
430 ' Q (b,b,i-1,i,i+1,i+2)')
431 9011
FORMAT (
' TEST W3UNO2 :',i6,
' POINTS OF TYPE ',a)
432 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
433 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
435 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
439 9015
FORMAT (
' TEST W3UNO2 : GLOBAL CLOSURE (2)')
443 9020
FORMAT (
' TEST W3UNO2 : IP, IXY, 2Q, 2FL')
444 9021
FORMAT (
' ',2i6,2(1x,2e11.3))
472 SUBROUTINE w3uno2r (MX, MY, NX, NY, CFLL, Q, BCLOSE, INC, &
473 MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
555 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
556 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
558 REAL,
INTENT(INOUT) :: CFLL(MY*(MX+1)), Q(1-MY:MY*(MX+2))
559 LOGICAL,
INTENT(IN) :: BCLOSE
564 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
565 IAD00, IAD02, IADN0, IADN1, IADN2
567 INTEGER,
SAVE :: IENT = 0
572 REAL :: CFL, QB, DQ, DQNZ, QCN, QBN, QBR, CFAC
573 REAL :: FLA(1-MY:MY*MX)
587 CALL strace (ient,
'W3UNO2r')
591 WRITE (ndst,9000) mx, my, nx, ny, bclose, inc, nb0, nb1, nb2
598 qmax = max( qmax , q(iy+(ix-1)*my) )
601 qmax = max( 0.01*qmax , 1.e-10 )
605 WRITE (ndst,9001)
'CFLL'
607 WRITE (ndst,9002) (nint(100.*cfll(iy+(ix-1)*my)),ix=1,nx)
609 WRITE (ndst,9001)
'Q'
611 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
613 WRITE (ndst,9001)
'MAPACT'
614 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
627 iadn0 = iad00 + my*nx
629 iadn2 = iad02 + my*nx
631 q(iy+iad00) = q(iy+iadn0)
632 q(iy+iadn1) = q( iy )
633 q(iy+iadn2) = q(iy+iad02)
634 cfll(iy+iadn1) = cfll( iy )
643 WRITE (ndst,9011) nb0,
'CENTRAL'
649 cfl = 0.5 * ( cfll(ixy) + cfll(ixy+inc) )
650 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
651 ixyd = ixyc + inc * int( sign(1.1,cfl) )
652 qb = q(ixyc)+sign(0.5, q(ixyd)-q(ixyc))*(1.0-abs(cfl)) &
653 *min(abs(q(ixyc+inc)-q(ixyc)), &
654 abs(q(ixyc)-q(ixyc-inc)) )
664 iy2 = mod( ixy+inc , my )
665 ix2 = 1 + (ixy+inc)/my
666 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
667 q(ixy+inc), q(ixy+2*inc) )
668 IF ( qn .GT. 1.e-10 )
THEN
670 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
671 cfl, cfll(ixy), cfll(ixy+inc), &
672 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
673 q(ixy+inc)*qn, q(ixy+2*inc)*qn
683 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
689 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
690 fla(ixy) = cfl * q(ixyc)
694 iy2 = mod( ixy+inc , my )
695 ix2 = 1 + (ixy+inc)/my
696 qn = max( q(ixy+inc), q(ixy) )
697 IF ( qn .GT. 1.e-10 )
THEN
699 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, cfl, &
700 cfll(ixy), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
709 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
715 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
716 fla(ixy) = cfl * q(ixyc)
720 iy2 = mod( ixy+inc , my )
721 ix2 = 1 + (ixy+inc)/my
722 qn = max( q(ixy+inc), q(ixy) )
723 IF ( qn .GT. 1.e-10 )
THEN
725 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, cfl, &
726 cfll(ixy+inc), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
738 fla(iy+iad00) = fla(iy+iadn0)
752 q(ixy) = max( 0. , q(ixy) + fla(ixy-inc) - fla(ixy) )
754 IF ( qold + q(ixy) .GT. 1.e-10 ) &
755 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
756 fla(ixy-inc), fla(ixy)
761 WRITE (ndst,9001)
'Q'
763 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
772 9000
FORMAT (
' TEST W3UNO2r : ARRAY DIMENSIONS :',2i6/ &
774 ' BCLOSE, INC :',l6,i6/ &
775 ' NB0, NB1, NB2 :',3i6)
778 9001
FORMAT (
' TEST W3UNO2r : DUMP ARRAY ',a,
' :')
779 9002
FORMAT ( 1x,43i3)
780 9003
FORMAT ( 1x,21i6)
783 9005
FORMAT (
' TEST W3UNO2r : GLOBAL CLOSURE (1)')
787 9010
FORMAT (
' TEST W3UNO2r : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
788 ' Q (b,b,i-1,i,i+1,i+2)')
789 9011
FORMAT (
' TEST W3UNO2r :',i6,
' POINTS OF TYPE ',a)
790 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
791 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
793 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
797 9015
FORMAT (
' TEST W3UNO2r : GLOBAL CLOSURE (2)')
801 9020
FORMAT (
' TEST W3UNO2r : IP, IXY, 2Q, 2FL')
802 9021
FORMAT (
' ',2i6,2(1x,2e11.3))
836 SUBROUTINE w3uno2s (MX, MY, NX, NY, CFLL, TRANS, Q, BCLOSE, &
837 INC, MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
920 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
921 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
923 REAL,
INTENT(IN) :: TRANS(MY*MX,-1:1)
924 REAL,
INTENT(INOUT) :: CFLL(MY*(MX+1)), Q(1-MY:MY*(MX+2))
925 LOGICAL,
INTENT(IN) :: BCLOSE
930 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
931 IAD00, IAD02, IADN0, IADN1, IADN2, &
934 INTEGER,
SAVE :: IENT = 0
939 REAL :: CFL, QB, DQ, DQNZ, QCN, QBN, QBR, CFAC
940 REAL :: FLA(1-MY:MY*MX)
954 CALL strace (ient,
'W3UNO2s')
958 WRITE (ndst,9000) mx, my, nx, ny, bclose, inc, nb0, nb1, nb2
965 qmax = max( qmax , q(iy+(ix-1)*my) )
968 qmax = max( 0.01*qmax , 1.e-10 )
972 WRITE (ndst,9001)
'CFLL'
974 WRITE (ndst,9002) (nint(100.*cfll(iy+(ix-1)*my)),ix=1,nx)
976 WRITE (ndst,9001)
'Q'
978 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
980 WRITE (ndst,9001)
'MAPACT'
981 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
994 iadn0 = iad00 + my*nx
996 iadn2 = iad02 + my*nx
1003 q(iy+iad00) = q(iy+iadn0)
1004 q(iy+iadn1) = q( iy )
1005 q(iy+iadn2) = q(iy+iad02)
1006 cfll(iy+iadn1) = cfll( iy )
1020 WRITE (ndst,9011) nb0,
'CENTRAL'
1034 cfl = 0.5 * ( cfll(ixy) + cfll(ixy+inc) )
1035 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1036 ixyd = ixyc + inc * int( sign(1.1,cfl) )
1037 qb = q(ixyc)+sign(0.5, q(ixyd)-q(ixyc))*(1.0-abs(cfl)) &
1038 *min(abs(q(ixyc+inc)-q(ixyc)), &
1039 abs(q(ixyc)-q(ixyc-inc)) )
1048 iy = mod( ixy , my )
1050 iy2 = mod( ixy+inc , my )
1051 ix2 = 1 + (ixy+inc)/my
1052 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
1053 q(ixy+inc), q(ixy+2*inc) )
1054 IF ( qn .GT. 1.e-10 )
THEN
1056 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
1057 cfl, cfll(ixy), cfll(ixy+inc), &
1058 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
1059 q(ixy+inc)*qn, q(ixy+2*inc)*qn
1073 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
1079 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1080 fla(ixy) = cfl * q(ixyc)
1082 iy = mod( ixy , my )
1084 iy2 = mod( ixy+inc , my )
1085 ix2 = 1 + (ixy+inc)/my
1086 qn = max( q(ixy+inc), q(ixy) )
1087 IF ( qn .GT. 1.e-10 )
THEN
1089 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, cfl, &
1090 cfll(ixy), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
1099 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
1105 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1106 fla(ixy) = cfl * q(ixyc)
1108 iy = mod( ixy , my )
1110 iy2 = mod( ixy+inc , my )
1111 ix2 = 1 + (ixy+inc)/my
1112 qn = max( q(ixy+inc), q(ixy) )
1113 IF ( qn .GT. 1.e-10 )
THEN
1115 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, cfl, cfll(ixy+inc), &
1116 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
1128 fla(iy+iad00) = fla(iy+iadn0)
1149 IF ( fla(ixy-inc) .GT. 0. )
THEN
1154 IF ( fla(ixy ) .LT. 0. )
THEN
1163 q(ixy) = max( 0. , q(ixy) + trans(ixy,jn) * fla(ixy-inc) &
1164 - trans(ixy,jp) * fla(ixy) )
1167 IF ( qold + q(ixy) .GT. 1.e-10 ) &
1168 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
1169 fla(ixy-inc), fla(ixy)
1178 WRITE (ndst,9001)
'Q'
1180 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
1189 9000
FORMAT (
' TEST W3UNO2s : ARRAY DIMENSIONS :',2i6/ &
1191 ' BCLOSE, INC :',l6,i6/ &
1192 ' NB0, NB1, NB2 :',3i6)
1195 9001
FORMAT (
' TEST W3UNO2s : DUMP ARRAY ',a,
' :')
1196 9002
FORMAT ( 1x,43i3)
1197 9003
FORMAT ( 1x,21i6)
1200 9005
FORMAT (
' TEST W3UNO2s : GLOBAL CLOSURE (1)')
1204 9010
FORMAT (
' TEST W3UNO2s : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
1205 ' Q (b,b,i-1,i,i+1,i+2)')
1206 9011
FORMAT (
' TEST W3UNO2s :',i6,
' POINTS OF TYPE ',a)
1207 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
1208 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
1210 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
1214 9015
FORMAT (
' TEST W3UNO2s : GLOBAL CLOSURE (2)')
1218 9020
FORMAT (
' TEST W3UNO2s : IP, IXY, 2Q, 2FL')
1219 9021
FORMAT (
' ',2i6,2(1x,2e11.3))