40 subroutine geop_height(geom,prs,prsi,T,q,phis,use_compress,gph)
 
   44 real(
kind_real), 
intent(in ) :: prs(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)    
 
   45 real(
kind_real), 
intent(in ) :: prsi(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz+1) 
 
   46 real(
kind_real), 
intent(in ) :: phis(geom%isc:geom%iec,geom%jsc:geom%jec)              
 
   47 real(
kind_real), 
intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
 
   48 real(
kind_real), 
intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)     
 
   49 real(
kind_real), 
intent(out) :: gph(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)   
 
   52 real(
kind_real)       :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
 
   53 real(
kind_real)       :: qmr(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) 
 
   54 logical               :: use_compress
 
   55 integer               :: isc,iec,jsc,jec,npz,i,j,k
 
   56 real(kind=
kind_real)  :: tkk,tvk,tc, qmk,pak,dpk,dz
 
   68 qmr(isc:iec,jsc:jec,:) = q(isc:iec,jsc:jec,:)/(1.0 - q(isc:iec,jsc:jec,:))
 
   69 tv(isc:iec,jsc:jec,:)  = t(isc:iec,jsc:jec,:)*(1.0 + 
zvir*qmr(isc:iec,jsc:jec,:))
 
   71 if (use_compress) 
then 
   77      do k = geom%npz, 1, -1
 
   78         if ( k == geom%npz) 
then 
   81            pak  = exp(0.5_kind_real*(log(prsi(i,j,k+1)*0.01)+log(prs(i,j,k)*0.01)))
 
   82            dpk  = prsi(i,j,k+1)/prs(i,j,k)
 
   84            tkk  = 0.5_kind_real * ( t(i,j,k+1) +  t(i,j,k) )
 
   85            tvk  = 0.5_kind_real * (tv(i,j,k+1) + tv(i,j,k) )
 
   86            pak  = exp(0.5_kind_real*(log(prs(i,j,k+1)*0.01)+log(prs(i,j,k)*0.01)))
 
   87            dpk  = prs(i,j,k+1)/prs(i,j,k)
 
   95         x_v     = prs_v/prs_sv * ehn_fct * prs_sv/pak     
 
  100         dz      = 
rdry/
grav * tvk * cmpr * log(dpk)
 
  101         if ( k == geom%npz) 
then 
  102           gph(i,j,k) = phis(i,j)/
grav + dz
 
  104           gph(i,j,k) = gph(i,j,k+1) + dz
 
  117      dz         = 
rdry/
grav * tv(i,j,k) * log(prsi(i,j,k+1)/prs(i,j,k))
 
  118      gph(i,j,k) = phis(i,j)/
grav + dz
 
  120      do k = geom%npz-1, 1, -1
 
  121         dz         = 
rdry/
grav * 0.5_kind_real * (tv(i,j,k+1)+tv(i,j,k)) * log(prs(i,j,k+1)/prs(i,j,k))
 
  122         gph(i,j,k) = gph(i,j,k+1) + dz
 
  137 real(
kind_real), 
intent(in ) :: prs(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)    
 
  138 real(
kind_real), 
intent(in ) :: prsi(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz+1) 
 
  139 real(
kind_real), 
intent(in ) :: phis(geom%isc:geom%iec,geom%jsc:geom%jec)              
 
  140 real(
kind_real), 
intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
 
  141 real(
kind_real), 
intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)      
 
  142 real(
kind_real), 
intent(out) :: gphi(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz+1) 
 
  145 real(
kind_real)       :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
 
  146 real(
kind_real)       :: qmr(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) 
 
  147 logical               :: use_compress
 
  149 integer               :: isc,iec,jsc,jec,npz,i,j,k
 
  150 real(kind=
kind_real)  :: tkk,tvk,tc, qmk,pak,dpk,dz
 
  160 qmr(isc:iec,jsc:jec,:) = q(isc:iec,jsc:jec,:)/(1.0 - q(isc:iec,jsc:jec,:))
 
  161 tv(isc:iec,jsc:jec,:)  = t(isc:iec,jsc:jec,:)*(1.0 + 
zvir*qmr(isc:iec,jsc:jec,:))
 
  163 if (use_compress) 
then 
  169      gphi(i,j,geom%npz+1) = phis(i,j)/
grav  
  170      do k = geom%npz, 1, -1
 
  172            pak  = exp(0.5_kind_real*(log(prsi(i,j,k+1)*0.01)+log(prs(i,j,k)*0.01)))
 
  173            dpk  = prsi(i,j,k+1)/prs(i,j,k)
 
  175            pak  = exp(0.5_kind_real*(log(prsi(i,j,k+1)*0.01)+log(prsi(i,j,k)*0.01)))
 
  176            dpk  = prsi(i,j,k+1)/prsi(i,j,k)
 
  184         prs_v   = qmk* pak/(1.0+qmk*
rdry/
rvap)            
 
  185         x_v     = prs_v/prs_sv * ehn_fct * prs_sv/pak     
 
  191         dz      = 
rdry/
grav * tvk * cmpr * log(dpk)
 
  192         gphi(i,j,k) = gphi(i,j,k+1) + dz
 
  202      gphi(i,j, geom%npz+1) = phis(i,j)/
grav 
  204      do k = geom%npz, 1, -1
 
  206           dz         = 
rdry/
grav * tv(i,j,k) * log(prsi(i,j,k+1)/prs(i,j,k))
 
  208           dz         = 
rdry/
grav * tv(i,j,k) * log(prsi(i,j,k+1)/prsi(i,j,k))
 
  210         gphi(i,j,k) = gphi(i,j,k+1) + dz