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

Annotation 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 - (hide 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 jmc 1.6 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 adcroft 1.1 C $Name: $
3    
4 jmc 1.5 #include "PACKAGES_CONFIG.h"
5 adcroft 1.1 #include "CPP_OPTIONS.h"
6    
7     CBOP
8     C !ROUTINE: EXTERNAL_FORCING_U
9     C !INTERFACE:
10     SUBROUTINE EXTERNAL_FORCING_U(
11 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
12     I myTime, myThid )
13 adcroft 1.1 C !DESCRIPTION: \bv
14     C *==========================================================*
15 jmc 1.5 C | S/R EXTERNAL_FORCING_U
16     C | o Contains problem specific forcing for zonal velocity.
17 adcroft 1.1 C *==========================================================*
18 jmc 1.5 C | Adds terms to gU for forcing by external sources
19     C | e.g. wind stress, bottom friction etc ...
20 adcroft 1.1 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 jmc 1.5 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 adcroft 1.1 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
42 jmc 1.5 _RL myTime
43 adcroft 1.1 INTEGER myThid
44    
45     C !LOCAL VARIABLES:
46     C == Local variables ==
47 jmc 1.5 C i,j :: Loop counters
48     C kSurface :: index of surface layer
49     INTEGER i, j
50 adcroft 1.1 INTEGER kSurface
51     _RL tidal_freq,tidal_Hscale
52     _RL Coord2longitude,longitud1,longitud2
53     CEOP
54    
55 jmc 1.5 IF ( fluidIsAir ) THEN
56     kSurface = 0
57     ELSEIF ( usingPCoords ) THEN
58 adcroft 1.1 kSurface = Nr
59 jmc 1.5 ELSE
60 adcroft 1.1 kSurface = 1
61 jmc 1.5 ENDIF
62 adcroft 1.1
63     C-- Forcing term
64 jmc 1.5 #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 adcroft 1.1 C Add windstress momentum impulse into the top-layer
77     IF ( kLev .EQ. kSurface ) THEN
78 jmc 1.5 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 adcroft 1.1 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
83 jmc 1.4 & +foFacMom*surfaceForcingU(i,j,bi,bj)
84     & *recip_drF(kLev)*recip_hFacW(i,j,kLev,bi,bj)
85 adcroft 1.1 ENDDO
86     ENDDO
87     ENDIF
88    
89 jmc 1.5
90 adcroft 1.1 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 adcroft 1.2 tidal_Hscale=10.
97 adcroft 1.1 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 jmc 1.5 DO j=0,sNy+1
105     DO i=1,sNx+1
106 adcroft 1.1 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 jmc 1.5 & ( SIN( tidal_freq*myTime + 2.*longitud2 )
111     & -SIN( tidal_freq*myTime + 2.*longitud1 )
112 adcroft 1.1 & )*recip_DXC(i,j,bi,bj)
113     & *_maskW(i,j,kLev,bi,bj)
114 jmc 1.5 c & *min( myTime/86400. , 1.)
115 adcroft 1.1 ENDDO
116     ENDDO
117    
118 jmc 1.5 #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 adcroft 1.1 IF (useOBCS) THEN
126     CALL OBCS_SPONGE_U(
127 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
128     I myTime, myThid )
129 adcroft 1.1 ENDIF
130     #endif
131    
132     RETURN
133     END
134 jmc 1.5
135     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
136 adcroft 1.1 CBOP
137     C !ROUTINE: EXTERNAL_FORCING_V
138     C !INTERFACE:
139     SUBROUTINE EXTERNAL_FORCING_V(
140 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
141     I myTime, myThid )
142 adcroft 1.1 C !DESCRIPTION: \bv
143     C *==========================================================*
144 jmc 1.5 C | S/R EXTERNAL_FORCING_V
145     C | o Contains problem specific forcing for merid velocity.
146 adcroft 1.1 C *==========================================================*
147 jmc 1.5 C | Adds terms to gV for forcing by external sources
148     C | e.g. wind stress, bottom friction etc ...
149 adcroft 1.1 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 jmc 1.5 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 adcroft 1.1 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
171 jmc 1.5 _RL myTime
172 adcroft 1.1 INTEGER myThid
173    
174     C !LOCAL VARIABLES:
175     C == Local variables ==
176 jmc 1.5 C i,j :: Loop counters
177     C kSurface :: index of surface layer
178     INTEGER i, j
179 adcroft 1.1 INTEGER kSurface
180     CEOP
181    
182 jmc 1.5 IF ( fluidIsAir ) THEN
183     kSurface = 0
184     ELSEIF ( usingPCoords ) THEN
185 adcroft 1.1 kSurface = Nr
186 jmc 1.5 ELSE
187 adcroft 1.1 kSurface = 1
188 jmc 1.5 ENDIF
189 adcroft 1.1
190     C-- Forcing term
191 jmc 1.5 #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 adcroft 1.1 C Add windstress momentum impulse into the top-layer
204     IF ( kLev .EQ. kSurface ) THEN
205 jmc 1.5 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 adcroft 1.1 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
210 jmc 1.4 & +foFacMom*surfaceForcingV(i,j,bi,bj)
211     & *recip_drF(kLev)*recip_hFacS(i,j,kLev,bi,bj)
212 adcroft 1.1 ENDDO
213     ENDDO
214     ENDIF
215    
216 jmc 1.5 #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 adcroft 1.1 IF (useOBCS) THEN
224     CALL OBCS_SPONGE_V(
225 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
226     I myTime, myThid )
227 adcroft 1.1 ENDIF
228     #endif
229    
230     RETURN
231     END
232 jmc 1.5
233     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
234 adcroft 1.1 CBOP
235     C !ROUTINE: EXTERNAL_FORCING_T
236     C !INTERFACE:
237     SUBROUTINE EXTERNAL_FORCING_T(
238 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
239     I myTime, myThid )
240 adcroft 1.1 C !DESCRIPTION: \bv
241     C *==========================================================*
242 jmc 1.5 C | S/R EXTERNAL_FORCING_T
243     C | o Contains problem specific forcing for temperature.
244 adcroft 1.1 C *==========================================================*
245 jmc 1.5 C | Adds terms to gT for forcing by external sources
246     C | e.g. heat flux, climatalogical relaxation, etc ...
247 adcroft 1.1 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 jmc 1.5 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 adcroft 1.1 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
269 jmc 1.5 _RL myTime
270 adcroft 1.1 INTEGER myThid
271    
272     C !LOCAL VARIABLES:
273     C == Local variables ==
274 jmc 1.5 C i,j :: Loop counters
275     C kSurface :: index of surface layer
276     INTEGER i, j
277 adcroft 1.1 INTEGER kSurface
278     CEOP
279 jmc 1.5 #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 adcroft 1.1
287 jmc 1.5 IF ( fluidIsAir ) THEN
288     kSurface = 0
289     ELSEIF ( usingPCoords ) THEN
290 adcroft 1.1 kSurface = Nr
291 jmc 1.5 ELSE
292 adcroft 1.1 kSurface = 1
293 jmc 1.5 ENDIF
294 adcroft 1.1
295     C-- Forcing term
296 jmc 1.5 #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 adcroft 1.1 C Add heat in top-layer
309     IF ( kLev .EQ. kSurface ) THEN
310 jmc 1.5 DO j=1,sNy
311     DO i=1,sNx
312 adcroft 1.1 gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
313 jmc 1.4 & +surfaceForcingT(i,j,bi,bj)
314     & *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)
315 adcroft 1.1 ENDDO
316     ENDDO
317     ENDIF
318    
319     #ifdef SHORTWAVE_HEATING
320     C Penetrating SW radiation
321 jmc 1.5 c IF ( usePenetratingSW ) THEN
322     swfracb(1)=abs(rF(klev))
323     swfracb(2)=abs(rF(klev+1))
324     CALL SWFRAC(
325 jmc 1.6 I two, minusone,
326     U swfracb,
327     I myTime, 1, myThid )
328 jmc 1.5 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 adcroft 1.1 ENDDO
342 jmc 1.5 c ENDIF
343 adcroft 1.1 #endif
344    
345 jmc 1.5 #ifdef ALLOW_OBCS
346 adcroft 1.1 IF (useOBCS) THEN
347     CALL OBCS_SPONGE_T(
348 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
349     I myTime, myThid )
350 adcroft 1.1 ENDIF
351     #endif
352    
353     RETURN
354     END
355 jmc 1.5
356     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
357 adcroft 1.1 CBOP
358     C !ROUTINE: EXTERNAL_FORCING_S
359     C !INTERFACE:
360     SUBROUTINE EXTERNAL_FORCING_S(
361 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
362     I myTime, myThid )
363 adcroft 1.1
364     C !DESCRIPTION: \bv
365     C *==========================================================*
366 jmc 1.5 C | S/R EXTERNAL_FORCING_S
367     C | o Contains problem specific forcing for merid velocity.
368 adcroft 1.1 C *==========================================================*
369 jmc 1.5 C | Adds terms to gS for forcing by external sources
370     C | e.g. fresh-water flux, climatalogical relaxation, etc ...
371 adcroft 1.1 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 jmc 1.5 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 adcroft 1.1 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
393 jmc 1.5 _RL myTime
394 adcroft 1.1 INTEGER myThid
395    
396     C !LOCAL VARIABLES:
397     C == Local variables ==
398 jmc 1.5 C i,j :: Loop counters
399     C kSurface :: index of surface layer
400     INTEGER i, j
401 adcroft 1.1 INTEGER kSurface
402     CEOP
403    
404 jmc 1.5 IF ( fluidIsAir ) THEN
405     kSurface = 0
406     ELSEIF ( usingPCoords ) THEN
407 adcroft 1.1 kSurface = Nr
408 jmc 1.5 ELSE
409 adcroft 1.1 kSurface = 1
410 jmc 1.5 ENDIF
411 adcroft 1.1
412 jmc 1.5 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 adcroft 1.1
425     C Add fresh-water in top-layer
426     IF ( kLev .EQ. kSurface ) THEN
427 jmc 1.5 DO j=1,sNy
428     DO i=1,sNx
429 adcroft 1.1 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
430 jmc 1.4 & +surfaceForcingS(i,j,bi,bj)
431     & *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)
432 adcroft 1.1 ENDDO
433     ENDDO
434     ENDIF
435    
436 jmc 1.5 #ifdef ALLOW_OBCS
437 adcroft 1.1 IF (useOBCS) THEN
438     CALL OBCS_SPONGE_S(
439 jmc 1.5 I iMin,iMax, jMin,jMax, bi,bj, kLev,
440     I myTime, myThid )
441 adcroft 1.1 ENDIF
442     #endif
443    
444     RETURN
445     END

  ViewVC Help
Powered by ViewVC 1.1.22