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

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

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


Revision 1.31 - (show 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 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_init_variables.F,v 1.30 2009/10/03 15:12:09 mlosch Exp $
2 C $Name: $
3
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 #ifdef ALLOW_PTRACERS
22 #include "PTRACERS_SIZE.h"
23 #include "PTRACERS_PARAMS.h"
24 #include "PTRACERS_FIELDS.h"
25 #include "OBCS_PTRACERS.h"
26 #endif /* ALLOW_PTRACERS */
27
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 #ifdef ALLOW_PTRACERS
38 INTEGER iTracer
39 #endif /* ALLOW_PTRACERS */
40
41 #ifdef ALLOW_DEBUG
42 IF (debugMode) CALL DEBUG_ENTER('OBCS_INIT_VARIABLES',myThid)
43 #endif
44
45 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 #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 ENDDO
90
91 DO J=1-Oly,sNy+Oly
92 #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 ENDDO
132 ENDDO
133
134 #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 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 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 #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 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 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 #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 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 #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 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 #endif /* ALLOW_OBCS_WEST */
218 ENDDO
219 #endif /* ALLOW_SEAICE */
220
221 #ifdef ALLOW_PTRACERS
222 #ifndef ALLOW_AUTODIFF_TAMC
223 IF ( usePTRACERS ) THEN
224 #endif
225 DO iTracer=1,PTRACERS_numInUse
226 DO K=1,Nr
227 DO I=1-Olx,sNx+Olx
228 #ifdef ALLOW_OBCS_NORTH
229 OBNptr (I,K,bi,bj,iTracer)=0. _d 0
230 # ifdef ALLOW_OBCS_PRESCRIBE
231 OBNptr0(I,K,bi,bj,iTracer)=0. _d 0
232 OBNptr1(I,K,bi,bj,iTracer)=0. _d 0
233 # endif
234 #endif /* ALLOW_OBCS_NORTH */
235
236 #ifdef ALLOW_OBCS_SOUTH
237 OBSptr (I,K,bi,bj,iTracer)=0. _d 0
238 # ifdef ALLOW_OBCS_PRESCRIBE
239 OBSptr0(I,K,bi,bj,iTracer)=0. _d 0
240 OBSptr1(I,K,bi,bj,iTracer)=0. _d 0
241 # endif
242 #endif /* ALLOW_OBCS_SOUTH */
243 ENDDO
244
245 DO J=1-Oly,sNy+Oly
246 #ifdef ALLOW_OBCS_EAST
247 OBEptr (J,K,bi,bj,iTracer)=0. _d 0
248 # ifdef ALLOW_OBCS_PRESCRIBE
249 OBEptr0(J,K,bi,bj,iTracer)=0. _d 0
250 OBEptr1(J,K,bi,bj,iTracer)=0. _d 0
251 # endif
252 #endif /* ALLOW_OBCS_EAST */
253
254 #ifdef ALLOW_OBCS_WEST
255 OBWptr (J,K,bi,bj,iTracer)=0. _d 0
256 # ifdef ALLOW_OBCS_PRESCRIBE
257 OBWptr0(J,K,bi,bj,iTracer)=0. _d 0
258 OBWptr1(J,K,bi,bj,iTracer)=0. _d 0
259 # endif
260 #endif /* ALLOW_OBCS_WEST */
261 ENDDO
262 ENDDO
263 ENDDO
264 #ifndef ALLOW_AUTODIFF_TAMC
265 ENDIF
266 #endif
267 #endif /* ALLOW_PTRACERS */
268
269 #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
280 #ifdef ALLOW_ORLANSKI
281 IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
282 & useOrlanskiEast.OR.useOrlanskiWest) THEN
283 #ifdef ALLOW_DEBUG
284 IF (debugMode) CALL DEBUG_CALL('ORLANSKI_INIT',myThid)
285 #endif
286 CALL ORLANSKI_INIT(bi, bj, myThid)
287 ENDIF
288 #endif /* ALLOW_ORLANSKI */
289
290 ENDDO
291 ENDDO
292
293 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
294 C Only needed for Orlanski:
295 IF ( nIter0.NE.0 .OR. pickupSuff.NE.' ' ) THEN
296 CALL OBCS_READ_PICKUP( nIter0, myThid )
297 ENDIF
298 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
299
300 C-- Load/compute OBCS values (initial conditions only)
301 IF ( nIter0.EQ.0 .AND. pickupSuff.EQ.' ' ) THEN
302 #ifdef ALLOW_DEBUG
303 IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
304 #endif
305 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 ENDDO
311
312 C-- Apply OBCS values to initial conditions for consistency
313 C (but initial conditions only)
314 #ifdef ALLOW_DEBUG
315 IF (debugMode)
316 & CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid)
317 #endif
318 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 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 IF (debugMode)
332 & CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid)
333 #endif
334 CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
335 _EXCH_XYZ_RL( theta, myThid )
336 _EXCH_XYZ_RL( salt , myThid )
337 ENDIF
338 C endif start from rest
339 #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 ENDIF
347
348 #ifdef ALLOW_PTRACERS
349 C repeat everything for passive tracers
350 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 #ifdef ALLOW_DEBUG
355 IF (debugMode)
356 & 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 CALL OBCS_APPLY_PTRACER(
363 I bi, bj, K, iTracer,
364 U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer),
365 I myThid )
366 ENDDO
367 ENDDO
368 ENDDO
369 ENDDO
370 IF (useOBCSprescribe) THEN
371 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 #ifdef ALLOW_DEBUG
375 IF (debugMode) CALL DEBUG_CALL(
376 & 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid)
377 #endif
378 CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid )
379 ENDIF
380 C endif start from rest
381 ENDIF
382 C endif usePTRACERS
383 ENDIF
384 #endif /* ALLOW_PTRACERS */
385
386 #endif /* ALLOW_OBCS */
387
388 #ifdef ALLOW_DEBUG
389 IF (debugMode) CALL DEBUG_LEAVE('OBCS_INIT_VARIABLES',myThid)
390 #endif
391 RETURN
392 END

  ViewVC Help
Powered by ViewVC 1.1.22