UPP  11.0.0
 All Data Structures Files Functions Variables Pages
CALPBLREGIME.f
Go to the documentation of this file.
1 
28  SUBROUTINE calpblregime(PBLREGIME)
29 
30 !
31  use vrbls3d, only: uh, vh, pmid, t, q, pint, zmid, zint
32  use vrbls2d, only: ths, qs, smstav, twbs, qwbs, pblh
33  use masks, only: dx
34  use params_mod, only: p1000, capa, d608, h1, g, rd, cp
35  use ctlblk_mod, only: jsta, jend, spval, lm, jsta_m, jend_m, im, &
36  jsta_2l, jend_2u, ista, iend, ista_m, iend_m,ista_2l,iend_2u
37  use gridspec_mod, only: gridtype
38 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
39  implicit none
40 !
41 ! INCLUDE,DERIVE,SET PARAMETERS.
42 !
43  REAL , PARAMETER :: vconvc=1.
44 !
45 ! DECLARE VARIABLES.
46 !
47  REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: pblregime
48 !
49  integer i,j,ie,iw,ii,jj
50  real ape,thv,thvx,govrth,umass,vmass,wspd,tskv,dthv,rhox,fluxc,tsfc, &
51  vconv,vsgd,br,thx
52 
53 !
54 !
55 !*************************************************************************
56 !
57 ! INITIALIZE ARRAYS.
58 !
59 !$omp parallel do private(i,j)
60  DO j=jsta,jend
61  DO i=ista,iend
62  pblregime(i,j) = spval
63  ENDDO
64  ENDDO
65 !
66 ! COMPUTE BULK RICHARDSON NUMBER AS CODED IN WRF module_sf_sfclay
67 !
68 !!$omp parallel do
69 !!$omp& private(uhkl,ulkl,vhkl,vlkl,rib,ubot,utop,vbot,vtop,
70 !!$omp& betta,ricr,ustarr,wmin,tvhtop,ztop,
71 !!$omp& wndsl,wndslp,betta,ricr,ustarr,wmin
72 !!$omp& ,IFRSTLEV
73 !!$omp& ,ICALPBL
74 !!$omp& ,LVLP
75 !!$omp& ,RIF
76 !!$omp& ,RIBP
77 !!$omp& ,UBOT1
78 !!$omp& ,VBOT1
79 !!$omp& ,ZBOT1
80 !!$omp& ,THVBOT1)
81 !
82  IF(gridtype /= 'A')THEN
83  call exch(uh(1,jsta_2l,lm))
84  call exch(vh(1,jsta_2l,lm))
85  END IF
86 
87  DO j=jsta_m,jend_m
88  DO i=ista_m,iend_m
89 !
90  IF(pmid(i,j,lm)<spval .AND. qs(i,j)<spval .AND. &
91  smstav(i,j)<spval) THEN
92  ape = (p1000/pmid(i,j,lm))**capa
93  thx = t(i,j,lm)*ape
94  thvx = (q(i,j,lm)*d608+h1)*thx
95  govrth = g/thx
96  IF(gridtype == 'E')THEN
97  ie=i+mod(j+1,2)
98  iw=i+mod(j+1,2)-1
99  umass = (uh(i,j-1,lm)+uh(iw,j,lm)+uh(ie,j,lm) &
100  + uh(i,j+1,lm))/4.0
101  vmass = (vh(i,j-1,lm)+vh(iw,j,lm)+vh(ie,j,lm) &
102  + vh(i,j+1,lm))/4.0
103  wspd= sqrt(umass*umass+vmass*vmass)
104  ELSE IF(gridtype == 'B')THEN
105  ie = i
106  iw = i-1
107  umass = (uh(iw,j-1,lm)+uh(iw,j,lm)+uh(ie,j-1,lm) &
108  + uh(i,j,lm))/4.0
109  vmass = (vh(iw,j-1,lm)+vh(iw,j,lm)+vh(ie,j-1,lm) &
110  + vh(i,j,lm))/4.0
111  wspd= sqrt(umass*umass+vmass*vmass)
112  ELSE
113  wspd = sqrt(uh(i,j,lm)*uh(i,j,lm)+vh(i,j,lm)*vh(i,j,lm))
114  END IF
115 
116  tskv = ths(i,j)*(1.+d608*qs(i,j)*smstav(i,j))
117  dthv = (thvx-tskv)
118 ! Convective velocity scale Vc and subgrid-scale velocity Vsg
119 ! following Beljaars (1995, QJRMS) and Mahrt and Sun (1995, MWR)
120 ! ... HONG Aug. 2001
121 !
122  rhox = pint(i,j,lm+1)/rd/(t(i,j,lm)*(q(i,j,lm)*d608+h1)) !density
123  fluxc = max(-twbs(i,j)/rhox/cp - d608*tskv*qwbs(i,j)/rhox,0.)
124  tsfc = ths(i,j)*(pint(i,j,lm+1)/p1000)**capa
125  vconv = vconvc*(g/tsfc*pblh(i,j)*fluxc)**.33
126 ! VCONV comes from Beljaars only
127  vsgd = 0.32 * (max(dx(i,j)/5000.-1.,0.))**.33
128  wspd = sqrt(wspd*wspd+vconv*vconv+vsgd*vsgd)
129  wspd = max(wspd,0.1)
130  br = govrth*(zmid(i,j,lm)-zint(i,j,lm+1))*dthv/(wspd*wspd)
131 
132  IF(br < 0.0) THEN
133  pblregime(i,j) = 4.0
134  ELSE IF(br == 0.0) THEN
135  pblregime(i,j) = 3.0
136  ELSE IF(br < 0.2) THEN
137  pblregime(i,j) = 2.0
138  ELSE
139  pblregime(i,j) = 1.0
140  END IF
141 
142 ! ii=im/2
143 ! jj=(jsta+jend)/2
144 ! if(i==ii.and.j==jj)print*,'Debug: CALPBLREGIME ',i,j,br, &
145 ! PBLREGIME(I,J)
146  END IF !end IF PMID
147 
148  ENDDO
149  ENDDO
150 !
151 ! END OF ROUTINE.
152 !
153  RETURN
154  END
155 
Definition: MASKS_mod.f:1