65 subroutine ppm3d(IGD,Q,PS1,PS2,U,V,W,NDT,IORD,JORD,KORD,NC,IMR,
66 & jnp,j1,
nlay,
ap,
bp,pt,ae,fill,dum,umax)
279 real q(imr,jnp,
nlay,nc),ps1(imr,jnp),ps2(imr,jnp),
282 integer igd,iord,jord,kord,nc,imr,jnp,j1,
nlay,ae
285 logical cross, fill, dum
289 real crx(imr,jnp),cry(imr,jnp),xmass(imr,jnp),ymass(imr,jnp),
290 & fx1(imr+1),dpi(imr,jnp,
nlay),delp1(imr,jnp,
nlay),
291 & wk1(imr,jnp,
nlay),pu(imr,jnp),pv(imr,jnp),dc2(imr,jnp),
292 & delp2(imr,jnp,
nlay),dq(imr,jnp,
nlay,nc),va(imr,jnp),
293 & ua(imr,jnp),qtmp(-imr:2*imr)
297 real dtdx(jmax), dtdx5(jmax), acosp(jmax),
298 &
cosp(jmax), cose(jmax), dap(kmax),dbk(kmax)
299 data ndt0, nstep /0, 0/
301 SAVE dtdy, dtdy5, rcap, js0, jn0, iml,
302 & dtdx, dtdx5, acosp,
cosp, cose, dap,dbk
313 write(6,*)
'------------------------------------ '
314 write(6,*)
'NASA/GSFC Transport Core Version 4.5'
315 write(6,*)
'------------------------------------ '
317 WRITE(6,*)
'IMR=',imr,
' JNP=',jnp,
' NLAY=',
nlay,
' j1=',j1
318 WRITE(6,*)
'NC=',nc,iord,jord,kord,ndt
322 write(6,*)
'NLAY must be >= 6'
325 if (jnp.LT.
nlay)
then
326 write(6,*)
'JNP must be >= NLAY'
330 if (j1.eq.2.and.imrd2.NE.0)
then
331 write(6,*)
'if j1=2 IMR must be an even integer'
336 if(jmax.lt.jnp .or. kmax.lt.
nlay)
then
337 write(6,*)
'Jmax or Kmax is too small'
347 dl = 2.*
pi /
REAL(imr)
359 15 acosp(
j) = 1. /
cosp(
j)
363 rcap = dp / (imr*(1.-cos((j1-1.5)*dp)))
368 if(ndt0 .ne. ndt)
then
372 if(umax .lt. 180.)
then
373 write(6,*)
'Umax may be too small!'
375 cr1 = abs(umax*
dt)/(dl*ae)
376 maxdt = dp*ae / abs(umax) + 0.5
377 write(6,*)
'Largest time step for max(V)=',umax,
' is ',maxdt
378 if(maxdt .lt. abs(ndt))
then
379 write(6,*)
'Warning!!! NDT maybe too large!'
388 ztc = acos(cr1) * (180./
pi)
390 js0 =
REAL(jmr)*(90.-ztc)/180. + 2
392 iml = min(6*js0/(j1-1)+2, 4*imr/5)
401 dtdx5(
j) = 0.5*dtdx(
j)
418 delp1(
i,
j,
k)=dap(
k)+dbk(
k)*ps1(
i,
j)
419 delp2(
i,
j,
k)=dap(
k)+dbk(
k)*ps2(
i,
j)
429 q(
i, 2,
l,ic) =
q(
i, 1,
l,ic)
430 40
q(
i,jmr,
l,ic) =
q(
i,jnp,
l,ic)
445 call
a2c(
u(1,1,
k),
v(1,1,
k),imr,jmr,j1,j2,crx,cry,dtdx5,dtdy5)
450 45 crx(
i,
j) = dtdx(
j)*
u(
i-1,
j,
k)
454 50 crx(1,
j) = dtdx(
j)*
u(imr,
j,
k)
457 55 cry(
i,2) = dtdy*
v(
i,1,
k)
466 if(abs(crx(
i,
j)).GT.1.)
then
476 if(abs(crx(
i,
j)).GT.1.)
then
497 ymass(
i,
j) = cry(
i,
j)*d5*(delp2(
i,
j,
k) + delp2(
i,
j-1,
k))
503 95 dpi(
i,
j,
k) = (ymass(
i,
j) - ymass(
i,
j+1)) * acosp(
j)
506 sum1 = ymass(imr,j1 )
507 sum2 = ymass(imr,j2+1)
509 sum1 = sum1 + ymass(
i,j1 )
510 sum2 = sum2 + ymass(
i,j2+1)
524 pu(
i,
j) = 0.5 * (delp2(
i,
j,
k) + delp2(
i-1,
j,
k))
529 pu(1,
j) = 0.5 * (delp2(1,
j,
k) + delp2(imr,
j,
k))
534 110 xmass(
i,
j) = pu(
i,
j)*crx(
i,
j)
538 120 dpi(
i,
j,
k) = dpi(
i,
j,
k) + xmass(
i,
j) - xmass(
i+1,
j)
541 130 dpi(imr,
j,
k) = dpi(imr,
j,
k) + xmass(imr,
j) - xmass(1,
j)
545 ua(
i,
j) = 0.5 * (crx(
i,
j)+crx(
i+1,
j))
550 ua(imr,
j) = 0.5 * (crx(imr,
j)+crx(1,
j))
562 va(
i,2) = 0.5*(cry(
i,2)+cry(
i,3))
568 va(
i, 1) = 0.5*(cry(
i,2)-cry(
i+imh,2))
569 va(
i+imh, 1) = -va(
i,1)
570 va(
i, jnp) = 0.5*(cry(
i,jnp)-cry(
i+imh,jmr))
571 va(
i+imh,jnp) = -va(
i,jnp)
574 va(imr,jnp)=va(1,jnp)
587 if(
j.GT.js .and.
j.LT.jn) go to 250
590 qtmp(
i) =
q(
i,
j,
k,ic)
594 qtmp(
i) =
q(imr+
i,
j,
k,ic)
595 qtmp(imr+1-
i) =
q(1-
i,
j,
k,ic)
602 if(ua(
i,
j).GE.0.)
then
603 wk1(
i,
j,1) = qtmp(iiu)+ru*(qtmp(iiu-1)-qtmp(iiu))
605 wk1(
i,
j,1) = qtmp(iiu)+ru*(qtmp(iiu)-qtmp(iiu+1))
607 wk1(
i,
j,1) = wk1(
i,
j,1) - qtmp(
i)
615 qtmp(
i) =
q(
i,
j,
k,ic)
618 qtmp(0) =
q(imr,
j,
k,ic)
619 qtmp(imr+1) =
q( 1,
j,
k,ic)
623 wk1(
i,
j,1) = ua(
i,
j)*(qtmp(iu) - qtmp(iu+1))
630 jt =
REAL(J1) - va(
i,j1)
631 wk1(
i,j1,2) = va(
i,j1) * (
q(
i,jt,
k,ic) -
q(
i,jt+1,
k,ic))
635 wk1(
i,1,1) =
q(
i,1,
k,ic) + 0.5*wk1(
i,1,1)
636 wk1(
i,1,2) =
q(
i,1,
k,ic) + 0.5*wk1(
i,1,2)
652 call
xadv(imr,jnp,j1,j2,wk1(1,1,2),ua,js,jn,iml,dc2,iad)
653 call
yadv(imr,jnp,j1,j2,wk1(1,1,1),va,pv,w,jad)
661 call
xtp(imr,jnp,iml,j1,j2,jn,js,pu,dq(1,1,
k,ic),wk1(1,1,2)
662 & ,crx,fx1,xmass,iord)
664 call
ytp(imr,jnp,j1,j2,acosp,rcap,dq(1,1,
k,ic),wk1(1,1,1),cry,
665 & dc2,ymass,wk1(1,1,3),wk1(1,1,4),wk1(1,1,5),wk1(1,1,6),jord)
676 320 cry(
i,
j) = dpi(
i,
j,1)
681 cry(
i,
j) = cry(
i,
j) + dpi(
i,
j,
k)
690 ps2(
i,
j) = ps1(
i,
j) + cry(
i,
j)
694 w(
i,
j,1) = dpi(
i,
j,1) - dbk(1)*cry(
i,
j)
707 delp2(
i,
j,
k) = dap(
k) + dbk(
k)*ps2(
i,
j)
715 call
fzppm(imr,jnp,
nlay,j1,dq(1,1,1,ic),w,
q(1,1,1,ic),wk1,dpi,
716 & dc2,crx,cry,pu,pv,xmass,ymass,delp1,krd)
719 if(fill) call
qckxyz(dq(1,1,1,ic),dc2,imr,jnp,
nlay,j1,j2,
738 q(
i, 2,
k,ic) =
q(
i, 1,
k,ic)
739 q(
i,jmr,
k,ic) =
q(
i,jnp,
k,ic)
747 w(
i, 2,
k) = w(
i, 1,
k)
748 w(
i,jmr,
k) = w(
i,jnp,
k)
756 subroutine fzppm(IMR,JNP,NLAY,j1,DQ,WZ,P,DC,DQDT,AR,AL,A6,
757 & flux,wk1,wk2,wz2,delp,kord)
761 & wk1(imr,*),delp(imr,jnp,
nlay),dq(imr,jnp,
nlay),
764 real ar(imr,*),al(imr,*),a6(imr,*),flux(imr,*),wk2(imr,*),
779 dqdt(
i,1,
k) = p(
i,1,
k+1) - p(
i,1,
k)
784 c0 = delp(
i,1,
k) / (delp(
i,1,
k-1)+delp(
i,1,
k)+delp(
i,1,
k+1))
785 c1 = (delp(
i,1,
k-1)+0.5*delp(
i,1,
k))/(delp(
i,1,
k+1)+delp(
i,1,
k))
786 c2 = (delp(
i,1,
k+1)+0.5*delp(
i,1,
k))/(delp(
i,1,
k-1)+delp(
i,1,
k))
787 tmp = c0*(c1*dqdt(
i,1,
k) + c2*dqdt(
i,1,
k-1))
788 qmax = max(p(
i,1,
k-1),p(
i,1,
k),p(
i,1,
k+1)) - p(
i,1,
k)
789 qmin = p(
i,1,
k) - min(p(
i,1,
k-1),p(
i,1,
k),p(
i,1,
k+1))
790 dc(
i,1,
k) = sign(min(abs(tmp),qmax,qmin), tmp)
799 if((
j.eq.2 .or.
j.eq.jmr) .and. j1.ne.2) goto 2000
805 wk2(
i,
k) = delp(
i,
j,
k)
806 flux(
i,
k) = dc(
i,
j,
k)
823 a = 3.*( dqdt(
i,
j,2) - dqdt(
i,
j,1)*(wk2(
i,2)+wk2(
i,3))/
824 & (wk2(
i,1)+wk2(
i,2)) ) /
825 & ( (wk2(
i,2)+wk2(
i,3))*(wk2(
i,1)+wk2(
i,2)+wk2(
i,3)) )
826 b = 2.*dqdt(
i,
j,1)/(wk2(
i,1)+wk2(
i,2)) -
827 & r23*a*(2.*wk2(
i,1)+wk2(
i,2))
828 al(
i,1) = wk1(
i,1) - wk2(
i,1)*(r3*a*wk2(
i,1) + 0.5*b)
829 al(
i,2) = wk2(
i,1)*(a*wk2(
i,1) + b) + al(
i,1)
832 if(wk1(
i,1)*al(
i,1).le.0.)
then
836 flux(
i,1) = wk1(
i,1) - al(
i,1)
844 fct = dqdt(
i,
j,nlaym1)*wk2(
i,
nlay)**2 /
845 & ( (wk2(
i,
nlay)+wk2(
i,nlaym1))*(2.*wk2(
i,
nlay)+wk2(
i,nlaym1)))
859 c1 = dqdt(
i,
j,
k-1)*wk2(
i,
k-1) / (wk2(
i,
k-1)+wk2(
i,
k))
860 c2 = 2. / (wk2(
i,
k-2)+wk2(
i,
k-1)+wk2(
i,
k)+wk2(
i,
k+1))
861 a1 = (wk2(
i,
k-2)+wk2(
i,
k-1)) / (2.*wk2(
i,
k-1)+wk2(
i,
k))
862 a2 = (wk2(
i,
k )+wk2(
i,
k+1)) / (2.*wk2(
i,
k)+wk2(
i,
k-1))
863 al(
i,
k) = wk1(
i,
k-1) + c1 + c2 *
864 & ( wk2(
i,
k )*(c1*(a1 - a2)+a2*flux(
i,
k-1)) -
865 & wk2(
i,
k-1)*a1*flux(
i,
k) )
876 a6(
i,1) = 3.*(wk1(
i,1)+wk1(
i,1) - (al(
i,1)+ar(
i,1)))
882 call
lmtppm(flux(1,1),a6(1,1),ar(1,1),al(1,1),wk1(1,1),imr,0)
888 & call
lmtppm(flux(1,2),a6(1,2),ar(1,2),al(1,2),wk1(1,2),
893 DO 140
i=1,imr*nlaym1
894 IF(wz2(
i,1).GT.0.)
then
895 cm = wz2(
i,1) / wk2(
i,1)
896 flux(
i,2) = ar(
i,1)+0.5*cm*(al(
i,1)-ar(
i,1)+a6(
i,1)*(1.-r23*cm))
899 cp= wz2(
i,1) / wk2(
i,2)
901 flux(
i,2) = al(
i,2)+0.5*cp*(al(
i,2)-ar(
i,2)-a6(
i,2)*(1.+r23*cp))
906 DO 250
i=1,imr*nlaym1
907 flux(
i,2) = wz2(
i,1) * flux(
i,2)
911 dq(
i,
j, 1) = dq(
i,
j, 1) - flux(
i, 2)
917 360 dq(
i,
j,
k) = dq(
i,
j,
k) + flux(
i,
k) - flux(
i,
k+1)
922 subroutine xtp(IMR,JNP,IML,j1,j2,JN,JS,PU,DQ,Q,UC,
924 dimension uc(imr,*),dc(-iml:imr+iml+1),xmass(imr,jnp)
925 & ,fx1(imr+1),dq(imr,jnp),qtmp(-iml:imr+1+iml)
926 dimension pu(imr,jnp),
q(imr,jnp),isave(imr)
941 if(
j.ge.jn .or.
j.le.js) goto 2222
945 qtmp(-1) =
q(imr-1,
j)
949 IF(iord.eq.1 .or.
j.eq.j1. or.
j.eq.j2)
THEN
951 iu =
REAL(i) - uc(
i,
j)
952 1406 fx1(
i) = qtmp(iu)
954 call
xmist(imr,iml,qtmp,dc)
957 if(iord.eq.2 .or.
j.le.j1vl .or.
j.ge.j2vl)
then
959 iu =
REAL(i) - uc(
i,
j)
960 1408 fx1(
i) = qtmp(iu) + dc(iu)*(sign(1.,uc(
i,
j))-uc(
i,
j))
962 call
fxppm(imr,iml,uc(1,
j),qtmp,dc,fx1,iord)
968 1506 fx1(
i) = fx1(
i)*xmass(
i,
j)
978 qtmp(imp-
i) =
q(1-
i,
j)
981 IF(iord.eq.1 .or.
j.eq.j1. or.
j.eq.j2)
THEN
986 1306 fx1(
i) = (uc(
i,
j) - itmp)*qtmp(iu)
988 call
xmist(imr,iml,qtmp,dc)
1000 1307 fx1(
i) = rut*(qtmp(iu) + dc(iu)*(sign(1.,rut) - rut))
1004 IF(uc(
i,
j).GT.1.)
then
1006 do ist = isave(
i),
i-1
1007 fx1(
i) = fx1(
i) + qtmp(ist)
1009 elseIF(uc(
i,
j).LT.-1.)
then
1010 do ist =
i,isave(
i)-1
1011 fx1(
i) = fx1(
i) - qtmp(ist)
1017 fx1(
i) = pu(
i,
j)*fx1(
i)
1022 1309 fx1(imp) = fx1(1)
1024 1215 dq(
i,
j) = dq(
i,
j) + fx1(
i)-fx1(
i+1)
1032 subroutine fxppm(IMR,IML,UT,P,DC,flux,IORD)
1034 dimension ut(*),flux(*),p(-iml:imr+iml+1),dc(-iml:imr+iml+1)
1035 dimension ar(0:imr),al(0:imr),a6(0:imr)
1062 10 al(
i) = 0.5*(p(
i-1)+p(
i)) + (dc(
i-1) - dc(
i))*r3
1069 30 a6(
i) = 3.*(p(
i)+p(
i) - (al(
i)+ar(
i)))
1071 if(lmt.LE.2) call
lmtppm(dc(1),a6(1),ar(1),al(1),p(1),imr,lmt)
1078 IF(ut(
i).GT.0.)
then
1079 flux(
i) = ar(
i-1) + 0.5*ut(
i)*(al(
i-1) - ar(
i-1) +
1080 & a6(
i-1)*(1.-r23*ut(
i)) )
1082 flux(
i) = al(
i) - 0.5*ut(
i)*(ar(
i) - al(
i) +
1083 & a6(
i)*(1.+r23*ut(
i)))
1091 dimension p(-iml:imr+1+iml),dc(-iml:imr+1+iml)
1094 tmp = r24*(8.*(p(
i+1) - p(
i-1)) + p(
i-2) - p(
i+2))
1095 pmax = max(p(
i-1), p(
i), p(
i+1)) - p(
i)
1096 pmin = p(
i) - min(p(
i-1), p(
i), p(
i+1))
1097 10 dc(
i) = sign(min(abs(tmp),pmax,pmin), tmp)
1101 subroutine ytp(IMR,JNP,j1,j2,acosp,RCAP,DQ,P,VC,DC2
1102 & ,ymass,
fx,a6,ar,al,jord)
1103 dimension p(imr,jnp),vc(imr,jnp),ymass(imr,jnp)
1104 & ,dc2(imr,jnp),dq(imr,jnp),acosp(jnp)
1106 dimension
fx(imr,jnp),ar(imr,jnp),al(imr,jnp),a6(imr,jnp)
1113 jt =
REAL(J1) - vc(
i,j1)
1114 1000
fx(
i,j1) = p(
i,jt)
1117 call
ymist(imr,jnp,j1,p,dc2,4)
1119 if(jord.LE.0 .or. jord.GE.3)
then
1121 call
fyppm(vc,p,dc2,
fx,imr,jnp,j1,j2,a6,ar,al,jord)
1125 jt =
REAL(J1) - vc(
i,j1)
1126 1200
fx(
i,j1) = p(
i,jt) + (sign(1.,vc(
i,j1))-vc(
i,j1))*dc2(
i,jt)
1131 1300
fx(
i,j1) =
fx(
i,j1)*ymass(
i,j1)
1141 sum1 = sum1 +
fx(
i,j1 )
1142 sum2 = sum2 +
fx(
i,j2+1)
1145 sum1 = dq(1, 1) - sum1 * rcap
1146 sum2 = dq(1,jnp) + sum2 * rcap
1164 dimension p(imr,jnp),dc(imr,jnp)
1171 do 10
i=1,imr*(jmr-1)
1172 tmp = 0.25*(p(
i,3) - p(
i,1))
1173 pmax = max(p(
i,1),p(
i,2),p(
i,3)) - p(
i,2)
1174 pmin = p(
i,2) - min(p(
i,1),p(
i,2),p(
i,3))
1175 dc(
i,2) = sign(min(abs(tmp),pmin,pmax),tmp)
1180 tmp = (8.*(p(
i,3) - p(
i,1)) + p(
i+imh,2) - p(
i,4))*r24
1181 pmax = max(p(
i,1),p(
i,2),p(
i,3)) - p(
i,2)
1182 pmin = p(
i,2) - min(p(
i,1),p(
i,2),p(
i,3))
1183 dc(
i,2) = sign(min(abs(tmp),pmin,pmax),tmp)
1185 tmp=(8.*(p(
i,jnp)-p(
i,jmr-1))+p(
i,jmr-2)-p(
i+imh,jmr))*r24
1186 pmax = max(p(
i,jmr-1),p(
i,jmr),p(
i,jnp)) - p(
i,jmr)
1187 pmin = p(
i,jmr) - min(p(
i,jmr-1),p(
i,jmr),p(
i,jnp))
1188 dc(
i,jmr) = sign(min(abs(tmp),pmin,pmax),tmp)
1192 tmp = (8.*(p(
i,3) - p(
i,1)) + p(
i-imh,2) - p(
i,4))*r24
1193 pmax = max(p(
i,1),p(
i,2),p(
i,3)) - p(
i,2)
1194 pmin = p(
i,2) - min(p(
i,1),p(
i,2),p(
i,3))
1195 dc(
i,2) = sign(min(abs(tmp),pmin,pmax),tmp)
1197 tmp=(8.*(p(
i,jnp)-p(
i,jmr-1))+p(
i,jmr-2)-p(
i-imh,jmr))*r24
1198 pmax = max(p(
i,jmr-1),p(
i,jmr),p(
i,jnp)) - p(
i,jmr)
1199 pmin = p(
i,jmr) - min(p(
i,jmr-1),p(
i,jmr),p(
i,jnp))
1200 dc(
i,jmr) = sign(min(abs(tmp),pmin,pmax),tmp)
1204 tmp = (8.*(p(
i,4) - p(
i,2)) + p(
i,1) - p(
i,5))*r24
1205 pmax = max(p(
i,2),p(
i,3),p(
i,4)) - p(
i,3)
1206 pmin = p(
i,3) - min(p(
i,2),p(
i,3),p(
i,4))
1207 dc(
i,3) = sign(min(abs(tmp),pmin,pmax),tmp)
1221 tmp = 0.25*(p(
i,2) - p(
i+imh,2))
1222 pmax = max(p(
i,2),p(
i,1), p(
i+imh,2)) - p(
i,1)
1223 pmin = p(
i,1) - min(p(
i,2),p(
i,1), p(
i+imh,2))
1224 dc(
i,1)=sign(min(abs(tmp),pmax,pmin),tmp)
1226 tmp = 0.25*(p(
i+imh,jmr) - p(
i,jmr))
1227 pmax = max(p(
i+imh,jmr),p(
i,jnp), p(
i,jmr)) - p(
i,jnp)
1228 pmin = p(
i,jnp) - min(p(
i+imh,jmr),p(
i,jnp), p(
i,jmr))
1229 dc(
i,jnp) = sign(min(abs(tmp),pmax,pmin),tmp)
1233 dc(
i, 1) = - dc(
i-imh, 1)
1234 dc(
i,jnp) = - dc(
i-imh,jnp)
1240 subroutine fyppm(VC,P,DC,flux,IMR,JNP,j1,j2,A6,AR,AL,JORD)
1242 real vc(imr,*),flux(imr,*),p(imr,*),dc(imr,*)
1244 real ar(imr,jnp),al(imr,jnp),a6(imr,jnp)
1253 imjm1 = imr*(j2-j1+2)
1275 al(
i,2) = 0.5*(p(
i,1)+p(
i,2)) + (dc(
i,1) - dc(
i,2))*r3
1282 al(
i,1) = al(
i+imh,2)
1283 al(
i+imh,1) = al(
i,2)
1285 ar(
i,jnp) = ar(
i+imh,jmr)
1286 ar(
i+imh,jnp) = ar(
i,jmr)
1293 ar(imr,jnp)=al(1,jnp)
1298 30 a6(
i,j11) = 3.*(p(
i,j11)+p(
i,j11) - (al(
i,j11)+ar(
i,j11)))
1300 if(lmt.le.2) call
lmtppm(dc(1,j11),a6(1,j11),ar(1,j11)
1301 & ,al(1,j11),p(1,j11),len,lmt)
1305 IF(vc(
i,j1).GT.0.)
then
1306 flux(
i,j1) = ar(
i,j11) + 0.5*vc(
i,j1)*(al(
i,j11) - ar(
i,j11) +
1307 & a6(
i,j11)*(1.-r23*vc(
i,j1)) )
1309 flux(
i,j1) = al(
i,j1) - 0.5*vc(
i,j1)*(ar(
i,j1) - al(
i,j1) +
1310 & a6(
i,j1)*(1.+r23*vc(
i,j1)))
1316 subroutine yadv(IMR,JNP,j1,j2,p,VA,ady,wk,IAD)
1317 REAL p(imr,jnp),ady(imr,jnp),va(imr,jnp)
1318 REAL wk(imr,-1:jnp+2)
1329 wk(
i, -1) = p(
i+imh,3)
1330 wk(
i+imh,-1) = p(
i,3)
1331 wk(
i, 0) = p(
i+imh,2)
1332 wk(
i+imh,0) = p(
i,2)
1333 wk(
i,jnp+1) = p(
i+imh,jmr)
1334 wk(
i+imh,jnp+1) = p(
i,jmr)
1335 wk(
i,jnp+2) = p(
i+imh,jnp-2)
1336 wk(
i+imh,jnp+2) = p(
i,jnp-2)
1349 a1 = 0.5*(wk(
i,jp+1)+wk(
i,jp-1)) - wk(
i,jp)
1350 b1 = 0.5*(wk(
i,jp+1)-wk(
i,jp-1))
1352 ady(
i,
j) = wk(
i,jp) + rv*(a1*rv + b1) - wk(
i,
j)
1357 ELSEIF(iad.eq.1)
then
1360 jp =
REAL(
j)-va(
i,
j)
1361 ady(
i,
j) = va(
i,
j)*(wk(
i,jp)-wk(
i,jp+1))
1370 sum1 = sum1 + ady(
i,2)
1371 sum2 = sum2 + ady(
i,jmr)
1387 sum1 = sum1 + ady(
i,1)
1388 sum2 = sum2 + ady(
i,jnp)
1402 subroutine xadv(IMR,JNP,j1,j2,p,UA,JS,JN,IML,adx,IAD)
1403 REAL p(imr,jnp),adx(imr,jnp),qtmp(-imr:imr+imr),ua(imr,jnp)
1407 if(
j.GT.js .and.
j.LT.jn) go to 1309
1414 qtmp(
i) = p(imr+
i,
j)
1415 qtmp(imr+1-
i) = p(1-
i,
j)
1423 a1 = 0.5*(qtmp(ip+1)+qtmp(ip-1)) - qtmp(ip)
1424 b1 = 0.5*(qtmp(ip+1)-qtmp(ip-1))
1425 adx(
i,
j) = qtmp(ip) + ru*(a1*ru + b1)
1427 ELSEIF(iad.eq.1)
then
1432 if(ua(
i,
j).GE.0.)
then
1433 adx(
i,
j) = qtmp(iiu)+ru*(qtmp(iiu-1)-qtmp(iiu))
1435 adx(
i,
j) = qtmp(iiu)+ru*(qtmp(iiu)-qtmp(iiu+1))
1441 adx(
i,
j) = adx(
i,
j) - p(
i,
j)
1454 qtmp(imr+1) = p(1,
j)
1457 qtmp(-1) = p(imr-1,
j)
1458 qtmp(imr+2) = p(2,
j)
1463 a1 = 0.5*(qtmp(ip+1)+qtmp(ip-1)) - qtmp(ip)
1464 b1 = 0.5*(qtmp(ip+1)-qtmp(ip-1))
1465 adx(
i,
j) = qtmp(ip)- p(
i,
j) + ru*(a1*ru + b1)
1467 ELSEIF(iad.eq.1)
then
1471 adx(
i,
j) = ua(
i,
j)*(qtmp(ip)-qtmp(ip+1))
1511 if(dc(
i).eq.0.)
then
1519 if(a6da .lt. -da2)
then
1520 a6(
i) = 3.*(al(
i)-p(
i))
1521 ar(
i) = al(
i) - a6(
i)
1522 elseif(a6da .gt. da2)
then
1523 a6(
i) = 3.*(ar(
i)-p(
i))
1524 al(
i) = ar(
i) - a6(
i)
1528 elseif(lmt.eq.1)
then
1531 if(abs(ar(
i)-al(
i)) .GE. -a6(
i)) go to 150
1532 if(p(
i).lt.ar(
i) .and. p(
i).lt.al(
i))
then
1536 elseif(ar(
i) .gt. al(
i))
then
1537 a6(
i) = 3.*(al(
i)-p(
i))
1538 ar(
i) = al(
i) - a6(
i)
1540 a6(
i) = 3.*(ar(
i)-p(
i))
1541 al(
i) = ar(
i) - a6(
i)
1544 elseif(lmt.eq.2)
then
1546 if(abs(ar(
i)-al(
i)) .GE. -a6(
i)) go to 250
1547 fmin = p(
i) + 0.25*(ar(
i)-al(
i))**2/a6(
i) + a6(
i)*r12
1548 if(fmin.ge.0.) go to 250
1549 if(p(
i).lt.ar(
i) .and. p(
i).lt.al(
i))
then
1553 elseif(ar(
i) .gt. al(
i))
then
1554 a6(
i) = 3.*(al(
i)-p(
i))
1555 ar(
i) = al(
i) - a6(
i)
1557 a6(
i) = 3.*(ar(
i)-p(
i))
1558 al(
i) = ar(
i) - a6(
i)
1565 subroutine a2c(U,V,IMR,JMR,j1,j2,CRX,CRY,dtdx5,DTDY5)
1566 dimension
u(imr,*),
v(imr,*),crx(imr,*),cry(imr,*),dtdx5(*)
1570 35 crx(
i,
j) = dtdx5(
j)*(
u(
i,
j)+
u(
i-1,
j))
1573 45 crx(1,
j) = dtdx5(
j)*(
u(1,
j)+
u(imr,
j))
1576 55 cry(
i,2) = dtdy5*(
v(
i,2)+
v(
i,1))
1580 subroutine cosa(cosp,cose,JNP,PI,DP)
1581 dimension
cosp(*),cose(*)
1584 ph5 = -0.5*
pi + (
REAL(
j-1)-0.5)*dp
1585 55 cose(
j) = cos(ph5)
1588 if(jmr .eq. 2*(jmr/2) )
then
1590 cose(
j) = cose(jnp+2-
j)
1596 cose(
j) = cose(jnp+2-
j)
1601 66
cosp(
j) = 0.5*(cose(
j)+cose(
j+1))
1607 subroutine cosc(cosp,cose,JNP,PI,DP)
1608 dimension
cosp(*),cose(*)
1613 55
cosp(
j) = cos(phi)
1622 cosp(
j) = 0.5*(cose(
j)+cose(
j+1))
1627 SUBROUTINE qckxyz (Q,qtmp,IMR,JNP,NLAY,j1,j2,cosp,acosp,
1631 dimension
q(imr,jnp,
nlay),qtmp(imr,jnp),
cosp(*),acosp(*)
1641 call
filns(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,ipy,tiny)
1642 if(ipy.eq.0) goto 50
1643 call
filew(
q(1,1,
l),qtmp,imr,jnp,j1,j2,ipx,tiny)
1644 if(ipx.eq.0) goto 50
1647 call
filcr(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,icr,tiny)
1649 if(icr.eq.0) goto 50
1653 IF(
q(
i,j1,1).LT.0.)
THEN
1655 q(
i,j1,2) =
q(
i,j1,2) +
q(
i,j1,1)
1664 call
filns(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,ipy,tiny)
1665 if(ipy.eq.0) goto 225
1666 call
filew(
q(1,1,
l),qtmp,imr,jnp,j1,j2,ipx,tiny)
1667 if(ipx.eq.0) go to 225
1669 call
filcr(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,icr,tiny)
1671 if(icr.eq.0) goto 225
1674 IF(
q(
i,j1,
l).LT.0.)
THEN
1681 q(
i,j1,
l-1) = qup - dup
1682 q(
i,j1,
l ) = dup-qly
1694 call
filns(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,ipy,tiny)
1695 if(ipy.eq.0) goto 911
1696 call
filew(
q(1,1,
l),qtmp,imr,jnp,j1,j2,ipx,tiny)
1697 if(ipx.eq.0) goto 911
1699 call
filcr(
q(1,1,
l),imr,jnp,j1,j2,
cosp,acosp,icr,tiny)
1700 if(icr.eq.0) goto 911
1703 IF(
q(
i,j1,
l).LT.0.)
THEN
1708 qup =
q(
i,j1,nlaym1)
1711 q(
i,j1,nlaym1) = qup - dup
1721 write(6,*)
'IC=',ic,
' STEP=',nstep,
1722 &
' Vertical filling pts=',ip
1725 if(sum.gt.1.e-25)
then
1726 write(6,*) ic,nstep,
' Mass source from the ground=',sum
1731 subroutine filcr(q,IMR,JNP,j1,j2,cosp,acosp,icr,tiny)
1732 dimension
q(imr,*),
cosp(*),acosp(*)
1736 IF(
q(
i,
j).LT.0.)
THEN
1743 q(
i+1,
j+1) = (dn - d1)*acosp(
j+1)
1749 q(
i+1,
j-1) = (ds - d2)*acosp(
j-1)
1750 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1753 if(icr.eq.0 .and.
q(imr,
j).ge.0.) goto 65
1755 IF(
q(
i,
j).LT.0.)
THEN
1762 q(
i-1,
j+1) = (dn - d1)*acosp(
j+1)
1768 q(
i-1,
j-1) = (ds - d2)*acosp(
j-1)
1769 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1775 IF(
q(
i,
j).LT.0.)
THEN
1782 q(imr,
j+1) = (dn - d1)*acosp(
j+1)
1788 q(imr,
j-1) = (ds - d2)*acosp(
j-1)
1789 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1794 IF(
q(
i,
j).LT.0.)
THEN
1801 q(1,
j+1) = (dn - d1)*acosp(
j+1)
1807 q(1,
j-1) = (ds - d2)*acosp(
j-1)
1808 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1814 if(
q(
i,j1).lt.0. .or.
q(
i,j2).lt.0.)
then
1822 if(
q(1,1).lt.0. .or.
q(1,jnp).lt.0.)
then
1829 subroutine filns(q,IMR,JNP,j1,j2,cosp,acosp,ipy,tiny)
1830 dimension
q(imr,*),
cosp(*),acosp(*)
1836 dp = 4.*atan(1.)/
REAL(jnp-1)
1837 cap1 = imr*(1.-cos((j1-1.5)*dp))/dp
1844 IF(
q(
i,
j).LT.0.)
THEN
1851 q(
i,
j+1) = (dn - d1)*acosp(
j+1)
1857 q(
i,
j-1) = (ds - d2)*acosp(
j-1)
1858 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1863 IF(
q(
i,j1).LT.0.)
THEN
1867 dn =
q(
i,j1+1)*
cosp(j1+1)
1870 q(
i,j1+1) = (dn - d1)*acosp(j1+1)
1871 q(
i,j1) = (d1 - dq)*acosp(j1) + tiny
1877 IF(
q(
i,
j).LT.0.)
THEN
1884 q(
i,
j-1) = (ds - d2)*acosp(
j-1)
1885 q(
i,
j) = (d2 - dq)*acosp(
j) + tiny
1890 if(
q(1,1).lt.0.)
then
1891 dq =
q(1,1)*cap1/
REAL(imr)*acosp(j1)
1894 q(
i,j1) =
q(
i,j1) + dq
1895 if(
q(
i,j1).lt.0.) ipy = 1
1899 if(
q(1,jnp).lt.0.)
then
1900 dq =
q(1,jnp)*cap1/
REAL(imr)*acosp(j2)
1903 q(
i,j2) =
q(
i,j2) + dq
1904 if(
q(
i,j2).lt.0.) ipy = 1
1911 subroutine filew(q,qtmp,IMR,JNP,j1,j2,ipx,tiny)
1912 dimension
q(imr,*),qtmp(jnp,imr)
1918 25 qtmp(
j,
i) =
q(
i,
j)
1922 if(qtmp(
j,
i).lt.0.)
then
1925 d0 = max(0.,qtmp(
j,
i-1))
1926 d1 = min(-qtmp(
j,
i),d0)
1927 qtmp(
j,
i-1) = qtmp(
j,
i-1) - d1
1928 qtmp(
j,
i) = qtmp(
j,
i) + d1
1930 d0 = max(0.,qtmp(
j,
i+1))
1931 d2 = min(-qtmp(
j,
i),d0)
1932 qtmp(
j,
i+1) = qtmp(
j,
i+1) - d2
1933 qtmp(
j,
i) = qtmp(
j,
i) + d2 + tiny
1939 if(qtmp(
j,
i).lt.0.)
then
1942 d0 = max(0.,qtmp(
j,imr))
1943 d1 = min(-qtmp(
j,
i),d0)
1944 qtmp(
j,imr) = qtmp(
j,imr) - d1
1945 qtmp(
j,
i) = qtmp(
j,
i) + d1
1947 d0 = max(0.,qtmp(
j,
i+1))
1948 d2 = min(-qtmp(
j,
i),d0)
1949 qtmp(
j,
i+1) = qtmp(
j,
i+1) - d2
1951 qtmp(
j,
i) = qtmp(
j,
i) + d2 + tiny
1956 if(qtmp(
j,
i).lt.0.)
then
1959 d0 = max(0.,qtmp(
j,
i-1))
1960 d1 = min(-qtmp(
j,
i),d0)
1961 qtmp(
j,
i-1) = qtmp(
j,
i-1) - d1
1962 qtmp(
j,
i) = qtmp(
j,
i) + d1
1964 d0 = max(0.,qtmp(
j,1))
1965 d2 = min(-qtmp(
j,
i),d0)
1966 qtmp(
j,1) = qtmp(
j,1) - d2
1968 qtmp(
j,
i) = qtmp(
j,
i) + d2 + tiny
1975 85
q(
i,
j) = qtmp(
j,
i)
1979 if(
q(1,1).lt.0. or.
q(1,jnp).lt.0.) ipx = 1
1994 qtmp(
i,
k) =
q(
i,km+1-
k,ic)
1998 2000
q(
i,1,ic) = qtmp(
i,1)