63 integer :: n, metdata_format
64 real :: uuhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,maxnests)
65 real :: vvhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,maxnests)
66 real :: pvhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,maxnests)
89 real :: ulev(nuvzmax),vlev(nuvzmax),
ew,rh,vd(maxspec),subsceff,ylat
90 real :: altmin,tvold,pold,zold,pint,tv,zlev(nuvzmax)
94 integer :: ix,jy,i,l,kz,lz,kzmin
99 real,
parameter :: const=r_air/ga
146 ylat=ylat0n(l)+
real(jy)*dyn(l)
147 if ((ylat.ge.-20.).and.(ylat.le.20.))
then
150 if ((ylat.gt.20.).and.(ylat.lt.40.))
then
151 altmin=2500.+(40.-ylat)*125.
152 else if ((ylat.gt.-40.).and.(ylat.lt.-20.))
then
153 altmin=2500.+(40.+ylat)*125.
164 ustarn(ix,jy,1,n,l)=
scalev(psn(ix,jy,1,n,l),tt2n(ix,jy,1,n,l), &
165 td2n(ix,jy,1,n,l),surfstrn(ix,jy,1,n,l))
170 if (metdata_format.eq.ecmwf_metdata)
then
171 ol=
obukhov_ecmwf(psn(ix,jy,1,n,l),tt2n(ix,jy,1,n,l), &
172 td2n(ix,jy,1,n,l),tthn(ix,jy,2,n,l),ustarn(ix,jy,1,n,l), &
173 sshfn(ix,jy,1,n,l),akm,bkm)
175 if (metdata_format.eq.gfs_metdata)
then
176 ol=
obukhov_gfs(psn(ix,jy,1,n,l),tt2n(ix,jy,1,n,l), &
177 td2n(ix,jy,1,n,l),tthn(ix,jy,2,n,l),ustarn(ix,jy,1,n,l), &
178 sshfn(ix,jy,1,n,l),akm,bkm)
181 olin(ix,jy,1,n,l)=1./ol
183 olin(ix,jy,1,n,l)=99999.
191 ulev(i)=uuhn(ix,jy,i,l)
192 vlev(i)=vvhn(ix,jy,i,l)
193 ttlev(i)=tthn(ix,jy,i,n,l)
194 qvlev(i)=qvhn(ix,jy,i,n,l)
197 if ( metdata_format.eq.ecmwf_metdata)
then
198 call
richardson_ecmwf(psn(ix,jy,1,n,l),ustarn(ix,jy,1,n,l),ttlev, &
199 qvlev,ulev,vlev,nuvz,akz,bkz,sshfn(ix,jy,1,n,l), &
200 tt2n(ix,jy,1,n,l),td2n(ix,jy,1,n,l),hmixn(ix,jy,1,n,l), &
201 wstarn(ix,jy,1,n,l),hmixplus)
203 if ( metdata_format.eq.gfs_metdata)
then
204 call
richardson_gfs(psn(ix,jy,1,n,l),ustarn(ix,jy,1,n,l),ttlev, &
205 qvlev,ulev,vlev,nuvz,akz,bkz,sshfn(ix,jy,1,n,l), &
206 tt2n(ix,jy,1,n,l),td2n(ix,jy,1,n,l),hmixn(ix,jy,1,n,l), &
207 wstarn(ix,jy,1,n,l),hmixplus)
211 if(lsubgrid.eq.1)
then
212 subsceff=min(excessoron(ix,jy,l),hmixplus)
219 hmixn(ix,jy,1,n,l)=hmixn(ix,jy,1,n,l)+subsceff
220 hmixn(ix,jy,1,n,l)=max(hmixmin,hmixn(ix,jy,1,n,l))
221 hmixn(ix,jy,1,n,l)=min(hmixmax,hmixn(ix,jy,1,n,l))
228 z0(4)=0.016*ustarn(ix,jy,1,n,l)*ustarn(ix,jy,1,n,l)/ga
229 z0(9)=0.016*ustarn(ix,jy,1,n,l)*ustarn(ix,jy,1,n,l)/ga
233 rh=
ew(td2n(ix,jy,1,n,l))/
ew(tt2n(ix,jy,1,n,l))
236 tt2n(ix,jy,1,n,l),psn(ix,jy,1,n,l),1./olin(ix,jy,1,n,l), &
237 ssrn(ix,jy,1,n,l),rh,lsprecn(ix,jy,1,n,l)+ &
238 convprecn(ix,jy,1,n,l),sdn(ix,jy,1,n,l),vd,l)
241 vdepn(ix,jy,i,n,l)=vd(i)
253 tvold=tt2n(ix,jy,1,n,l)*(1.+0.378*
ew(td2n(ix,jy,1,n,l))/ &
255 pold=psn(ix,jy,1,n,l)
258 pint=akz(kz)+bkz(kz)*psn(ix,jy,1,n,l)
259 tv=tthn(ix,jy,kz,n,l)*(1.+0.608*qvhn(ix,jy,kz,n,l))
261 if (abs(tv-tvold).gt.0.2)
then
262 zlev(kz)=zold+const*log(pold/pint)*(tv-tvold)/log(tv/tvold)
264 zlev(kz)=zold+const*log(pold/pint)*tv
277 if (zlev(kz).ge.altmin)
then
290 if ((zlev(lz)-zlev(kz)).gt.2000.)
then
291 if (((tthn(ix,jy,kz,n,l)-tthn(ix,jy,lz,n,l))/ &
292 (zlev(lz)-zlev(kz))).lt.0.002)
then
293 tropopausen(ix,jy,1,n,l)=zlev(kz)
real function scalev(ps, t, td, stress)
real function obukhov_ecmwf(ps, tsurf, tdsurf, tlev, ustar, hf, akm, bkm)
subroutine calcpar_nests(n, uuhn, vvhn, pvhn, metdata_format)
subroutine getvdep_nests(n, ix, jy, ust, temp, pa, L, gr, rh, rr, snow, vdepo, lnest)
subroutine richardson_gfs(psurf, ust, ttlev, qvlev, ulev, vlev, nuvz, akz, bkz, hf, tt2, td2, h, wst, hmixplus)
real function obukhov_gfs(ps, tsurf, tdsurf, tlev, ustar, hf, plev)
subroutine richardson_ecmwf(psurf, ust, ttlev, qvlev, ulev, vlev, nuvz, akz, bkz, hf, tt2, td2, h, wst, hmixplus)
subroutine calcpv_nests(l, n, uuhn, vvhn, pvhn)