Changes in trunk/src/calcpv.f90 [24:4]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/calcpv.f90
r24 r4 21 21 22 22 subroutine calcpv(n,uuh,vvh,pvh) 23 ! i i i o23 ! i i i o 24 24 !***************************************************************************** 25 25 ! * … … 49 49 integer :: nlck 50 50 real :: vx(2),uy(2),phi,tanphi,cosphi,dvdx,dudy,f 51 real :: theta,thetap,thetam,dthetadp,dt1,dt2,dt 52 real :: pvavr,ppml( 0:nxmax-1,0:nymax-1,nuvzmax),ppmk(0:nxmax-1,0:nymax-1,nuvzmax)51 real :: theta,thetap,thetam,dthetadp,dt1,dt2,dt,ppmk 52 real :: pvavr,ppml(nuvzmax) 53 53 real :: thup,thdn 54 54 real,parameter :: eps=1.e-5, p0=101325 … … 62 62 ! Loop over entire grid 63 63 !********************** 64 do kl=1,nuvz65 do jy=0,nymin166 do ix=0,nxmin167 ppml(ix,jy,kl)=akz(kl)+bkz(kl)*ps(ix,jy,1,n)68 enddo69 enddo70 enddo71 ppmk=(100000./ppml)**kappa72 73 64 do jy=0,nymin1 74 65 if (sglobal.and.jy.eq.0) goto 10 … … 115 106 end if 116 107 jux=jumpx 108 ! Precalculate pressure values for efficiency 109 do kl=1,nuvz 110 ppml(kl)=akz(kl)+bkz(kl)*ps(ix,jy,1,n) 111 end do 117 112 ! 118 113 ! Loop over the vertical … … 120 115 121 116 do kl=1,nuvz 122 theta=tth(ix,jy,kl,n)*ppmk(ix,jy,kl) 117 ppmk=akz(kl)+bkz(kl)*ps(ix,jy,1,n) 118 theta=tth(ix,jy,kl,n)*(100000./ppmk)**kappa 123 119 klvrp=kl+1 124 120 klvrm=kl-1 … … 129 125 if (klvrp.gt.nuvz) klvrp=nuvz 130 126 if (klvrm.lt.1) klvrm=1 131 thetap=tth(ix,jy,klvrp,n)*ppmk(ix,jy,klvrp) 132 thetam=tth(ix,jy,klvrm,n)*ppmk(ix,jy,klvrm) 133 dthetadp=(thetap-thetam)/(ppml(ix,jy,klvrp)-ppml(ix,jy,klvrm)) 127 ppmk=akz(klvrp)+bkz(klvrp)*ps(ix,jy,1,n) 128 thetap=tth(ix,jy,klvrp,n)*(100000./ppmk)**kappa 129 ppmk=akz(klvrm)+bkz(klvrm)*ps(ix,jy,1,n) 130 thetam=tth(ix,jy,klvrm,n)*(100000./ppmk)**kappa 131 dthetadp=(thetap-thetam)/(ppml(klvrp)-ppml(klvrm)) 134 132 135 133 ! Compute vertical position at pot. temperature surface on subgrid … … 158 156 kch=kch+1 159 157 k=kup 160 thdn=tth(ivr,jy,k,n)*ppmk(ivr,jy,k) 161 thup=tth(ivr,jy,k+1,n)*ppmk(ivr,jy,k+1) 162 163 164 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 165 ((thdn.le.theta).and.(thup.ge.theta))) then 166 dt1=abs(theta-thdn) 167 dt2=abs(theta-thup) 168 dt=dt1+dt2 169 if (dt.lt.eps) then ! Avoid division by zero error 170 dt1=0.5 ! G.W., 10.4.1996 171 dt2=0.5 172 dt=1.0 158 ppmk=akz(k)+bkz(k)*ps(ivr,jy,1,n) 159 thdn=tth(ivr,jy,k,n)*(100000./ppmk)**kappa 160 ppmk=akz(k+1)+bkz(k+1)*ps(ivr,jy,1,n) 161 thup=tth(ivr,jy,k+1,n)*(100000./ppmk)**kappa 162 163 164 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 165 ((thdn.le.theta).and.(thup.ge.theta))) then 166 dt1=abs(theta-thdn) 167 dt2=abs(theta-thup) 168 dt=dt1+dt2 169 if (dt.lt.eps) then ! Avoid division by zero error 170 dt1=0.5 ! G.W., 10.4.1996 171 dt2=0.5 172 dt=1.0 173 endif 174 vx(ii)=(vvh(ivr,jy,k)*dt2+vvh(ivr,jy,k+1)*dt1)/dt 175 goto 20 173 176 endif 174 vx(ii)=(vvh(ivr,jy,k)*dt2+vvh(ivr,jy,k+1)*dt1)/dt175 goto 20176 endif177 177 41 continue 178 178 ! Downward branch … … 181 181 kch=kch+1 182 182 k=kdn 183 thdn=tth(ivr,jy,k,n)*ppmk(ivr,jy,k) 184 thup=tth(ivr,jy,k+1,n)*ppmk(ivr,jy,k+1) 185 186 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 187 ((thdn.le.theta).and.(thup.ge.theta))) then 188 dt1=abs(theta-thdn) 189 dt2=abs(theta-thup) 190 dt=dt1+dt2 191 if (dt.lt.eps) then ! Avoid division by zero error 192 dt1=0.5 ! G.W., 10.4.1996 193 dt2=0.5 194 dt=1.0 183 ppmk=akz(k)+bkz(k)*ps(ivr,jy,1,n) 184 thdn=tth(ivr,jy,k,n)*(100000./ppmk)**kappa 185 ppmk=akz(k+1)+bkz(k+1)*ps(ivr,jy,1,n) 186 thup=tth(ivr,jy,k+1,n)*(100000./ppmk)**kappa 187 188 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 189 ((thdn.le.theta).and.(thup.ge.theta))) then 190 dt1=abs(theta-thdn) 191 dt2=abs(theta-thup) 192 dt=dt1+dt2 193 if (dt.lt.eps) then ! Avoid division by zero error 194 dt1=0.5 ! G.W., 10.4.1996 195 dt2=0.5 196 dt=1.0 197 endif 198 vx(ii)=(vvh(ivr,jy,k)*dt2+vvh(ivr,jy,k+1)*dt1)/dt 199 goto 20 195 200 endif 196 vx(ii)=(vvh(ivr,jy,k)*dt2+vvh(ivr,jy,k+1)*dt1)/dt 197 goto 20 198 endif 199 goto 40 201 goto 40 200 202 ! This section used when no values were found 201 203 21 continue … … 234 236 kch=kch+1 235 237 k=kup 236 thdn=tth(ix,j,k,n)*ppmk(ix,j,k) 237 thup=tth(ix,j,k+1,n)*ppmk(ix,j,k+1) 238 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 239 ((thdn.le.theta).and.(thup.ge.theta))) then 240 dt1=abs(theta-thdn) 241 dt2=abs(theta-thup) 242 dt=dt1+dt2 243 if (dt.lt.eps) then ! Avoid division by zero error 244 dt1=0.5 ! G.W., 10.4.1996 245 dt2=0.5 246 dt=1.0 238 ppmk=akz(k)+bkz(k)*ps(ix,j,1,n) 239 thdn=tth(ix,j,k,n)*(100000./ppmk)**kappa 240 ppmk=akz(k+1)+bkz(k+1)*ps(ix,j,1,n) 241 thup=tth(ix,j,k+1,n)*(100000./ppmk)**kappa 242 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 243 ((thdn.le.theta).and.(thup.ge.theta))) then 244 dt1=abs(theta-thdn) 245 dt2=abs(theta-thup) 246 dt=dt1+dt2 247 if (dt.lt.eps) then ! Avoid division by zero error 248 dt1=0.5 ! G.W., 10.4.1996 249 dt2=0.5 250 dt=1.0 251 endif 252 uy(jj)=(uuh(ix,j,k)*dt2+uuh(ix,j,k+1)*dt1)/dt 253 goto 50 247 254 endif 248 uy(jj)=(uuh(ix,j,k)*dt2+uuh(ix,j,k+1)*dt1)/dt249 goto 50250 endif251 255 71 continue 252 256 ! Downward branch … … 255 259 kch=kch+1 256 260 k=kdn 257 thdn=tth(ix,j,k,n)*ppmk(ix,j,k) 258 thup=tth(ix,j,k+1,n)*ppmk(ix,j,k+1) 259 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 260 ((thdn.le.theta).and.(thup.ge.theta))) then 261 dt1=abs(theta-thdn) 262 dt2=abs(theta-thup) 263 dt=dt1+dt2 264 if (dt.lt.eps) then ! Avoid division by zero error 265 dt1=0.5 ! G.W., 10.4.1996 266 dt2=0.5 267 dt=1.0 261 ppmk=akz(k)+bkz(k)*ps(ix,j,1,n) 262 thdn=tth(ix,j,k,n)*(100000./ppmk)**kappa 263 ppmk=akz(k+1)+bkz(k+1)*ps(ix,j,1,n) 264 thup=tth(ix,j,k+1,n)*(100000./ppmk)**kappa 265 if (((thdn.ge.theta).and.(thup.le.theta)).or. & 266 ((thdn.le.theta).and.(thup.ge.theta))) then 267 dt1=abs(theta-thdn) 268 dt2=abs(theta-thup) 269 dt=dt1+dt2 270 if (dt.lt.eps) then ! Avoid division by zero error 271 dt1=0.5 ! G.W., 10.4.1996 272 dt2=0.5 273 dt=1.0 274 endif 275 uy(jj)=(uuh(ix,j,k)*dt2+uuh(ix,j,k+1)*dt1)/dt 276 goto 50 268 277 endif 269 uy(jj)=(uuh(ix,j,k)*dt2+uuh(ix,j,k+1)*dt1)/dt 270 goto 50 271 endif 272 goto 70 278 goto 70 273 279 ! This section used when no values were found 274 280 51 continue 275 281 ! Must use uu at current level and lat. juy becomes smaller by 1 276 277 282 uy(jj)=uuh(ix,jy,kl) 283 juy=juy-1 278 284 ! Otherwise OK 279 285 50 continue
Note: See TracChangeset
for help on using the changeset viewer.