/[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.37 - (show annotations) (download)
Tue Feb 7 11:47:48 2006 UTC (18 years, 3 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint58b_post, checkpoint58f_post, checkpoint58d_post, checkpoint58a_post, checkpoint58e_post, checkpoint58g_post, checkpoint58c_post
Changes since 1.36: +15 -1 lines
o add hooks for new package shelfice, painless

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

  ViewVC Help
Powered by ViewVC 1.1.22