UPP v11.0.0
Loading...
Searching...
No Matches
CALPW.f
Go to the documentation of this file.
1
41 SUBROUTINE calpw(PW,IDECID)
42
43!
44 use vrbls3d, only: q, qqw, qqi, qqr, qqs, cwm, qqg, t, rswtt, &
45 train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt, &
46 taod5503d,sca, asy
47 use vrbls4d, only: smoke
48 use masks, only: htm
49 use params_mod, only: tfrz, gi
50 use ctlblk_mod, only: lm, jsta, jend, im, spval, ista, iend
51 use upp_physics, only: fpvsnew
52!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
53 implicit none
54!
55!
56! SET DENSITY OF WATER AT 1 ATMOSPHERE PRESSURE, 0C.
57! UNITS ARE KG/M**3.
58 real,PARAMETER :: RHOWAT=1.e3
59 real,parameter:: con_rd =2.8705e+2 ! gas constant air (J/kg/K)
60 real,parameter:: con_rv =4.6150e+2 ! gas constant H2O
61 real,parameter:: con_eps =con_rd/con_rv
62 real,parameter:: con_epsm1 =con_rd/con_rv-1
63!
64! DECLARE VARIABLES.
65!
66 integer,intent(in) :: IDECID
67 real,dimension(ista:iend,jsta:jend),intent(inout) :: PW
68 INTEGER LLMH,I,J,L
69 REAL ALPM,DZ,PM,PWSUM,RHOAIR,DP,ES
70 REAL QDUM(ista:iend,jsta:jend), PWS(ista:iend,jsta:jend),QS(ista:iend,jsta:jend)
71!
72!***************************************************************
73! START CALPW HERE.
74!
75! INITIALIZE PW TO 0.
76!
77!$omp parallel do private(i,j)
78 DO j=jsta,jend
79 DO i=ista,iend
80 pw(i,j) = 0.
81 pws(i,j) = 0.
82 ENDDO
83 ENDDO
84!
85! OUTER LOOP OVER VERTICAL DIMENSION.
86! INNER LOOP OVER HORIZONTAL GRID.
87!
88!!$omp parallel do private(i,j,l,es,dp)
89 DO l = 1,lm
90 IF (idecid <= 1) THEN
91!$omp parallel do private(i,j)
92 DO j=jsta,jend
93 DO i=ista,iend
94 qdum(i,j) = q(i,j,l)
95 ENDDO
96 ENDDO
97 ELSE IF (idecid == 2) THEN
98!$omp parallel do private(i,j)
99 DO j=jsta,jend
100 DO i=ista,iend
101 qdum(i,j) = qqw(i,j,l)
102 ENDDO
103 ENDDO
104 ELSE IF (idecid == 3) THEN
105!$omp parallel do private(i,j)
106 DO j=jsta,jend
107 DO i=ista,iend
108 qdum(i,j) = qqi(i,j,l)
109 ENDDO
110 ENDDO
111 ELSE IF (idecid == 4) THEN
112!$omp parallel do private(i,j)
113 DO j=jsta,jend
114 DO i=ista,iend
115 qdum(i,j) = qqr(i,j,l)
116 ENDDO
117 ENDDO
118 ELSE IF (idecid == 5) THEN
119!$omp parallel do private(i,j)
120 DO j=jsta,jend
121 DO i=ista,iend
122 qdum(i,j) = qqs(i,j,l)
123 ENDDO
124 ENDDO
125 ELSE IF (idecid == 6) THEN
126!$omp parallel do private(i,j)
127 DO j=jsta,jend
128 DO i=ista,iend
129 qdum(i,j) = cwm(i,j,l)
130 ENDDO
131 ENDDO
132! SRD
133 ELSE IF (idecid == 16) THEN
134!$omp parallel do private(i,j)
135 DO j=jsta,jend
136 DO i=ista,iend
137 qdum(i,j) = qqg(i,j,l)
138 ENDDO
139 ENDDO
140! SRD
141 ELSE IF (idecid == 7) THEN
142!-- Total supercooled liquid
143!$omp parallel do private(i,j)
144 DO j=jsta,jend
145 DO i=ista,iend
146 IF (t(i,j,l) >= tfrz) THEN
147 qdum(i,j) = 0.
148 ELSE
149 qdum(i,j) = qqw(i,j,l) + qqr(i,j,l)
150 ENDIF
151 ENDDO
152 ENDDO
153 ELSE IF (idecid == 8) THEN
154!-- Total melting ice
155!$omp parallel do private(i,j)
156 DO j=jsta,jend
157 DO i=ista,iend
158 IF (t(i,j,l) <= tfrz) THEN
159 qdum(i,j) = 0.
160 ELSE
161 qdum(i,j) = qqi(i,j,l) + qqs(i,j,l)
162 ENDIF
163 ENDDO
164 ENDDO
165 ELSE IF (idecid == 9) THEN
166! SHORT WAVE T TENDENCY
167!$omp parallel do private(i,j)
168 DO j=jsta,jend
169 DO i=ista,iend
170 qdum(i,j) = rswtt(i,j,l)
171 ENDDO
172 ENDDO
173 ELSE IF (idecid == 10) THEN
174! LONG WAVE T TENDENCY
175!$omp parallel do private(i,j)
176 DO j=jsta,jend
177 DO i=ista,iend
178 qdum(i,j) = rlwtt(i,j,l)
179 ENDDO
180 ENDDO
181 ELSE IF (idecid == 11) THEN
182! LATENT HEATING FROM GRID SCALE RAIN/EVAP
183!$omp parallel do private(i,j)
184 DO j=jsta,jend
185 DO i=ista,iend
186 qdum(i,j) = train(i,j,l)
187 ENDDO
188 ENDDO
189 ELSE IF (idecid == 12) THEN
190! LATENT HEATING FROM CONVECTION
191!$omp parallel do private(i,j)
192 DO j=jsta,jend
193 DO i=ista,iend
194 qdum(i,j) = tcucn(i,j,l)
195 ENDDO
196 ENDDO
197 ELSE IF (idecid == 13) THEN
198! MOISTURE CONVERGENCE
199!$omp parallel do private(i,j)
200 DO j=jsta,jend
201 DO i=ista,iend
202 qdum(i,j) = mcvg(i,j,l)
203 ENDDO
204 ENDDO
205! RH
206 ELSE IF (idecid == 14) THEN
207!$omp parallel do private(i,j,es)
208 DO j=jsta,jend
209 DO i=ista,iend
210 qdum(i,j) = q(i,j,l)
211 es = min(fpvsnew(t(i,j,l)),pmid(i,j,l))
212 qs(i,j) = con_eps*es/(pmid(i,j,l)+con_epsm1*es)
213 ENDDO
214 END DO
215! OZONE
216 ELSE IF (idecid == 15) THEN
217!$omp parallel do private(i,j)
218 DO j=jsta,jend
219 DO i=ista,iend
220 qdum(i,j) = o3(i,j,l)
221 ENDDO
222 END DO
223
224! AEROSOL EXTINCTION (GOCART)
225 ELSE IF (idecid == 17) THEN
226!$omp parallel do private(i,j)
227 DO j=jsta,jend
228 DO i=ista,iend
229 qdum(i,j) = ext(i,j,l)
230 ENDDO
231 END DO
232!
233! E. James - 8 Dec 2017
234! FIRE SMOKE (tracer_1a FROM HRRR-SMOKE)
235 ELSE IF (idecid == 18) THEN
236!$omp parallel do private(i,j)
237 DO j=jsta,jend
238 DO i=ista,iend
239 qdum(i,j) = smoke(i,j,l,1)/1000000000.
240 ENDDO
241 END DO
242!
243! E. James - 8 Dec 2017
244! HRRR-SMOKE AOD
245 ELSE IF (idecid == 19) THEN
246!$omp parallel do private(i,j)
247 DO j=jsta,jend
248 DO i=ista,iend
249 qdum(i,j) = taod5503d(i,j,l)
250 ENDDO
251 END DO
252!LZhang -July 2019
253! SCATTERING AEROSOL OPTICAL THICKNESS (GOCART V2)
254 ELSE IF (idecid == 20) THEN
255!$omp parallel do private(i,j)
256 DO j=jsta,jend
257 DO i=ista,iend
258 qdum(i,j) = sca(i,j,l)
259 ENDDO
260 END DO
261
262! ASYMMETRY PARAMETER (GOCART V2)
263 ELSE IF (idecid == 21) THEN
264!$omp parallel do private(i,j)
265 DO j=jsta,jend
266 DO i=ista,iend
267 qdum(i,j) = asy(i,j,l)
268 ENDDO
269 END DO
270 ENDIF
271!
272!$omp parallel do private(i,j,dp)
273 DO j=jsta,jend
274 DO i=ista,iend
275 if(pint(i,j,l+1) <spval .and. qdum(i,j) < spval) then
276 dp = pint(i,j,l+1) - pint(i,j,l)
277 IF (idecid == 19) THEN
278 pw(i,j) = pw(i,j) + qdum(i,j)
279 ELSE
280 pw(i,j) = pw(i,j) + qdum(i,j)*max(dp,0.)*gi*htm(i,j,l)
281 ENDIF
282 IF (idecid == 14) pws(i,j) = pws(i,j) + qs(i,j)*dp*gi*htm(i,j,l)
283 else
284 pw(i,j) = spval
285 pws(i,j) = spval
286 endif
287 ENDDO
288 ENDDO
289 ENDDO ! l loop
290
291
292 IF (idecid == 14)THEN
293!$omp parallel do private(i,j)
294 DO j=jsta,jend
295 DO i=ista,iend
296 if( pw(i,j)<spval) then
297 pw(i,j) = max(0.,pw(i,j)/pws(i,j)*100.)
298 endif
299 ENDDO
300 ENDDO
301 END IF
302! convert ozone from kg/m2 to dobson units, which give the depth of the
303! ozone layer in 1e-5 m if brought to natural temperature and pressure.
304
305 IF (idecid == 15) then
306!$omp parallel do private(i,j)
307 DO j=jsta,jend
308 DO i=ista,iend
309 if( pw(i,j)<spval) then
310 pw(i,j) = pw(i,j) / 2.14e-5
311 endif
312 ENDDO
313 ENDDO
314 endif
315!
316! END OF ROUTINE.
317!
318 RETURN
319 END
calcape() computes CAPE/CINS and other storm related variables.
Definition UPP_PHYSICS.f:27
elemental real function, public fpvsnew(t)