Changeset 24 for trunk/src/calcpv_nests.f90
- Timestamp:
- May 23, 2014, 11:48:41 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/calcpv_nests.f90
r4 r24 21 21 22 22 subroutine calcpv_nests(l,n,uuhn,vvhn,pvhn) 23 ! 23 ! i i i i o 24 24 !***************************************************************************** 25 25 ! * … … 48 48 integer :: nlck,l 49 49 real :: vx(2),uy(2),phi,tanphi,cosphi,dvdx,dudy,f 50 real :: theta,thetap,thetam,dthetadp,dt1,dt2,dt ,ppmk51 real :: ppml( nuvzmax)50 real :: theta,thetap,thetam,dthetadp,dt1,dt2,dt 51 real :: ppml(0:nxmaxn-1,0:nymaxn-1,nuvzmax),ppmk(0:nxmaxn-1,0:nymaxn-1,nuvzmax) 52 52 real :: thup,thdn 53 53 real,parameter :: eps=1.e-5,p0=101325 … … 61 61 ! Loop over entire grid 62 62 !********************** 63 do kl=1,nuvz 64 do jy=0,nyn(l)-1 65 do ix=0,nxn(l)-1 66 ppml(ix,jy,kl)=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l) 67 enddo 68 enddo 69 enddo 70 ppmk=(100000./ppml)**kappa 71 63 72 do jy=0,nyn(l)-1 64 73 phi = (ylat0n(l) + jy * dyn(l)) * pi / 180. … … 88 97 if (ix.eq.0.or.ix.eq.nxn(l)-1) jumpx=1 89 98 jux=jumpx 90 ! Precalculate pressure values for efficiency91 do kl=1,nuvz92 ppml(kl)=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l)93 end do94 99 ! 95 100 ! Loop over the vertical … … 97 102 98 103 do kl=1,nuvz 99 ppmk=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l) 100 theta=tthn(ix,jy,kl,n,l)*(100000./ppmk)**kappa 104 theta=tthn(ix,jy,kl,n,l)*ppmk(ix,jy,kl) 101 105 klvrp=kl+1 102 106 klvrm=kl-1 … … 107 111 if (klvrp.gt.nuvz) klvrp=nuvz 108 112 if (klvrm.lt.1) klvrm=1 109 ppmk=akz(klvrp)+bkz(klvrp)*psn(ix,jy,1,n,l) 110 thetap=tthn(ix,jy,klvrp,n,l)*(100000./ppmk)**kappa 111 ppmk=akz(klvrm)+bkz(klvrm)*psn(ix,jy,1,n,l) 112 thetam=tthn(ix,jy,klvrm,n,l)*(100000./ppmk)**kappa 113 dthetadp=(thetap-thetam)/(ppml(klvrp)-ppml(klvrm)) 113 thetap=tthn(ix,jy,klvrp,n,l)*ppmk(ix,jy,klvrp) 114 thetam=tthn(ix,jy,klvrm,n,l)*ppmk(ix,jy,klvrm) 115 dthetadp=(thetap-thetam)/(ppml(ix,jy,klvrp)-ppml(ix,jy,klvrm)) 114 116 115 117 ! Compute vertical position at pot. temperature surface on subgrid … … 134 136 kch=kch+1 135 137 k=kup 136 ppmk=akz(k)+bkz(k)*psn(ivr,jy,1,n,l) 137 thdn=tthn(ivr,jy,k,n,l)*(100000./ppmk)**kappa 138 ppmk=akz(k+1)+bkz(k+1)*psn(ivr,jy,1,n,l) 139 thup=tthn(ivr,jy,k+1,n,l)*(100000./ppmk)**kappa 138 thdn=tthn(ivr,jy,k,n,l)*ppmk(ivr,jy,k) 139 thup=tthn(ivr,jy,k+1,n,l)*ppmk(ivr,jy,k+1) 140 140 141 141 if (((thdn.ge.theta).and.(thup.le.theta)).or. & … … 158 158 kch=kch+1 159 159 k=kdn 160 ppmk=akz(k)+bkz(k)*psn(ivr,jy,1,n,l) 161 thdn=tthn(ivr,jy,k,n,l)*(100000./ppmk)**kappa 162 ppmk=akz(k+1)+bkz(k+1)*psn(ivr,jy,1,n,l) 163 thup=tthn(ivr,jy,k+1,n,l)*(100000./ppmk)**kappa 160 thdn=tthn(ivr,jy,k,n,l)*ppmk(ivr,jy,k) 161 thup=tthn(ivr,jy,k+1,n,l)*ppmk(ivr,jy,k+1) 164 162 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 165 163 ((thdn.le.theta).and.(thup.ge.theta))) then … … 212 210 kch=kch+1 213 211 k=kup 214 ppmk=akz(k)+bkz(k)*psn(ix,j,1,n,l) 215 thdn=tthn(ix,j,k,n,l)*(100000./ppmk)**kappa 216 ppmk=akz(k+1)+bkz(k+1)*psn(ix,j,1,n,l) 217 thup=tthn(ix,j,k+1,n,l)*(100000./ppmk)**kappa 212 thdn=tthn(ix,j,k,n,l)*ppmk(ix,j,k) 213 thup=tthn(ix,j,k+1,n,l)*ppmk(ix,j,k+1) 218 214 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 219 215 ((thdn.le.theta).and.(thup.ge.theta))) then … … 235 231 kch=kch+1 236 232 k=kdn 237 ppmk=akz(k)+bkz(k)*psn(ix,j,1,n,l) 238 thdn=tthn(ix,j,k,n,l)*(100000./ppmk)**kappa 239 ppmk=akz(k+1)+bkz(k+1)*psn(ix,j,1,n,l) 240 thup=tthn(ix,j,k+1,n,l)*(100000./ppmk)**kappa 233 thdn=tthn(ix,j,k,n,l)*ppmk(ix,j,k) 234 thup=tthn(ix,j,k+1,n,l)*ppmk(ix,j,k+1) 241 235 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 242 236 ((thdn.le.theta).and.(thup.ge.theta))) then
Note: See TracChangeset
for help on using the changeset viewer.