117 SUBROUTINE w3qck1 (MX, MY, NX, NY, CFLL, Q, CLOSE, INC, &
118 MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
214 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
215 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
217 REAL,
INTENT(INOUT) :: CFLL(MY*(MX+1)), Q(1-MY:MY*(MX+2))
218 LOGICAL,
INTENT(IN) :: CLOSE
223 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
224 IAD00, IAD02, IADN0, IADN1, IADN2
226 INTEGER,
SAVE :: IENT = 0
231 REAL :: CFL, QB, DQ, DQNZ, QCN, QBN, QBR, CFAC
232 REAL :: FLA(1-MY:MY*MX)
246 CALL strace (ient,
'W3QCK1')
250 WRITE (ndst,9000) mx, my, nx, ny,
CLOSE, inc, nb0, nb1, nb2
257 qmax = max( qmax , q(iy+(ix-1)*my) )
260 qmax = max( 0.01*qmax , 1.e-10 )
264 WRITE (ndst,9001)
'CFLL'
266 WRITE (ndst,9002) (nint(100.*cfll(iy+(ix-1)*my)),ix=1,nx)
268 WRITE (ndst,9001)
'Q'
270 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
272 WRITE (ndst,9001)
'MAPACT'
273 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
286 iadn0 = iad00 + my*nx
288 iadn2 = iad02 + my*nx
290 q(iy+iad00) = q(iy+iadn0)
291 q(iy+iadn1) = q( iy )
292 q(iy+iadn2) = q(iy+iad02)
293 cfll(iy+iadn1) = cfll( iy )
302 WRITE (ndst,9011) nb0,
'CENTRAL'
308 cfl = 0.5 * ( cfll(ixy) + cfll(ixy+inc) )
309 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
310 qb = 0.5 * ( (1.-cfl)*q(ixy+inc) + (1.+cfl)*q(ixy) ) &
311 - (1.-cfl**2)/6. * (q(ixyc-inc)-2.*q(ixyc)+q(ixyc+inc))
313 ixyu = ixyc - inc * int( sign(1.1,cfl) )
315 dq = q(ixyd) - q(ixyu)
316 dqnz = sign( max(1.e-15,abs(dq)) , dq )
317 qcn = ( q(ixyc) - q(ixyu) ) / dqnz
318 qcn = min( 1.1, max( -0.1 , qcn ) )
323 qbn = max( (qb-q(ixyu))/dqnz , qcn )
324 qbn = min( qbn , 1. , qcn/max(1.e-10,abs(cfl)) )
325 qbr = q(ixyu) + qbn*dq
326 cfac = real( int( 2. * abs(qcn-0.5) ) )
327 qb = (1.-cfac)*qbr + cfac*q(ixyc)
334 iy2 = mod( ixy+inc , my )
335 ix2 = 1 + (ixy+inc)/my
336 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
337 q(ixy+inc), q(ixy+2*inc) )
338 IF ( qn .GT. 1.e-10 )
THEN
340 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
341 cfl, cfll(ixy), cfll(ixy+inc), &
342 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
343 q(ixy+inc)*qn, q(ixy+2*inc)*qn
353 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
359 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
360 fla(ixy) = cfl * q(ixyc)
364 iy2 = mod( ixy+inc , my )
365 ix2 = 1 + (ixy+inc)/my
366 qn = max( q(ixy+inc), q(ixy) )
367 IF ( qn .GT. 1.e-10 )
THEN
369 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, cfl, &
370 cfll(ixy), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
379 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
385 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
386 fla(ixy) = cfl * q(ixyc)
390 iy2 = mod( ixy+inc , my )
391 ix2 = 1 + (ixy+inc)/my
392 qn = max( q(ixy+inc), q(ixy) )
393 IF ( qn .GT. 1.e-10 )
THEN
395 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, cfl, &
396 cfll(ixy+inc), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
408 fla(iy+iad00) = fla(iy+iadn0)
422 q(ixy) = max( 0. , q(ixy) + fla(ixy-inc) - fla(ixy) )
424 IF ( qold + q(ixy) .GT. 1.e-10 ) &
425 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
426 fla(ixy-inc), fla(ixy)
431 WRITE (ndst,9001)
'Q'
433 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
442 9000
FORMAT (
' TEST W3QCK1 : ARRAY DIMENSIONS :',2i6/ &
444 ' CLOSE, INC :',l6,i6/ &
445 ' NB0, NB1, NB2 :',3i6)
448 9001
FORMAT (
' TEST W3QCK1 : DUMP ARRAY ',a,
' :')
449 9002
FORMAT ( 1x,43i3)
450 9003
FORMAT ( 1x,21i6)
453 9005
FORMAT (
' TEST W3QCK1 : GLOBAL CLOSURE (1)')
457 9010
FORMAT (
' TEST W3QCK1 : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
458 ' Q (b,b,i-1,i,i+1,i+2)')
459 9011
FORMAT (
' TEST W3QCK1 :',i6,
' POINTS OF TYPE ',a)
460 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
461 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
463 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
467 9015
FORMAT (
' TEST W3QCK1 : GLOBAL CLOSURE (2)')
471 9020
FORMAT (
' TEST W3QCK1 : IP, IXY, 2Q, 2FL')
472 9021
FORMAT (
' ',2i6,2(1x,2e11.3))
514 SUBROUTINE w3qck2 (MX, MY, NX, NY, VELO, DT, DX1, DX2, Q, CLOSE,&
515 INC, MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
607 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
608 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
610 REAL,
INTENT(IN) :: DT
611 REAL,
INTENT(INOUT) :: VELO(MY*(MX+1)), DX1(MY*(MX+1)), &
612 DX2(1-MY:MY*(MX+1)), Q(1-MY:MY*(MX+2))
613 LOGICAL,
INTENT(IN) :: CLOSE
618 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
619 IAD00, IAD02, IADN0, IADN1, IADN2
621 INTEGER,
SAVE :: IENT
626 REAL :: CFL, VEL, QB, DQ, DQNZ, QCN, QBN, &
627 QBR, CFAC, FLA(1-MY:MY*MX)
632 REAL :: QBO, QN, XCFL
641 CALL strace (ient,
'W3QCK2')
645 WRITE (ndst,9000) mx, my, nx, ny, dt,
CLOSE, inc, nb0, nb1, nb2
652 qmax = max( qmax , q(iy+(ix-1)*my) )
655 qmax = max( 0.01*qmax , 1.e-10 )
659 WRITE (ndst,9001)
'VELO'
661 WRITE (ndst,9002) (nint(100.*velo(iy+(ix-1)*my) &
662 *dt/dx1(iy+(ix-1)*my)),ix=1,nx)
664 WRITE (ndst,9001)
'Q'
666 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
668 WRITE (ndst,9001)
'MAPACT'
669 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
682 iadn0 = iad00 + my*nx
684 iadn2 = iad02 + my*nx
686 q(iy+iad00) = q(iy+iadn0)
687 q(iy+iadn1) = q( iy )
688 q(iy+iadn2) = q(iy+iad02)
689 velo(iy+iadn1) = velo( iy )
690 dx1(iy+iadn1) = dx1( iy )
691 dx2(iy+iad00) = dx1(iy+iadn0)
692 dx2(iy+iadn1) = dx1( iy )
701 WRITE (ndst,9011) nb0,
'CENTRAL'
707 vel = 0.5 * ( velo(ixy) + velo(ixy+inc) )
708 cfl = dt * vel / dx2(ixy)
709 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
710 qb = 0.5 * ( (1.-cfl)*q(ixy+inc) + (1.+cfl)*q(ixy) ) &
711 - dx2(ixy)**2 / dx1(ixyc) * (1.-cfl**2) / 6. &
712 * ( (q(ixyc+inc)-q(ixyc))/dx2(ixyc) &
713 - (q(ixyc)-q(ixyc-inc))/dx2(ixyc-inc) )
715 ixyu = ixyc - inc * int( sign(1.1,cfl) )
717 dq = q(ixyd) - q(ixyu)
718 dqnz = sign( max(1.e-15,abs(dq)) , dq )
719 qcn = ( q(ixyc) - q(ixyu) ) / dqnz
720 qcn = min( 1.1, max( -0.1 , qcn ) )
725 qbn = max( (qb-q(ixyu))/dqnz , qcn )
726 qbn = min( qbn , 1. , qcn/max(1.e-10,abs(cfl)) )
727 qbr = q(ixyu) + qbn*dq
728 cfac = real( int( 2. * abs(qcn-0.5) ) )
729 qb = (1.-cfac)*qbr + cfac*q(ixyc)
736 iy2 = mod( ixy+inc , my )
737 ix2 = 1 + (ixy+inc)/my
738 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
739 q(ixy+inc), q(ixy+2*inc) )
740 IF ( qn .GT. 1.e-10 )
THEN
742 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
743 cfl, dt*velo(ixy)/dx1(ixy), &
744 dt*velo(ixy+inc)/dx1(ixy+inc), &
745 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
746 q(ixy+inc)*qn, q(ixy+2*inc)*qn
756 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
762 ixyc = ixy - inc * int( min( 0. , sign(1.1,vel) ) )
763 fla(ixy) = vel * q(ixyc)
767 iy2 = mod( ixy+inc , my )
768 ix2 = 1 + (ixy+inc)/my
769 qn = max( q(ixy+inc), q(ixy) )
770 IF ( qn .GT. 1.e-10 )
THEN
772 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, xcfl, &
773 dt*velo(ixy)/dx2(ixy), &
774 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
783 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
789 ixyc = ixy - inc * int( min( 0. , sign(1.1,vel) ) )
790 fla(ixy) = vel * q(ixyc)
794 iy2 = mod( ixy+inc , my )
795 ix2 = 1 + (ixy+inc)/my
796 qn = max( q(ixy+inc), q(ixy) )
797 IF ( qn .GT. 1.e-10 )
THEN
799 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, xcfl, &
800 dt*velo(ixy+inc)/dx2(ixy), &
801 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
813 fla(iy+iad00) = fla(iy+iadn0)
827 q(ixy) = max( 0. , q(ixy) + dt/dx1(ixy) * &
828 (fla(ixy-inc)-fla(ixy)) )
830 IF ( qold + q(ixy) .GT. 1.e-10 ) &
831 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
832 dt*fla(ixy-inc)/dx1(ixy), &
838 WRITE (ndst,9001)
'Q'
840 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
849 9000
FORMAT (
' TEST W3QCK2 : ARRAY DIMENSIONS :',2i6/ &
851 ' TIME STEP :',f8.1/ &
852 ' CLOSE, INC :',l6,i6/ &
853 ' NB0, NB1, NB2 :',3i6)
856 9001
FORMAT (
' TEST W3QCK2 : DUMP ARRAY ',a,
' :')
857 9002
FORMAT ( 1x,43i3)
858 9003
FORMAT ( 1x,21i6)
861 9005
FORMAT (
' TEST W3QCK2 : GLOBAL CLOSURE (1)')
865 9010
FORMAT (
' TEST W3QCK2 : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
866 ' Q (b,b,i-1,i,i+1,i+2)')
867 9011
FORMAT (
' TEST W3QCK2 :',i6,
' POINTS OF TYPE ',a)
868 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
869 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
871 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
875 9015
FORMAT (
' TEST W3QCK2 : GLOBAL CLOSURE (2)')
879 9020
FORMAT (
' TEST W3QCK2 : IP, IXY, 2Q, 2FL')
880 9021
FORMAT (
' ',2i6,2(1x,2e11.3))
919 SUBROUTINE w3qck3 (MX, MY, NX, NY, CFLL, TRANS, Q, CLOSE, &
920 INC, MAPACT, NACT, MAPBOU, NB0, NB1, NB2, &
1010 INTEGER,
INTENT(IN) :: MX, MY, NX, NY, INC, MAPACT(MY*MX), &
1011 NACT, MAPBOU(MY*MX), NB0, NB1, NB2, &
1013 REAL,
INTENT(IN) :: TRANS(MY*MX,-1:1)
1014 REAL,
INTENT(INOUT) :: CFLL(MY*(MX+1)), Q(1-MY:MY*(MX+2))
1015 LOGICAL,
INTENT(IN) :: CLOSE
1020 INTEGER :: IXY, IP, IXYC, IXYU, IXYD, IY, IX, &
1021 IAD00, IAD02, IADN0, IADN1, IADN2, &
1024 INTEGER,
SAVE :: IENT = 0
1029 REAL :: CFL, QB, DQ, DQNZ, QCN, QBN, QBR, CFAC
1030 REAL :: FLA(1-MY:MY*MX)
1044 CALL strace (ient,
'W3QCK3')
1048 WRITE (ndst,9000) mx, my, nx, ny,
CLOSE, inc, nb0, nb1, nb2
1055 qmax = max( qmax , q(iy+(ix-1)*my) )
1058 qmax = max( 0.01*qmax , 1.e-10 )
1062 WRITE (ndst,9001)
'CFLL'
1064 WRITE (ndst,9002) (nint(100.*cfll(iy+(ix-1)*my)),ix=1,nx)
1066 WRITE (ndst,9001)
'Q'
1068 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
1070 WRITE (ndst,9001)
'MAPACT'
1071 WRITE (ndst,9003) (mapact(ixy),ixy=1,nact)
1084 iadn0 = iad00 + my*nx
1086 iadn2 = iad02 + my*nx
1093 q(iy+iad00) = q(iy+iadn0)
1094 q(iy+iadn1) = q( iy )
1095 q(iy+iadn2) = q(iy+iad02)
1096 cfll(iy+iadn1) = cfll( iy )
1110 WRITE (ndst,9011) nb0,
'CENTRAL'
1124 cfl = 0.5 * ( cfll(ixy) + cfll(ixy+inc) )
1125 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1126 qb = 0.5 * ( (1.-cfl)*q(ixy+inc) + (1.+cfl)*q(ixy) ) &
1127 - (1.-cfl**2)/6. * (q(ixyc-inc)-2.*q(ixyc)+q(ixyc+inc))
1129 ixyu = ixyc - inc * int( sign(1.1,cfl) )
1130 ixyd = 2*ixyc - ixyu
1131 dq = q(ixyd) - q(ixyu)
1132 dqnz = sign( max(1.e-15,abs(dq)) , dq )
1133 qcn = ( q(ixyc) - q(ixyu) ) / dqnz
1134 qcn = min( 1.1, max( -0.1 , qcn ) )
1139 qbn = max( (qb-q(ixyu))/dqnz , qcn )
1140 qbn = min( qbn , 1. , qcn/max(1.e-10,abs(cfl)) )
1141 qbr = q(ixyu) + qbn*dq
1142 cfac = real( int( 2. * abs(qcn-0.5) ) )
1143 qb = (1.-cfac)*qbr + cfac*q(ixyc)
1148 iy = mod( ixy , my )
1150 iy2 = mod( ixy+inc , my )
1151 ix2 = 1 + (ixy+inc)/my
1152 qn = max( qb, qbo, q(ixy-inc), q( ixy ), &
1153 q(ixy+inc), q(ixy+2*inc) )
1154 IF ( qn .GT. 1.e-10 )
THEN
1156 WRITE (ndst,9012) ip, ix, iy, ix2, iy2, &
1157 cfl, cfll(ixy), cfll(ixy+inc), &
1158 qbo*qn, qb*qn, q(ixy-inc)*qn, q( ixy )*qn, &
1159 q(ixy+inc)*qn, q(ixy+2*inc)*qn
1173 WRITE (ndst,9011) nb1-nb0,
'BOUNDARY ABOVE'
1181 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1182 fla(ixy) = cfl * q(ixyc)
1184 iy = mod( ixy , my )
1186 iy2 = mod( ixy+inc , my )
1187 ix2 = 1 + (ixy+inc)/my
1188 qn = max( q(ixy+inc), q(ixy) )
1189 IF ( qn .GT. 1.e-10 )
THEN
1191 WRITE (ndst,9013) ip, ix, iy, ix2, iy2, cfl, &
1192 cfll(ixy), q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
1203 WRITE (ndst,9011) nb2-nb1,
'BOUNDARY BELOW'
1211 ixyc = ixy - inc * int( min( 0. , sign(1.1,cfl) ) )
1212 fla(ixy) = cfl * q(ixyc)
1214 iy = mod( ixy , my )
1216 iy2 = mod( ixy+inc , my )
1217 ix2 = 1 + (ixy+inc)/my
1218 qn = max( q(ixy+inc), q(ixy) )
1219 IF ( qn .GT. 1.e-10 )
THEN
1221 WRITE (ndst,9014) ip, ix, iy, ix2, iy2, cfl, cfll(ixy+inc), &
1222 q(ixyc)*qn, q(ixy)*qn, q(ixy+inc)*qn
1236 fla(iy+iad00) = fla(iy+iadn0)
1252 IF ( fla(ixy-inc) .GT. 0. )
THEN
1257 IF ( fla(ixy ) .LT. 0. )
THEN
1266 q(ixy) = max( 0. , q(ixy) + trans(ixy,jn) * fla(ixy-inc) &
1267 - trans(ixy,jp) * fla(ixy) )
1270 IF ( qold + q(ixy) .GT. 1.e-10 ) &
1271 WRITE (ndst,9021) ip, ixy, qold, q(ixy), &
1272 fla(ixy-inc), fla(ixy)
1281 WRITE (ndst,9001)
'Q'
1283 WRITE (ndst,9002) (nint(q(iy+(ix-1)*my)/qmax),ix=1,nx)
1292 9000
FORMAT (
' TEST W3QCK3 : ARRAY DIMENSIONS :',2i6/ &
1294 ' CLOSE, INC :',l6,i6/ &
1295 ' NB0, NB1, NB2 :',3i6)
1298 9001
FORMAT (
' TEST W3QCK3 : DUMP ARRAY ',a,
' :')
1299 9002
FORMAT ( 1x,43i3)
1300 9003
FORMAT ( 1x,21i6)
1303 9005
FORMAT (
' TEST W3QCK3 : GLOBAL CLOSURE (1)')
1307 9010
FORMAT (
' TEST W3QCK3 : IP, 2x(IX,IY), CFL (b,i,i+1), ', &
1308 ' Q (b,b,i-1,i,i+1,i+2)')
1309 9011
FORMAT (
' TEST W3QCK3 :',i6,
' POINTS OF TYPE ',a)
1310 9012
FORMAT (10x,i6,4i4,1x,3f6.2,1x,f7.2,f6.2,1x,4f6.2)
1311 9013
FORMAT (10x,i6,4i4,1x,f6.2,f6.2,
' --- ',1x,f7.2,1x,
' --- ',&
1313 9014
FORMAT (10x,i6,4i4,1x,f6.2,
' --- ',f6.2,1x,f7.2,1x,
' --- ',&
1317 9015
FORMAT (
' TEST W3QCK3 : GLOBAL CLOSURE (2)')
1321 9020
FORMAT (
' TEST W3QCK3 : IP, IXY, 2Q, 2FL')
1322 9021
FORMAT (
' ',2i6,2(1x,2e11.3))