Changeset f75967d in flexpart.git for src/verttransform.f90
- Timestamp:
- Jan 5, 2016, 12:20:01 PM (8 years ago)
- Branches:
- master, 10.4.1_pesei, GFS_025, bugfixes+enhancements, dev, release-10, release-10.4.1, scaling-bug, univie
- Children:
- d8107c2
- Parents:
- d6a0977
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/verttransform.f90
rd6a0977 rf75967d 568 568 569 569 !*********************************************************************************** 570 if (readclouds) then !HG METHOD570 if (readclouds) then !HG METHOD 571 571 ! The method is loops all grids vertically and constructs the 3D matrix for clouds 572 572 ! Cloud top and cloud bottom gid cells are assigned as well as the total column … … 577 577 ! to include future cloud processing by non-precipitating-clouds. 578 578 !*********************************************************************************** 579 if (readclouds)write(*,*) 'using cloud water from ECMWF'580 clw(:,:,:,n)=0581 icloud_stats(:,:,:,n)=0582 clouds(:,:,:,n)=0583 do jy=0,nymin1584 do ix=0,nxmin1585 lsp=lsprec(ix,jy,1,n)586 convp=convprec(ix,jy,1,n)587 prec=lsp+convp588 tot_cloud_h=0589 590 do kz=1, nz-1 !go from top to bottom591 if (clwc(ix,jy,kz,n).gt.0) then592 593 clw(ix,jy,kz,n)=(clwc(ix,jy,kz,n)*rho(ix,jy,kz,n))*(height(kz+1)-height(kz))594 tot_cloud_h=tot_cloud_h+(height(kz+1)-height(kz))595 icloud_stats(ix,jy,4,n)= icloud_stats(ix,jy,4,n)+clw(ix,jy,kz,n) ! Column cloud water [m3/m3]596 icloud_stats(ix,jy,3,n)= min(height(kz+1),height(kz)) ! Cloud BOT height stats [m]579 write(*,*) 'using cloud water from ECMWF' 580 clw(:,:,:,n)=0 581 icloud_stats(:,:,:,n)=0 582 clouds(:,:,:,n)=0 583 do jy=0,nymin1 584 do ix=0,nxmin1 585 lsp=lsprec(ix,jy,1,n) 586 convp=convprec(ix,jy,1,n) 587 prec=lsp+convp 588 tot_cloud_h=0 589 ! Find clouds in the vertical 590 do kz=1, nz-1 !go from top to bottom 591 if (clwc(ix,jy,kz,n).gt.0) then 592 ! assuming rho is in kg/m3 and hz in m gives: kg/kg * kg/m3 *m3/kg /m = m2/m3 593 clw(ix,jy,kz,n)=(clwc(ix,jy,kz,n)*rho(ix,jy,kz,n))*(height(kz+1)-height(kz)) 594 tot_cloud_h=tot_cloud_h+(height(kz+1)-height(kz)) 595 icloud_stats(ix,jy,4,n)= icloud_stats(ix,jy,4,n)+clw(ix,jy,kz,n) ! Column cloud water [m3/m3] 596 icloud_stats(ix,jy,3,n)= min(height(kz+1),height(kz)) ! Cloud BOT height stats [m] 597 597 !ZHG 2015 extra for testing 598 clh(ix,jy,kz,n)=height(kz+1)-height(kz)599 icloud_stats(ix,jy,1,n)=icloud_stats(ix,jy,1,n)+(height(kz+1)-height(kz)) ! Cloud total vertical extent [m]600 icloud_stats(ix,jy,2,n)= max(icloud_stats(ix,jy,2,n),height(kz)) ! Cloud TOP height [m]598 clh(ix,jy,kz,n)=height(kz+1)-height(kz) 599 icloud_stats(ix,jy,1,n)=icloud_stats(ix,jy,1,n)+(height(kz+1)-height(kz)) ! Cloud total vertical extent [m] 600 icloud_stats(ix,jy,2,n)= max(icloud_stats(ix,jy,2,n),height(kz)) ! Cloud TOP height [m] 601 601 !ZHG 602 endif603 end do604 605 606 if ((lsp.gt.0.01).or.(convp.gt.0.01)) then ! cloud and precipitation607 608 do kz=nz,1,-1 !go Bottom up!609 if (clw(ix,jy,kz,n).gt. 0) then ! is in cloud610 cloudsh(ix,jy,n)=cloudsh(ix,jy,n)+height(kz)-height(kz-1)611 clouds(ix,jy,kz,n)=1 ! is a cloud612 if (lsp.ge.convp) then613 clouds(ix,jy,kz,n)=3 ! lsp in-cloud614 else615 clouds(ix,jy,kz,n)=2 ! convp in-cloud616 endif ! convective or large scale617 elseif((clw(ix,jy,kz,n).le.0) .and. (icloud_stats(ix,jy,3,n).ge.height(kz)) ) then ! is below cloud618 if (lsp.ge.convp) then619 clouds(ix,jy,kz,n)=5 ! lsp dominated washout620 else621 clouds(ix,jy,kz,n)=4 ! convp dominated washout622 endif ! convective or large scale623 endif624 625 if (height(kz).ge. 19000) then ! set a max height for removal626 clouds(ix,jy,kz,n)=0627 endif !clw>0628 end do !nz629 endif ! precipitation630 end do631 end do602 endif 603 end do 604 605 ! If Precipitation. Define removal type in the vertical 606 if ((lsp.gt.0.01).or.(convp.gt.0.01)) then ! cloud and precipitation 607 608 do kz=nz,1,-1 !go Bottom up! 609 if (clw(ix,jy,kz,n).gt. 0) then ! is in cloud 610 cloudsh(ix,jy,n)=cloudsh(ix,jy,n)+height(kz)-height(kz-1) 611 clouds(ix,jy,kz,n)=1 ! is a cloud 612 if (lsp.ge.convp) then 613 clouds(ix,jy,kz,n)=3 ! lsp in-cloud 614 else 615 clouds(ix,jy,kz,n)=2 ! convp in-cloud 616 endif ! convective or large scale 617 elseif((clw(ix,jy,kz,n).le.0) .and. (icloud_stats(ix,jy,3,n).ge.height(kz)) ) then ! is below cloud 618 if (lsp.ge.convp) then 619 clouds(ix,jy,kz,n)=5 ! lsp dominated washout 620 else 621 clouds(ix,jy,kz,n)=4 ! convp dominated washout 622 endif ! convective or large scale 623 endif 624 625 if (height(kz).ge. 19000) then ! set a max height for removal 626 clouds(ix,jy,kz,n)=0 627 endif !clw>0 628 end do !nz 629 endif ! precipitation 630 end do 631 end do 632 632 !************************************************************************** 633 else ! use old definitions633 else ! use old definitions 634 634 !************************************************************************** 635 635 ! create a cloud and rainout/washout field, clouds occur where rh>80% 636 636 ! total cloudheight is stored at level 0 637 if (.not.readclouds) write(*,*) 'using cloud water from Parameterization' 638 do jy=0,nymin1 639 do ix=0,nxmin1 637 ! if (.not.readclouds) write(*,*) 'using cloud water from Parameterization' 638 write(*,*) 'using cloud water from Parameterization' 639 do jy=0,nymin1 640 do ix=0,nxmin1 640 641 ! OLD METHOD 641 rain_cloud_above(ix,jy)=0 642 lsp=lsprec(ix,jy,1,n) 643 convp=convprec(ix,jy,1,n) 644 cloudsh(ix,jy,n)=0 645 do kz_inv=1,nz-1 646 kz=nz-kz_inv+1 647 pressure=rho(ix,jy,kz,n)*r_air*tt(ix,jy,kz,n) 648 rh=qv(ix,jy,kz,n)/f_qvsat(pressure,tt(ix,jy,kz,n)) 649 clouds(ix,jy,kz,n)=0 650 if (rh.gt.0.8) then ! in cloud 651 if ((lsp.gt.0.01).or.(convp.gt.0.01)) then ! cloud and precipitation 652 rain_cloud_above(ix,jy)=1 653 cloudsh(ix,jy,n)=cloudsh(ix,jy,n)+ & 654 height(kz)-height(kz-1) 655 if (lsp.ge.convp) then 656 clouds(ix,jy,kz,n)=3 ! lsp dominated rainout 657 else 658 clouds(ix,jy,kz,n)=2 ! convp dominated rainout 642 rain_cloud_above(ix,jy)=0 643 lsp=lsprec(ix,jy,1,n) 644 convp=convprec(ix,jy,1,n) 645 cloudsh(ix,jy,n)=0 646 do kz_inv=1,nz-1 647 kz=nz-kz_inv+1 648 pressure=rho(ix,jy,kz,n)*r_air*tt(ix,jy,kz,n) 649 rh=qv(ix,jy,kz,n)/f_qvsat(pressure,tt(ix,jy,kz,n)) 650 clouds(ix,jy,kz,n)=0 651 if (rh.gt.0.8) then ! in cloud 652 if ((lsp.gt.0.01).or.(convp.gt.0.01)) then ! cloud and precipitation 653 rain_cloud_above(ix,jy)=1 654 cloudsh(ix,jy,n)=cloudsh(ix,jy,n)+ & 655 height(kz)-height(kz-1) 656 if (lsp.ge.convp) then 657 clouds(ix,jy,kz,n)=3 ! lsp dominated rainout 658 else 659 clouds(ix,jy,kz,n)=2 ! convp dominated rainout 660 endif 661 else ! no precipitation 662 clouds(ix,jy,kz,n)=1 ! cloud 659 663 endif 660 else ! no precipitation 661 clouds(ix,jy,kz,n)=1 ! cloud 662 endif 663 else ! no cloud 664 if (rain_cloud_above(ix,jy).eq.1) then ! scavenging 665 if (lsp.ge.convp) then 666 clouds(ix,jy,kz,n)=5 ! lsp dominated washout 667 else 668 clouds(ix,jy,kz,n)=4 ! convp dominated washout 664 else ! no cloud 665 if (rain_cloud_above(ix,jy).eq.1) then ! scavenging 666 if (lsp.ge.convp) then 667 clouds(ix,jy,kz,n)=5 ! lsp dominated washout 668 else 669 clouds(ix,jy,kz,n)=4 ! convp dominated washout 670 endif 669 671 endif 670 672 endif 671 endif 672 end do 673 end do 673 674 !END OLD METHOD 674 675 end do 675 676 endif !readclouds676 end do 677 endif !readclouds 677 678 678 679 !********* TEST *************** … … 838 839 ! sum(ww(:,:,:,n)*ww(:,:,:,n)), & 839 840 ! sum(clouds(:,:,:,n)), sum(cloudsh(:,:,n)),sum(idx),sum(pinmconv) 840 841 841 end subroutine verttransform 842
Note: See TracChangeset
for help on using the changeset viewer.