/[MITgcm]/MITgcm/pkg/aim/aim_external_forcing.F
ViewVC logotype

Contents of /MITgcm/pkg/aim/aim_external_forcing.F

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


Revision 1.7 - (show annotations) (download)
Mon Aug 1 19:34:57 2005 UTC (18 years, 9 months ago) by cnh
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +1 -1 lines
FILE REMOVED
Emptying aim/ since aim_v23 is now "the one" for all experiements.

1 C $Header: /u/gcmpack/MITgcm/pkg/aim/aim_external_forcing.F,v 1.6 2002/09/27 20:05:11 jmc Exp $
2 C $Name: $
3
4 #include "AIM_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE AIM_EXTERNAL_FORCING_U(
8 I iMin, iMax, jMin, jMax,bi,bj,kLev,
9 I myCurrentTime,myThid)
10 C /==========================================================\
11 C | S/R AIM_EXTERNAL_FORCING_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 "AIM2DYN.h"
24 #include "AIM_DIAGS.h"
25
26 C == Routine arguments ==
27 C iMin - Working range of tile for applying forcing.
28 C iMax
29 C jMin
30 C jMax
31 C kLev
32 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
33 _RL myCurrentTime
34 INTEGER myThid
35 CEndOfInterface
36
37 #ifdef ALLOW_AIM
38 C == Local variables ==
39 C i,j - Loop counters
40 INTEGER i, j
41 _RL DDTT, uStr_tmp
42
43 DDTT = deltaTclock
44
45 #ifdef OLD_AIM_INTERFACE
46 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
47 C - to reproduce old results (coupled run, summer 2000) :
48 IF (kLev.eq.1) THEN
49 DO j=jMin,jMax
50 DO i=iMin,iMax
51 uStr_tmp = -aim_drag(i,j,bi,bj)*uVel(i,j,kLev,bi,bj)
52 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
53 & + uStr_tmp*gravity*recip_drF(kLev)
54 #ifdef ALLOW_TIMEAVE
55 USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
56 #endif
57 ENDDO
58 ENDDO
59 ELSE
60 DO j=jMin,jMax
61 DO i=iMin,iMax
62 IF ( maskW(i,j,kLev-1,bi,bj) .EQ. 0. ) THEN
63 uStr_tmp = -aim_drag(i,j,bi,bj)*uVel(i,j,kLev,bi,bj)
64 #ifdef ALLOW_TIMEAVE
65 USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
66 #endif
67 C - put the same bug as in the old setup :
68 IF ( maskC(i,j,kLev-1,bi,bj) .EQ. 1. ) uStr_tmp = 0.
69 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
70 & + uStr_tmp*gravity*recip_drF(kLev)
71 ENDIF
72 ENDDO
73 ENDDO
74 ENDIF
75 #else /* OLD_AIM_INTERFACE */
76 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
77 IF (kLev.eq.1) THEN
78 DO j=jMin,jMax
79 DO i=iMin,iMax
80 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
81 uStr_tmp =
82 & -( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) )
83 & * 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
84 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
85 & + uStr_tmp*gravity*recip_drF(kLev)
86 c & * recip_hFacW(i,j,kLev,bi,bj)
87 #ifdef ALLOW_TIMEAVE
88 USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
89 #endif
90 ENDIF
91 ENDDO
92 ENDDO
93 ELSE
94 DO j=jMin,jMax
95 DO i=iMin,iMax
96 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
97 uStr_tmp =
98 & -( (1.-maskC(i-1,j,kLev-1,bi,bj))*aim_drag(i-1,j,bi,bj)
99 & +(1.-maskC( i ,j,kLev-1,bi,bj))*aim_drag( i ,j,bi,bj)
100 & )* 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
101 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
102 & + uStr_tmp*gravity*recip_drF(kLev)
103 c & * recip_hFacW(i,j,kLev,bi,bj)
104 #ifdef ALLOW_TIMEAVE
105 USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
106 #endif
107 ENDIF
108 ENDDO
109 ENDDO
110 ENDIF
111 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
112 #endif /* OLD_AIM_INTERFACE */
113
114 #endif /* ALLOW_AIM */
115
116 RETURN
117 END
118 CStartOfInterface
119 SUBROUTINE AIM_EXTERNAL_FORCING_V(
120 I iMin, iMax, jMin, jMax,bi,bj,kLev,
121 I myCurrentTime,myThid)
122 C /==========================================================\
123 C | S/R EXTERNAL_FORCING_V |
124 C | o Add AIM tendency to meridional velocity. |
125 C \==========================================================/
126 IMPLICIT NONE
127
128 C == Global data ==
129 #include "SIZE.h"
130 #include "EEPARAMS.h"
131 #include "PARAMS.h"
132 #include "GRID.h"
133 #include "DYNVARS.h"
134
135 #include "AIM2DYN.h"
136 #include "AIM_DIAGS.h"
137
138 C == Routine arguments ==
139 C iMin - Working range of tile for applying forcing.
140 C iMax
141 C jMin
142 C jMax
143 C kLev
144 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
145 _RL myCurrentTime
146 INTEGER myThid
147 CEndOfInterface
148
149 #ifdef ALLOW_AIM
150 C == Local variables ==
151 C Loop counters
152 INTEGER i, j
153 _RL DDTT, vStr_tmp
154
155 DDTT = deltaTclock
156
157 C call CHKSUM_TILED( ' drag AAA ',aim_drag,1,bi,bj,myThid )
158
159 #ifdef OLD_AIM_INTERFACE
160 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
161 C - to reproduce old results (coupled run, summer 2000) :
162 IF (kLev.eq.1) THEN
163 DO j=jMin,jMax
164 DO i=iMin,iMax
165 vStr_tmp = -aim_drag(i,j,bi,bj)*vVel(i,j,kLev,bi,bj)
166 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
167 & + vStr_tmp*gravity*recip_drF(kLev)
168 #ifdef ALLOW_TIMEAVE
169 VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
170 #endif
171 ENDDO
172 ENDDO
173 ELSE
174 DO j=jMin,jMax
175 DO i=iMin,iMax
176 IF ( maskS(i,j,kLev-1,bi,bj) .EQ. 0. ) THEN
177 vStr_tmp = -aim_drag(i,j,bi,bj)*vVel(i,j,kLev,bi,bj)
178 #ifdef ALLOW_TIMEAVE
179 VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
180 #endif
181 C - put the same bug as in the old setup :
182 IF ( maskC(i,j,kLev-1,bi,bj) .EQ. 1. ) vStr_tmp = 0.
183 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
184 & + vStr_tmp*gravity*recip_drF(kLev)
185 ENDIF
186 ENDDO
187 ENDDO
188 ENDIF
189 #else /* OLD_AIM_INTERFACE */
190 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
191 IF (kLev.eq.1) THEN
192 DO j=jMin,jMax
193 DO i=iMin,iMax
194 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
195 vStr_tmp =
196 & -( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) )
197 & * 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
198 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
199 & + vStr_tmp*gravity*recip_drF(kLev)
200 c & * recip_hFacS(i,j,kLev,bi,bj)
201 #ifdef ALLOW_TIMEAVE
202 VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
203 #endif
204 ENDIF
205 ENDDO
206 ENDDO
207 ELSE
208 DO j=jMin,jMax
209 DO i=iMin,iMax
210 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
211 vStr_tmp =
212 & -( (1.-maskC(i,j-1,kLev-1,bi,bj))*aim_drag(i,j-1,bi,bj)
213 & +(1.-maskC(i, j ,kLev-1,bi,bj))*aim_drag(i, j ,bi,bj)
214 & )* 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
215 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
216 & + vStr_tmp*gravity*recip_drF(kLev)
217 c & * recip_hFacS(i,j,kLev,bi,bj)
218 #ifdef ALLOW_TIMEAVE
219 VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
220 #endif
221 ENDIF
222 ENDDO
223 ENDDO
224 ENDIF
225 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
226 #endif /* OLD_AIM_INTERFACE */
227
228 #endif /* ALLOW_AIM */
229
230 RETURN
231 END
232 CStartOfInterface
233 SUBROUTINE AIM_EXTERNAL_FORCING_T(
234 I iMin, iMax, jMin, jMax,bi,bj,kLev,
235 I myCurrentTime,myThid)
236 C /==========================================================\
237 C | S/R AIM_EXTERNAL_FORCING_T |
238 C | o Add AIM tendency to T |
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 myCurrentTime
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_EXTERNAL_FORCING_S(
281 I iMin, iMax, jMin, jMax,bi,bj,kLev,
282 I myCurrentTime,myThid)
283 C /==========================================================\
284 C | S/R AIM_EXTERNAL_FORCING_S |
285 C | o Add AIM tendency to S. |
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 myCurrentTime
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