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