UPP  V11.0.0
 All Data Structures Files Functions Pages
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 
Definition: MASKS_mod.f:1