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

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

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

revision 1.6 by jmc, Fri Feb 8 22:16:09 2002 UTC revision 1.22 by dimitri, Tue Oct 23 08:25:28 2007 UTC
# Line 18  C     === Global variables === Line 18  C     === Global variables ===
18  #include "PARAMS.h"  #include "PARAMS.h"
19  #include "DYNVARS.h"  #include "DYNVARS.h"
20  #include "OBCS.h"  #include "OBCS.h"
21    #ifdef ALLOW_PTRACERS
22    #include "PTRACERS_SIZE.h"
23    #include "PTRACERS.h"
24    #include "OBCS_PTRACERS.h"
25    #endif /* ALLOW_PTRACERS */
26    
27  C     == Routine arguments ==  C     == Routine arguments ==
28  C     myThid -  Number of this instance of INI_DEPTHS  C     myThid -  Number of this instance of INI_DEPTHS
# Line 28  C     myThid -  Number of this instance Line 33  C     myThid -  Number of this instance
33  C     == Local variables ==  C     == Local variables ==
34        INTEGER bi, bj        INTEGER bi, bj
35        INTEGER I, J, K        INTEGER I, J, K
36          CHARACTER*(10) suff
37          INTEGER prec
38    #ifdef ALLOW_PTRACERS
39          INTEGER iTracer
40    #endif /* ALLOW_PTRACERS */
41    
42    #ifdef ALLOW_DEBUG
43          IF (debugMode) CALL DEBUG_ENTER('OBCS_INIT_VARIABLES',myThid)
44    #endif
45    
46        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
47         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
48    
49          DO K=1,Nr          DO K=1,Nr
50           DO I=1-Olx,sNx+Olx           DO I=1-Olx,sNx+Olx
51            OBNu(I,K,bi,bj)=0.  #ifdef ALLOW_OBCS_NORTH
52            OBNv(I,K,bi,bj)=0.            OBNu(I,K,bi,bj)=0. _d 0
53            OBNt(I,K,bi,bj)=0.            OBNv(I,K,bi,bj)=0. _d 0
54            OBNs(I,K,bi,bj)=0.            OBNt(I,K,bi,bj)=0. _d 0
55            OBSu(I,K,bi,bj)=0.            OBNs(I,K,bi,bj)=0. _d 0
56            OBSv(I,K,bi,bj)=0.  # ifdef ALLOW_NONHYDROSTATIC
57            OBSt(I,K,bi,bj)=0.            OBNw(I,K,bi,bj)=0. _d 0
58            OBSs(I,K,bi,bj)=0.  # endif
59  #ifdef ALLOW_NONHYDROSTATIC  # ifdef ALLOW_OBCS_PRESCRIBE
60            OBNw(I,K,bi,bj)=0.            OBNu0(I,K,bi,bj)=0. _d 0
61            OBSw(I,K,bi,bj)=0.            OBNv0(I,K,bi,bj)=0. _d 0
62  #endif            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           ENDDO           ENDDO
91    
92           DO J=1-Oly,sNy+Oly           DO J=1-Oly,sNy+Oly
93            OBEu(J,K,bi,bj)=0.  #ifdef ALLOW_OBCS_EAST
94            OBEv(J,K,bi,bj)=0.            OBEu(J,K,bi,bj)=0. _d 0
95            OBEt(J,K,bi,bj)=0.            OBEv(J,K,bi,bj)=0. _d 0
96            OBEs(J,K,bi,bj)=0.            OBEt(J,K,bi,bj)=0. _d 0
97            OBWu(J,K,bi,bj)=0.            OBEs(J,K,bi,bj)=0. _d 0
98            OBWv(J,K,bi,bj)=0.  # ifdef ALLOW_NONHYDROSTATIC
99            OBWt(J,K,bi,bj)=0.            OBEw(J,K,bi,bj)=0. _d 0
100            OBWs(J,K,bi,bj)=0.  # endif
101  #ifdef ALLOW_NONHYDROSTATIC  # ifdef ALLOW_OBCS_PRESCRIBE
102            OBEw(J,K,bi,bj)=0.            OBEu0(J,K,bi,bj)=0. _d 0
103            OBWw(J,K,bi,bj)=0.            OBEv0(J,K,bi,bj)=0. _d 0
104  #endif            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           ENDDO           ENDDO
133          ENDDO          ENDDO
134    
135    #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             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    #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             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    #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             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    #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             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    #endif /* ALLOW_OBCS_WEST */
195            ENDDO
196    #endif /* ALLOW_SEAICE */
197    
198    #ifdef ALLOW_PTRACERS
199    #ifndef ALLOW_AUTODIFF_TAMC
200            IF ( usePTRACERS ) THEN
201    #endif
202             DO iTracer=1,PTRACERS_numInUse
203              DO K=1,Nr
204               DO I=1-Olx,sNx+Olx
205    #ifdef ALLOW_OBCS_NORTH
206                OBNptr (I,K,bi,bj,iTracer)=0. _d 0
207    # ifdef ALLOW_OBCS_PRESCRIBE
208                OBNptr0(I,K,bi,bj,iTracer)=0. _d 0
209                OBNptr1(I,K,bi,bj,iTracer)=0. _d 0
210    # endif
211    #endif /* ALLOW_OBCS_NORTH */
212                
213    #ifdef ALLOW_OBCS_SOUTH
214                OBSptr (I,K,bi,bj,iTracer)=0. _d 0
215    # ifdef ALLOW_OBCS_PRESCRIBE
216                OBSptr0(I,K,bi,bj,iTracer)=0. _d 0
217                OBSptr1(I,K,bi,bj,iTracer)=0. _d 0
218    # endif
219    #endif /* ALLOW_OBCS_SOUTH */
220               ENDDO
221              
222               DO J=1-Oly,sNy+Oly
223    #ifdef ALLOW_OBCS_EAST
224                OBEptr (J,K,bi,bj,iTracer)=0. _d 0
225    # ifdef ALLOW_OBCS_PRESCRIBE
226                OBEptr0(J,K,bi,bj,iTracer)=0. _d 0
227                OBEptr1(J,K,bi,bj,iTracer)=0. _d 0
228    # endif
229    #endif /* ALLOW_OBCS_EAST */
230                
231    #ifdef ALLOW_OBCS_WEST
232                OBWptr (J,K,bi,bj,iTracer)=0. _d 0
233    # ifdef ALLOW_OBCS_PRESCRIBE
234                OBWptr0(J,K,bi,bj,iTracer)=0. _d 0
235                OBWptr1(J,K,bi,bj,iTracer)=0. _d 0
236    # endif
237    #endif /* ALLOW_OBCS_WEST */
238               ENDDO
239              ENDDO
240             ENDDO
241    #ifndef ALLOW_AUTODIFF_TAMC
242            ENDIF
243    #endif
244    #endif /* ALLOW_PTRACERS */
245    
246  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
247          DO I=1-Olx,sNx+Olx          DO I=1-Olx,sNx+Olx
248            OBNeta(I,bi,bj)=0.            OBNeta(I,bi,bj)=0.
# Line 77  C     == Local variables == Line 257  C     == Local variables ==
257  #ifdef ALLOW_ORLANSKI  #ifdef ALLOW_ORLANSKI
258          IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.          IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
259       &      useOrlanskiEast.OR.useOrlanskiWest) THEN       &      useOrlanskiEast.OR.useOrlanskiWest) THEN
260    #ifdef ALLOW_DEBUG
261          IF (debugMode) CALL DEBUG_CALL('ORLANSKI_INIT',myThid)
262    #endif
263            CALL ORLANSKI_INIT(bi, bj, myThid)            CALL ORLANSKI_INIT(bi, bj, myThid)
264          ENDIF          ENDIF
265  #endif /* ALLOW_ORLANSKI */  #endif /* ALLOW_ORLANSKI */
# Line 84  C     == Local variables == Line 267  C     == Local variables ==
267         ENDDO         ENDDO
268        ENDDO            ENDDO    
269    
270  C--   Apply OBCS values to initial conditions for consistancy  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    C--   Load/compute OBCS values in all cases, although these values are
286    C--   only used for initialisation and never for restart:
287    #ifdef ALLOW_DEBUG
288          IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
289    #endif
290        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
291         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
292          CALL OBCS_CALC( bi, bj, startTime, nIter0,          CALL OBCS_CALC( bi, bj, startTime, nIter0,
293       &        uVel, vVel, wVel, theta, salt, myThid )       &        uVel, vVel, wVel, theta, salt, myThid )
         DO K=1,Nr  
          CALL OBCS_APPLY_UV( bi, bj, k, uVel, vVel, myThid )  
          CALL OBCS_APPLY_TS( bi, bj, k, theta, salt, myThid )  
         ENDDO  
294         ENDDO         ENDDO
295        ENDDO        ENDDO
296    
297          IF ( startTime .EQ. baseTime .AND.  nIter0 .EQ. 0
298         &     .AND. pickupSuff .EQ. ' ' ) THEN
299    C--   Apply OBCS values to initial conditions for consistency
300    C      (but initial conditions only)
301    #ifdef ALLOW_DEBUG
302           IF (debugMode)
303         &      CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid)
304    #endif
305           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           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    #ifdef ALLOW_PTRACERS
328    C     repeat everything for passive tracers
329          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    #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         U           ptracer(1-Olx,1-Oly,K,bi,bj,iTracer),
344         I           myThid )
345               ENDDO
346              ENDDO
347             ENDDO
348            ENDDO
349            IF (useOBCSprescribe) THEN
350    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    #ifdef ALLOW_DEBUG
354             IF (debugMode) CALL DEBUG_CALL(
355         &        'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid)
356    #endif
357             CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid )
358            ENDIF
359    C     endif start from rest
360           ENDIF
361    C     endif usePTRACERS
362          ENDIF
363    #endif /* ALLOW_PTRACERS */
364    
365  #endif /* ALLOW_OBCS */  #endif /* ALLOW_OBCS */
366    
367    #ifdef ALLOW_DEBUG
368          IF (debugMode) CALL DEBUG_LEAVE('OBCS_INIT_VARIABLES',myThid)
369    #endif
370        RETURN        RETURN
371        END        END

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.22

  ViewVC Help
Powered by ViewVC 1.1.22