/[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.4 - (show annotations) (download)
Fri Aug 24 00:49:51 2001 UTC (22 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint40pre9, checkpoint40, checkpoint41
Changes since 1.3: +4 -6 lines
remove a bug

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

  ViewVC Help
Powered by ViewVC 1.1.22