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