/[MITgcm]/MITgcm/pkg/fizhi/fizhi_tendency_apply.F
ViewVC logotype

Contents of /MITgcm/pkg/fizhi/fizhi_tendency_apply.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.14 - (show annotations) (download)
Wed Jul 16 20:12:21 2014 UTC (9 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.13: +168 -156 lines
add parenthesis around fizhi tendencies: this affects machine truncation

1 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/fizhi_tendency_apply.F,v 1.13 2014/07/09 17:00:49 jmc Exp $
2 C $Name: $
3
4 #include "FIZHI_OPTIONS.h"
5 SUBROUTINE fizhi_tendency_apply_u(
6 U gU_arr,
7 I iMin,iMax,jMin,jMax, kLev, bi, bj,
8 I myTime, myIter, myThid )
9 C=======================================================================
10 C Routine: fizhi_tendency_apply_u
11 C Interpolate tendencies from physics grid to dynamics grid and
12 C add fizhi tendency terms to U tendency.
13 C
14 C INPUT:
15 C iMin - Working range of tile for applying forcing.
16 C iMax
17 C jMin
18 C jMax
19 C kLev
20 C
21 C Notes: Routine works for one level at a time
22 C Assumes that U and V tendencies are already on C-Grid
23 C=======================================================================
24 IMPLICIT NONE
25
26 #include "SIZE.h"
27 #include "GRID.h"
28 #include "EEPARAMS.h"
29 #include "DYNVARS.h"
30 #include "fizhi_SIZE.h"
31 #include "fizhi_land_SIZE.h"
32 #include "fizhi_coms.h"
33
34 _RL gU_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
35 INTEGER iMin, iMax, jMin, jMax
36 INTEGER kLev, bi, bj
37 _RL myTime
38 INTEGER myIter
39 INTEGER myThid
40
41 _RL rayleighdrag
42 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43 INTEGER i, j
44 #ifdef ALLOW_DIAGNOSTICS
45 LOGICAL DIAGNOSTICS_IS_ON
46 EXTERNAL DIAGNOSTICS_IS_ON
47 #endif
48
49 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
50 rayleighdrag = 1./(31.*86400.*2.)
51 ELSE
52 rayleighdrag = 0.
53 ENDIF
54
55 DO j=jMin,jMax
56 DO i=iMin,iMax
57 gU_arr(i,j) = gU_arr(i,j)
58 & + maskW(i,j,kLev,bi,bj)
59 & *( guphy(i,j,kLev,bi,bj)
60 & - rayleighdrag*uVel(i,j,kLev,bi,bj) )
61 ENDDO
62 ENDDO
63
64 IF ( DIAGNOSTICS_IS_ON('DIABUDYN',myThid) ) THEN
65 DO j=jMin,jMax
66 DO i=iMin,iMax
67 tmpdiag(i,j) = maskW(i,j,kLev,bi,bj)
68 & *( guphy(i,j,kLev,bi,bj)
69 & - rayleighdrag*uVel(i,j,kLev,bi,bj) )
70 & * 86400
71 ENDDO
72 ENDDO
73 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABUDYN',kLev,1,2,bi,bj,myThid)
74 ENDIF
75
76 IF ( DIAGNOSTICS_IS_ON('RFU ',myThid) ) THEN
77 DO j=jMin,jMax
78 DO i=iMin,iMax
79 tmpdiag(i,j) = -1. _d 0 * rayleighdrag *
80 & maskW(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj) * 86400
81 ENDDO
82 ENDDO
83 CALL DIAGNOSTICS_FILL(tmpdiag,'RFU ',kLev,1,2,bi,bj,myThid)
84 ENDIF
85
86 RETURN
87 END
88 SUBROUTINE fizhi_tendency_apply_v(
89 U gV_arr,
90 I iMin,iMax,jMin,jMax, kLev, bi, bj,
91 I myTime, myIter, myThid )
92 C=======================================================================
93 C Routine: fizhi_tendency_apply_v
94 C Interpolate tendencies from physics grid to dynamics grid and
95 C add fizhi tendency terms to V tendency.
96 C
97 C INPUT:
98 C iMin - Working range of tile for applying forcing.
99 C iMax
100 C jMin
101 C jMax
102 C kLev
103 C
104 C Notes: Routine works for one level at a time
105 C Assumes that U and V tendencies are already on C-Grid
106 C=======================================================================
107 IMPLICIT NONE
108
109 #include "SIZE.h"
110 #include "GRID.h"
111 #include "EEPARAMS.h"
112 #include "DYNVARS.h"
113 #include "fizhi_SIZE.h"
114 #include "fizhi_land_SIZE.h"
115 #include "fizhi_coms.h"
116
117 _RL gV_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
118 INTEGER iMin, iMax, jMin, jMax
119 INTEGER kLev, bi, bj
120 _RL myTime
121 INTEGER myIter
122 INTEGER myThid
123
124 _RL rayleighdrag
125 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
126 INTEGER i, j
127 #ifdef ALLOW_DIAGNOSTICS
128 LOGICAL DIAGNOSTICS_IS_ON
129 EXTERNAL DIAGNOSTICS_IS_ON
130 #endif
131
132 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
133 rayleighdrag = 1./(31.*86400.*2.)
134 ELSE
135 rayleighdrag = 0.
136 ENDIF
137
138 DO j=jMin,jMax
139 DO i=iMin,iMax
140 gV_arr(i,j) = gV_arr(i,j)
141 & + maskS(i,j,kLev,bi,bj)
142 & *( gvphy(i,j,kLev,bi,bj)
143 & - rayleighdrag*vVel(i,j,kLev,bi,bj) )
144 ENDDO
145 ENDDO
146
147 IF ( DIAGNOSTICS_IS_ON('DIABVDYN',myThid) ) THEN
148 DO j=jMin,jMax
149 DO i=iMin,iMax
150 tmpdiag(i,j) = maskS(i,j,kLev,bi,bj)
151 & *( gvphy(i,j,kLev,bi,bj)
152 & - rayleighdrag*vVel(i,j,kLev,bi,bj) )
153 & * 86400
154 ENDDO
155 ENDDO
156 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABVDYN',kLev,1,2,bi,bj,myThid)
157 ENDIF
158
159 IF ( DIAGNOSTICS_IS_ON('RFV ',myThid) ) THEN
160 DO j=jMin,jMax
161 DO i=iMin,iMax
162 tmpdiag(i,j) = -1. _d 0 * rayleighdrag *
163 & maskS(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj) * 86400
164 ENDDO
165 ENDDO
166 CALL DIAGNOSTICS_FILL(tmpdiag,'RFV ',kLev,1,2,bi,bj,myThid)
167 ENDIF
168
169 RETURN
170 END
171 SUBROUTINE fizhi_tendency_apply_t(
172 U gT_arr,
173 I iMin,iMax,jMin,jMax, kLev, bi, bj,
174 I myTime, myIter, myThid )
175 C=======================================================================
176 C Routine: fizhi_tendency_apply_t
177 C Interpolate tendencies from physics grid to dynamics grid and
178 C add fizhi tendency terms to T (theta) tendency.
179 C
180 C INPUT:
181 C iMin - Working range of tile for applying forcing.
182 C iMax
183 C jMin
184 C jMax
185 C kLev
186 C
187 C Notes: Routine works for one level at a time
188 C=======================================================================
189 IMPLICIT NONE
190
191 #include "SIZE.h"
192 #include "GRID.h"
193 #include "EEPARAMS.h"
194 #include "DYNVARS.h"
195 #include "fizhi_SIZE.h"
196 #include "fizhi_land_SIZE.h"
197 #include "fizhi_coms.h"
198
199 _RL gT_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
200 INTEGER iMin, iMax, jMin, jMax
201 INTEGER kLev, bi, bj
202 _RL myTime
203 INTEGER myIter
204 INTEGER myThid
205
206 _RL rayleighdrag,getcon,cp,kappa,pNrkappa
207 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
208 INTEGER i, j
209 #ifdef ALLOW_DIAGNOSTICS
210 LOGICAL DIAGNOSTICS_IS_ON
211 EXTERNAL DIAGNOSTICS_IS_ON
212 #endif
213
214 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
215 cp = getcon('CP')
216 kappa = getcon('KAPPA')
217 pNrkappa = (rC(klev)/100000.)**kappa
218 rayleighdrag = 1./((31.*86400.*2.)*(pNrkappa*cp))
219 ELSE
220 rayleighdrag = 0.
221 ENDIF
222
223 DO j=jMin,jMax
224 DO i=iMin,iMax
225 gT_arr(i,j) = gT_arr(i,j)
226 & + ( maskC(i,j,kLev,bi,bj)*gthphy(i,j,kLev,bi,bj)
227 & + rayleighdrag * 0.5
228 & *( maskW(i,j,kLev,bi,bj)
229 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
230 & + maskW(i+1,j,kLev,bi,bj)
231 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
232 & + maskS(i,j,kLev,bi,bj)
233 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
234 & + maskS(i,j+1,kLev,bi,bj)
235 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
236 & ) )
237 ENDDO
238 ENDDO
239
240 IF ( DIAGNOSTICS_IS_ON('DIABTDYN',myThid) ) THEN
241 DO j=jMin,jMax
242 DO i=iMin,iMax
243 tmpdiag(i,j) =
244 & ( maskC(i,j,kLev,bi,bj)*gthphy(i,j,kLev,bi,bj)
245 & + rayleighdrag * 0.5
246 & *( maskW(i,j,kLev,bi,bj)
247 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
248 & + maskW(i+1,j,kLev,bi,bj)
249 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
250 & + maskS(i,j,kLev,bi,bj)
251 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
252 & + maskS(i,j+1,kLev,bi,bj)
253 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
254 & ) ) * 86400
255 ENDDO
256 ENDDO
257 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABTDYN',kLev,1,2,bi,bj,myThid)
258 ENDIF
259
260 IF ( DIAGNOSTICS_IS_ON('RFT ',myThid) ) THEN
261 DO j=jMin,jMax
262 DO i=iMin,iMax
263 tmpdiag(i,j) = ( rayleighdrag * 0.5
264 & *( maskW(i,j,kLev,bi,bj)
265 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
266 & + maskW(i+1,j,kLev,bi,bj)
267 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
268 & + maskS(i,j,kLev,bi,bj)
269 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
270 & + maskS(i,j+1,kLev,bi,bj)
271 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
272 & ) ) * 86400
273 ENDDO
274 ENDDO
275 CALL DIAGNOSTICS_FILL(tmpdiag,'RFT ',kLev,1,2,bi,bj,myThid)
276 ENDIF
277
278 RETURN
279 END
280 SUBROUTINE fizhi_tendency_apply_s(
281 U gS_arr,
282 I iMin,iMax,jMin,jMax, kLev, bi, bj,
283 I myTime, myIter, myThid )
284 C=======================================================================
285 C Routine: fizhi_tendency_apply_s
286 C Interpolate tendencies from physics grid to dynamics grid and
287 C add fizhi tendency terms to S tendency.
288 C
289 C INPUT:
290 C iMin - Working range of tile for applying forcing.
291 C iMax
292 C jMin
293 C jMax
294 C kLev
295 C
296 C Notes: Routine works for one level at a time
297 C=======================================================================
298 IMPLICIT NONE
299
300 #include "SIZE.h"
301 #include "GRID.h"
302 #include "EEPARAMS.h"
303 #include "DYNVARS.h"
304 #include "fizhi_SIZE.h"
305 #include "fizhi_land_SIZE.h"
306 #include "fizhi_coms.h"
307
308 _RL gS_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
309 INTEGER iMin, iMax, jMin, jMax
310 INTEGER kLev, bi, bj
311 _RL myTime
312 INTEGER myIter
313 INTEGER myThid
314
315 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
316 INTEGER i, j
317 #ifdef ALLOW_DIAGNOSTICS
318 LOGICAL DIAGNOSTICS_IS_ON
319 EXTERNAL DIAGNOSTICS_IS_ON
320 #endif
321
322 DO j=jMin,jMax
323 DO i=iMin,iMax
324 gS_arr(i,j) = gS_arr(i,j)
325 & + maskC(i,j,kLev,bi,bj)*gsphy(i,j,kLev,bi,bj)
326 ENDDO
327 ENDDO
328
329 IF ( DIAGNOSTICS_IS_ON('DIABQDYN',myThid) ) THEN
330 DO j=jMin,jMax
331 DO i=iMin,iMax
332 tmpdiag(i,j) = ( maskC(i,j,kLev,bi,bj) * gsphy(i,j,kLev,bi,bj) )
333 & * 86400
334 ENDDO
335 ENDDO
336 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABQDYN',kLev,1,2,bi,bj,myThid)
337 ENDIF
338
339 RETURN
340 END

  ViewVC Help
Powered by ViewVC 1.1.22