/[MITgcm]/MITgcm/verification/tidal_basin_2d/code/external_forcing.F
ViewVC logotype

Contents of /MITgcm/verification/tidal_basin_2d/code/external_forcing.F

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


Revision 1.6 - (show annotations) (download)
Thu May 3 21:42:15 2007 UTC (17 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +4 -4 lines
changes in S/R SWFRAC argument list.

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

  ViewVC Help
Powered by ViewVC 1.1.22