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

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

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


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

1 afe 1.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