Changeset 37 for branches/petra/src/verttransform_nests.f90
- Timestamp:
- Apr 22, 2015, 3:42:35 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/petra/src/verttransform_nests.f90
r24 r37 1 1 !********************************************************************** 2 ! Copyright 1998 ,1999,2000,2001,2002,2005,2007,2008,2009,2010*2 ! Copyright 1998-2015 * 3 3 ! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa, * 4 4 ! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann * … … 52 52 ! add the variable cloud for use with scavenging - descr. in com_mod 53 53 !***************************************************************************** 54 ! Petra Seibert, Feb 2015: Add quick fix from 2013 55 !***************************************************************************** 54 56 ! * 55 57 ! Variables: * … … 69 71 implicit none 70 72 71 integer :: ix,jy,kz,iz,n,l,kmin,kl,klp,ix1,jy1,ixp,jyp 72 integer :: rain_cloud_above,kz_inv 73 real :: f_qvsat,pressure,rh,lsp,convp 74 real :: wzlev(nwzmax),rhoh(nuvzmax),pinmconv(nzmax) 75 real :: uvwzlev(0:nxmaxn-1,0:nymaxn-1,nzmax) 76 real :: ew,pint,tv,tvold,pold,dz1,dz2,dz,ui,vi,cosf 73 integer :: ix,jy,kz,iz,n,l,kmin,kl,klp,ix1,jy1,ixp,jyp,kz_inv 74 integer :: icloudtop 75 real :: f_qvsat,pressure 76 real :: rh,lsp,convp,prec,rhmin 77 real :: rhoh(nuvzmax),pinmconv(nzmax) 78 real :: wzlev(nwzmax),uvwzlev(0:nxmaxn-1,0:nymaxn-1,nzmax) 79 real :: ew,pint,tv,tvold,pold,dz1,dz2,dz,ui,vi 77 80 real :: dzdx,dzdy 78 real :: dzdx1,dzdx2,dzdy1,dzdy2 81 real :: dzdx1,dzdx2,dzdy1,dzdy2,cosf 79 82 real :: uuhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,maxnests) 80 83 real :: vvhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,maxnests) … … 83 86 real,parameter :: const=r_air/ga 84 87 88 logical :: lconvectprec, lsearch 85 89 86 90 ! Loop over all nests 87 91 !******************** 88 92 93 numbnest_loop: & 89 94 do l=1,numbnests 90 95 … … 143 148 144 149 145 ! Levels ,where u,v,t and q are given146 !*********************************** *150 ! Levels where u,v,t and q are given 151 !*********************************** 147 152 148 153 uun(ix,jy,1,n,l)=uuhn(ix,jy,1,l) … … 194 199 195 200 196 ! Levels ,where w is given197 !************************ *201 ! Levels where w is given 202 !************************ 198 203 199 204 wwn(ix,jy,1,n,l)=wwhn(ix,jy,1,l)*pinmconv(1) … … 275 280 276 281 end do 277 278 282 end do 279 283 end do 280 284 281 282 !write (*,*) 'initializing nested cloudsn, n:',n 283 ! create a cloud and rainout/washout field, cloudsn occur where rh>80% 285 ! write (*,*) 'diagnosing nested clouds, n:',n 286 jy_loop: & 284 287 do jy=0,nyn(l)-1 285 288 do ix=0,nxn(l)-1 286 rain_cloud_above=0 289 287 290 lsp=lsprecn(ix,jy,1,n,l) 288 291 convp=convprecn(ix,jy,1,n,l) 289 cloudsnh(ix,jy,n,l)=0 290 do kz_inv=1,nz-1 291 kz=nz-kz_inv+1 292 pressure=rhon(ix,jy,kz,n,l)*r_air*ttn(ix,jy,kz,n,l) 293 rh=qvn(ix,jy,kz,n,l)/f_qvsat(pressure,ttn(ix,jy,kz,n,l)) 294 cloudsn(ix,jy,kz,n,l)=0 295 if (rh.gt.0.8) then ! in cloud 296 if ((lsp.gt.0.01).or.(convp.gt.0.01)) then 297 rain_cloud_above=1 298 cloudsnh(ix,jy,n,l)=cloudsnh(ix,jy,n,l)+ & 299 height(kz)-height(kz-1) 300 if (lsp.ge.convp) then 301 cloudsn(ix,jy,kz,n,l)=3 ! lsp dominated rainout 302 else 303 cloudsn(ix,jy,kz,n,l)=2 ! convp dominated rainout 304 endif 305 else ! no precipitation 306 cloudsn(ix,jy,kz,n,l)=1 ! cloud 292 prec=lsp+convp 293 if (lsp .gt. convp) then ! prectype='lsp' 294 lconvectprec = .false. 295 else ! prectype='cp ' 296 lconvectprec = .true. 297 endif 298 icloudbotn(ix,jy,n,l)=icmv 299 icloudtop=icmv ! this is just a local variable 300 rhmin=rhmininit 301 lsearch=.true. 302 303 cloudsearch_loop: & 304 do while (rhmin .ge. rhminx .and. lsearch) 305 ! give up for < rhminx 306 307 kz_loop: & 308 do kz_inv=1,nz-1 309 kz=nz-kz_inv+1 310 pressure=rhon(ix,jy,kz,n,l)*r_air*ttn(ix,jy,kz,n,l) 311 rh=qvn(ix,jy,kz,n,l)/f_qvsat(pressure,ttn(ix,jy,kz,n,l)) 312 if (rh .gt. rhmin) then 313 if (icloudbotn(ix,jy,n,l) .eq. icmv) then 314 icloudtop=nint(height(kz)) ! use int to save memory 307 315 endif 308 else ! no cloud 309 if (rain_cloud_above.eq.1) then ! scavenging 310 if (lsp.ge.convp) then 311 cloudsn(ix,jy,kz,n,l)=5 ! lsp dominated washout 312 else 313 cloudsn(ix,jy,kz,n,l)=4 ! convp dominated washout 314 endif 315 endif 316 endif 317 end do 318 end do 319 end do 320 321 end do 316 icloudbotn(ix,jy,n,l)=nint(height(kz)) 317 endif 318 end do kz_loop 319 320 ! PS try to get a cloud thicker than 50 m 321 ! PS if there is at least precmin mm/h 322 if (prec .gt. precmin .and. & 323 ( icloudbotn(ix,jy,n,l) .eq. icmv .or. & 324 icloudtop-icloudbotn(ix,jy,n,l) .lt. 50)) then 325 rhmin = rhmin - 0.05 326 else 327 lsearch = .false. 328 endif 329 330 enddo cloudsearch_loop 331 332 ! PS implement a rough fix for badly represented convection 333 ! PS is based on looking at a limited set of comparison data 334 if (lconvectprec .and. icloudtop .lt. icloudtopconvmin .or. & 335 icloudbotn(ix,jy,n,l) .lt. icloudtopmin .and. prec .gt. precmin) then 336 if (convp .lt. 0.1) then 337 icloudbotn(ix,jy,n,l) = icloudbot1 338 icloudtop = icloudtop1 339 else 340 icloudbotn(ix,jy,n,l) = icloudbot2 341 icloudtop = icloudtop2 342 endif 343 endif 344 if (icloudtop .ne. icmv) then 345 icloudthckn(ix,jy,n,l) = icloudtop-icloudbotn(ix,jy,n,l) 346 else 347 icloudthckn(ix,jy,n,l) = icmv 348 endif 349 ! PS get rid of too thin clouds 350 if (icloudthck(ix,jy,n) .lt. 50) then 351 icloudbotn(ix,jy,n,l)=icmv 352 icloudthckn(ix,jy,n,l)=icmv 353 endif 354 355 enddo 356 enddo jy_loop 357 358 enddo numbnest_loop 322 359 323 360 end subroutine verttransform_nests
Note: See TracChangeset
for help on using the changeset viewer.