/[MITgcm]/MITgcm/pkg/aim_v23/aim_tendency_apply.F
ViewVC logotype

Annotation of /MITgcm/pkg/aim_v23/aim_tendency_apply.F

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


Revision 1.1 - (hide annotations) (download)
Fri Nov 22 17:17:03 2002 UTC (21 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint47e_post, checkpoint47d_pre, checkpoint47a_post, checkpoint47d_post, branch-exfmods-tag, checkpoint47b_post, checkpoint47f_post
Branch point for: branch-exfmods-curt
new aim pkg: adapted from Franco Molteni SPEEDY code, ver23

1 jmc 1.1 C $Header: $
2     C $Name: $
3    
4     #include "AIM_OPTIONS.h"
5    
6     CStartOfInterface
7     SUBROUTINE AIM_TENDENCY_APPLY_U(
8     I iMin, iMax, jMin, jMax,bi,bj,kLev,
9     I myTime,myThid)
10     C *==========================================================*
11     C | S/R AIM_TENDENCY_APPLY_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 myTime
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     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
46     IF (kLev.eq.1) THEN
47     DO j=jMin,jMax
48     DO i=iMin,iMax
49     IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
50     uStr_tmp =
51     & -( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) )
52     & * 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
53     gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
54     & + uStr_tmp*gravity*recip_drF(kLev)
55     & * recip_hFacW(i,j,kLev,bi,bj)
56     #ifdef ALLOW_TIMEAVE
57     USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
58     #endif
59     ENDIF
60     ENDDO
61     ENDDO
62     ELSE
63     DO j=jMin,jMax
64     DO i=iMin,iMax
65     IF ( hFacW(i,j,kLev,bi,bj) .NE. 0. ) THEN
66     uStr_tmp =
67     & -( (1.-maskC(i-1,j,kLev-1,bi,bj))*aim_drag(i-1,j,bi,bj)
68     & +(1.-maskC( i ,j,kLev-1,bi,bj))*aim_drag( i ,j,bi,bj)
69     & )* 0.5 _d 0 * uVel(i,j,kLev,bi,bj)
70     gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
71     & + uStr_tmp*gravity*recip_drF(kLev)
72     & * recip_hFacW(i,j,kLev,bi,bj)
73     #ifdef ALLOW_TIMEAVE
74     USTRtave(i,j,bi,bj) = USTRtave(i,j,bi,bj) + uStr_tmp*DDTT
75     #endif
76     ENDIF
77     ENDDO
78     ENDDO
79     ENDIF
80     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
81    
82     #endif /* ALLOW_AIM */
83    
84     RETURN
85     END
86     CStartOfInterface
87     SUBROUTINE AIM_TENDENCY_APPLY_V(
88     I iMin, iMax, jMin, jMax,bi,bj,kLev,
89     I myTime,myThid)
90     C *==========================================================*
91     C | S/R TENDENCY_APPLY_V
92     C | o Add AIM tendency terms to V tendency.
93     C *==========================================================*
94     IMPLICIT NONE
95    
96     C == Global data ==
97     #include "SIZE.h"
98     #include "EEPARAMS.h"
99     #include "PARAMS.h"
100     #include "GRID.h"
101     #include "DYNVARS.h"
102    
103     #include "AIM2DYN.h"
104     #include "AIM_DIAGS.h"
105    
106     C == Routine arguments ==
107     C iMin - Working range of tile for applying forcing.
108     C iMax
109     C jMin
110     C jMax
111     C kLev
112     INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
113     _RL myTime
114     INTEGER myThid
115     CEndOfInterface
116    
117     #ifdef ALLOW_AIM
118     C == Local variables ==
119     C Loop counters
120     INTEGER i, j
121     _RL DDTT, vStr_tmp
122    
123     DDTT = deltaTclock
124    
125     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
126     IF (kLev.eq.1) THEN
127     DO j=jMin,jMax
128     DO i=iMin,iMax
129     IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
130     vStr_tmp =
131     & -( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) )
132     & * 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
133     gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
134     & + vStr_tmp*gravity*recip_drF(kLev)
135     & * recip_hFacS(i,j,kLev,bi,bj)
136     #ifdef ALLOW_TIMEAVE
137     VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
138     #endif
139     ENDIF
140     ENDDO
141     ENDDO
142     ELSE
143     DO j=jMin,jMax
144     DO i=iMin,iMax
145     IF ( hFacS(i,j,kLev,bi,bj) .NE. 0. ) THEN
146     vStr_tmp =
147     & -( (1.-maskC(i,j-1,kLev-1,bi,bj))*aim_drag(i,j-1,bi,bj)
148     & +(1.-maskC(i, j ,kLev-1,bi,bj))*aim_drag(i, j ,bi,bj)
149     & )* 0.5 _d 0 * vVel(i,j,kLev,bi,bj)
150     gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
151     & + vStr_tmp*gravity*recip_drF(kLev)
152     & * recip_hFacS(i,j,kLev,bi,bj)
153     #ifdef ALLOW_TIMEAVE
154     VSTRtave(i,j,bi,bj) = VSTRtave(i,j,bi,bj) + vStr_tmp*DDTT
155     #endif
156     ENDIF
157     ENDDO
158     ENDDO
159     ENDIF
160     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
161    
162     #endif /* ALLOW_AIM */
163    
164     RETURN
165     END
166     CStartOfInterface
167     SUBROUTINE AIM_TENDENCY_APPLY_T(
168     I iMin, iMax, jMin, jMax,bi,bj,kLev,
169     I myTime,myThid)
170     C *==========================================================*
171     C | S/R AIM_TENDENCY_APPLY_T
172     C | o Add AIM tendency to gT
173     C *==========================================================*
174     IMPLICIT NONE
175    
176     C == Global data ==
177     #include "SIZE.h"
178     #include "EEPARAMS.h"
179     #include "PARAMS.h"
180     #include "GRID.h"
181     #include "DYNVARS.h"
182    
183     #include "AIM2DYN.h"
184    
185     C == Routine arguments ==
186     C iMin - Working range of tile for applying forcing.
187     C iMax
188     C jMin
189     C jMax
190     C kLev
191     INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
192     _RL myTime
193     INTEGER myThid
194     CEndOfInterface
195    
196     #ifdef ALLOW_AIM
197     C == Local variables ==
198     C Loop counters
199     INTEGER I, J
200    
201     C-- Forcing: add AIM heating/cooling tendency to gT:
202     DO J=1,sNy
203     DO I=1,sNx
204     gT(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)
205     & *( gT(i,j,kLev,bi,bj) + aim_dTdt(i,j,kLev,bi,bj) )
206     ENDDO
207     ENDDO
208    
209     #endif /* ALLOW_AIM */
210    
211     RETURN
212     END
213     CStartOfInterface
214     SUBROUTINE AIM_TENDENCY_APPLY_S(
215     I iMin, iMax, jMin, jMax,bi,bj,kLev,
216     I myTime,myThid)
217     C *==========================================================*
218     C | S/R AIM_TENDENCY_APPLY_S
219     C | o Add AIM tendency to gS.
220     C *==========================================================*
221     IMPLICIT NONE
222    
223     C == Global data ==
224     #include "SIZE.h"
225     #include "EEPARAMS.h"
226     #include "PARAMS.h"
227     #include "GRID.h"
228     #include "DYNVARS.h"
229    
230     #include "AIM2DYN.h"
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 myTime
240     INTEGER myThid
241     CEndOfInterface
242    
243    
244     #ifdef ALLOW_AIM
245     C == Local variables ==
246     C Loop counters
247     INTEGER I, J
248    
249     C-- Forcing: add AIM dq/dt tendency to gS:
250     DO J=1,sNy
251     DO I=1,sNx
252     gS(i,j,kLev,bi,bj) = maskC(i,j,kLev,bi,bj)
253     & *( gS(i,j,kLev,bi,bj) + aim_dSdt(i,j,kLev,bi,bj) )
254     ENDDO
255     ENDDO
256    
257     #endif /* ALLOW_AIM */
258    
259     RETURN
260     END

  ViewVC Help
Powered by ViewVC 1.1.22