UPP  V11.0.0
 All Data Structures Files Functions Pages
FRZLVL.f
Go to the documentation of this file.
1 
41  SUBROUTINE frzlvl(ZFRZ,RHFRZ,PFRZL)
42 
43 !
44 !
45  use vrbls3d, only: pint, t, zmid, q, pmid
46  use vrbls2d, only: fis, tshltr, pshltr, qshltr
47  use masks, only: lmh
48  use params_mod, only: gi, d00, capa, d0065, tfrz, pq0, a2, a3, a4
49  use ctlblk_mod, only: jsta, jend, spval, lm, modelname, im, ista, iend
50  use physcons_post, only: con_rd, con_rv, con_eps, con_epsm1
51  use upp_physics, only: fpvsnew
52 
53  implicit none
54 !
55 ! DECLARE VARIABLES.
56 !
57  REAL,dimension(ista:iend,jsta:jend) :: rhfrz, zfrz, pfrzl
58  integer i,j,llmh,l
59  real htsfc,psfc,tsfc,qsfc,qsat,rhsfc,delz,delt,delq,delalp, &
60  delzp,zl,dzabv,qfrz,alpl,alph,alpfrz,pfrz,qsfrz,rhz,zu, &
61  dzfr,es
62 !
63 !*********************************************************************
64 ! START FRZLVL.
65 !
66 !
67 !
68 ! LOOP OVER HORIZONTAL GRID.
69 !
70 !!$omp parallel do &
71 ! & private(i,j,alpfrz,alph,alpl,delalp,delq,delt,delz, &
72 ! & delzp,dzabv,dzfr,htsfc,l,llmh,psfc,qfrz, &
73 ! & qsat,qsfc,qsfrz,rhsfc,rhz,tsfc, &
74 ! & zl,zu)
75 
76  DO 20 j=jsta,jend
77  DO 20 i=ista,iend
78  htsfc = fis(i,j)*gi
79  llmh = nint(lmh(i,j))
80  rhfrz(i,j) = d00
81  zfrz(i,j) = htsfc
82  psfc = pint(i,j,llmh+1)
83  pfrzl(i,j) = psfc
84 !
85 ! CHECK IF FREEZING LEVEL IS AT THE GROUND.
86 !
87 ! IF(SM(I,J)/=SPVAL .AND. THZ0(I,J)/=SPVAL .AND. &
88 ! THS(I,J)/=SPVAL)THEN
89 ! TSFC = (SM(I,J)*THZ0(I,J)+(1.-SM(I,J))*THS(I,J)) &
90 ! *(PINT(I,J,NINT(LMH(I,J))+1)/P1000)**CAPA
91 ! Per AWC's request, use 2m T instead of skin T so that freezing level
92 ! would be above ground more often
93  IF(tshltr(i,j)/=spval .AND. pshltr(i,j)/=spval)THEN
94  tsfc=tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
95  ELSE
96 ! GFS analysis does not have flux file to retrieve TSFC from
97  tsfc=t(i,j,lm)+d0065*(zmid(i,j,lm)-htsfc-2.0)
98  END IF
99  IF (tsfc<=tfrz) THEN
100 ! ZFRZ(I,J) = HTSFC+(TSFC-TFRZ)/D0065
101  zfrz(i,j) = htsfc+2.0+(tsfc-tfrz)/d0065
102 ! IF(SM(I,J)/=SPVAL .AND. QZ0(I,J)/=SPVAL .AND. &
103 ! QS(I,J)/=SPVAL)THEN
104 ! QSFC = SM(I,J)*QZ0(I,J)+(1.-SM(I,J))*QS(I,J)
105 ! GFS does not output QS
106 ! ELSE IF(QSHLTR(I,J)/=SPVAL)THEN
107  IF(qshltr(i,j)/=spval)THEN
108  psfc=pshltr(i,j)
109  qsfc=qshltr(i,j)
110  ELSE
111  qsfc=q(i,j,lm)
112  psfc=pmid(i,j,lm)
113  END IF
114 !
115  IF(modelname == 'GFS' .OR. modelname == 'RAPR')THEN
116  es=fpvsnew(tsfc)
117  es=min(es,psfc)
118  qsat=con_eps*es/(psfc+con_epsm1*es)
119  ELSE
120  qsat=pq0/psfc*exp(a2*(tsfc-a3)/(tsfc-a4))
121  END IF
122 !
123  rhsfc = qsfc/qsat
124  rhsfc = amax1(0.01,rhsfc)
125  rhsfc = amin1(rhsfc,1.0)
126  rhfrz(i,j)= rhsfc
127  pfrzl(i,j)= psfc
128  cycle
129  ENDIF
130 !
131 ! OTHERWISE, LOCATE THE FREEZING LEVEL ALOFT.
132 !
133  DO 10 l = llmh,1,-1
134  IF (t(i,j,l)<=tfrz) THEN
135  IF (l<llmh) THEN
136  delz = zmid(i,j,l)-zmid(i,j,l+1)
137  zl = zmid(i,j,l+1)
138  delt = t(i,j,l)-t(i,j,l+1)
139  zfrz(i,j) = zl + (tfrz-t(i,j,l+1))/delt*delz
140 !
141  dzabv = zfrz(i,j)-zl
142  delq = q(i,j,l)-q(i,j,l+1)
143  qfrz = q(i,j,l+1) + delq/delz*dzabv
144  qfrz = amax1(0.0,qfrz)
145 !
146 !
147  alpl = alog(pmid(i,j,l+1))
148  alph = alog(pmid(i,j,l))
149  alpfrz = alpl + (alph-alpl)/delz*dzabv
150  pfrz = exp(alpfrz)
151  pfrzl(i,j) = pfrz
152  IF(modelname == 'GFS' .OR.modelname == 'RAPR')THEN
153  es=fpvsnew(tfrz)
154  es=min(es,pfrz)
155  qsfrz=con_eps*es/(pfrz+con_epsm1*es)
156  ELSE
157  qsfrz=pq0/pfrz &
158  *exp(a2*(tfrz-a3)/(tfrz-a4))
159  END IF
160 !
161  rhz = qfrz/qsfrz
162  rhz = amax1(0.01,rhz)
163  rhz = amin1(rhz,1.0)
164  rhfrz(i,j) = rhz
165 !
166  ELSE
167  zu = zmid(i,j,l)
168  zl = htsfc+2.0
169  delz = zu-zl
170  IF(tshltr(i,j)/=spval .AND. pshltr(i,j)/=spval)THEN
171  tsfc=tshltr(i,j)*(pshltr(i,j)*1.e-5)**capa
172  ELSE
173 ! GFS analysis does not have flux file to retrieve TSFC from
174  tsfc=t(i,j,lm)+d0065*(zmid(i,j,lm)-htsfc-2.0)
175  END IF
176  delt = t(i,j,l)-tsfc
177  zfrz(i,j) = zl + (tfrz-tsfc)/delt*delz
178 !
179  dzabv = zfrz(i,j)-zl
180 ! GFS does not output QS
181  IF(qshltr(i,j)/=spval)THEN
182  qsfc=qshltr(i,j)
183  ELSE
184  qsfc=q(i,j,lm)
185  END IF
186  delq = q(i,j,l)-qsfc
187  qfrz = qsfc + delq/delz*dzabv
188  qfrz = amax1(0.0,qfrz)
189 !
190  alph = alog(pmid(i,j,l))
191  alpl = alog(psfc)
192  delalp = alph-alpl
193  alpfrz = alpl + delalp/delz*dzabv
194  pfrz = exp(alpfrz)
195 !
196  pfrzl(i,j) = pfrz
197  IF(modelname == 'GFS'.OR.modelname == 'RAPR')THEN
198  es=fpvsnew(tfrz)
199  es=min(es,pfrz)
200  qsfrz=con_eps*es/(pfrz+con_epsm1*es)
201  ELSE
202  qsfrz=pq0/pfrz &
203  *exp(a2*(tfrz-a3)/(tfrz-a4))
204  END IF
205 !
206  rhz = qfrz/qsfrz
207  rhz = amax1(0.01,rhz)
208  rhz = amin1(rhz,1.0)
209  rhfrz(i,j)= rhz
210  ENDIF
211 !
212 ! BOUND FREEZING LEVEL RH. FREEZING LEVEL HEIGHT IS
213 ! MEASURED WITH RESPECT TO MEAN SEA LEVEL.
214 !
215 ! RHFRZ(I,J) = AMAX1(0.01,RHFRZ(I,J))
216 ! RHFRZ(I,J) = AMIN1(RHFRZ(I,J),1.00)
217  zfrz(i,j) = amax1(0.0,zfrz(i,j))
218  EXIT
219  ENDIF
220  10 CONTINUE
221 20 CONTINUE
222 !
223 ! END OF ROUTINE.
224 !
225  RETURN
226  END
Definition: MASKS_mod.f:1
Definition: physcons.f:1
elemental real function, public fpvsnew(t)
Definition: UPP_PHYSICS.f:345
calcape() computes CAPE/CINS and other storm related variables.
Definition: UPP_PHYSICS.f:27