UPP v11.0.0
Loading...
Searching...
No Matches
NGMFLD.f
Go to the documentation of this file.
1
46 SUBROUTINE ngmfld(RH4710,RH4796,RH1847,RH8498,QM8510)
47
48!
49!
50! INCLUDE PARAMETERS
51 use vrbls3d, only: q, uh, vh, pint, alpint, zint, t
52 use masks, only: lmh
53 use params_mod, only: d00, d50, h1m12, pq0, a2, a3, a4, h1, d01, small
54 use ctlblk_mod, only: jsta, jend, lm, jsta_2l, jend_2u, jsta_m2, jend_m2,&
55 spval, im, &
56 ista, iend, ista_2l, iend_2u, ista_m2, iend_m2, ista_m, iend_m
57!
58!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
59 implicit none
60!
61 real,PARAMETER :: SIG100=1.00000, sig98=0.98230, sig96=0.96470
62 real,PARAMETER :: SIG89 =0.89671, sig85=0.85000, sig84=0.84368
63 real,PARAMETER :: SIG78 =0.78483, sig47=0.47191, sig18=0.18018
64!
65! DECLARE VARIABLES.
66 LOGICAL GOT8510,GOT4710,GOT4796,GOT1847,GOT8498
67 REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(out) :: QM8510,RH4710,RH8498, &
68 rh4796,rh1847
69 REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: Z8510,Z4710,Z8498,Z4796,Z1847
70 real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: Q1D, U1D, V1D, QCNVG
71!
72 integer I,J,L
73 real P100,P85,P98,P96,P84,P47,P18,ALPM,DE,PM,TM,QM, &
74 qmcvg,qs,rh,dz
75!********************************************************************
76! START NGMFLD HERE.
77!
78! INITIALIZE ARRAYS.
79!$omp parallel do private(i,j)
80 DO j=jsta,jend
81 DO i=ista,iend
82 qm8510(i,j) = d00
83 rh4710(i,j) = d00
84 rh8498(i,j) = d00
85 rh4796(i,j) = d00
86 rh1847(i,j) = d00
87 z8510(i,j) = d00
88 z8498(i,j) = d00
89 z4710(i,j) = d00
90 z4796(i,j) = d00
91 z1847(i,j) = d00
92 ENDDO
93 ENDDO
94!
95! LOOP OVER HORIZONTAL GRID.
96!
97!!$omp parallel do &
98! & private(dz,p100,p18,p47,p84,p85, &
99! & p96,p98,pm,qdiv,qk,qkhn,qkhs,qkm1,qm,qm8510, &
100! & qmcvg,qs,qudx,qvdy,r2dx,r2dy,rh,rh1847,rh4710, &
101! & rh4796,rh8498,tm,tmt0,tmt15,z1847,z4710,z4796, &
102! & z8498,z8510,q1d,u1d,v1d,qcnvg)
103
104 DO l=1,lm
105! COMPUTE MOISTURE CONVERGENCE
106!$omp parallel do private(i,j)
107 DO j=jsta_2l,jend_2u
108 DO i=ista_2l,iend_2u
109 q1d(i,j) = q(i,j,l)
110 u1d(i,j) = uh(i,j,l)
111 v1d(i,j) = vh(i,j,l)
112 ENDDO
113 ENDDO
114 CALL calmcvg(q1d,u1d,v1d,qcnvg)
115! COMPUTE MOISTURE CONVERGENCE
116 DO j=jsta_m2,jend_m2
117 DO i=ista_m,iend_m
118!
119! SET TARGET PRESSURES.
120
121 p100 = pint(i,j,nint(lmh(i,j)))
122 p98 = sig98*p100
123 p96 = sig96*p100
124 p85 = sig85*p100
125 p84 = sig84*p100
126 p47 = sig47*p100
127 p18 = sig18*p100
128!
129!
130! COMPUTE LAYER MEAN FIELDS AT THE GIVEN K.
131!
132! COMPUTE P, Z, T, AND Q AT THE MIDPOINT OF THE CURRENT ETA LAYER.
133 alpm = d50*(alpint(i,j,l)+alpint(i,j,l+1))
134 dz = zint(i,j,l)-zint(i,j,l+1)
135 pm = exp(alpm)
136 tm = t(i,j,l)
137 qm = q(i,j,l)
138 qm = amax1(qm,h1m12)
139 qmcvg= qcnvg(i,j)
140!
141!
142! COMPUTE RELATIVE HUMIDITY.
143!
144 qs=pq0/pm*exp(a2*(tm-a3)/(tm-a4))
145!
146 rh = qm/qs
147 IF (rh>h1) THEN
148 rh = h1
149 qm = rh*qs
150 ENDIF
151 IF (rh<d01) THEN
152 rh = d01
153 qm = rh*qs
154 ENDIF
155!
156! SIGMA 0.85-1.00 MOISTURE CONVERGENCE.
157 IF ((pm<=p100).AND.(pm>=p85)) THEN
158 z8510(i,j) = z8510(i,j) + dz
159 qm8510(i,j) = qm8510(i,j) + qmcvg*dz
160 ENDIF
161!
162! SIGMA 0.47-1.00 RELATIVE HUMIDITY.
163 IF ((pm<=p100).AND.(pm>=p47)) THEN
164 z4710(i,j) = z4710(i,j) + dz
165 rh4710(i,j) = rh4710(i,j) + rh*dz
166 ENDIF
167!
168! SIGMA 0.84-0.98 RELATIVE HUMIDITY.
169 IF ((pm<=p98).AND.(pm>=p84)) THEN
170 z8498(i,j) = z8498(i,j) + dz
171 rh8498(i,j) = rh8498(i,j) + rh*dz
172 ENDIF
173!
174! SIGMA 0.47-0.96 RELATIVE HUMIDITY.
175 IF ((pm<=p96).AND.(pm>=p47)) THEN
176 z4796(i,j) = z4796(i,j) + dz
177 rh4796(i,j) = rh4796(i,j) + rh*dz
178 ENDIF
179!
180! SIGMA 0.18-0.47 RELATIVE HUMIDITY.
181 IF ((pm<=p47).AND.(pm>=p18)) THEN
182 z1847(i,j) = z1847(i,j) + dz
183 rh1847(i,j) = rh1847(i,j) + rh*dz
184 ENDIF
185!
186 ENDDO
187 ENDDO
188 ENDDO
189!
190 DO j=jsta_m2,jend_m2
191 DO i=ista_m,iend_m
192! NORMALIZE TO GET LAYER MEAN VALUES.
193 IF (z8510(i,j)>0) THEN
194 qm8510(i,j) = qm8510(i,j)/z8510(i,j)
195 ELSE
196 qm8510(i,j) = spval
197 ENDIF
198 IF (abs(qm8510(i,j)-spval)<small)qm8510(i,j)=h1m12
199!
200 IF (z4710(i,j)>0) THEN
201 rh4710(i,j) = rh4710(i,j)/z4710(i,j)
202 ELSE
203 rh4710(i,j) = spval
204 ENDIF
205!
206 IF (z8498(i,j)>0) THEN
207 rh8498(i,j) = rh8498(i,j)/z8498(i,j)
208 ELSE
209 rh8498(i,j) = spval
210 ENDIF
211!
212 IF (z4796(i,j)>0) THEN
213 rh4796(i,j) = rh4796(i,j)/z4796(i,j)
214 ELSE
215 rh4796(i,j) = spval
216 ENDIF
217!
218 IF (z1847(i,j)>0) THEN
219 rh1847(i,j) = rh1847(i,j)/z1847(i,j)
220 ELSE
221 rh1847(i,j) = spval
222 ENDIF
223 ENDDO
224 ENDDO
225!
226!
227! END OF ROUTINE.
228!
229 RETURN
230 END
231