Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/calcpv_nests.f90

    r24 r4  
    2121
    2222subroutine calcpv_nests(l,n,uuhn,vvhn,pvhn)
    23   !                     i i  i    i    o
     23  !                        i i  i    i    o
    2424  !*****************************************************************************
    2525  !                                                                            *
     
    4848  integer :: nlck,l
    4949  real :: vx(2),uy(2),phi,tanphi,cosphi,dvdx,dudy,f
    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)
     50  real :: theta,thetap,thetam,dthetadp,dt1,dt2,dt,ppmk
     51  real :: ppml(nuvzmax)
    5252  real :: thup,thdn
    5353  real,parameter :: eps=1.e-5,p0=101325
     
    6161  ! Loop over entire grid
    6262  !**********************
    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 
    7263  do jy=0,nyn(l)-1
    7364    phi = (ylat0n(l) + jy * dyn(l)) * pi / 180.
     
    9788      if (ix.eq.0.or.ix.eq.nxn(l)-1) jumpx=1
    9889      jux=jumpx
     90  ! Precalculate pressure values for efficiency
     91      do kl=1,nuvz
     92        ppml(kl)=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l)
     93      end do
    9994  !
    10095  ! Loop over the vertical
     
    10297
    10398      do kl=1,nuvz
    104         theta=tthn(ix,jy,kl,n,l)*ppmk(ix,jy,kl)
     99        ppmk=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l)
     100        theta=tthn(ix,jy,kl,n,l)*(100000./ppmk)**kappa
    105101        klvrp=kl+1
    106102        klvrm=kl-1
     
    111107        if (klvrp.gt.nuvz) klvrp=nuvz
    112108        if (klvrm.lt.1) klvrm=1
    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))
     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))
    116114
    117115  ! Compute vertical position at pot. temperature surface on subgrid
     
    136134          kch=kch+1
    137135          k=kup
    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)
     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
    140140
    141141      if (((thdn.ge.theta).and.(thup.le.theta)).or. &
     
    158158          kch=kch+1
    159159          k=kdn
    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)
     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
    162164      if (((thdn.ge.theta).and.(thup.le.theta)).or. &
    163165           ((thdn.le.theta).and.(thup.ge.theta))) then
     
    210212          kch=kch+1
    211213          k=kup
    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)
     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
    214218      if (((thdn.ge.theta).and.(thup.le.theta)).or. &
    215219           ((thdn.le.theta).and.(thup.ge.theta))) then
     
    231235          kch=kch+1
    232236          k=kdn
    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)
     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
    235241      if (((thdn.ge.theta).and.(thup.le.theta)).or. &
    236242           ((thdn.le.theta).and.(thup.ge.theta))) then
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG