/[MITgcm]/MITgcm/model/src/external_forcing.F
ViewVC logotype

Contents of /MITgcm/model/src/external_forcing.F

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


Revision 1.27 - (show annotations) (download)
Sun Jul 18 15:34:34 2004 UTC (19 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint54d_post, checkpoint54e_post, checkpoint55, checkpoint54f_post, checkpoint55c_post, checkpoint55g_post, checkpoint55d_post, checkpoint55d_pre, checkpoint55b_post, checkpoint55f_post, checkpoint55a_post, checkpoint55e_post
Changes since 1.26: +3 -3 lines
bug fixed in SHORTWAVE_HEATING with partial cell
 (seems this case is not tested in any of our test-exp)

1 C $Header: /u/gcmpack/MITgcm/model/src/external_forcing.F,v 1.26 2004/07/18 01:04:23 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6 #ifdef ALLOW_OBCS
7 # include "OBCS_OPTIONS.h"
8 #endif
9
10 CBOP
11 C !ROUTINE: EXTERNAL_FORCING_U
12 C !INTERFACE:
13 SUBROUTINE EXTERNAL_FORCING_U(
14 I iMin, iMax, jMin, jMax,bi,bj,kLev,
15 I myCurrentTime,myThid)
16 C !DESCRIPTION: \bv
17 C *==========================================================*
18 C | S/R EXTERNAL_FORCING_U
19 C | o Contains problem specific forcing for zonal velocity.
20 C *==========================================================*
21 C | Adds terms to gU for forcing by external sources
22 C | e.g. wind stress, bottom friction etc..................
23 C *==========================================================*
24 C \ev
25
26 C !USES:
27 IMPLICIT NONE
28 C == Global data ==
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "GRID.h"
33 #include "DYNVARS.h"
34 #include "FFIELDS.h"
35
36 C !INPUT/OUTPUT PARAMETERS:
37 C == Routine arguments ==
38 C iMin - Working range of tile for applying forcing.
39 C iMax
40 C jMin
41 C jMax
42 C kLev
43 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
44 _RL myCurrentTime
45 INTEGER myThid
46
47 C !LOCAL VARIABLES:
48 C == Local variables ==
49 C Loop counters
50 INTEGER I, J
51 C number of surface interface layer
52 INTEGER kSurface
53 CEOP
54
55 if ( buoyancyRelation .eq. 'ATMOSPHERIC' ) then
56 kSurface = 0
57 elseif ( buoyancyRelation .eq. 'OCEANICP' ) then
58 kSurface = Nr
59 else
60 kSurface = 1
61 endif
62
63 C-- Forcing term
64 #ifdef ALLOW_AIM
65 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_U(
66 & iMin,iMax, jMin,jMax, bi,bj, kLev,
67 & myCurrentTime, myThid )
68 #endif /* ALLOW_AIM */
69 C AMM
70 #ifdef ALLOW_FIZHI
71 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_U(
72 & iMin,iMax, jMin,jMax, bi,bj, kLev,
73 & myCurrentTime, myThid )
74 #endif /* ALLOW_FIZHI */
75 C AMM
76
77 C Add windstress momentum impulse into the top-layer
78 IF ( kLev .EQ. kSurface ) THEN
79 DO j=jMin,jMax
80 DO i=iMin,iMax
81 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
82 & +foFacMom*surfaceForcingU(i,j,bi,bj)
83 & *recip_drF(kLev)*recip_hFacW(i,j,kLev,bi,bj)
84 ENDDO
85 ENDDO
86 ENDIF
87
88 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
89 IF (useOBCS) THEN
90 CALL OBCS_SPONGE_U(
91 I iMin, iMax, jMin, jMax,bi,bj,kLev,
92 I myCurrentTime,myThid)
93 ENDIF
94 #endif
95
96 RETURN
97 END
98 CBOP
99 C !ROUTINE: EXTERNAL_FORCING_V
100 C !INTERFACE:
101 SUBROUTINE EXTERNAL_FORCING_V(
102 I iMin, iMax, jMin, jMax,bi,bj,kLev,
103 I myCurrentTime,myThid)
104 C !DESCRIPTION: \bv
105 C *==========================================================*
106 C | S/R EXTERNAL_FORCING_V
107 C | o Contains problem specific forcing for merid velocity.
108 C *==========================================================*
109 C | Adds terms to gV for forcing by external sources
110 C | e.g. wind stress, bottom friction etc..................
111 C *==========================================================*
112 C \ev
113
114 C !USES:
115 IMPLICIT NONE
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 C !INPUT/OUTPUT PARAMETERS:
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
135 C !LOCAL VARIABLES:
136 C == Local variables ==
137 C Loop counters
138 INTEGER I, J
139 C number of surface interface layer
140 INTEGER kSurface
141 CEOP
142
143 if ( buoyancyRelation .eq. 'ATMOSPHERIC' ) then
144 kSurface = 0
145 elseif ( buoyancyRelation .eq. 'OCEANICP' ) then
146 kSurface = Nr
147 else
148 kSurface = 1
149 endif
150
151 C-- Forcing term
152 #ifdef ALLOW_AIM
153 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_V(
154 & iMin,iMax, jMin,jMax, bi,bj, kLev,
155 & myCurrentTime, myThid )
156 #endif /* ALLOW_AIM */
157
158 C AMM
159 #ifdef ALLOW_FIZHI
160 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_V(
161 & iMin,iMax, jMin,jMax, bi,bj, kLev,
162 & myCurrentTime, myThid )
163 #endif /* ALLOW_FIZHI */
164 C AMM
165 C Add windstress momentum impulse into the top-layer
166 IF ( kLev .EQ. kSurface ) THEN
167 DO j=jMin,jMax
168 DO i=iMin,iMax
169 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
170 & +foFacMom*surfaceForcingV(i,j,bi,bj)
171 & *recip_drF(kLev)*recip_hFacS(i,j,kLev,bi,bj)
172 ENDDO
173 ENDDO
174 ENDIF
175
176 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
177 IF (useOBCS) THEN
178 CALL OBCS_SPONGE_V(
179 I iMin, iMax, jMin, jMax,bi,bj,kLev,
180 I myCurrentTime,myThid)
181 ENDIF
182 #endif
183
184 RETURN
185 END
186 CBOP
187 C !ROUTINE: EXTERNAL_FORCING_T
188 C !INTERFACE:
189 SUBROUTINE EXTERNAL_FORCING_T(
190 I iMin, iMax, jMin, jMax,bi,bj,kLev,
191 I myCurrentTime,myThid)
192 C !DESCRIPTION: \bv
193 C *==========================================================*
194 C | S/R EXTERNAL_FORCING_T
195 C | o Contains problem specific forcing for temperature.
196 C *==========================================================*
197 C | Adds terms to gT for forcing by external sources
198 C | e.g. heat flux, climatalogical relaxation..............
199 C *==========================================================*
200 C \ev
201
202 C !USES:
203 IMPLICIT NONE
204 C == Global data ==
205 #include "SIZE.h"
206 #include "EEPARAMS.h"
207 #include "PARAMS.h"
208 #include "GRID.h"
209 #include "DYNVARS.h"
210 #include "FFIELDS.h"
211
212 C !INPUT/OUTPUT PARAMETERS:
213 C == Routine arguments ==
214 C iMin - Working range of tile for applying forcing.
215 C iMax
216 C jMin
217 C jMax
218 C kLev
219 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
220 _RL myCurrentTime
221 INTEGER myThid
222 CEndOfInterface
223
224 C !LOCAL VARIABLES:
225 C == Local variables ==
226 C Loop counters
227 INTEGER I, J
228 C number of surface interface layer
229 INTEGER kSurface
230 #ifdef SHORTWAVE_HEATING
231 integer two
232 _RL minusone
233 parameter (two=2,minusone=-1.)
234 _RL swfracb(two)
235 INTEGER kp1
236 #endif
237 CEOP
238
239 if ( buoyancyRelation .eq. 'ATMOSPHERIC' ) then
240 kSurface = 0
241 elseif ( buoyancyRelation .eq. 'OCEANICP' ) then
242 kSurface = Nr
243 else
244 kSurface = 1
245 endif
246
247 C-- Forcing term
248 #ifdef ALLOW_AIM
249 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_T(
250 & iMin,iMax, jMin,jMax, bi,bj, kLev,
251 & myCurrentTime, myThid )
252 #endif /* ALLOW_AIM */
253
254 C AMM
255 #ifdef ALLOW_FIZHI
256 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_T(
257 & iMin,iMax, jMin,jMax, bi,bj, kLev,
258 & myCurrentTime, myThid )
259 #endif /* ALLOW_FIZHI */
260 C AMM
261
262 C Add heat in top-layer
263 IF ( kLev .EQ. kSurface ) THEN
264 DO j=jMin,jMax
265 DO i=iMin,iMax
266 gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
267 & +surfaceForcingT(i,j,bi,bj)
268 & *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)
269 ENDDO
270 ENDDO
271 ENDIF
272
273 #ifdef SHORTWAVE_HEATING
274 C Penetrating SW radiation
275 kp1 = klev+1
276 swfracb(1)=abs(rF(klev))
277 swfracb(2)=abs(rF(klev+1))
278 CALL SWFRAC(
279 I two,minusone,
280 I myCurrentTime,myThid,
281 U swfracb)
282 IF (klev.EQ.Nr) THEN
283 kp1 = klev
284 swfracb(2)=0. _d 0
285 ENDIF
286 DO j=jMin,jMax
287 DO i=iMin,iMax
288 gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)
289 & -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,klev,bi,bj)
290 & -swfracb(2)*maskC(i,j,kp1, bi,bj))
291 & *recip_Cp*recip_rhoConst
292 & *recip_drF(klev)*recip_hFacC(i,j,kLev,bi,bj)
293 ENDDO
294 ENDDO
295 #endif
296
297 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
298 IF (useOBCS) THEN
299 CALL OBCS_SPONGE_T(
300 I iMin, iMax, jMin, jMax,bi,bj,kLev,
301 I myCurrentTime,myThid)
302 ENDIF
303 #endif
304
305 RETURN
306 END
307 CBOP
308 C !ROUTINE: EXTERNAL_FORCING_S
309 C !INTERFACE:
310 SUBROUTINE EXTERNAL_FORCING_S(
311 I iMin, iMax, jMin, jMax,bi,bj,kLev,
312 I myCurrentTime,myThid)
313
314 C !DESCRIPTION: \bv
315 C *==========================================================*
316 C | S/R EXTERNAL_FORCING_S
317 C | o Contains problem specific forcing for merid velocity.
318 C *==========================================================*
319 C | Adds terms to gS for forcing by external sources
320 C | e.g. fresh-water flux, climatalogical relaxation.......
321 C *==========================================================*
322 C \ev
323
324 C !USES:
325 IMPLICIT NONE
326 C == Global data ==
327 #include "SIZE.h"
328 #include "EEPARAMS.h"
329 #include "PARAMS.h"
330 #include "GRID.h"
331 #include "DYNVARS.h"
332 #include "FFIELDS.h"
333
334 C !INPUT/OUTPUT PARAMETERS:
335 C == Routine arguments ==
336 C iMin - Working range of tile for applying forcing.
337 C iMax
338 C jMin
339 C jMax
340 C kLev
341 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
342 _RL myCurrentTime
343 INTEGER myThid
344
345 C !LOCAL VARIABLES:
346 C == Local variables ==
347 C Loop counters
348 INTEGER I, J
349 C number of surface interface layer
350 INTEGER kSurface
351 CEOP
352
353 if ( buoyancyRelation .eq. 'ATMOSPHERIC' ) then
354 kSurface = 0
355 elseif ( buoyancyRelation .eq. 'OCEANICP' ) then
356 kSurface = Nr
357 else
358 kSurface = 1
359 endif
360
361
362 C-- Forcing term
363 #ifdef ALLOW_AIM
364 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_S(
365 & iMin,iMax, jMin,jMax, bi,bj, kLev,
366 & myCurrentTime, myThid )
367 #endif /* ALLOW_AIM */
368
369 C AMM
370 #ifdef ALLOW_FIZHI
371 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_S(
372 & iMin,iMax, jMin,jMax, bi,bj, kLev,
373 & myCurrentTime, myThid )
374 #endif /* ALLOW_FIZHI */
375 C AMM
376
377 C Add fresh-water in top-layer
378 IF ( kLev .EQ. kSurface ) THEN
379 DO j=jMin,jMax
380 DO i=iMin,iMax
381 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
382 & +surfaceForcingS(i,j,bi,bj)
383 & *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)
384 ENDDO
385 ENDDO
386 ENDIF
387
388 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
389 IF (useOBCS) THEN
390 CALL OBCS_SPONGE_S(
391 I iMin, iMax, jMin, jMax,bi,bj,kLev,
392 I myCurrentTime,myThid)
393 ENDIF
394 #endif
395
396 RETURN
397 END

  ViewVC Help
Powered by ViewVC 1.1.22