/[MITgcm]/MITgcm_contrib/osse/codemod/external_forcing.F
ViewVC logotype

Contents of /MITgcm_contrib/osse/codemod/external_forcing.F

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


Revision 1.1 - (show annotations) (download)
Tue Jun 22 19:44:40 2004 UTC (19 years, 10 months ago) by afe
Branch: MAIN
CVS Tags: HEAD
attempts to get tank config working with current checkpoint

1 C $Header: /u/gcmpack/MITgcm_contrib/osse/code/external_forcing.F,v 1.1 2004/04/26 14:08:04 afe 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 CEOP
48
49 C-- Forcing term
50 C Add windstress momentum impulse into the top-layer
51 IF ( kLev .EQ. 1 ) THEN
52 DO j=jMin,jMax
53 DO i=iMin,iMax
54 gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
55 & +foFacMom*surfaceTendencyU(i,j,bi,bj)
56 & *_maskW(i,j,kLev,bi,bj)
57 ENDDO
58 ENDDO
59 ENDIF
60
61 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
62 IF (useOBCS) THEN
63 CALL OBCS_SPONGE_U(
64 I iMin, iMax, jMin, jMax,bi,bj,kLev,
65 I myCurrentTime,myThid)
66 ENDIF
67 #endif
68
69 RETURN
70 END
71 CBOP
72 C !ROUTINE: EXTERNAL_FORCING_V
73 C !INTERFACE:
74 SUBROUTINE EXTERNAL_FORCING_V(
75 I iMin, iMax, jMin, jMax,bi,bj,kLev,
76 I myCurrentTime,myThid)
77 C !DESCRIPTION: \bv
78 C *==========================================================*
79 C | S/R EXTERNAL_FORCING_V
80 C | o Contains problem specific forcing for merid velocity.
81 C *==========================================================*
82 C | Adds terms to gV for forcing by external sources
83 C | e.g. wind stress, bottom friction etc..................
84 C *==========================================================*
85 C \ev
86
87 C !USES:
88 IMPLICIT NONE
89 C == Global data ==
90 #include "SIZE.h"
91 #include "EEPARAMS.h"
92 #include "PARAMS.h"
93 #include "GRID.h"
94 #include "DYNVARS.h"
95 #include "FFIELDS.h"
96
97 C !INPUT/OUTPUT PARAMETERS:
98 C == Routine arguments ==
99 C iMin - Working range of tile for applying forcing.
100 C iMax
101 C jMin
102 C jMax
103 C kLev
104 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
105 _RL myCurrentTime
106 INTEGER myThid
107
108 C !LOCAL VARIABLES:
109 C == Local variables ==
110 C Loop counters
111 INTEGER I, J
112 CEOP
113
114 C-- Forcing term
115 C Add windstress momentum impulse into the top-layer
116 IF ( kLev .EQ. 1 ) THEN
117 DO j=jMin,jMax
118 DO i=iMin,iMax
119 gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
120 & +foFacMom*surfaceTendencyV(i,j,bi,bj)
121 & *_maskS(i,j,kLev,bi,bj)
122 ENDDO
123 ENDDO
124 ENDIF
125
126 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
127 IF (useOBCS) THEN
128 CALL OBCS_SPONGE_V(
129 I iMin, iMax, jMin, jMax,bi,bj,kLev,
130 I myCurrentTime,myThid)
131 ENDIF
132 #endif
133
134 RETURN
135 END
136 CBOP
137 C !ROUTINE: EXTERNAL_FORCING_T
138 C !INTERFACE:
139 SUBROUTINE EXTERNAL_FORCING_T(
140 I iMin, iMax, jMin, jMax,bi,bj,kLev,
141 I myCurrentTime,myThid)
142 C !DESCRIPTION: \bv
143 C *==========================================================*
144 C | S/R EXTERNAL_FORCING_T
145 C | o Contains problem specific forcing for temperature.
146 C *==========================================================*
147 C | Adds terms to gT for forcing by external sources
148 C | e.g. heat flux, climatalogical relaxation..............
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 #ifdef SHORTWAVE_HEATING
162 integer two
163 _RL minusone
164 parameter (two=2,minusone=-1.)
165 _RL swfracb(two)
166 #endif
167
168 C !INPUT/OUTPUT PARAMETERS:
169 C == Routine arguments ==
170 C iMin - Working range of tile for applying forcing.
171 C iMax
172 C jMin
173 C jMax
174 C kLev
175 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
176 _RL myCurrentTime
177 INTEGER myThid
178 CEndOfInterface
179
180 C !LOCAL VARIABLES:
181 C == Local variables ==
182 C Loop counters
183 INTEGER I, J
184 C iG, jG :: Global index temps.
185 C hC, hW, hE, hN, hS :: Fractional vertical distance open to fluid temps.
186 C dFlux[WENS] :: Diffusive flux normal to each cell face.
187 C faceArea :: Temp. for holding area normal to tempurature gradient.
188 INTEGER iG, jG
189 _RL hC, hW, hE, hN, hS
190 _RL dFluxW, dFluxE, dFluxN, dFluxS
191 _RL faceArea
192 CEOP
193
194 C-- Forcing term
195 C Add term which represents the diffusive flux from a circular cylinder of temperature tCyl in the
196 C interior of the simulation domain. Result is a tendency which is determined from the finite
197 C volume formulated divergence of the diffusive heat flux due to the local cylinder
198 C temperature, fluid temperature difference.
199 C kDiffCyl :: Diffusion coefficient
200 C tCyl :: Temperature of the cylinder
201 C iGSource :: Index space I (global) coordinate for source center.
202 C jGSource :: Index space J (global) coordinate for source center.
203 C rSource :: Extent of the source term region. Loop will skip checking points outside
204 C :: this region. Within this region the source heating will be added
205 C :: to any points that are at a land - fluid boundary. rSource is in grid
206 C :: points, so that points checked are ophi(iGlobal,jGlobal) such that
207 C :: iGlobal=iGsource +/- rSource, jGlobal = jGsource +/- rSource.
208 C :: rSource, iGSource and jGSource only need to define a quadrilateral that
209 C :: includes the cylinder and no other land, they do not need to be exact.
210 _RL kDiffCyl
211 INTEGER rSource
212 INTEGER iGSource
213 INTEGER jGSource
214 CHARACTER*(MAX_LEN_MBUF+1000) msgBuf
215 kDiffCyl = 3. _d -7
216
217 rSource = 3
218 iGSource = 30
219 jGSource = 8
220 DO j=jMin,jMax
221 DO i=iMin,iMax
222 dFluxW = 0.
223 dFluxE = 0.
224 dFluxN = 0.
225 dFluxS = 0.
226 jG = myYGlobalLo-1+(bj-1)*sNy+J
227 iG = myXGlobalLo-1+(bi-1)*sNx+I
228 c IF(jG .GE. jGSource-rSource .AND. jG .LE. jGSource+rSource) THEN
229 IF(jG .LE. 10) THEN
230 tCyl = 0
231 ELSE
232 tCyl = 20
233 ENDIF
234 c IF(iG .GE. iGSource-rSource .AND. iG .LE. iGSource+rSource) THEN
235 hC = hFacC(i ,j ,kLev,bi,bj)
236 hW = hFacW(i ,j ,kLev,bi,bj)
237 hE = hFacW(i+1,j ,kLev,bi,bj)
238 hN = hFacS(i ,j+1,kLev,bi,bj)
239 hS = hFacS(i ,j ,kLev,bi,bj)
240 IF ( hC .NE. 0. .AND .hW .EQ. 0. ) THEN
241 C Cylinder to west
242 faceArea = drF(kLev)*dyG(i,j,bi,bj)
243 dFluxW =
244 & -faceArea*kDiffCyl*(theta(i,j,kLev,bi,bj) - tCyl)
245 & *recip_dxC(i,j,bi,bj)
246 ENDIF
247 IF ( hC .NE. 0. .AND .hE .EQ. 0. ) THEN
248 C Cylinder to east
249 faceArea = drF(kLev)*dyG(i+1,j,bi,bj)
250 dFluxE =
251 & -faceArea*kDiffCyl*(tCyl - theta(i,j,kLev,bi,bj))
252 & *recip_dxC(i,j,bi,bj)
253 ENDIF
254 IF ( hC .NE. 0. .AND .hN .EQ. 0. ) THEN
255 C Cylinder to north
256 faceArea = drF(kLev)*dxG(i,j+1,bi,bj)
257 dFluxN =
258 & -faceArea*kDiffCyl*(tCyl-theta(i,j,kLev,bi,bj))
259 & *recip_dyC(i,j,bi,bj)
260 ENDIF
261 IF ( hC .NE. 0. .AND .hS .EQ. 0. ) THEN
262 C Cylinder to south
263 faceArea = drF(kLev)*dxG(i,j,bi,bj)
264 dFluxS =
265 & -faceArea*kDiffCyl*(theta(i,j,kLev,bi,bj) - tCyl)
266 & *recip_dyC(i,j,bi,bj)
267 ENDIF
268 c ENDIF
269 c ENDIF
270 C Net tendency term is minus flux divergence divided by the volume.
271 gT(i,j,kLev,bi,bj) = gT(i,j,kLev,bi,bj)
272 & -_recip_hFacC(i,j,kLev,bi,bj)*recip_drF(kLev)
273 & *recip_rA(i,j,bi,bj)
274 & *(
275 & dFluxE-dFluxW
276 & +dFluxN-dFluxS
277 & )
278
279 ENDDO
280 ENDDO
281
282 RETURN
283 END
284 CBOP
285 C !ROUTINE: EXTERNAL_FORCING_S
286 C !INTERFACE:
287 SUBROUTINE EXTERNAL_FORCING_S(
288 I iMin, iMax, jMin, jMax,bi,bj,kLev,
289 I myCurrentTime,myThid)
290
291 C !DESCRIPTION: \bv
292 C *==========================================================*
293 C | S/R EXTERNAL_FORCING_S
294 C | o Contains problem specific forcing for merid velocity.
295 C *==========================================================*
296 C | Adds terms to gS for forcing by external sources
297 C | e.g. fresh-water flux, climatalogical relaxation.......
298 C *==========================================================*
299 C \ev
300
301 C !USES:
302 IMPLICIT NONE
303 C == Global data ==
304 #include "SIZE.h"
305 #include "EEPARAMS.h"
306 #include "PARAMS.h"
307 #include "GRID.h"
308 #include "DYNVARS.h"
309 #include "FFIELDS.h"
310
311 C !INPUT/OUTPUT PARAMETERS:
312 C == Routine arguments ==
313 C iMin - Working range of tile for applying forcing.
314 C iMax
315 C jMin
316 C jMax
317 C kLev
318 INTEGER iMin, iMax, jMin, jMax, kLev, bi, bj
319 _RL myCurrentTime
320 INTEGER myThid
321
322 C !LOCAL VARIABLES:
323 C == Local variables ==
324 C Loop counters
325 INTEGER I, J
326 CEOP
327
328 C-- Forcing term
329 C Add fresh-water in top-layer
330 IF ( kLev .EQ. 1 ) THEN
331 DO j=jMin,jMax
332 DO i=iMin,iMax
333 gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
334 & +maskC(i,j,kLev,bi,bj)*surfaceTendencyS(i,j,bi,bj)
335 ENDDO
336 ENDDO
337 ENDIF
338
339 #if (defined (ALLOW_OBCS) && defined (ALLOW_OBCS_SPONGE))
340 IF (useOBCS) THEN
341 CALL OBCS_SPONGE_S(
342 I iMin, iMax, jMin, jMax,bi,bj,kLev,
343 I myCurrentTime,myThid)
344 ENDIF
345 #endif
346
347 RETURN
348 END

  ViewVC Help
Powered by ViewVC 1.1.22