/[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.32 - (show annotations) (download)
Sun Jul 17 17:26:50 2005 UTC (18 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57s_post, checkpoint57y_post, checkpoint57r_post, checkpoint57n_post, checkpoint57t_post, checkpoint57v_post, checkpoint57y_pre, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, checkpoint57o_post, checkpoint57w_post, checkpoint57x_post
Changes since 1.31: +7 -3 lines
forgot the CD-scheme in previous check-in ; fix FORCING_U & _V.

1 C $Header: /u/gcmpack/MITgcm/model/src/external_forcing.F,v 1.31 2005/07/15 20:50:44 jmc 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 SHORTWAVE_HEATING
289 C Penetrating SW radiation
290 c IF ( usePenetratingSW ) THEN
291 swfracb(1)=abs(rF(klev))
292 swfracb(2)=abs(rF(klev+1))
293 CALL SWFRAC(
294 I two,minusone,
295 I myTime,myThid,
296 U swfracb)
297 kp1 = klev+1
298 IF (klev.EQ.Nr) THEN
299 kp1 = klev
300 swfracb(2)=0. _d 0
301 ENDIF
302 DO j=1,sNy
303 DO i=1,sNx
304 gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)
305 & -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,klev,bi,bj)
306 & -swfracb(2)*maskC(i,j,kp1, bi,bj))
307 & *recip_Cp*recip_rhoConst
308 & *recip_drF(klev)*recip_hFacC(i,j,kLev,bi,bj)
309 ENDDO
310 ENDDO
311 c ENDIF
312 #endif
313
314 #ifdef ALLOW_OBCS
315 IF (useOBCS) THEN
316 CALL OBCS_SPONGE_T(
317 I iMin,iMax, jMin,jMax, bi,bj, kLev,
318 I myTime, myThid )
319 ENDIF
320 #endif
321
322 RETURN
323 END
324
325 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
326 CBOP
327 C !ROUTINE: EXTERNAL_FORCING_S
328 C !INTERFACE:
329 SUBROUTINE EXTERNAL_FORCING_S(
330 I iMin,iMax, jMin,jMax, bi,bj, kLev,
331 I myTime, myThid )
332
333 C !DESCRIPTION: \bv
334 C *==========================================================*
335 C | S/R EXTERNAL_FORCING_S
336 C | o Contains problem specific forcing for merid velocity.
337 C *==========================================================*
338 C | Adds terms to gS for forcing by external sources
339 C | e.g. fresh-water flux, climatalogical relaxation, etc ...
340 C *==========================================================*
341 C \ev
342
343 C !USES:
344 IMPLICIT NONE
345 C == Global data ==
346 #include "SIZE.h"
347 #include "EEPARAMS.h"
348 #include "PARAMS.h"
349 #include "GRID.h"
350 #include "DYNVARS.h"
351 #include "FFIELDS.h"
352
353 C !INPUT/OUTPUT PARAMETERS:
354 C == Routine arguments ==
355 C iMin,iMax :: Working range of x-index for applying forcing.
356 C jMin,jMax :: Working range of y-index for applying forcing.
357 C bi,bj :: Current tile indices
358 C kLev :: Current vertical level index
359 C myTime :: Current time in simulation
360 C myThid :: Thread Id number
361 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
362 _RL myTime
363 INTEGER myThid
364
365 C !LOCAL VARIABLES:
366 C == Local variables ==
367 C i,j :: Loop counters
368 C kSurface :: index of surface layer
369 INTEGER i, j
370 INTEGER kSurface
371 CEOP
372
373 IF ( fluidIsAir ) THEN
374 kSurface = 0
375 ELSEIF ( usingPCoords ) THEN
376 kSurface = Nr
377 ELSE
378 kSurface = 1
379 ENDIF
380
381 C-- Forcing term
382 #ifdef ALLOW_AIM
383 IF ( useAIM ) CALL AIM_TENDENCY_APPLY_S(
384 & iMin,iMax, jMin,jMax, bi,bj, kLev,
385 & myTime, myThid )
386 #endif /* ALLOW_AIM */
387
388 #ifdef ALLOW_FIZHI
389 IF ( useFIZHI ) CALL FIZHI_TENDENCY_APPLY_S(
390 & iMin,iMax, jMin,jMax, bi,bj, kLev,
391 & myTime, myThid )
392 #endif /* ALLOW_FIZHI */
393
394 C Add fresh-water in top-layer
395 IF ( kLev .EQ. kSurface ) THEN
396 DO j=1,sNy
397 DO i=1,sNx
398 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
399 & +surfaceForcingS(i,j,bi,bj)
400 & *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)
401 ENDDO
402 ENDDO
403 ENDIF
404
405 #ifdef ALLOW_OBCS
406 IF (useOBCS) THEN
407 CALL OBCS_SPONGE_S(
408 I iMin,iMax, jMin,jMax, bi,bj, kLev,
409 I myTime, myThid )
410 ENDIF
411 #endif
412
413 RETURN
414 END

  ViewVC Help
Powered by ViewVC 1.1.22