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

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

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


Revision 1.4 - (hide 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 jmc 1.4 C $Header: /u/gcmpack/models/MITgcmUV/pkg/aim/aim_external_forcing.F,v 1.3 2001/05/29 19:28:53 cnh Exp $
2 cnh 1.3 C $Name: $
3 adcroft 1.2
4     #include "AIM_OPTIONS.h"
5 cnh 1.3 #undef OLD_AIM_GRIG_MAPPING
6 adcroft 1.2
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 cnh 1.3 IMPLICIT rEAL*8 (A-H,O-Z)
16 adcroft 1.2
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 cnh 1.3 #include "AIM2DYN.h"
26 adcroft 1.2 #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 cnh 1.3 INTEGER i, j
43 adcroft 1.2
44 cnh 1.3
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 jmc 1.4 & -( (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 cnh 1.3 ENDIF
94     ENDDO
95 adcroft 1.2 ENDDO
96 cnh 1.3 ENDIF
97     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
98     #endif /* OLD_AIM_GRIG_MAPPING */
99 adcroft 1.2
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 cnh 1.3 #include "AIM2DYN.h"
124 adcroft 1.2 #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 cnh 1.3 INTEGER i, j
141    
142     C call CHKSUM_TILED( ' drag AAA ',aim_drag,1,bi,bj,myThid )
143 adcroft 1.2
144 cnh 1.3 #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 adcroft 1.2 ENDDO
195 cnh 1.3 ENDIF
196     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
197     #endif /* OLD_AIM_GRIG_MAPPING */
198 adcroft 1.2
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 cnh 1.3 IMPLICIT rEAL*8 (A-H,O-Z)
212 adcroft 1.2
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 cnh 1.3 #include "AIM2DYN.h"
230 adcroft 1.2 #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 cnh 1.3 INTEGER I, J, I2, katm
247     _RL phiTemp( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
248 adcroft 1.2
249     C-- Forcing term
250     _RL pGround
251 cnh 1.3 _RL convert_fact
252 adcroft 1.2
253 cnh 1.3
254     C-- Forcing:
255     C- AIM heating/cooling tendencies terms: Convert to Pot.Temp and Add to gT
256 adcroft 1.2 pGround = 1. _d 5
257     RD = 287. _d 0
258     CPAIR = 1004. _d 0
259 cnh 1.3 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 adcroft 1.2 ENDDO
275     ENDDO
276    
277 cnh 1.3 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 adcroft 1.2
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 cnh 1.3 IMPLICIT rEAL*8 (A-H,O-Z)
299 adcroft 1.2
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 cnh 1.3 #include "AIM2DYN.h"
317 adcroft 1.2 #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 cnh 1.3
332 adcroft 1.2 #ifdef ALLOW_AIM
333     C == Local variables ==
334     C Loop counters
335 cnh 1.3 INTEGER I, J, I2, katm
336     _RL phiTemp( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
337 adcroft 1.2
338 cnh 1.3 katm = _KD2KA( kLev )
339     DO J=1-OLy,sNy+OLy
340     DO I=1-OLx,sNx+OLx
341 adcroft 1.2 I2 = sNx*(J-1)+I
342 cnh 1.3 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 adcroft 1.2 ENDDO
349     ENDDO
350    
351 cnh 1.3 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 adcroft 1.2
361     #endif /* ALLOW_AIM */
362    
363     RETURN
364     END

  ViewVC Help
Powered by ViewVC 1.1.22