SUBROUTINE CALPBLREGIME(PBLREGIME) !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . ! SUBPROGRAM: CALPBL COMPUTES PBL HEIGHT BASED ON BULK RCH NUMBER ! ! ABSTRACT: ! THIS ROUTINE COMPUTES THE BULK RICHARDSON NUMBER BASED ON ALGORITHMS ! FROM WRF SURFACE LAYER AND THEN DERIVE PBL REGIME AS FOLLOWS: ! 1. BR .GE. 0.2; ! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1), ! ! 2. BR .LT. 0.2 .AND. BR .GT. 0.0; ! REPRESENTS DAMPED MECHANICAL TURBULENT CONDITIONS ! (REGIME=2), ! ! 3. BR .EQ. 0.0 ! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3), ! ! 4. BR .LT. 0.0 ! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4). ! . ! ! PROGRAM HISTORY LOG: ! 07-04-27 H CHUANG ! ! USAGE: CALL CALPBLREGIME(PBLREGIME) ! INPUT ARGUMENT LIST: ! ! OUTPUT ARGUMENT LIST: ! PBLRI - PBL HEIGHT ABOVE GROUND ! ! OUTPUT FILES: ! NONE ! ! SUBPROGRAMS CALLED: ! UTILITIES: ! NONE ! LIBRARY: ! COMMON - ! CTLBLK ! ! ATTRIBUTES: ! LANGUAGE: FORTRAN ! MACHINE : !$$$ ! use vrbls3d, only: uh, vh, pmid, t, q, pint, zmid, zint use vrbls2d, only: ths, qs, smstav, twbs, qwbs, pblh use masks, only: dx use params_mod, only: p1000, capa, d608, h1, g, rd, cp use ctlblk_mod, only: jsta, jend, spval, lm, jsta_m, jend_m, im, jsta_2l, jend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! INCLUDE,DERIVE,SET PARAMETERS. ! REAL , PARAMETER :: VCONVC=1. ! ! DECLARE VARIABLES. ! REAL,dimension(IM,jsta_2l:jend_2u),intent(inout) :: PBLREGIME ! integer I,J,IE,IW,ii,jj real APE,THV,THVX,GOVRTH,UMASS,VMASS,WSPD,TSKV,DTHV,RHOX,fluxc,tsfc, & VCONV,VSGD,BR,THX ! ! !************************************************************************* ! ! INITIALIZE ARRAYS. ! !$omp parallel do DO J=JSTA,JEND DO I=1,IM PBLREGIME(I,J)=SPVAL ENDDO ENDDO ! ! COMPUTE BULK RICHARDSON NUMBER AS CODED IN WRF module_sf_sfclay ! !$omp parallel do !$omp& private(uhkl,ulkl,vhkl,vlkl,rib,ubot,utop,vbot,vtop, !$omp& betta,ricr,ustarr,wmin,tvhtop,ztop, !$omp& wndsl,wndslp,betta,ricr,ustarr,wmin !$omp& ,IFRSTLEV !$omp& ,ICALPBL !$omp& ,LVLP !$omp& ,RIF !$omp& ,RIBP !$omp& ,UBOT1 !$omp& ,VBOT1 !$omp& ,ZBOT1 !$omp& ,THVBOT1) ! IF(GRIDTYPE /= 'A')THEN call exch(UH(1,jsta_2l,LM)) call exch(VH(1,jsta_2l,LM)) END IF DO J=JSTA_M,JEND_M DO I=2,IM-1 ! APE=(P1000/PMID(I,J,LM))**CAPA THX=T(I,J,LM)*APE THVX=(Q(I,J,LM)*D608+H1)*THX GOVRTH=G/THX IF(GRIDTYPE == 'E')THEN IE=I+MOD(J+1,2) IW=I+MOD(J+1,2)-1 UMASS=(UH(I,J-1,LM)+UH(IW,J,LM)+UH(IE,J,LM) & +UH(I,J+1,LM))/4.0 VMASS=(VH(I,J-1,LM)+VH(IW,J,LM)+VH(IE,J,LM) & +VH(I,J+1,LM))/4.0 WSPD= SQRT(UMASS*UMASS+VMASS*VMASS) ELSE IF(GRIDTYPE == 'B')THEN IE=I IW=I-1 UMASS=(UH(IW,J-1,LM)+UH(IW,J,LM)+UH(IE,J-1,LM) & +UH(I,J,LM))/4.0 VMASS=(VH(IW,J-1,LM)+VH(IW,J,LM)+VH(IE,J-1,LM) & +VH(I,J,LM))/4.0 WSPD= SQRT(UMASS*UMASS+VMASS*VMASS) ELSE WSPD=SQRT(UH(I,J,LM)*UH(I,J,LM)+VH(I,J,LM)*VH(I,J,LM)) END IF TSKV=THS(I,J)*(1.+D608*QS(I,J)*SMSTAV(I,J)) DTHV=(THVX-TSKV) ! Convective velocity scale Vc and subgrid-scale velocity Vsg ! following Beljaars (1995, QJRMS) and Mahrt and Sun (1995, MWR) ! ... HONG Aug. 2001 ! rhox=PINT(I,J,LM+1)/RD/(T(I,J,LM)*(Q(I,J,LM)*D608+H1)) !density fluxc = max(-twbs(i,j)/rhox/cp - d608*tskv*QWBS(i,j)/rhox,0.) tsfc=THS(I,J)*(PINT(I,J,LM+1)/P1000)**CAPA VCONV = vconvc*(g/tsfc*pblh(i,j)*fluxc)**.33 ! VCONV comes from Beljaars only VSGD = 0.32 * (max(dx(i,j)/5000.-1.,0.))**.33 WSPD=SQRT(WSPD*WSPD+VCONV*VCONV+vsgd*vsgd) WSPD=AMAX1(WSPD,0.1) BR=GOVRTH*(ZMID(I,J,LM)-ZINT(I,J,LM+1))*DTHV/(WSPD*WSPD) IF(BR < 0.0)THEN PBLREGIME(I,J)=4.0 ELSE IF(BR == 0.0)THEN PBLREGIME(I,J)=3.0 ELSE IF(BR < 0.2)THEN PBLREGIME(I,J)=2.0 ELSE PBLREGIME(I,J)=1.0 END IF ii=im/2 jj=(jsta+jend)/2 if(i==ii.and.j==jj)print*,'Debug: CALPBLREGIME ',i,j,br, & PBLREGIME(I,J) ENDDO ENDDO ! ! END OF ROUTINE. ! RETURN END