/[MITgcm]/MITgcm/verification/aim.5l_Equatorial_Channel/code/aim_external_forcing.F
ViewVC logotype

Contents of /MITgcm/verification/aim.5l_Equatorial_Channel/code/aim_external_forcing.F

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


Revision 1.3 - (show annotations) (download)
Fri Aug 24 11:56:34 2001 UTC (22 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
FILE REMOVED
Updated after changes (05-29-01) in AIM package (multi-threaded)
CV: ----------------------------------------------------------------------

1 C $Header: /u/gcmpack/models/MITgcmUV/verification/aim.5l_Equatorial_Channel/code/aim_external_forcing.F,v 1.2 2001/05/29 14:01:46 adcroft Exp $
2 C $Name: $
3
4 #include "AIM_OPTIONS.h"
5 #undef OLD_AIM_GRIG_MAPPING
6
7 CStartOfInterface
8 SUBROUTINE AIM_EXTERNAL_FORCING_U(
9 I iMin, iMax, jMin, jMax,bi,bj,kLev,
10 I myCurrentTime,myThid)
11 C /==========================================================\
12 C | S/R AIM_EXTERNAL_FORCING_U |
13 C | o Add AIM tendency terms to U tendency. |
14 C \==========================================================/
15 IMPLICIT rEAL*8 (A-H,O-Z)
16
17 C == Global data ==
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "GRID.h"
22 #include "DYNVARS.h"
23
24 #ifdef ALLOW_AIM
25 #include "AIM_DDT.h"
26 #endif /* ALLOW_AIM */
27
28 C == Routine arguments ==
29 C iMin - Working range of tile for applying forcing.
30 C iMax
31 C jMin
32 C jMax
33 C kLev
34 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
35 _RL myCurrentTime
36 INTEGER myThid
37 CEndOfInterface
38
39 #ifdef ALLOW_AIM
40 C == Local variables ==
41 C Loop counters
42 INTEGER i, j
43
44 #ifdef OLD_AIM_GRIG_MAPPING
45 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
46 c - to reproduce old results :
47 IF (kLev.eq.1) THEN
48 DO j=jMin,jMax
49 DO i=iMin,iMax
50 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
51 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
52 & -aim_drag(i-1,j,bi,bj)
53 & *0.25*(uVel(i-1,j,kLev,bi,bj)+uVel(i,j,kLev,bi,bj))
54 & -aim_drag(i,j,bi,bj)
55 & *0.25*(uVel(i,j,kLev,bi,bj)+uVel(i+1,j,kLev,bi,bj))
56 ENDIF
57 ENDDO
58 ENDDO
59 ELSE
60 DO j=jMin,jMax
61 DO i=iMin,iMax
62 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
63 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
64 & -(1.-maskC(i-1,j,kLev-1,bi,bj))*aim_drag(i-1,j,bi,bj)
65 & *0.25*(uVel(i-1,j,kLev,bi,bj)+uVel(i,j,kLev,bi,bj))
66 & -(1.-maskC( i ,j,kLev-1,bi,bj))*aim_drag( i ,j,bi,bj)
67 & *0.25*(uVel(i,j,kLev,bi,bj)+uVel(i+1,j,kLev,bi,bj))
68 ENDIF
69 ENDDO
70 ENDDO
71 ENDIF
72 #else /* OLD_AIM_GRIG_MAPPING */
73 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
74 IF (kLev.eq.1) THEN
75 DO j=jMin,jMax
76 DO i=iMin,iMax
77 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
78 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
79 & -( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) )
80 & * 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
81 ENDIF
82 ENDDO
83 ENDDO
84 ELSE
85 DO j=jMin,jMax
86 DO i=iMin,iMax
87 IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
88 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
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 ENDIF
93 ENDDO
94 ENDDO
95 ENDIF
96 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
97 #endif /* OLD_AIM_GRIG_MAPPING */
98
99 #endif /* ALLOW_AIM */
100
101 RETURN
102 END
103 CStartOfInterface
104 SUBROUTINE AIM_EXTERNAL_FORCING_V(
105 I iMin, iMax, jMin, jMax,bi,bj,kLev,
106 I myCurrentTime,myThid)
107 C /==========================================================\
108 C | S/R EXTERNAL_FORCING_V |
109 C | o Add AIM tendency to meridional velocity. |
110 C \==========================================================/
111 IMPLICIT rEAL*8 (A-H,O-Z)
112
113 C == Global data ==
114 #include "SIZE.h"
115 #include "EEPARAMS.h"
116 #include "PARAMS.h"
117 #include "GRID.h"
118 #include "DYNVARS.h"
119 #include "FFIELDS.h"
120
121 #ifdef ALLOW_AIM
122 #include "AIM_DDT.h"
123 #endif /* ALLOW_AIM */
124
125 C == Routine arguments ==
126 C iMin - Working range of tile for applying forcing.
127 C iMax
128 C jMin
129 C jMax
130 C kLev
131 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
132 _RL myCurrentTime
133 INTEGER myThid
134 CEndOfInterface
135
136 #ifdef ALLOW_AIM
137 C == Local variables ==
138 C Loop counters
139 INTEGER i, j
140
141 #ifdef OLD_AIM_GRIG_MAPPING
142 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
143 c - to reproduce old results :
144 IF (kLev.eq.1) THEN
145 DO j=jMin,jMax
146 DO i=iMin,iMax
147 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
148 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
149 & -aim_drag(i,j-1,bi,bj)
150 & *0.25*(vVel(i,j-1,kLev,bi,bj)+vVel(i,j,kLev,bi,bj))
151 & -aim_drag(i,j,bi,bj)
152 & *0.25*(vVel(i,j,kLev,bi,bj)+vVel(i,j+1,kLev,bi,bj))
153 ENDIF
154 ENDDO
155 ENDDO
156 ELSE
157 DO j=jMin,jMax
158 DO i=iMin,iMax
159 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
160 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
161 & -(1.-maskC(i,j-1,kLev-1,bi,bj))*aim_drag(i,j-1,bi,bj)
162 & *0.25*(vVel(i,j-1,kLev,bi,bj)+vVel(i,j,kLev,bi,bj))
163 & -(1.-maskC(i, j ,kLev-1,bi,bj))*aim_drag(i, j ,bi,bj)
164 & *0.25*(vVel(i,j,kLev,bi,bj)+vVel(i,j+1,kLev,bi,bj))
165 ENDIF
166 ENDDO
167 ENDDO
168 ENDIF
169 #else /* OLD_AIM_GRIG_MAPPING */
170 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
171 IF (kLev.eq.1) THEN
172 DO j=jMin,jMax
173 DO i=iMin,iMax
174 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
175 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
176 & -( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) )
177 & * 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
178 ENDIF
179 ENDDO
180 ENDDO
181 ELSE
182 DO j=jMin,jMax
183 DO i=iMin,iMax
184 IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
185 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
186 & -( (1.-maskC(i,j-1,kLev-1,bi,bj))*aim_drag(i,j-1,bi,bj)
187 & +(1.-maskC(i, j ,kLev-1,bi,bj))*aim_drag(i, j ,bi,bj)
188 & )* 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
189 ENDIF
190 ENDDO
191 ENDDO
192 ENDIF
193 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
194 #endif /* OLD_AIM_GRIG_MAPPING */
195
196 #endif /* ALLOW_AIM */
197
198 RETURN
199 END
200 CStartOfInterface
201 SUBROUTINE AIM_EXTERNAL_FORCING_T(
202 I iMin, iMax, jMin, jMax,bi,bj,kLev,
203 I myCurrentTime,myThid)
204 C /==========================================================\
205 C | S/R AIM_EXTERNAL_FORCING_T |
206 C | o Add AIM tendency to T |
207 C \==========================================================/
208 IMPLICIT rEAL*8 (A-H,O-Z)
209
210 C == Global data ==
211 #include "SIZE.h"
212 #include "EEPARAMS.h"
213 #include "PARAMS.h"
214 #include "GRID.h"
215 #include "DYNVARS.h"
216
217 #ifdef ALLOW_AIM
218 #include "atparam0.h"
219 #include "atparam1.h"
220 INTEGER NGP
221 INTEGER NLON
222 INTEGER NLAT
223 INTEGER NLEV
224 PARAMETER ( NLON=IX, NLAT=IL, NLEV=KX, NGP=NLON*NLAT )
225 #include "com_physvar.h"
226 #endif
227
228 C == Routine arguments ==
229 C iMin - Working range of tile for applying forcing.
230 C iMax
231 C jMin
232 C jMax
233 C kLev
234 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
235 _RL myCurrentTime
236 INTEGER myThid
237 CEndOfInterface
238
239 #ifdef ALLOW_AIM
240 C == Local variables ==
241 C Loop counters
242 INTEGER I, J, I2, katm
243 _RL phiTemp( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
244
245 C-- Forcing term
246 _RL pGround
247 _RL convert_fact
248
249 C-- Forcing:
250 C- AIM heating/cooling tendencies terms: Convert to Pot.Temp and Add to gT
251 pGround = 1. _d 5
252 RD = 287. _d 0
253 CPAIR = 1004. _d 0
254 katm = _KD2KA( Klev )
255 convert_fact = ((pGround/rC(kLev))**(RD/CPAIR))
256 DO J=1,sNy
257 DO I=1,sNx
258 I2 = sNx*(J-1)+I
259 phiTemp(I,J,bi,bj) = gT(i,j,kLev,bi,bj)
260 & +convert_fact*(
261 & TT_PBL(I2,katm)
262 & +TT_CNV(I2,katm)
263 & +TT_LSC(I2,katm)
264 & +TT_RSW(I2,katm)
265 & +TT_RLW(I2,katm)
266 & )
267 ENDDO
268 ENDDO
269
270 _EXCH_XY_R8( phiTemp , myThid)
271
272 DO J=1-OLy,sNy+OLy
273 DO I=1-OLx,sNx+OLx
274 gT(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)*phiTemp(I,J,bi,bj)
275 ENDDO
276 ENDDO
277
278 #endif /* ALLOW_AIM */
279
280 RETURN
281 END
282 CStartOfInterface
283 SUBROUTINE AIM_EXTERNAL_FORCING_S(
284 I iMin, iMax, jMin, jMax,bi,bj,kLev,
285 I myCurrentTime,myThid)
286 C /==========================================================\
287 C | S/R AIM_EXTERNAL_FORCING_S |
288 C | o Add AIM tendency to S. |
289 C \==========================================================/
290 IMPLICIT rEAL*8 (A-H,O-Z)
291
292 C == Global data ==
293 #include "SIZE.h"
294 #include "EEPARAMS.h"
295 #include "PARAMS.h"
296 #include "GRID.h"
297 #include "DYNVARS.h"
298
299 #ifdef ALLOW_AIM
300 #include "atparam0.h"
301 #include "atparam1.h"
302 INTEGER NGP
303 INTEGER NLON
304 INTEGER NLAT
305 INTEGER NLEV
306 PARAMETER ( NLON=IX, NLAT=IL, NLEV=KX, NGP=NLON*NLAT )
307 #include "com_physvar.h"
308 #endif
309
310
311 C == Routine arguments ==
312 C iMin - Working range of tile for applying forcing.
313 C iMax
314 C jMin
315 C jMax
316 C kLev
317 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
318 _RL myCurrentTime
319 INTEGER myThid
320 CEndOfInterface
321
322 #ifdef ALLOW_AIM
323 C == Local variables ==
324 C Loop counters
325 INTEGER I, J, I2, katm
326 _RL phiTemp( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
327
328 katm = _KD2KA( kLev )
329 DO J=1,sNy
330 DO I=1,sNx
331 I2 = sNx*(J-1)+I
332 phiTemp(i,j,bi,bj) = gS(i,j,kLev,bi,bj)
333 & +QT_PBL(I2,katm)
334 & +QT_CNV(I2,katm)
335 & +QT_LSC(I2,katm)
336 ENDDO
337 ENDDO
338
339 _EXCH_XY_R8( phiTemp , myThid)
340 C _EXCH_XYZ_R8( gS , myThid)
341
342 DO J=1-OLy,sNy+OLy
343 DO I=1-OLx,sNx+OLx
344 gS(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)*phiTemp(I,J,bi,bj)
345 ENDDO
346 ENDDO
347
348 #endif /* ALLOW_AIM */
349
350 RETURN
351 END

  ViewVC Help
Powered by ViewVC 1.1.22