/[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.1 - (show annotations) (download)
Thu Jan 30 18:33:57 2003 UTC (21 years, 3 months ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint48i_post, checkpoint48d_post, checkpoint48f_post, checkpoint48g_post, checkpoint48e_post, checkpoint49, checkpoint50, checkpoint48d_pre, checkpoint48h_post, checkpoint50a_post
Adding bare bones prototype of tidal sloshing in basin. Currently
a flat bottom, no rotation, or dissipation and *one* level.
We'll increase levels shortly...

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/external_forcing.F,v 1.17 2002/09/25 19:36:50 mlosch Exp $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: EXTERNAL_FORCING_U
8 C !INTERFACE:
9 SUBROUTINE EXTERNAL_FORCING_U(
10 I iMin, iMax, jMin, jMax,bi,bj,kLev,
11 I myCurrentTime,myThid)
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | S/R EXTERNAL_FORCING_U
15 C | o Contains problem specific forcing for zonal velocity.
16 C *==========================================================*
17 C | Adds terms to gU for forcing by external sources
18 C | e.g. wind stress, bottom friction etc..................
19 C *==========================================================*
20 C \ev
21
22 C !USES:
23 IMPLICIT NONE
24 C == Global data ==
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "GRID.h"
29 #include "DYNVARS.h"
30 #include "FFIELDS.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C == Routine arguments ==
34 C iMin - Working range of tile for applying forcing.
35 C iMax
36 C jMin
37 C jMax
38 C kLev
39 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
40 _RL myCurrentTime
41 INTEGER myThid
42
43 C !LOCAL VARIABLES:
44 C == Local variables ==
45 C Loop counters
46 INTEGER I, J
47 C number of surface interface layer
48 INTEGER kSurface
49 _RL tidal_freq,tidal_Hscale
50 _RL Coord2longitude,longitud1,longitud2
51 CEOP
52
53 if ( buoyancyRelation .eq. 'OCEANICP' ) then
54 kSurface = Nr
55 else
56 kSurface = 1
57 endif
58
59 C-- Forcing term
60 C Add windstress momentum impulse into the top-layer
61 IF ( kLev .EQ. kSurface ) THEN
62 DO j=jMin,jMax
63 DO i=iMin,iMax
64 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
65 & +foFacMom*surfaceTendencyU(i,j,bi,bj)
66 & *_maskW(i,j,kLev,bi,bj)
67 ENDDO
68 ENDDO
69 ENDIF
70
71 C-- Tidal body force: written as gradient of geopotential
72 C True M2 frequency is
73 c tidal_freq=2.*pi/(43200.+25.*60.)
74 C But for convenience we are using 12 hour period
75 tidal_freq=2.*pi/(43200.)
76 C Make the tide relatively strong (about 1 m)
77 tidal_Hscale=100.
78 IF ( usingCartesianGrid ) THEN
79 Coord2longitude=1./rSphere
80 ELSEIF ( usingSphericalPolarGrid ) THEN
81 Coord2longitude=pi/180.
82 ELSE
83 STOP 'Be careful about 2D!'
84 ENDIF
85 DO j=jMin,jMax
86 DO i=iMin+1,iMax
87 longitud1=XC(i-1,j,bi,bj)*Coord2longitude
88 longitud2=XC(i,j,bi,bj)*Coord2longitude
89 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
90 & +gravity*tidal_Hscale*
91 & ( SIN( tidal_freq*myCurrentTime +longitud2 )
92 & -SIN( tidal_freq*myCurrentTime +longitud1 )
93 & )*recip_DXC(i,j,bi,bj)
94 & *_maskW(i,j,kLev,bi,bj)
95 ENDDO
96 ENDDO
97
98 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
99 IF (useOBCS) THEN
100 CALL OBCS_SPONGE_U(
101 I iMin, iMax, jMin, jMax,bi,bj,kLev,
102 I myCurrentTime,myThid)
103 ENDIF
104 #endif
105
106 RETURN
107 END
108 CBOP
109 C !ROUTINE: EXTERNAL_FORCING_V
110 C !INTERFACE:
111 SUBROUTINE EXTERNAL_FORCING_V(
112 I iMin, iMax, jMin, jMax,bi,bj,kLev,
113 I myCurrentTime,myThid)
114 C !DESCRIPTION: \bv
115 C *==========================================================*
116 C | S/R EXTERNAL_FORCING_V
117 C | o Contains problem specific forcing for merid velocity.
118 C *==========================================================*
119 C | Adds terms to gV for forcing by external sources
120 C | e.g. wind stress, bottom friction etc..................
121 C *==========================================================*
122 C \ev
123
124 C !USES:
125 IMPLICIT NONE
126 C == Global data ==
127 #include "SIZE.h"
128 #include "EEPARAMS.h"
129 #include "PARAMS.h"
130 #include "GRID.h"
131 #include "DYNVARS.h"
132 #include "FFIELDS.h"
133
134 C !INPUT/OUTPUT PARAMETERS:
135 C == Routine arguments ==
136 C iMin - Working range of tile for applying forcing.
137 C iMax
138 C jMin
139 C jMax
140 C kLev
141 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
142 _RL myCurrentTime
143 INTEGER myThid
144
145 C !LOCAL VARIABLES:
146 C == Local variables ==
147 C Loop counters
148 INTEGER I, J
149 C number of surface interface layer
150 INTEGER kSurface
151 CEOP
152
153 if ( buoyancyRelation .eq. 'OCEANICP' ) then
154 kSurface = Nr
155 else
156 kSurface = 1
157 endif
158
159 C-- Forcing term
160 C Add windstress momentum impulse into the top-layer
161 IF ( kLev .EQ. kSurface ) THEN
162 DO j=jMin,jMax
163 DO i=iMin,iMax
164 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
165 & +foFacMom*surfaceTendencyV(i,j,bi,bj)
166 & *_maskS(i,j,kLev,bi,bj)
167 ENDDO
168 ENDDO
169 ENDIF
170
171 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
172 IF (useOBCS) THEN
173 CALL OBCS_SPONGE_V(
174 I iMin, iMax, jMin, jMax,bi,bj,kLev,
175 I myCurrentTime,myThid)
176 ENDIF
177 #endif
178
179 RETURN
180 END
181 CBOP
182 C !ROUTINE: EXTERNAL_FORCING_T
183 C !INTERFACE:
184 SUBROUTINE EXTERNAL_FORCING_T(
185 I iMin, iMax, jMin, jMax,bi,bj,kLev,
186 I myCurrentTime,myThid)
187 C !DESCRIPTION: \bv
188 C *==========================================================*
189 C | S/R EXTERNAL_FORCING_T
190 C | o Contains problem specific forcing for temperature.
191 C *==========================================================*
192 C | Adds terms to gT for forcing by external sources
193 C | e.g. heat flux, climatalogical relaxation..............
194 C *==========================================================*
195 C \ev
196
197 C !USES:
198 IMPLICIT NONE
199 C == Global data ==
200 #include "SIZE.h"
201 #include "EEPARAMS.h"
202 #include "PARAMS.h"
203 #include "GRID.h"
204 #include "DYNVARS.h"
205 #include "FFIELDS.h"
206 #ifdef SHORTWAVE_HEATING
207 integer two
208 _RL minusone
209 parameter (two=2,minusone=-1.)
210 _RL swfracb(two)
211 #endif
212
213 C !INPUT/OUTPUT PARAMETERS:
214 C == Routine arguments ==
215 C iMin - Working range of tile for applying forcing.
216 C iMax
217 C jMin
218 C jMax
219 C kLev
220 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
221 _RL myCurrentTime
222 INTEGER myThid
223 CEndOfInterface
224
225 C !LOCAL VARIABLES:
226 C == Local variables ==
227 C Loop counters
228 INTEGER I, J
229 C number of surface interface layer
230 INTEGER kSurface
231 CEOP
232
233 if ( buoyancyRelation .eq. 'OCEANICP' ) then
234 kSurface = Nr
235 else
236 kSurface = 1
237 endif
238
239 C-- Forcing term
240 C Add heat in top-layer
241 IF ( kLev .EQ. kSurface ) THEN
242 DO j=jMin,jMax
243 DO i=iMin,iMax
244 gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
245 & +maskC(i,j,kLev,bi,bj)*surfaceTendencyT(i,j,bi,bj)
246 ENDDO
247 ENDDO
248 ENDIF
249
250 #ifdef SHORTWAVE_HEATING
251 C Penetrating SW radiation
252 swfracb(1)=abs(rF(klev))
253 swfracb(2)=abs(rF(klev+1))
254 call SWFRAC(
255 I two,minusone,
256 I myCurrentTime,myThid,
257 O swfracb)
258 DO j=jMin,jMax
259 DO i=iMin,iMax
260 gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)
261 & -maskC(i,j,klev,bi,bj)*Qsw(i,j,bi,bj)*(swfracb(1)-swfracb(2))
262 & *recip_Cp*recip_rhoConst*recip_drF(klev)
263 ENDDO
264 ENDDO
265 #endif
266
267 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
268 IF (useOBCS) THEN
269 CALL OBCS_SPONGE_T(
270 I iMin, iMax, jMin, jMax,bi,bj,kLev,
271 I myCurrentTime,myThid)
272 ENDIF
273 #endif
274
275 RETURN
276 END
277 CBOP
278 C !ROUTINE: EXTERNAL_FORCING_S
279 C !INTERFACE:
280 SUBROUTINE EXTERNAL_FORCING_S(
281 I iMin, iMax, jMin, jMax,bi,bj,kLev,
282 I myCurrentTime,myThid)
283
284 C !DESCRIPTION: \bv
285 C *==========================================================*
286 C | S/R EXTERNAL_FORCING_S
287 C | o Contains problem specific forcing for merid velocity.
288 C *==========================================================*
289 C | Adds terms to gS for forcing by external sources
290 C | e.g. fresh-water flux, climatalogical relaxation.......
291 C *==========================================================*
292 C \ev
293
294 C !USES:
295 IMPLICIT NONE
296 C == Global data ==
297 #include "SIZE.h"
298 #include "EEPARAMS.h"
299 #include "PARAMS.h"
300 #include "GRID.h"
301 #include "DYNVARS.h"
302 #include "FFIELDS.h"
303
304 C !INPUT/OUTPUT PARAMETERS:
305 C == Routine arguments ==
306 C iMin - Working range of tile for applying forcing.
307 C iMax
308 C jMin
309 C jMax
310 C kLev
311 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
312 _RL myCurrentTime
313 INTEGER myThid
314
315 C !LOCAL VARIABLES:
316 C == Local variables ==
317 C Loop counters
318 INTEGER I, J
319 C number of surface interface layer
320 INTEGER kSurface
321 CEOP
322
323 if ( buoyancyRelation .eq. 'OCEANICP' ) then
324 kSurface = Nr
325 else
326 kSurface = 1
327 endif
328
329
330 C-- Forcing term
331 C Add fresh-water in top-layer
332 IF ( kLev .EQ. kSurface ) THEN
333 DO j=jMin,jMax
334 DO i=iMin,iMax
335 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
336 & +maskC(i,j,kLev,bi,bj)*surfaceTendencyS(i,j,bi,bj)
337 ENDDO
338 ENDDO
339 ENDIF
340
341 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
342 IF (useOBCS) THEN
343 CALL OBCS_SPONGE_S(
344 I iMin, iMax, jMin, jMax,bi,bj,kLev,
345 I myCurrentTime,myThid)
346 ENDIF
347 #endif
348
349 RETURN
350 END

  ViewVC Help
Powered by ViewVC 1.1.22