/[MITgcm]/MITgcm/pkg/obcs/obcs_init_variables.F
ViewVC logotype

Annotation of /MITgcm/pkg/obcs/obcs_init_variables.F

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


Revision 1.22 - (hide annotations) (download)
Tue Oct 23 08:25:28 2007 UTC (16 years, 7 months ago) by dimitri
Branch: MAIN
Changes since 1.21: +25 -1 lines
added open boundary conditions capability for seaice HSNOW and HSALT
(code contributed by Michael Schodlok)

1 dimitri 1.22 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_init_variables.F,v 1.21 2007/10/11 10:30:34 dimitri Exp $
2 adcroft 1.3 C $Name: $
3 adcroft 1.2
4     #include "OBCS_OPTIONS.h"
5    
6     SUBROUTINE OBCS_INIT_VARIABLES( myThid )
7     C /==========================================================\
8     C | SUBROUTINE OBCS_INIT_VARIABLES |
9     C | o Initialise OBCs variable data |
10     C |==========================================================|
11     C | |
12     C \==========================================================/
13     IMPLICIT NONE
14    
15     C === Global variables ===
16     #include "SIZE.h"
17     #include "EEPARAMS.h"
18     #include "PARAMS.h"
19     #include "DYNVARS.h"
20     #include "OBCS.h"
21 jmc 1.17 #ifdef ALLOW_PTRACERS
22 mlosch 1.14 #include "PTRACERS_SIZE.h"
23     #include "PTRACERS.h"
24     #include "OBCS_PTRACERS.h"
25     #endif /* ALLOW_PTRACERS */
26 adcroft 1.2
27     C == Routine arguments ==
28     C myThid - Number of this instance of INI_DEPTHS
29     INTEGER myThid
30    
31     #ifdef ALLOW_OBCS
32    
33     C == Local variables ==
34     INTEGER bi, bj
35     INTEGER I, J, K
36 adcroft 1.9 CHARACTER*(10) suff
37     INTEGER prec
38 mlosch 1.14 #ifdef ALLOW_PTRACERS
39     INTEGER iTracer
40     #endif /* ALLOW_PTRACERS */
41 adcroft 1.2
42 adcroft 1.12 #ifdef ALLOW_DEBUG
43     IF (debugMode) CALL DEBUG_ENTER('OBCS_INIT_VARIABLES',myThid)
44     #endif
45    
46 adcroft 1.2 DO bj = myByLo(myThid), myByHi(myThid)
47     DO bi = myBxLo(myThid), myBxHi(myThid)
48    
49     DO K=1,Nr
50     DO I=1-Olx,sNx+Olx
51 heimbach 1.10 #ifdef ALLOW_OBCS_NORTH
52     OBNu(I,K,bi,bj)=0. _d 0
53     OBNv(I,K,bi,bj)=0. _d 0
54     OBNt(I,K,bi,bj)=0. _d 0
55     OBNs(I,K,bi,bj)=0. _d 0
56     # ifdef ALLOW_NONHYDROSTATIC
57     OBNw(I,K,bi,bj)=0. _d 0
58     # endif
59     # ifdef ALLOW_OBCS_PRESCRIBE
60     OBNu0(I,K,bi,bj)=0. _d 0
61     OBNv0(I,K,bi,bj)=0. _d 0
62     OBNt0(I,K,bi,bj)=0. _d 0
63     OBNs0(I,K,bi,bj)=0. _d 0
64     OBNu1(I,K,bi,bj)=0. _d 0
65     OBNv1(I,K,bi,bj)=0. _d 0
66     OBNt1(I,K,bi,bj)=0. _d 0
67     OBNs1(I,K,bi,bj)=0. _d 0
68     # endif
69     #endif /* ALLOW_OBCS_NORTH */
70    
71     #ifdef ALLOW_OBCS_SOUTH
72     OBSu(I,K,bi,bj)=0. _d 0
73     OBSv(I,K,bi,bj)=0. _d 0
74     OBSt(I,K,bi,bj)=0. _d 0
75     OBSs(I,K,bi,bj)=0. _d 0
76     # ifdef ALLOW_NONHYDROSTATIC
77     OBSw(I,K,bi,bj)=0. _d 0
78     # endif
79     # ifdef ALLOW_OBCS_PRESCRIBE
80     OBSu0(I,K,bi,bj)=0. _d 0
81     OBSv0(I,K,bi,bj)=0. _d 0
82     OBSt0(I,K,bi,bj)=0. _d 0
83     OBSs0(I,K,bi,bj)=0. _d 0
84     OBSu1(I,K,bi,bj)=0. _d 0
85     OBSv1(I,K,bi,bj)=0. _d 0
86     OBSt1(I,K,bi,bj)=0. _d 0
87     OBSs1(I,K,bi,bj)=0. _d 0
88     # endif
89     #endif /* ALLOW_OBCS_SOUTH */
90 adcroft 1.2 ENDDO
91 heimbach 1.10
92 adcroft 1.2 DO J=1-Oly,sNy+Oly
93 heimbach 1.10 #ifdef ALLOW_OBCS_EAST
94     OBEu(J,K,bi,bj)=0. _d 0
95     OBEv(J,K,bi,bj)=0. _d 0
96     OBEt(J,K,bi,bj)=0. _d 0
97     OBEs(J,K,bi,bj)=0. _d 0
98     # ifdef ALLOW_NONHYDROSTATIC
99     OBEw(J,K,bi,bj)=0. _d 0
100     # endif
101     # ifdef ALLOW_OBCS_PRESCRIBE
102     OBEu0(J,K,bi,bj)=0. _d 0
103     OBEv0(J,K,bi,bj)=0. _d 0
104     OBEt0(J,K,bi,bj)=0. _d 0
105     OBEs0(J,K,bi,bj)=0. _d 0
106     OBEu1(J,K,bi,bj)=0. _d 0
107     OBEv1(J,K,bi,bj)=0. _d 0
108     OBEt1(J,K,bi,bj)=0. _d 0
109     OBEs1(J,K,bi,bj)=0. _d 0
110     # endif
111     #endif /* ALLOW_OBCS_EAST */
112    
113     #ifdef ALLOW_OBCS_WEST
114     OBWu(J,K,bi,bj)=0. _d 0
115     OBWv(J,K,bi,bj)=0. _d 0
116     OBWt(J,K,bi,bj)=0. _d 0
117     OBWs(J,K,bi,bj)=0. _d 0
118     # ifdef ALLOW_NONHYDROSTATIC
119     OBWw(J,K,bi,bj)=0. _d 0
120     # endif
121     # ifdef ALLOW_OBCS_PRESCRIBE
122     OBWu0(J,K,bi,bj)=0. _d 0
123     OBWv0(J,K,bi,bj)=0. _d 0
124     OBWt0(J,K,bi,bj)=0. _d 0
125     OBWs0(J,K,bi,bj)=0. _d 0
126     OBWu1(J,K,bi,bj)=0. _d 0
127     OBWv1(J,K,bi,bj)=0. _d 0
128     OBWt1(J,K,bi,bj)=0. _d 0
129     OBWs1(J,K,bi,bj)=0. _d 0
130     # endif
131     #endif /* ALLOW_OBCS_WEST */
132 adcroft 1.2 ENDDO
133     ENDDO
134 jmc 1.5
135 dimitri 1.21 #ifdef ALLOW_SEAICE
136     DO I=1-Olx,sNx+Olx
137     #ifdef ALLOW_OBCS_NORTH
138     OBNa (I,bi,bj)=0. _d 0
139     OBNh (I,bi,bj)=0. _d 0
140     OBNa0(I,bi,bj)=0. _d 0
141     OBNh0(I,bi,bj)=0. _d 0
142     OBNa1(I,bi,bj)=0. _d 0
143     OBNh1(I,bi,bj)=0. _d 0
144 dimitri 1.22 OBNsl (I,bi,bj)=0. _d 0
145     OBNsn (I,bi,bj)=0. _d 0
146     OBNsl0(I,bi,bj)=0. _d 0
147     OBNsn0(I,bi,bj)=0. _d 0
148     OBNsl1(I,bi,bj)=0. _d 0
149     OBNsn1(I,bi,bj)=0. _d 0
150 dimitri 1.21 #endif /* ALLOW_OBCS_NORTH */
151     #ifdef ALLOW_OBCS_SOUTH
152     OBSa (I,bi,bj)=0. _d 0
153     OBSh (I,bi,bj)=0. _d 0
154     OBSa0(I,bi,bj)=0. _d 0
155     OBSh0(I,bi,bj)=0. _d 0
156     OBSa1(I,bi,bj)=0. _d 0
157     OBSh1(I,bi,bj)=0. _d 0
158 dimitri 1.22 OBSsl (I,bi,bj)=0. _d 0
159     OBSsn (I,bi,bj)=0. _d 0
160     OBSsl0(I,bi,bj)=0. _d 0
161     OBSsn0(I,bi,bj)=0. _d 0
162     OBSsl1(I,bi,bj)=0. _d 0
163     OBSsn1(I,bi,bj)=0. _d 0
164 dimitri 1.21 #endif /* ALLOW_OBCS_SOUTH */
165     ENDDO
166     DO J=1-Oly,sNy+Oly
167     #ifdef ALLOW_OBCS_EAST
168     OBEa (J,bi,bj)=0. _d 0
169     OBEh (J,bi,bj)=0. _d 0
170     OBEa0(J,bi,bj)=0. _d 0
171     OBEh0(J,bi,bj)=0. _d 0
172     OBEa1(J,bi,bj)=0. _d 0
173     OBEh1(J,bi,bj)=0. _d 0
174 dimitri 1.22 OBEsl (I,bi,bj)=0. _d 0
175     OBEsn (I,bi,bj)=0. _d 0
176     OBEsl0(I,bi,bj)=0. _d 0
177     OBEsn0(I,bi,bj)=0. _d 0
178     OBEsl1(I,bi,bj)=0. _d 0
179     OBEsn1(I,bi,bj)=0. _d 0
180 dimitri 1.21 #endif /* ALLOW_OBCS_EAST */
181     #ifdef ALLOW_OBCS_WEST
182     OBWa (J,bi,bj)=0. _d 0
183     OBWh (J,bi,bj)=0. _d 0
184     OBWa0(J,bi,bj)=0. _d 0
185     OBWh0(J,bi,bj)=0. _d 0
186     OBWa1(J,bi,bj)=0. _d 0
187     OBWh1(J,bi,bj)=0. _d 0
188 dimitri 1.22 OBWsl (I,bi,bj)=0. _d 0
189     OBWsn (I,bi,bj)=0. _d 0
190     OBWsl0(I,bi,bj)=0. _d 0
191     OBWsn0(I,bi,bj)=0. _d 0
192     OBWsl1(I,bi,bj)=0. _d 0
193     OBWsn1(I,bi,bj)=0. _d 0
194 dimitri 1.21 #endif /* ALLOW_OBCS_WEST */
195     ENDDO
196     #endif /* ALLOW_SEAICE */
197    
198 mlosch 1.14 #ifdef ALLOW_PTRACERS
199 mlosch 1.20 #ifndef ALLOW_AUTODIFF_TAMC
200 mlosch 1.16 IF ( usePTRACERS ) THEN
201 mlosch 1.20 #endif
202 mlosch 1.16 DO iTracer=1,PTRACERS_numInUse
203     DO K=1,Nr
204     DO I=1-Olx,sNx+Olx
205 mlosch 1.14 #ifdef ALLOW_OBCS_NORTH
206 mlosch 1.16 OBNptr (I,K,bi,bj,iTracer)=0. _d 0
207 mlosch 1.14 # ifdef ALLOW_OBCS_PRESCRIBE
208 mlosch 1.16 OBNptr0(I,K,bi,bj,iTracer)=0. _d 0
209     OBNptr1(I,K,bi,bj,iTracer)=0. _d 0
210 mlosch 1.14 # endif
211     #endif /* ALLOW_OBCS_NORTH */
212 mlosch 1.16
213 mlosch 1.14 #ifdef ALLOW_OBCS_SOUTH
214 mlosch 1.16 OBSptr (I,K,bi,bj,iTracer)=0. _d 0
215 mlosch 1.14 # ifdef ALLOW_OBCS_PRESCRIBE
216 mlosch 1.16 OBSptr0(I,K,bi,bj,iTracer)=0. _d 0
217     OBSptr1(I,K,bi,bj,iTracer)=0. _d 0
218 mlosch 1.14 # endif
219     #endif /* ALLOW_OBCS_SOUTH */
220 mlosch 1.16 ENDDO
221    
222     DO J=1-Oly,sNy+Oly
223 mlosch 1.14 #ifdef ALLOW_OBCS_EAST
224 mlosch 1.16 OBEptr (J,K,bi,bj,iTracer)=0. _d 0
225 mlosch 1.14 # ifdef ALLOW_OBCS_PRESCRIBE
226 mlosch 1.16 OBEptr0(J,K,bi,bj,iTracer)=0. _d 0
227     OBEptr1(J,K,bi,bj,iTracer)=0. _d 0
228 mlosch 1.14 # endif
229     #endif /* ALLOW_OBCS_EAST */
230 mlosch 1.16
231 mlosch 1.14 #ifdef ALLOW_OBCS_WEST
232 mlosch 1.16 OBWptr (J,K,bi,bj,iTracer)=0. _d 0
233 mlosch 1.14 # ifdef ALLOW_OBCS_PRESCRIBE
234 mlosch 1.16 OBWptr0(J,K,bi,bj,iTracer)=0. _d 0
235     OBWptr1(J,K,bi,bj,iTracer)=0. _d 0
236 mlosch 1.14 # endif
237     #endif /* ALLOW_OBCS_WEST */
238 mlosch 1.16 ENDDO
239 mlosch 1.14 ENDDO
240     ENDDO
241 mlosch 1.20 #ifndef ALLOW_AUTODIFF_TAMC
242 mlosch 1.16 ENDIF
243 mlosch 1.20 #endif
244 mlosch 1.14 #endif /* ALLOW_PTRACERS */
245    
246 jmc 1.5 #ifdef NONLIN_FRSURF
247     DO I=1-Olx,sNx+Olx
248     OBNeta(I,bi,bj)=0.
249     OBSeta(I,bi,bj)=0.
250     ENDDO
251     DO J=1-Oly,sNy+Oly
252     OBEeta(J,bi,bj)=0.
253     OBWeta(J,bi,bj)=0.
254     ENDDO
255     #endif /* NONLIN_FRSURF */
256 adcroft 1.2
257     #ifdef ALLOW_ORLANSKI
258     IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
259     & useOrlanskiEast.OR.useOrlanskiWest) THEN
260 adcroft 1.12 #ifdef ALLOW_DEBUG
261     IF (debugMode) CALL DEBUG_CALL('ORLANSKI_INIT',myThid)
262     #endif
263 adcroft 1.2 CALL ORLANSKI_INIT(bi, bj, myThid)
264     ENDIF
265     #endif /* ALLOW_ORLANSKI */
266 adcroft 1.3
267     ENDDO
268     ENDDO
269 jmc 1.7
270 adcroft 1.9 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
271     C jmc: here is the logical place to read OBCS-pickup files
272     C but a) without Orlanski: pass the test 1+1=2 without reading pickup.
273     C b) with Orlanski: 1+1=2 fail even with this bit of code
274     IF ( nIter0.NE.0 ) THEN
275     prec = precFloat64
276     IF (pickupSuff.EQ.' ') THEN
277     WRITE(suff,'(I10.10)') nIter0
278     ELSE
279     WRITE(suff,'(A10)') pickupSuff
280     ENDIF
281     c CALL OBCS_READ_CHECKPOINT(prec, nIter0, suff, myThid)
282     ENDIF
283     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
284    
285 mlosch 1.18 C-- Load/compute OBCS values in all cases, although these values are
286     C-- only used for initialisation and never for restart:
287 adcroft 1.12 #ifdef ALLOW_DEBUG
288     IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
289     #endif
290 adcroft 1.2 DO bj = myByLo(myThid), myByHi(myThid)
291     DO bi = myBxLo(myThid), myBxHi(myThid)
292 jmc 1.6 CALL OBCS_CALC( bi, bj, startTime, nIter0,
293 adcroft 1.2 & uVel, vVel, wVel, theta, salt, myThid )
294 heimbach 1.10 ENDDO
295     ENDDO
296    
297 mlosch 1.15 IF ( startTime .EQ. baseTime .AND. nIter0 .EQ. 0
298     & .AND. pickupSuff .EQ. ' ' ) THEN
299 jmc 1.17 C-- Apply OBCS values to initial conditions for consistency
300     C (but initial conditions only)
301 adcroft 1.12 #ifdef ALLOW_DEBUG
302 mlosch 1.15 IF (debugMode)
303     & CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid)
304 adcroft 1.12 #endif
305 mlosch 1.15 DO bj = myByLo(myThid), myByHi(myThid)
306     DO bi = myBxLo(myThid), myBxHi(myThid)
307     DO K=1,Nr
308     CALL OBCS_APPLY_UV( bi, bj, k, uVel, vVel, myThid )
309     CALL OBCS_APPLY_TS( bi, bj, k, theta, salt, myThid )
310     ENDDO
311     ENDDO
312     ENDDO
313 mlosch 1.18 IF (useOBCSprescribe) THEN
314     C After applying the boundary conditions exchange the 3D-fields.
315     C This is only necessary of the boudnary values have been read
316     C from a file.
317     #ifdef ALLOW_DEBUG
318     IF (debugMode)
319     & CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid)
320     #endif
321     CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
322     _EXCH_XYZ_R8( theta, myThid )
323     _EXCH_XYZ_R8( salt , myThid )
324     ENDIF
325     C endif start from rest
326     ENDIF
327 mlosch 1.14 #ifdef ALLOW_PTRACERS
328 mlosch 1.15 C repeat everything for passive tracers
329 mlosch 1.18 IF ( usePTRACERS ) THEN
330     C catch the case when we do start from a pickup for dynamics variables
331     C but initialise ptracers differently
332     IF ( nIter0 .EQ. PTRACERS_Iter0 ) THEN
333 mlosch 1.15 #ifdef ALLOW_DEBUG
334     IF (debugMode)
335     & CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid)
336     #endif
337     DO iTracer=1,PTRACERS_numInUse
338     DO bj = myByLo(myThid), myByHi(myThid)
339     DO bi = myBxLo(myThid), myBxHi(myThid)
340     DO K=1,Nr
341     CALL OBCS_APPLY_PTRACER(
342     I bi, bj, K, iTracer,
343 mlosch 1.18 U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer),
344 mlosch 1.15 I myThid )
345     ENDDO
346     ENDDO
347 mlosch 1.14 ENDDO
348 mlosch 1.15 ENDDO
349 mlosch 1.18 IF (useOBCSprescribe) THEN
350 mlosch 1.11 C After applying the boundary conditions exchange the 3D-fields.
351     C This is only necessary of the boudnary values have been read
352     C from a file.
353 adcroft 1.12 #ifdef ALLOW_DEBUG
354 mlosch 1.18 IF (debugMode) CALL DEBUG_CALL(
355     & 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid)
356 adcroft 1.12 #endif
357 jmc 1.19 CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid )
358 mlosch 1.18 ENDIF
359     C endif start from rest
360 mlosch 1.15 ENDIF
361 mlosch 1.18 C endif usePTRACERS
362     ENDIF
363 mlosch 1.15 #endif /* ALLOW_PTRACERS */
364 mlosch 1.11
365 adcroft 1.2 #endif /* ALLOW_OBCS */
366 heimbach 1.10
367 adcroft 1.12 #ifdef ALLOW_DEBUG
368     IF (debugMode) CALL DEBUG_LEAVE('OBCS_INIT_VARIABLES',myThid)
369     #endif
370 adcroft 1.2 RETURN
371     END

  ViewVC Help
Powered by ViewVC 1.1.22