/[MITgcm]/MITgcm/pkg/aim_v23/aim_tendency_apply.F
ViewVC logotype

Contents of /MITgcm/pkg/aim_v23/aim_tendency_apply.F

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


Revision 1.7 - (show annotations) (download)
Tue Dec 14 04:37:29 2004 UTC (19 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57g_pre, checkpoint57s_post, checkpoint58b_post, checkpoint57b_post, checkpoint57g_post, checkpoint57y_post, checkpoint57r_post, checkpoint57d_post, checkpoint57i_post, checkpoint58, checkpoint58f_post, checkpoint57n_post, checkpoint58d_post, checkpoint58a_post, checkpoint57z_post, checkpoint58m_post, checkpoint57l_post, checkpoint57t_post, checkpoint57v_post, checkpoint57f_post, checkpoint57h_pre, checkpoint57h_post, checkpoint57y_pre, checkpoint58o_post, checkpoint57c_post, checkpoint58e_post, checkpoint57c_pre, checkpoint58n_post, checkpoint57e_post, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, eckpoint57e_pre, checkpoint58k_post, checkpoint58l_post, checkpoint57h_done, checkpoint57j_post, checkpoint57f_pre, checkpoint58g_post, checkpoint58h_post, checkpoint58j_post, checkpoint57o_post, checkpoint57k_post, checkpoint57w_post, checkpoint58i_post, checkpoint57x_post, checkpoint58c_post
Changes since 1.6: +5 -5 lines
use new S/R diagnostics_fill to fill-in diagnostic arrays

1 C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/aim_tendency_apply.F,v 1.6 2004/07/26 03:29:34 jmc Exp $
2 C $Name: $
3
4 #include "AIM_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE AIM_TENDENCY_APPLY_U(
8 I iMin, iMax, jMin, jMax,bi,bj,kLev,
9 I myTime,myThid)
10 C *==========================================================*
11 C | S/R AIM_TENDENCY_APPLY_U
12 C | o Add AIM tendency terms to U tendency.
13 C *==========================================================*
14 IMPLICIT NONE
15
16 C == Global data ==
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GRID.h"
21 #include "DYNVARS.h"
22
23 #include "AIM_PARAMS.h"
24 #include "AIM2DYN.h"
25 #include "AIM_DIAGS.h"
26
27 C == Routine arguments ==
28 C iMin - Working range of tile for applying forcing.
29 C iMax
30 C jMin
31 C jMax
32 C kLev
33 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
34 _RL myTime
35 INTEGER myThid
36 CEndOfInterface
37
38 #ifdef ALLOW_AIM
39 C == Local variables in common block ==
40 C aim_uStress :: surface stress applied to zonal wind
41 COMMON /LOCAL_AIM_TENDENCY_APPLY_U/ aim_uStress
42 _RL aim_uStress(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
43 C == Local variables ==
44 C i,j - Loop counters
45 INTEGER i, j
46 _RL DDTT, uStr_tmp
47
48 DDTT = deltaTclock
49
50 IF ( myTime.EQ.startTime .AND. kLev.EQ.1 ) THEN
51 C- Initialise diagnostic array aim_uStress
52 DO j=1-Oly,sNy+Oly
53 DO i=1-Olx,sNx+Olx
54 aim_uStress(i,j,bi,bj) = 0.
55 ENDDO
56 ENDDO
57 ENDIF
58
59 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
60 IF ( kLev.EQ.Nr .AND. aim_dragStrato.GT.0. ) THEN
61 C- Note: exclusive IF / ELSE is legitimate here since surface drag
62 C is not supposed to be applied in stratosphere
63 DO j=jMin,jMax
64 DO i=iMin,iMax
65 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
66 & -maskW(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)/aim_dragStrato
67 ENDDO
68 ENDDO
69 ELSEIF (kLev.eq.1) THEN
70 DO j=jMin,jMax
71 DO i=iMin,iMax
72 IF ( maskW(i,j,kLev,bi,bj) .NE. 0. ) THEN
73 uStr_tmp =
74 & -( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) )
75 & * 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
76 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
77 & + uStr_tmp*gravity*recip_drF(kLev)
78 & * recip_hFacW(i,j,kLev,bi,bj)
79 aim_uStress(i,j,bi,bj) = uStr_tmp
80 ENDIF
81 ENDDO
82 ENDDO
83 ELSE
84 DO j=jMin,jMax
85 DO i=iMin,iMax
86 IF ( maskW(i,j,kLev-1,bi,bj) .EQ. 0.
87 & .AND. maskW(i,j,kLev,bi,bj) .NE. 0. ) THEN
88 uStr_tmp =
89 & -( (1.-maskC(i-1,j,kLev-1,bi,bj))*aim_drag(i-1,j,bi,bj)
90 & +(1.-maskC( i ,j,kLev-1,bi,bj))*aim_drag( i ,j,bi,bj)
91 & )* 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
92 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
93 & + uStr_tmp*gravity*recip_drF(kLev)
94 & * recip_hFacW(i,j,kLev,bi,bj)
95 aim_uStress(i,j,bi,bj) = uStr_tmp
96 ENDIF
97 ENDDO
98 ENDDO
99 ENDIF
100 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
101
102 #ifdef ALLOW_AIM_TAVE
103 IF (aim_taveFreq.NE.0 .AND. kLev.EQ.Nr) THEN
104 CALL TIMEAVE_CUMULATE( USTRtave, aim_uStress, 1,
105 & deltaTclock, bi, bj, myThid )
106 ENDIF
107 #endif
108 #ifdef ALLOW_DIAGNOSTICS
109 IF (usediagnostics .AND. kLev.EQ.Nr) THEN
110 CALL DIAGNOSTICS_FILL( aim_uStress, 'UFLUX ',
111 & 0,1,1,bi,bj,myThid)
112 ENDIF
113 #endif
114
115 #endif /* ALLOW_AIM */
116
117 RETURN
118 END
119 CStartOfInterface
120 SUBROUTINE AIM_TENDENCY_APPLY_V(
121 I iMin, iMax, jMin, jMax,bi,bj,kLev,
122 I myTime,myThid)
123 C *==========================================================*
124 C | S/R TENDENCY_APPLY_V
125 C | o Add AIM tendency terms to V tendency.
126 C *==========================================================*
127 IMPLICIT NONE
128
129 C == Global data ==
130 #include "SIZE.h"
131 #include "EEPARAMS.h"
132 #include "PARAMS.h"
133 #include "GRID.h"
134 #include "DYNVARS.h"
135
136 #include "AIM_PARAMS.h"
137 #include "AIM2DYN.h"
138 #include "AIM_DIAGS.h"
139
140 C == Routine arguments ==
141 C iMin - Working range of tile for applying forcing.
142 C iMax
143 C jMin
144 C jMax
145 C kLev
146 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
147 _RL myTime
148 INTEGER myThid
149 CEndOfInterface
150
151 #ifdef ALLOW_AIM
152 C == Local variables in common block ==
153 C aim_uStress :: surface stress applied to meridional wind
154 COMMON /LOCAL_AIM_TENDENCY_APPLY_V/ aim_vStress
155 _RL aim_vStress(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
156 C == Local variables ==
157 C Loop counters
158 INTEGER i, j
159 _RL DDTT, vStr_tmp
160
161 DDTT = deltaTclock
162
163 IF ( myTime.EQ.startTime .AND. kLev.EQ.1 ) THEN
164 C- Initialise diagnostic array aim_uStress
165 DO j=1-Oly,sNy+Oly
166 DO i=1-Olx,sNx+Olx
167 aim_vStress(i,j,bi,bj) = 0.
168 ENDDO
169 ENDDO
170 ENDIF
171
172 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
173 IF ( kLev.EQ.Nr .AND. aim_dragStrato.GT.0. ) THEN
174 C- Note: exclusive IF / ELSE is legitimate here since surface drag
175 C is not supposed to be applied in the stratosphere
176 DO j=jMin,jMax
177 DO i=iMin,iMax
178 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
179 & -maskS(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)/aim_dragStrato
180 ENDDO
181 ENDDO
182 ELSEIF (kLev.eq.1) THEN
183 DO j=jMin,jMax
184 DO i=iMin,iMax
185 IF ( maskS(i,j,kLev,bi,bj) .NE. 0. ) THEN
186 vStr_tmp =
187 & -( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) )
188 & * 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
189 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
190 & + vStr_tmp*gravity*recip_drF(kLev)
191 & * recip_hFacS(i,j,kLev,bi,bj)
192 aim_vStress(i,j,bi,bj) = vStr_tmp
193 ENDIF
194 ENDDO
195 ENDDO
196 ELSE
197 DO j=jMin,jMax
198 DO i=iMin,iMax
199 IF ( maskS(i,j,kLev-1,bi,bj) .EQ. 0.
200 & .AND. maskS(i,j,kLev,bi,bj) .NE. 0. ) THEN
201 vStr_tmp =
202 & -( (1.-maskC(i,j-1,kLev-1,bi,bj))*aim_drag(i,j-1,bi,bj)
203 & +(1.-maskC(i, j ,kLev-1,bi,bj))*aim_drag(i, j ,bi,bj)
204 & )* 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
205 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
206 & + vStr_tmp*gravity*recip_drF(kLev)
207 & * recip_hFacS(i,j,kLev,bi,bj)
208 aim_vStress(i,j,bi,bj) = vStr_tmp
209 ENDIF
210 ENDDO
211 ENDDO
212 ENDIF
213 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
214
215 #ifdef ALLOW_AIM_TAVE
216 IF (aim_taveFreq.NE.0 .AND. kLev.EQ.Nr) THEN
217 CALL TIMEAVE_CUMULATE( VSTRtave, aim_vStress, 1,
218 & deltaTclock, bi, bj, myThid )
219 ENDIF
220 #endif
221 #ifdef ALLOW_DIAGNOSTICS
222 IF (usediagnostics .AND. kLev.EQ.Nr) THEN
223 CALL DIAGNOSTICS_FILL( aim_vStress, 'VFLUX ',
224 & 0,1,1,bi,bj,myThid)
225 ENDIF
226 #endif
227
228 #endif /* ALLOW_AIM */
229
230 RETURN
231 END
232 CStartOfInterface
233 SUBROUTINE AIM_TENDENCY_APPLY_T(
234 I iMin, iMax, jMin, jMax,bi,bj,kLev,
235 I myTime,myThid)
236 C *==========================================================*
237 C | S/R AIM_TENDENCY_APPLY_T
238 C | o Add AIM tendency to gT
239 C *==========================================================*
240 IMPLICIT NONE
241
242 C == Global data ==
243 #include "SIZE.h"
244 #include "EEPARAMS.h"
245 #include "PARAMS.h"
246 #include "GRID.h"
247 #include "DYNVARS.h"
248
249 #include "AIM2DYN.h"
250
251 C == Routine arguments ==
252 C iMin - Working range of tile for applying forcing.
253 C iMax
254 C jMin
255 C jMax
256 C kLev
257 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
258 _RL myTime
259 INTEGER myThid
260 CEndOfInterface
261
262 #ifdef ALLOW_AIM
263 C == Local variables ==
264 C Loop counters
265 INTEGER I, J
266
267 C-- Forcing: add AIM heating/cooling tendency to gT:
268 DO J=1,sNy
269 DO I=1,sNx
270 gT(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)
271 & *( gT(i,j,kLev,bi,bj) + aim_dTdt(i,j,kLev,bi,bj) )
272 ENDDO
273 ENDDO
274
275 #endif /* ALLOW_AIM */
276
277 RETURN
278 END
279 CStartOfInterface
280 SUBROUTINE AIM_TENDENCY_APPLY_S(
281 I iMin, iMax, jMin, jMax,bi,bj,kLev,
282 I myTime,myThid)
283 C *==========================================================*
284 C | S/R AIM_TENDENCY_APPLY_S
285 C | o Add AIM tendency to gS.
286 C *==========================================================*
287 IMPLICIT NONE
288
289 C == Global data ==
290 #include "SIZE.h"
291 #include "EEPARAMS.h"
292 #include "PARAMS.h"
293 #include "GRID.h"
294 #include "DYNVARS.h"
295
296 #include "AIM2DYN.h"
297
298 C == Routine arguments ==
299 C iMin - Working range of tile for applying forcing.
300 C iMax
301 C jMin
302 C jMax
303 C kLev
304 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
305 _RL myTime
306 INTEGER myThid
307 CEndOfInterface
308
309
310 #ifdef ALLOW_AIM
311 C == Local variables ==
312 C Loop counters
313 INTEGER I, J
314
315 C-- Forcing: add AIM dq/dt tendency to gS:
316 DO J=1,sNy
317 DO I=1,sNx
318 gS(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)
319 & *( gS(i,j,kLev,bi,bj) + aim_dSdt(i,j,kLev,bi,bj) )
320 ENDDO
321 ENDDO
322
323 #endif /* ALLOW_AIM */
324
325 RETURN
326 END

  ViewVC Help
Powered by ViewVC 1.1.22