/[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.22 - (show annotations) (download)
Thu Dec 11 21:23:00 2003 UTC (21 years, 7 months ago) by jmc
Branch: MAIN
Branch point for: netcdf-sm0
Changes since 1.21: +5 -5 lines
fix typo error

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

  ViewVC Help
Powered by ViewVC 1.1.22