UPP v11.0.0
Loading...
Searching...
No Matches
CALMCVG.f
Go to the documentation of this file.
1
35 SUBROUTINE calmcvg(Q1D,U1D,V1D,QCNVG)
36
37!
38!
39!
40 use masks, only: dx, dy, hbm2
41 use params_mod, only: d00, d25
42 use ctlblk_mod, only: jsta_2l, jend_2u, spval, jsta_m, jend_m, &
43 jsta_m2, jend_m2, im, jm, &
44 ista_2l, iend_2u, ista_m, iend_m, ista_m2, iend_m2
45 use gridspec_mod, only: gridtype
46!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47 implicit none
48!
49! DECLARE VARIABLES.
50!
51 REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: Q1D, U1D, V1D
52 REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: QCNVG
53
54 REAL R2DY, R2DX
55 REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: UWND, VWND, QV
56 INTEGER IHE(JM),IHW(JM),IVE(JM),IVW(JM)
57 integer I,J,ISTA2,IEND2
58 real QVDY,QUDX
59!
60!***************************************************************************
61! START CALMCVG HERE.
62!
63!
64! INITIALIZE MOISTURE CONVERGENCE ARRAY. LOAD TEMPORARY WIND ARRAYS.
65!
66 CALL exch(q1d)
67 CALL exch(u1d)
68 CALL exch(v1d)
69
70!$omp parallel do private(i,j)
71 DO j=jsta_2l,jend_2u
72! DO I=1,IM
73 DO i=ista_2l,iend_2u
74 IF(u1d(i,j)<spval)THEN
75 qcnvg(i,j) = 0.
76 ELSE
77 qcnvg(i,j) = spval
78 ENDIF
79 uwnd(i,j) = u1d(i,j)
80 vwnd(i,j) = v1d(i,j)
81 IF (uwnd(i,j) == spval) uwnd(i,j) = d00
82 IF (vwnd(i,j) == spval) vwnd(i,j) = d00
83 ENDDO
84 ENDDO
85!
86 IF(gridtype == 'A')THEN
87!$omp parallel do private(i,j,qudx,qvdy,r2dx,r2dy)
88 DO j=jsta_m,jend_m
89! DO I=2,IM-1
90 DO i=ista_m,iend_m
91 IF(q1d(i,j+1)<spval.AND.q1d(i,j-1)<spval.AND. &
92 q1d(i+1,j)<spval.AND.q1d(i-1,j)<spval.AND. &
93 q1d(i,j)<spval) THEN
94 r2dx = 1./(2.*dx(i,j)) !MEB DX?
95 r2dy = 1./(2.*dy(i,j)) !MEB DY?
96 qudx = (q1d(i+1,j)*uwnd(i+1,j)-q1d(i-1,j)*uwnd(i-1,j))*r2dx
97 qvdy = (q1d(i,j+1)*vwnd(i,j+1)-q1d(i,j-1)*vwnd(i,j-1))*r2dy
98 qcnvg(i,j) = -(qudx + qvdy)
99 ELSE
100 qcnvg(i,j) = spval
101 ENDIF
102 ENDDO
103 ENDDO
104 ELSE IF(gridtype == 'E')THEN
105
106 DO j=jsta_m,jend_m
107 ihe(j) = mod(j+1,2)
108 ihw(j) = ihe(j)-1
109 ive(j) = mod(j,2)
110 ivw(j) = ive(j)-1
111 END DO
112
113!$omp parallel do private(i,j)
114 DO j=jsta_m,jend_m
115! ISTA = 1+MOD(J+1,2)
116! IEND = IM-MOD(J,2)
117! DO I=ISTA,IEND
118 DO i=ista_m,iend_m
119 IF(q1d(i,j-1)<spval.AND.q1d(i+ivw(j),j)<spval.AND.&
120 q1d(i+ive(j),j)<spval.AND.q1d(i,j+1)<spval) THEN
121 qv(i,j) = d25*(q1d(i,j-1)+q1d(i+ivw(j),j) &
122 +q1d(i+ive(j),j)+q1d(i,j+1))
123 ELSE
124 qv(i,j) = spval
125 ENDIF
126 END DO
127 END DO
128
129 CALL exch(qv)
130! CALL EXCH(VWND)
131
132!
133!$omp parallel do private(i,j,qudx,qvdy,r2dx,r2dy)
134 DO j=jsta_m2,jend_m2
135! IEND = IM-1-MOD(J,2)
136! DO I=2,IEND
137 DO i=ista_m,iend_m-mod(j,2)
138 IF(qv(i+ihe(j),j)<spval.AND.uwnd(i+ihe(j),j)<spval.AND.&
139 qv(i+ihw(j),j)<spval.AND.uwnd(i+ihw(j),j)<spval.AND.&
140 qv(i,j)<spval.AND.qv(i,j-1)<spval.AND.qv(i,j+1)<spval) THEN
141 r2dx = 1./(2.*dx(i,j))
142 r2dy = 1./(2.*dy(i,j))
143 qudx = (qv(i+ihe(j),j)*uwnd(i+ihe(j),j) &
144 -qv(i+ihw(j),j)*uwnd(i+ihw(j),j))*r2dx
145 qvdy = (qv(i,j+1)*vwnd(i,j+1)-qv(i,j-1)*vwnd(i,j-1))*r2dy
146
147 qcnvg(i,j) = -(qudx + qvdy) * hbm2(i,j)
148 ELSE
149 qcnvg(i,j) = spval
150 ENDIF
151 ENDDO
152 ENDDO
153 ELSE IF(gridtype=='B')THEN
154
155! CALL EXCH(UWND)
156!
157!$omp parallel do private(i,j,qudx,qvdy,r2dx,r2dy)
158 DO j=jsta_m,jend_m
159! DO I=2,IM-1
160 DO i=ista_m,iend_m
161 IF(uwnd(i,j)<spval.AND.uwnd(i,j-1)<spval.AND.&
162 uwnd(i-1,j)<spval.AND.uwnd(i-1,j-1)<spval.AND.&
163 q1d(i,j)<spval.AND.q1d(i+1,j)<spval.AND.q1d(i-1,j)<spval.AND.&
164 vwnd(i,j)<spval.AND.vwnd(i-1,j)<spval.AND.&
165 vwnd(i,j-1)<spval.AND.vwnd(i-1,j-1)<spval.AND.&
166 q1d(i,j+1)<spval.AND.q1d(i,j-1)<spval) THEN
167 r2dx = 1./dx(i,j)
168 r2dy = 1./dy(i,j)
169 qudx=(0.5*(uwnd(i,j)+uwnd(i,j-1))*0.5*(q1d(i,j)+q1d(i+1,j)) &
170 -0.5*(uwnd(i-1,j)+uwnd(i-1,j-1))*0.5*(q1d(i,j)+q1d(i-1,j)))*r2dx
171 qvdy=(0.5*(vwnd(i,j)+vwnd(i-1,j))*0.5*(q1d(i,j)+q1d(i,j+1)) &
172 -0.5*(vwnd(i,j-1)+vwnd(i-1,j-1))*0.5*(q1d(i,j)+q1d(i,j-1)))*r2dy
173
174 qcnvg(i,j) = -(qudx + qvdy)
175 ELSE
176 qcnvg(i,j) = spval
177 ENDIF
178! print*,'mcvg=',i,j,r2dx,r2dy,QCNVG(I,J)
179 ENDDO
180 ENDDO
181 ENDIF
182!meb not sure about the indexing for the c-grid
183!
184! END OF ROUTINE.
185!
186 RETURN
187 END
188