/[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.39 - (show annotations) (download)
Wed Jun 28 21:24:54 2006 UTC (17 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint58t_post, checkpoint58m_post, checkpoint58o_post, checkpoint58p_post, checkpoint58q_post, mitgcm_mapl_00, checkpoint58r_post, checkpoint58n_post, checkpoint58k_post, checkpoint58l_post, checkpoint58s_post
Changes since 1.38: +25 -1 lines
Adding template package MYPACKAGE to serve as reference. Does nothing.

1 C $Header: /u/gcmpack/MITgcm/model/src/external_forcing.F,v 1.38 2006/06/07 01:55:12 heimbach Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: EXTERNAL_FORCING_U
9 C !INTERFACE:
10 SUBROUTINE EXTERNAL_FORCING_U(
11 I iMin,iMax, jMin,jMax, bi,bj, kLev,
12 I myTime, myThid )
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | S/R EXTERNAL_FORCING_U
16 C | o Contains problem specific forcing for zonal velocity.
17 C *==========================================================*
18 C | Adds terms to gU for forcing by external sources
19 C | e.g. wind stress, bottom friction etc ...
20 C *==========================================================*
21 C \ev
22
23 C !USES:
24 IMPLICIT NONE
25 C == Global data ==
26 #include "SIZE.h"
27 #include "EEPARAMS.h"
28 #include "PARAMS.h"
29 #include "GRID.h"
30 #include "DYNVARS.h"
31 #include "FFIELDS.h"
32
33 C !INPUT/OUTPUT PARAMETERS:
34 C == Routine arguments ==
35 C iMin,iMax :: Working range of x-index for applying forcing.
36 C jMin,jMax :: Working range of y-index for applying forcing.
37 C bi,bj :: Current tile indices
38 C kLev :: Current vertical level index
39 C myTime :: Current time in simulation
40 C myThid :: Thread Id number
41 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
42 _RL myTime
43 INTEGER myThid
44
45 C !LOCAL VARIABLES:
46 C == Local variables ==
47 C i,j :: Loop counters
48 C kSurface :: index of surface layer
49 INTEGER i, j
50 INTEGER kSurface
51 CEOP
52
53 IF ( fluidIsAir ) THEN
54 kSurface = 0
55 ELSEIF ( usingPCoords ) THEN
56 kSurface = Nr
57 ELSE
58 kSurface = 1
59 ENDIF
60
61 C-- Forcing term
62 #ifdef ALLOW_AIM
63 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_U(
64 & iMin,iMax, jMin,jMax, bi,bj, kLev,
65 & myTime, myThid )
66 #endif /* ALLOW_AIM */
67
68 #ifdef ALLOW_FIZHI
69 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_U(
70 & iMin,iMax, jMin,jMax, bi,bj, kLev,
71 & myTime, myThid )
72 #endif /* ALLOW_FIZHI */
73
74 #ifdef ALLOW_MYPACKAGE
75 IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_U(
76 & iMin,iMax, jMin,jMax, bi,bj, kLev,
77 & myTime, myThid )
78 #endif /* ALLOW_MYPACKAGE */
79
80 C Add windstress momentum impulse into the top-layer
81 IF ( kLev .EQ. kSurface ) THEN
82 c DO j=1,sNy
83 C-jmc: Without CD-scheme, this is OK ; but with CD-scheme, needs to cover [0:sNy+1]
84 DO j=0,sNy+1
85 DO i=1,sNx+1
86 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
87 & +foFacMom*surfaceForcingU(i,j,bi,bj)
88 & *recip_drF(kLev)*_recip_hFacW(i,j,kLev,bi,bj)
89 ENDDO
90 ENDDO
91 ENDIF
92
93 #if (defined (ALLOW_TAU_EDDY))
94 CALL TAUEDDY_EXTERNAL_FORCING_U(
95 I iMin,iMax, jMin,jMax, bi,bj, kLev,
96 I myTime, myThid )
97 #endif
98
99 #ifdef ALLOW_OBCS
100 IF (useOBCS) THEN
101 CALL OBCS_SPONGE_U(
102 I iMin,iMax, jMin,jMax, bi,bj, kLev,
103 I myTime, myThid )
104 ENDIF
105 #endif
106
107 RETURN
108 END
109
110 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
111 CBOP
112 C !ROUTINE: EXTERNAL_FORCING_V
113 C !INTERFACE:
114 SUBROUTINE EXTERNAL_FORCING_V(
115 I iMin,iMax, jMin,jMax, bi,bj, kLev,
116 I myTime, myThid )
117 C !DESCRIPTION: \bv
118 C *==========================================================*
119 C | S/R EXTERNAL_FORCING_V
120 C | o Contains problem specific forcing for merid velocity.
121 C *==========================================================*
122 C | Adds terms to gV for forcing by external sources
123 C | e.g. wind stress, bottom friction etc ...
124 C *==========================================================*
125 C \ev
126
127 C !USES:
128 IMPLICIT NONE
129 C == Global data ==
130 #include "SIZE.h"
131 #include "EEPARAMS.h"
132 #include "PARAMS.h"
133 #include "GRID.h"
134 #include "DYNVARS.h"
135 #include "FFIELDS.h"
136
137 C !INPUT/OUTPUT PARAMETERS:
138 C == Routine arguments ==
139 C iMin,iMax :: Working range of x-index for applying forcing.
140 C jMin,jMax :: Working range of y-index for applying forcing.
141 C bi,bj :: Current tile indices
142 C kLev :: Current vertical level index
143 C myTime :: Current time in simulation
144 C myThid :: Thread Id number
145 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
146 _RL myTime
147 INTEGER myThid
148
149 C !LOCAL VARIABLES:
150 C == Local variables ==
151 C i,j :: Loop counters
152 C kSurface :: index of surface layer
153 INTEGER i, j
154 INTEGER kSurface
155 CEOP
156
157 IF ( fluidIsAir ) THEN
158 kSurface = 0
159 ELSEIF ( usingPCoords ) THEN
160 kSurface = Nr
161 ELSE
162 kSurface = 1
163 ENDIF
164
165 C-- Forcing term
166 #ifdef ALLOW_AIM
167 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_V(
168 & iMin,iMax, jMin,jMax, bi,bj, kLev,
169 & myTime, myThid )
170 #endif /* ALLOW_AIM */
171
172 #ifdef ALLOW_FIZHI
173 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_V(
174 & iMin,iMax, jMin,jMax, bi,bj, kLev,
175 & myTime, myThid )
176 #endif /* ALLOW_FIZHI */
177
178 #ifdef ALLOW_MYPACKAGE
179 IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_V(
180 & iMin,iMax, jMin,jMax, bi,bj, kLev,
181 & myTime, myThid )
182 #endif /* ALLOW_MYPACKAGE */
183
184 C Add windstress momentum impulse into the top-layer
185 IF ( kLev .EQ. kSurface ) THEN
186 DO j=1,sNy+1
187 c DO i=1,sNx
188 C-jmc: Without CD-scheme, this is OK ; but with CD-scheme, needs to cover [0:sNx+1]
189 DO i=0,sNx+1
190 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
191 & +foFacMom*surfaceForcingV(i,j,bi,bj)
192 & *recip_drF(kLev)*_recip_hFacS(i,j,kLev,bi,bj)
193 ENDDO
194 ENDDO
195 ENDIF
196
197 #if (defined (ALLOW_TAU_EDDY))
198 CALL TAUEDDY_EXTERNAL_FORCING_V(
199 I iMin,iMax, jMin,jMax, bi,bj, kLev,
200 I myTime, myThid )
201 #endif
202
203 #ifdef ALLOW_OBCS
204 IF (useOBCS) THEN
205 CALL OBCS_SPONGE_V(
206 I iMin,iMax, jMin,jMax, bi,bj, kLev,
207 I myTime, myThid )
208 ENDIF
209 #endif
210
211 RETURN
212 END
213
214 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
215 CBOP
216 C !ROUTINE: EXTERNAL_FORCING_T
217 C !INTERFACE:
218 SUBROUTINE EXTERNAL_FORCING_T(
219 I iMin,iMax, jMin,jMax, bi,bj, kLev,
220 I myTime, myThid )
221 C !DESCRIPTION: \bv
222 C *==========================================================*
223 C | S/R EXTERNAL_FORCING_T
224 C | o Contains problem specific forcing for temperature.
225 C *==========================================================*
226 C | Adds terms to gT for forcing by external sources
227 C | e.g. heat flux, climatalogical relaxation, etc ...
228 C *==========================================================*
229 C \ev
230
231 C !USES:
232 IMPLICIT NONE
233 C == Global data ==
234 #include "SIZE.h"
235 #include "EEPARAMS.h"
236 #include "PARAMS.h"
237 #include "GRID.h"
238 #include "DYNVARS.h"
239 #include "FFIELDS.h"
240
241 C !INPUT/OUTPUT PARAMETERS:
242 C == Routine arguments ==
243 C iMin,iMax :: Working range of x-index for applying forcing.
244 C jMin,jMax :: Working range of y-index for applying forcing.
245 C bi,bj :: Current tile indices
246 C kLev :: Current vertical level index
247 C myTime :: Current time in simulation
248 C myThid :: Thread Id number
249 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
250 _RL myTime
251 INTEGER myThid
252
253 C !LOCAL VARIABLES:
254 C == Local variables ==
255 C i,j :: Loop counters
256 C kSurface :: index of surface layer
257 INTEGER i, j
258 INTEGER kSurface
259 CEOP
260 #ifdef SHORTWAVE_HEATING
261 integer two
262 _RL minusone
263 parameter (two=2,minusone=-1.)
264 _RL swfracb(two)
265 INTEGER kp1
266 #endif
267
268 IF ( fluidIsAir ) THEN
269 kSurface = 0
270 ELSEIF ( usingPCoords ) THEN
271 kSurface = Nr
272 ELSE
273 kSurface = 1
274 ENDIF
275
276 C-- Forcing term
277 #ifdef ALLOW_AIM
278 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_T(
279 & iMin,iMax, jMin,jMax, bi,bj, kLev,
280 & myTime, myThid )
281 #endif /* ALLOW_AIM */
282
283 #ifdef ALLOW_FIZHI
284 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_T(
285 & iMin,iMax, jMin,jMax, bi,bj, kLev,
286 & myTime, myThid )
287 #endif /* ALLOW_FIZHI */
288
289 #ifdef ALLOW_MYPACKAGE
290 IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_T(
291 & iMin,iMax, jMin,jMax, bi,bj, kLev,
292 & myTime, myThid )
293 #endif /* ALLOW_MYPACKAGE */
294
295 C Add heat in top-layer
296 IF ( kLev .EQ. kSurface ) THEN
297 DO j=1,sNy
298 DO i=1,sNx
299 gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
300 & +surfaceForcingT(i,j,bi,bj)
301 & *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
302 ENDDO
303 ENDDO
304 ENDIF
305
306 #ifdef ALLOW_SHELFICE
307 IF ( useShelfIce )
308 & CALL SHELFICE_FORCING_T(
309 I iMin,iMax, jMin,jMax, bi,bj, kLev,
310 I myTime, myThid )
311 #endif /* ALLOW_SHELFICE */
312
313 #ifdef SHORTWAVE_HEATING
314 C Penetrating SW radiation
315 c IF ( usePenetratingSW ) THEN
316 swfracb(1)=abs(rF(klev))
317 swfracb(2)=abs(rF(klev+1))
318 CALL SWFRAC(
319 I two,minusone,
320 I myTime,myThid,
321 U swfracb)
322 kp1 = klev+1
323 IF (klev.EQ.Nr) THEN
324 kp1 = klev
325 swfracb(2)=0. _d 0
326 ENDIF
327 DO j=1,sNy
328 DO i=1,sNx
329 gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)
330 & -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,klev,bi,bj)
331 & -swfracb(2)*maskC(i,j,kp1, bi,bj))
332 & *recip_Cp*recip_rhoConst
333 & *recip_drF(klev)*_recip_hFacC(i,j,kLev,bi,bj)
334 ENDDO
335 ENDDO
336 c ENDIF
337 #endif
338
339 #ifdef ALLOW_RBCS
340 if (useRBCS) then
341 call RBCS_ADD_TENDENCY(bi,bj,klev, 1,
342 & myTime, myThid )
343 endif
344 #endif
345
346 #ifdef ALLOW_OBCS
347 IF (useOBCS) THEN
348 CALL OBCS_SPONGE_T(
349 I iMin,iMax, jMin,jMax, bi,bj, kLev,
350 I myTime, myThid )
351 ENDIF
352 #endif
353
354 RETURN
355 END
356
357 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
358 CBOP
359 C !ROUTINE: EXTERNAL_FORCING_S
360 C !INTERFACE:
361 SUBROUTINE EXTERNAL_FORCING_S(
362 I iMin,iMax, jMin,jMax, bi,bj, kLev,
363 I myTime, myThid )
364
365 C !DESCRIPTION: \bv
366 C *==========================================================*
367 C | S/R EXTERNAL_FORCING_S
368 C | o Contains problem specific forcing for merid velocity.
369 C *==========================================================*
370 C | Adds terms to gS for forcing by external sources
371 C | e.g. fresh-water flux, climatalogical relaxation, etc ...
372 C *==========================================================*
373 C \ev
374
375 C !USES:
376 IMPLICIT NONE
377 C == Global data ==
378 #include "SIZE.h"
379 #include "EEPARAMS.h"
380 #include "PARAMS.h"
381 #include "GRID.h"
382 #include "DYNVARS.h"
383 #include "FFIELDS.h"
384
385 C !INPUT/OUTPUT PARAMETERS:
386 C == Routine arguments ==
387 C iMin,iMax :: Working range of x-index for applying forcing.
388 C jMin,jMax :: Working range of y-index for applying forcing.
389 C bi,bj :: Current tile indices
390 C kLev :: Current vertical level index
391 C myTime :: Current time in simulation
392 C myThid :: Thread Id number
393 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
394 _RL myTime
395 INTEGER myThid
396
397 C !LOCAL VARIABLES:
398 C == Local variables ==
399 C i,j :: Loop counters
400 C kSurface :: index of surface layer
401 INTEGER i, j
402 INTEGER kSurface
403 CEOP
404
405 IF ( fluidIsAir ) THEN
406 kSurface = 0
407 ELSEIF ( usingPCoords ) THEN
408 kSurface = Nr
409 ELSE
410 kSurface = 1
411 ENDIF
412
413 C-- Forcing term
414 #ifdef ALLOW_AIM
415 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_S(
416 & iMin,iMax, jMin,jMax, bi,bj, kLev,
417 & myTime, myThid )
418 #endif /* ALLOW_AIM */
419
420 #ifdef ALLOW_FIZHI
421 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_S(
422 & iMin,iMax, jMin,jMax, bi,bj, kLev,
423 & myTime, myThid )
424 #endif /* ALLOW_FIZHI */
425
426 #ifdef ALLOW_MYPACKAGE
427 IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_S(
428 & iMin,iMax, jMin,jMax, bi,bj, kLev,
429 & myTime, myThid )
430 #endif /* ALLOW_MYPACKAGE */
431
432 C Add fresh-water in top-layer
433 IF ( kLev .EQ. kSurface ) THEN
434 DO j=1,sNy
435 DO i=1,sNx
436 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
437 & +surfaceForcingS(i,j,bi,bj)
438 & *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
439 ENDDO
440 ENDDO
441 ENDIF
442
443 #ifdef ALLOW_SHELFICE
444 IF ( useShelfIce )
445 & CALL SHELFICE_FORCING_S(
446 I iMin,iMax, jMin,jMax, bi,bj, kLev,
447 I myTime, myThid )
448 #endif /* ALLOW_SHELFICE */
449
450 #ifdef ALLOW_RBCS
451 if (useRBCS) then
452 call RBCS_ADD_TENDENCY(bi,bj,klev, 2,
453 & myTime, myThid )
454 endif
455 #endif
456
457 #ifdef ALLOW_OBCS
458 IF (useOBCS) THEN
459 CALL OBCS_SPONGE_S(
460 I iMin,iMax, jMin,jMax, bi,bj, kLev,
461 I myTime, myThid )
462 ENDIF
463 #endif
464
465 RETURN
466 END

  ViewVC Help
Powered by ViewVC 1.1.22