125 REAL,
PRIVATE,
PARAMETER:: TRNMIN = 0.95
232 INTEGER :: IX, IY, IXY0, IX2, IY2, IX0, IY0, &
233 IK, ITH, ISP, ISP0, ISP2
235 INTEGER,
SAVE :: IENT = 0
238 INTEGER :: MAPTXY(NY,NX), I, IXY
239 INTEGER :: MAPTST(NK+2,NTH)
245 CALL strace (ient,
'W3MAP2')
260 IF (
mapsta(iy,ix).EQ.1 .AND.
mapsta(iy,ix2).EQ.1 )
THEN
264 maptxy(iy,ix) = maptxy(iy,ix) + 1
277 IF (
mapsta(iy,ix).EQ.1 .AND.
mapsta(iy,ix2).NE.1 )
THEN
281 maptxy(iy,ix) = maptxy(iy,ix) + 2
294 IF (
mapsta(iy,ix).NE.1 .AND.
mapsta(iy,ix2).EQ.1 )
THEN
298 maptxy(iy,ix) = maptxy(iy,ix) + 4
309 WRITE (
ndst,9001) (maptxy(iy,ix),ix=1, nx)
325 IF (
mapsta(iy,ix).EQ.1 .AND.
mapsta(iy2,ix).EQ.1 )
THEN
329 maptxy(iy,ix) = maptxy(iy,ix) + 1
342 IF (
mapsta(iy,ix).EQ.1 .AND.
mapsta(iy2,ix).NE.1 )
THEN
346 maptxy(iy,ix) = maptxy(iy,ix) + 2
359 IF (
mapsta(iy,ix).NE.1 .AND.
mapsta(iy2,ix).EQ.1 )
THEN
363 maptxy(iy,ix) = maptxy(iy,ix) + 4
373 WRITE (
ndst,9001) (maptxy(iy,ix),ix=1, nx)
383 IF (
mapsta(iy,ix).EQ.1 )
THEN
394 IF ( ix .EQ. nx ) ix2 = 1
396 IF (
mapsta( iy ,ix ).GE.1 .AND. &
397 mapsta( iy ,ix2).GE.1 .AND. &
398 mapsta(iy+1,ix ).GE.1 .AND. &
399 mapsta(iy+1,ix2).GE.1 )
THEN
408 IF (
mapth2(1) .NE. 0 )
RETURN
418 isp = ith + (ik-1)*nth
419 isp2 = (ik+1) + (ith-1)*(nk+2)
422 maptst(ik+1,ith) = maptst(ik+1,ith) + 1
428 WRITE (
ndst,9000)
'MAPTH2', isp, 0, 0, isp
430 WRITE (
ndst,9001) (maptst(ik,ith),ith=1, nth)
441 isp2 = (ik+1) + (ith-1)*(nk+2)
444 maptst(ik+1,ith) = maptst(ik+1,ith) + 1
451 isp2 = nk+1 + (ith-1)*(nk+2)
454 maptst(nk+1,ith) = maptst(nk+1,ith) + 2
460 isp2 = 1 + (ith-1)*(nk+2)
463 maptst(1,ith) = maptst(1,ith) + 4
470 WRITE (
ndst,9001) (maptst(ik,ith),ith=1, nth)
479 9000
FORMAT (/
' TEST W3MAP2 : TEST MAP FOR PROPAGATION'/ &
485 9001
FORMAT (1x,130i1)
486 9010
FORMAT (
' TEST W3MAP2 : COMPOSITE MAPS TH2, WN2 AND BTK')
487 9011
FORMAT (2x,60i2)
508 SUBROUTINE w3xyp2 ( ISP, DTG, MAPSTA, MAPFS, VQ, VGX, VGY )
677 USE w3gdatmd,
ONLY:
nk,
nth,
dth,
xfr,
esin,
ecos,
sig,
nx,
ny, &
705 INTEGER,
INTENT(IN) :: ISP, MAPSTA(NY*NX), MAPFS(NY*NX)
706 REAL,
INTENT(IN) :: DTG, VGX, VGY
707 REAL,
INTENT(INOUT) :: VQ(1-NY:NY*(NX+2))
712 INTEGER :: ITH, IK, NTLOC, ITLOC, ISEA, IXY, &
714 INTEGER :: TTEST(2),DTTST
716 INTEGER,
SAVE :: IENT = 0
718 REAL :: CG0, CGA, CGN, CGX, CGY, CXC, CYC, &
719 CXMIN, CXMAX, CYMIN, CYMAX
720 REAL :: DTLOC, DTRAD, &
721 DFRR, CELLP, CGD, DSSD, &
722 DNND, DCELL, XWIND, TFAC, DSS, DNN
724 REAL :: RFAC, DFAC, DVQ, QXX, QXY, QYY
731 REAL :: VLCFLX((NX+1)*NY), VLCFLY((NX+1)*NY),&
732 VFDIFX(1-NY:NX*NY), VFDIFY(NX*NY), &
733 VFDIFC(1-NY:NX*NY), VDXX((NX+1)*NY), &
734 VDYY(NX*NY), VDXY((NX+1)*NY)
736 REAL :: CXTOT((NX+1)*NY), CYTOT(NX*NY)
737 REAL :: VQ_OLD(1-NY:NY*(NX+2))
739 REAL :: VFDIFX_FAC(1-NY:NX*NY), &
740 VFDIFY_FAC(1-NY:NX*NY), &
741 VFDIFC_FAC(1-NY:NX*NY)
747 CALL strace (ient,
'W3XYP2')
763 WRITE(
ndse,*)
'SUBROUTINE W3XYP2 IS NOT YET ADAPTED FOR '// &
764 'TRIPOLE GRIDS. STOPPING NOW.'
771 ith = 1 + mod(isp-1,
nth)
776 cgx = cga *
ecos(ith)
777 cgy = cga *
esin(ith)
784 cxmin = minval(
cx(1:
nsea) )
785 cxmax = maxval(
cx(1:
nsea) )
786 cymin = minval(
cy(1:
nsea) )
787 cymax = maxval(
cy(1:
nsea) )
788 IF ( abs(cgx+cxmin) .GT. abs(cgx+cxmax) )
THEN
793 IF ( abs(cgy+cymin) .GT. abs(cgy+cymax) )
THEN
798 cxc = max( abs(cxmin) , abs(cxmax) )
799 cyc = max( abs(cymin) , abs(cymax) )
801 cxc = max( abs(cxmin-vgx) , abs(cxmax-vgx) )
802 cyc = max( abs(cymin-vgy) , abs(cymax-vgy) )
809 cgn = 0.9999 * max( abs(cgx) , abs(cgy) , cxc, cyc, 0.001*cg0 )
811 ntloc = 1 + int(dtg/(
dtcfl*cg0/cgn))
812 dtloc = dtg / real(ntloc)
827 yfirst = mod(nint(dttst/dtg),2) .EQ. 0
830 WRITE (
ndst,9000) yfirst
838 IF (
dtme .NE. 0. )
THEN
842 dssd = ( dfrr * cgd )**2 *
dtme / 12.
843 dnnd = ( cgd *
dth )**2 *
dtme / 12.
886 vq(ixy) = vq(ixy) /
cg(ik,isea) *
clats(isea)
888 cytot(ixy) =
esin(ith) *
cg(ik,isea)
890 cxtot(ixy) = cxtot(ixy) - vgx/
clats(isea)
891 cytot(ixy) = cytot(ixy) - vgy
896 vq(ixy), cxtot(ixy), cytot(ixy)
910 cxtot(ixy) = cxtot(ixy) +
cx(isea)/
clats(isea)
911 cytot(ixy) = cytot(ixy) +
cy(isea)
914 vq(ixy), cxtot(ixy), cytot(ixy)
928 cp=cxtot(ixy)*
dpdx(iy,ix)+cytot(ixy)*
dpdy(iy,ix)
929 cq=cxtot(ixy)*
dqdx(iy,ix)+cytot(ixy)*
dqdy(iy,ix)
930 vlcflx(ixy) = cp*dtrad
931 vlcfly(ixy) = cq*dtrad
940 IF (
dtme .NE. 0. )
THEN
952 atrny(ixy,1) ,
atrny(ixy,-1) ) .GT. trnmin )
THEN
953 dcell = cgd * min(
hpfac(iy,ix)*rfac, &
954 hqfac(iy,ix)*rfac ) / cellp
955 xwind = 3.3 *
u10(isea)*
wn(ik,isea)/
sig(ik) - 2.3
956 xwind = max( 0. , min( 1. , xwind ) )
964 dss = xwind * dcell + (1.-xwind) * dssd * tfac
968 dnn = xwind * dcell + (1.-xwind) * dnnd * tfac
970 vdxx(ixy) = dtloc * (dss*
ecos(ith)**2+dnn*
esin(ith)**2)
971 vdyy(ixy) = dtloc * (dss*
esin(ith)**2+dnn*
ecos(ith)**2) &
973 vdxy(ixy) = dtloc * (dss-dnn) *
esin(ith)*
ecos(ith) &
999 vq(ixy)= vq(ixy) *
gsqrt(iy,ix)
1010 (nx, ny, nx, ny, vlcfly,
atrny, vq, &
1014 (nx, ny, nx, ny, vlcflx,
atrnx, vq, &
1021 (nx, ny, nx, ny, vlcfly,
atrny, vq, &
1025 (nx, ny, nx, ny, vlcflx,
atrnx, vq, &
1034 (nx, ny, nx, ny, vlcflx,
atrnx, vq, &
1038 (nx, ny, nx, ny, vlcfly,
atrny, vq, &
1045 (nx, ny, nx, ny, vlcflx,
atrnx, vq, &
1049 (nx, ny, nx, ny, vlcfly,
atrny, vq, &
1064 vq(ixy)= vq(ixy) /
gsqrt(iy,ix)
1075 REAL(NTLOC-ITLOC)/
REAL(NTLOC)
1077 IF ( rd2 .GT. 0.001 )
THEN
1078 rd2 = min(1.,max(0.,rd1/rd2))
1087 vq(ixy) = ( rd1*
bbpi0(isp,ibi) + rd2*
bbpin(isp,ibi) ) &
1094 IF (
dtme .NE. 0. )
THEN
1098 vq(iy+nx*ny) = vq(iy)
1106 vfdifx_fac(ixy) = 1.0
1111 vfdify_fac(ixy) = 1.0
1116 vfdifc_fac(ixy) = 1.0
1121 vfdifx_fac(iy-ny) = vfdifx_fac(iy+iy0)
1122 vfdifc_fac(iy-ny) = vfdifc_fac(iy+iy0)
1158 qxx = vfdifx_fac(ixy) *vq_old(ixy+ny) &
1159 - vfdifx_fac(ixy) *vq_old(ixy) &
1160 - vfdifx_fac(ixy-ny)*vq_old(ixy) &
1161 + vfdifx_fac(ixy-ny)*vq_old(ixy-ny)
1162 qyy = vfdify_fac(ixy) *vq_old(ixy+1) &
1163 - vfdify_fac(ixy) *vq_old(ixy) &
1164 - vfdify_fac(ixy-1) *vq_old(ixy) &
1165 + vfdify_fac(ixy-1) *vq_old(ixy-1)
1166 qxy = vfdifc_fac(ixy) *vq_old(ixy) &
1167 + vfdifc_fac(ixy-ny-1)*vq_old(ixy) &
1168 - vfdifc_fac(ixy-1) *vq_old(ixy) &
1169 - vfdifc_fac(ixy-ny) *vq_old(ixy) &
1170 + vfdifc_fac(ixy-ny) *vq_old(ixy+1) &
1171 - vfdifc_fac(ixy) *vq_old(ixy+1) &
1172 + vfdifc_fac(ixy-1) *vq_old(ixy-1) &
1173 - vfdifc_fac(ixy-ny-1)*vq_old(ixy-1) &
1174 + vfdifc_fac(ixy-1) *vq_old(ixy+ny) &
1175 - vfdifc_fac(ixy) *vq_old(ixy+ny) &
1176 + vfdifc_fac(ixy-ny) *vq_old(ixy-ny) &
1177 - vfdifc_fac(ixy-ny-1)*vq_old(ixy-ny) &
1178 + vfdifc_fac(ixy) *vq_old(ixy+ny+1) &
1179 - vfdifc_fac(ixy-1) *vq_old(ixy+ny-1) &
1180 + vfdifc_fac(ixy-ny-1)*vq_old(ixy-ny-1) &
1181 - vfdifc_fac(ixy-ny) *vq_old(ixy-ny+1)
1186 dvq = vdxx(ixy)*(
dpdx(iy,ix)*
dpdx(iy,ix)*qxx &
1187 + 2.0*
dpdx(iy,ix)*
dqdx(iy,ix)*qxy &
1189 + vdyy(ixy)*(
dpdy(iy,ix)*
dpdy(iy,ix)*qxx &
1190 + 2.0*
dpdy(iy,ix)*
dqdy(iy,ix)*qxy &
1192 + 2.0*vdxy(ixy)*(
dpdx(iy,ix)*
dpdy(iy,ix)*qxx &
1197 vq(ixy) = vq_old(ixy) + dvq * dfac
1207 yfirst = .NOT. yfirst
1222 IF ( mapsta(ixy) .GT. 0 )
THEN
1226 vq(ixy) = max( 0. ,
cg(ik,isea) /
clats(isea) * vq(ixy) )
1241 9000
FORMAT (
' TEST W3XYP2 : YFIRST :',l2)
1242 9001
FORMAT (
' TEST W3XYP2 : ISP, ITH, IK, COS-SIN :',i8,2i4,2f7.3)
1243 9002
FORMAT (
' TEST W3XYP2 : DFRR, CELLP, DTME :',3e10.3)
1244 9003
FORMAT (
' TEST W3XYP2 : NO DISPERSION CORRECTION ')
1245 9010
FORMAT (
' TEST W3XYP2 : INITIALIZE ARRAYS')
1246 9020
FORMAT (
' TEST W3XYP2 : CALCULATING LCFLX/Y AND DSS/NN (NSEA=', &
1248 9022
FORMAT (
' TEST W3XYP2 : CORRECTING FOR CURRENT')
1249 9040
FORMAT (
' TEST W3XYP2 : FIELD AFTER PROP. (NSEA=',i6,
')')
1252 9021
FORMAT (1x,i6,2i5,e12.4,2f7.3)
1255 9041
FORMAT (1x,i6,2i5,e12.4)
1302 SUBROUTINE w3ktp2 ( ISEA, FACTH, FACK, CTHG0, CG, WN, DEPTH, &
1303 DDDX, DDDY, CX, CY, DCXDX, DCXDY, &
1304 DCYDX, DCYDY, DCDX, DCDY, VA )
1433 INTEGER,
INTENT(IN) :: ISEA
1434 REAL,
INTENT(IN) :: FACTH, FACK, CTHG0, CG(0:NK+1), &
1435 WN(0:NK+1), DEPTH, DDDX, DDDY, &
1436 CX, CY, DCXDX, DCXDY, DCYDX, DCYDY
1437 REAL,
INTENT(IN) :: DCDX(0:NK+1), DCDY(0:NK+1)
1438 REAL,
INTENT(INOUT) :: VA(NSPEC)
1443 INTEGER :: ITH, IK, ISP
1445 INTEGER,
SAVE :: IENT = 0
1447 REAL :: FDDMAX, FDG, FKD, FKD0, DCYX, &
1448 DCXXYY, DCXY, DCXX, DCXYYX, DCYY
1449 REAL :: DSDD(0:NK+1), FRK(NK), FRG(NK), &
1450 FKC(NTH), VQ(-NK-1:NK2*(NTH+2)), &
1451 DB(NK2,NTH+1), DM(NK2,0:NTH+1), &
1452 VCFLT(NK2*(NTH+1)), CFLK(NK2,NTH)
1457 CALL strace (ient,
'W3KTP2')
1467 WRITE (
ndst,9010) isea, depth, cx, cy, dddx, dddy, &
1468 dcxdx, dcxdy, dcydx, dcydy
1475 IF ( depth*wn(ik) .LT. 5. )
THEN
1476 dsdd(ik) = max( 0. , &
1477 cg(ik)*wn(ik)-0.5*
sig(ik) ) / depth
1494 vq(
mapth2(isp)) = va(isp)
1507 fddmax = max(fddmax,abs(
esin(ith)*dddx-
ecos(ith)*dddy))
1511 frk(ik) = facth * dsdd(ik) / wn(ik)
1512 frk(ik) = frk(ik) / max( 1. , frk(ik)*fddmax/
ctmax )
1513 frg(ik) = fdg * cg(ik)
1530 fddmax = max( fddmax , abs( &
1535 frk(ik) = facth * cg(ik) * wn(ik) /
sig(ik)
1548 dcyx = facth * dcydx
1549 dcxxyy = facth * ( dcxdx - dcydy )
1550 dcxy = facth * dcxdy
1554 es2(isp)*dcyx +
esc(isp)*dcxxyy -
ec2(isp)*dcxy
1569 dcxyyx = - ( dcxdy + dcydx )
1571 fkd = ( cx*dddx + cy*dddy )
1574 fkc(ith) =
ec2(ith)*dcxx + &
1575 esc(ith)*dcxyyx +
es2(ith)*dcyy
1581 fkd0 = fkd / cg(ik) * dsdd(ik)
1583 cflk(ik+1,ith) = fkd0 + wn(ik)*fkc(ith)
1590 db(ik+1,1) =
dsip(ik) / cg(ik)
1591 dm(ik+1,1) = wn(ik+1) - wn(ik)
1593 db(nk+2,1) =
dsip(nk+1) / cg(nk+1)
1598 db(ik,ith) = db(ik,1)
1599 dm(ik,ith) = dm(ik,1)
1607 IF ( mod(
itime,2) .EQ. 0 )
THEN
1610 vq(nk+2+(ith-1)*nk2) =
fachfa * vq(nk+1+(ith-1)*nk2)
1614 CALL w3qck2 ( nth, nk2, nth, nk2, cflk, fack, db, dm, &
1615 vq, .false., 1,
mapth2, nspec, &
1616 mapwn2, nspec-nth, nspec, nspec+nth, &
1621 CALL w3uno2 ( nth, nk2, nth, nk2, cflk, fack, db, dm, &
1622 vq, .false., 1,
mapth2, nspec, &
1623 mapwn2, nspec-nth, nspec, nspec+nth, &
1630 CALL w3qck1 ( nth, nk2, nth, nk2, vcflt, vq, .true., &
1636 CALL w3uno2r( nth, nk2, nth, nk2, vcflt, vq, .true., &
1646 CALL w3qck1 ( nth, nk2, nth, nk2, vcflt, vq, .true., &
1652 CALL w3uno2r( nth, nk2, nth, nk2, vcflt, vq, .true., &
1660 vq(nk+2+(ith-1)*nk2) =
fachfa * vq(nk+1+(ith-1)*nk2)
1664 CALL w3qck2 ( nth, nk2, nth, nk2, cflk, fack, db, dm, &
1665 vq, .false., 1,
mapth2, nspec, &
1666 mapwn2, nspec-nth, nspec, nspec+nth, &
1671 CALL w3uno2 ( nth, nk2, nth, nk2, cflk, fack, db, dm, &
1672 vq, .false., 1,
mapth2, nspec, &
1673 mapwn2, nspec-nth, nspec, nspec+nth, &
1683 va(isp) = vq(
mapth2(isp))
1691 9000
FORMAT (
' TEST W3KTP2 : FLCTH-K, FACTH-K, CTMAX :', &
1693 9010
FORMAT (
' TEST W3KTP2 : LOCAL DATA :',i7,f7.1,2f6.2,1x,6e10.2)
1694 9020
FORMAT (
' TEST W3KTP2 : IK, T, L, CG, DSDD : ')
1695 9021
FORMAT (
' ',i3,f7.2,f7.1,f7.2,e11.3)
1699 9040
FORMAT (/
' TEST W3KTP2 : NORMALIZED ',a/)
1700 9041
FORMAT (1x,60(1x,i2))
1701 9042
FORMAT (1x,60i3)