UPP (upp-srw-2.2.0)
Loading...
Searching...
No Matches
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