/[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.3 - (show annotations) (download)
Tue May 29 19:28:53 2001 UTC (23 years ago) by cnh
Branch: MAIN
CVS Tags: checkpoint40pre1, checkpoint40pre2, checkpoint40pre5, checkpoint40pre6, checkpoint40pre8, checkpoint40pre4, checkpoint40pre3, checkpoint40pre7
Changes since 1.2: +173 -68 lines
Updates for multi-threaded AIM with support for both latlon
and CS.
Needs compatible changes to verfication/

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

  ViewVC Help
Powered by ViewVC 1.1.22