/[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.31 - (hide annotations) (download)
Sun Oct 4 22:36:30 2009 UTC (14 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint61w, checkpoint61x, checkpoint61y
Changes since 1.30: +12 -10 lines
- fix restart for useOBCSprescribe & useEXF (remove my HACK_TO_FIX_SEAICE_OBCS_RESTART)

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

  ViewVC Help
Powered by ViewVC 1.1.22