/[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.31 - (show annotations) (download)
Fri Jul 15 20:50:44 2005 UTC (18 years, 10 months ago) by jmc
Branch: MAIN
Changes since 1.30: +119 -117 lines
- use fixed index range (to apply surface forcing)
- add argument description (protex compatible ?)

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

  ViewVC Help
Powered by ViewVC 1.1.22