/[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.36 - (show annotations) (download)
Mon Nov 8 17:35:08 2010 UTC (13 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62o, checkpoint62n
Changes since 1.35: +24 -8 lines
add calls to OBCS_COPY_TRACER (for Theta, Salt and pTracers)

1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_init_variables.F,v 1.35 2010/10/25 23:31:02 jmc Exp $
2 C $Name: $
3
4 #include "OBCS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: OBCS_INIT_VARIABLES
8 C !INTERFACE:
9 SUBROUTINE OBCS_INIT_VARIABLES( myThid )
10
11 C !DESCRIPTION:
12 C *==========================================================*
13 C | SUBROUTINE OBCS_INIT_VARIABLES
14 C | o Initialise OBCs variable data
15 C *==========================================================*
16 C *==========================================================*
17
18 C !USES:
19 IMPLICIT NONE
20 C === Global variables ===
21 #include "SIZE.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "DYNVARS.h"
25 #include "OBCS.h"
26 #ifdef ALLOW_PTRACERS
27 #include "PTRACERS_SIZE.h"
28 #include "PTRACERS_PARAMS.h"
29 #include "PTRACERS_FIELDS.h"
30 #include "OBCS_PTRACERS.h"
31 #endif /* ALLOW_PTRACERS */
32
33 C !INPUT/OUTPUT PARAMETERS:
34 C == Routine arguments ==
35 C myThid :: my Thread Id Number
36 INTEGER myThid
37 CEOP
38
39 #ifdef ALLOW_OBCS
40
41 C !LOCAL VARIABLES:
42 C == Local variables ==
43 INTEGER bi, bj
44 INTEGER I, J, K
45 #ifdef ALLOW_PTRACERS
46 INTEGER iTracer
47 #endif /* ALLOW_PTRACERS */
48
49 #ifdef ALLOW_DEBUG
50 IF (debugMode) CALL DEBUG_ENTER('OBCS_INIT_VARIABLES',myThid)
51 #endif
52
53 DO bj = myByLo(myThid), myByHi(myThid)
54 DO bi = myBxLo(myThid), myBxHi(myThid)
55
56 DO K=1,Nr
57 DO I=1-Olx,sNx+Olx
58 #ifdef ALLOW_OBCS_NORTH
59 OBNu(I,K,bi,bj)=0. _d 0
60 OBNv(I,K,bi,bj)=0. _d 0
61 OBNt(I,K,bi,bj)=0. _d 0
62 OBNs(I,K,bi,bj)=0. _d 0
63 # ifdef ALLOW_OBCS_PRESCRIBE
64 OBNu0(I,K,bi,bj)=0. _d 0
65 OBNv0(I,K,bi,bj)=0. _d 0
66 OBNt0(I,K,bi,bj)=0. _d 0
67 OBNs0(I,K,bi,bj)=0. _d 0
68 OBNu1(I,K,bi,bj)=0. _d 0
69 OBNv1(I,K,bi,bj)=0. _d 0
70 OBNt1(I,K,bi,bj)=0. _d 0
71 OBNs1(I,K,bi,bj)=0. _d 0
72 # endif
73 #endif /* ALLOW_OBCS_NORTH */
74
75 #ifdef ALLOW_OBCS_SOUTH
76 OBSu(I,K,bi,bj)=0. _d 0
77 OBSv(I,K,bi,bj)=0. _d 0
78 OBSt(I,K,bi,bj)=0. _d 0
79 OBSs(I,K,bi,bj)=0. _d 0
80 # ifdef ALLOW_OBCS_PRESCRIBE
81 OBSu0(I,K,bi,bj)=0. _d 0
82 OBSv0(I,K,bi,bj)=0. _d 0
83 OBSt0(I,K,bi,bj)=0. _d 0
84 OBSs0(I,K,bi,bj)=0. _d 0
85 OBSu1(I,K,bi,bj)=0. _d 0
86 OBSv1(I,K,bi,bj)=0. _d 0
87 OBSt1(I,K,bi,bj)=0. _d 0
88 OBSs1(I,K,bi,bj)=0. _d 0
89 # endif
90 #endif /* ALLOW_OBCS_SOUTH */
91 ENDDO
92
93 DO J=1-Oly,sNy+Oly
94 #ifdef ALLOW_OBCS_EAST
95 OBEu(J,K,bi,bj)=0. _d 0
96 OBEv(J,K,bi,bj)=0. _d 0
97 OBEt(J,K,bi,bj)=0. _d 0
98 OBEs(J,K,bi,bj)=0. _d 0
99 # ifdef ALLOW_OBCS_PRESCRIBE
100 OBEu0(J,K,bi,bj)=0. _d 0
101 OBEv0(J,K,bi,bj)=0. _d 0
102 OBEt0(J,K,bi,bj)=0. _d 0
103 OBEs0(J,K,bi,bj)=0. _d 0
104 OBEu1(J,K,bi,bj)=0. _d 0
105 OBEv1(J,K,bi,bj)=0. _d 0
106 OBEt1(J,K,bi,bj)=0. _d 0
107 OBEs1(J,K,bi,bj)=0. _d 0
108 # endif
109 #endif /* ALLOW_OBCS_EAST */
110
111 #ifdef ALLOW_OBCS_WEST
112 OBWu(J,K,bi,bj)=0. _d 0
113 OBWv(J,K,bi,bj)=0. _d 0
114 OBWt(J,K,bi,bj)=0. _d 0
115 OBWs(J,K,bi,bj)=0. _d 0
116 # ifdef ALLOW_OBCS_PRESCRIBE
117 OBWu0(J,K,bi,bj)=0. _d 0
118 OBWv0(J,K,bi,bj)=0. _d 0
119 OBWt0(J,K,bi,bj)=0. _d 0
120 OBWs0(J,K,bi,bj)=0. _d 0
121 OBWu1(J,K,bi,bj)=0. _d 0
122 OBWv1(J,K,bi,bj)=0. _d 0
123 OBWt1(J,K,bi,bj)=0. _d 0
124 OBWs1(J,K,bi,bj)=0. _d 0
125 # endif
126 #endif /* ALLOW_OBCS_WEST */
127 ENDDO
128 ENDDO
129
130 #ifdef ALLOW_NONHYDROSTATIC
131 DO K=1,Nr
132 DO I=1-Olx,sNx+Olx
133 OBNw (I,K,bi,bj) = 0. _d 0
134 OBSw (I,K,bi,bj) = 0. _d 0
135 # ifdef ALLOW_OBCS_PRESCRIBE
136 OBNw0(I,K,bi,bj) = 0. _d 0
137 OBSw0(I,K,bi,bj) = 0. _d 0
138 OBNw1(I,K,bi,bj) = 0. _d 0
139 OBSw1(I,K,bi,bj) = 0. _d 0
140 # endif
141 ENDDO
142 DO J=1-Oly,sNy+Oly
143 OBEw (J,K,bi,bj) = 0. _d 0
144 OBWw (J,K,bi,bj) = 0. _d 0
145 # ifdef ALLOW_OBCS_PRESCRIBE
146 OBEw0(J,K,bi,bj) = 0. _d 0
147 OBWw0(J,K,bi,bj) = 0. _d 0
148 OBEw1(J,K,bi,bj) = 0. _d 0
149 OBWw1(J,K,bi,bj) = 0. _d 0
150 # endif
151 ENDDO
152 ENDDO
153 #endif /* ALLOW_NONHYDROSTATIC */
154
155 #ifdef NONLIN_FRSURF
156 DO I=1-Olx,sNx+Olx
157 OBNeta (I,bi,bj) = 0. _d 0
158 OBSeta (I,bi,bj) = 0. _d 0
159 # ifdef ALLOW_OBCS_PRESCRIBE
160 OBNeta0(I,bi,bj) = 0. _d 0
161 OBSeta0(I,bi,bj) = 0. _d 0
162 OBNeta1(I,bi,bj) = 0. _d 0
163 OBSeta1(I,bi,bj) = 0. _d 0
164 # endif
165 ENDDO
166 DO J=1-Oly,sNy+Oly
167 OBEeta (J,bi,bj) = 0. _d 0
168 OBWeta (J,bi,bj) = 0. _d 0
169 # ifdef ALLOW_OBCS_PRESCRIBE
170 OBEeta0(J,bi,bj) = 0. _d 0
171 OBWeta0(J,bi,bj) = 0. _d 0
172 OBEeta1(J,bi,bj) = 0. _d 0
173 OBWeta1(J,bi,bj) = 0. _d 0
174 # endif
175 ENDDO
176 #endif /* NONLIN_FRSURF */
177
178 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
179
180 #ifdef ALLOW_SEAICE
181 DO I=1-Olx,sNx+Olx
182 #ifdef ALLOW_OBCS_NORTH
183 OBNa (I,bi,bj)=0. _d 0
184 OBNh (I,bi,bj)=0. _d 0
185 OBNa0(I,bi,bj)=0. _d 0
186 OBNh0(I,bi,bj)=0. _d 0
187 OBNa1(I,bi,bj)=0. _d 0
188 OBNh1(I,bi,bj)=0. _d 0
189 OBNsl (I,bi,bj)=0. _d 0
190 OBNsn (I,bi,bj)=0. _d 0
191 OBNsl0(I,bi,bj)=0. _d 0
192 OBNsn0(I,bi,bj)=0. _d 0
193 OBNsl1(I,bi,bj)=0. _d 0
194 OBNsn1(I,bi,bj)=0. _d 0
195 OBNuice (I,bi,bj)=0. _d 0
196 OBNvice (I,bi,bj)=0. _d 0
197 OBNuice0(I,bi,bj)=0. _d 0
198 OBNvice0(I,bi,bj)=0. _d 0
199 OBNuice1(I,bi,bj)=0. _d 0
200 OBNvice1(I,bi,bj)=0. _d 0
201 #endif /* ALLOW_OBCS_NORTH */
202 #ifdef ALLOW_OBCS_SOUTH
203 OBSa (I,bi,bj)=0. _d 0
204 OBSh (I,bi,bj)=0. _d 0
205 OBSa0(I,bi,bj)=0. _d 0
206 OBSh0(I,bi,bj)=0. _d 0
207 OBSa1(I,bi,bj)=0. _d 0
208 OBSh1(I,bi,bj)=0. _d 0
209 OBSsl (I,bi,bj)=0. _d 0
210 OBSsn (I,bi,bj)=0. _d 0
211 OBSsl0(I,bi,bj)=0. _d 0
212 OBSsn0(I,bi,bj)=0. _d 0
213 OBSsl1(I,bi,bj)=0. _d 0
214 OBSsn1(I,bi,bj)=0. _d 0
215 OBSuice (I,bi,bj)=0. _d 0
216 OBSvice (I,bi,bj)=0. _d 0
217 OBSuice0(I,bi,bj)=0. _d 0
218 OBSvice0(I,bi,bj)=0. _d 0
219 OBSuice1(I,bi,bj)=0. _d 0
220 OBSvice1(I,bi,bj)=0. _d 0
221 #endif /* ALLOW_OBCS_SOUTH */
222 ENDDO
223 DO J=1-Oly,sNy+Oly
224 #ifdef ALLOW_OBCS_EAST
225 OBEa (J,bi,bj)=0. _d 0
226 OBEh (J,bi,bj)=0. _d 0
227 OBEa0(J,bi,bj)=0. _d 0
228 OBEh0(J,bi,bj)=0. _d 0
229 OBEa1(J,bi,bj)=0. _d 0
230 OBEh1(J,bi,bj)=0. _d 0
231 OBEsl (J,bi,bj)=0. _d 0
232 OBEsn (J,bi,bj)=0. _d 0
233 OBEsl0(J,bi,bj)=0. _d 0
234 OBEsn0(J,bi,bj)=0. _d 0
235 OBEsl1(J,bi,bj)=0. _d 0
236 OBEsn1(J,bi,bj)=0. _d 0
237 OBEuice (J,bi,bj)=0. _d 0
238 OBEvice (J,bi,bj)=0. _d 0
239 OBEuice0(J,bi,bj)=0. _d 0
240 OBEvice0(J,bi,bj)=0. _d 0
241 OBEuice1(J,bi,bj)=0. _d 0
242 OBEvice1(J,bi,bj)=0. _d 0
243 #endif /* ALLOW_OBCS_EAST */
244 #ifdef ALLOW_OBCS_WEST
245 OBWa (J,bi,bj)=0. _d 0
246 OBWh (J,bi,bj)=0. _d 0
247 OBWa0(J,bi,bj)=0. _d 0
248 OBWh0(J,bi,bj)=0. _d 0
249 OBWa1(J,bi,bj)=0. _d 0
250 OBWh1(J,bi,bj)=0. _d 0
251 OBWsl (J,bi,bj)=0. _d 0
252 OBWsn (J,bi,bj)=0. _d 0
253 OBWsl0(J,bi,bj)=0. _d 0
254 OBWsn0(J,bi,bj)=0. _d 0
255 OBWsl1(J,bi,bj)=0. _d 0
256 OBWsn1(J,bi,bj)=0. _d 0
257 OBWuice (J,bi,bj)=0. _d 0
258 OBWvice (J,bi,bj)=0. _d 0
259 OBWuice0(J,bi,bj)=0. _d 0
260 OBWvice0(J,bi,bj)=0. _d 0
261 OBWuice1(J,bi,bj)=0. _d 0
262 OBWvice1(J,bi,bj)=0. _d 0
263 #endif /* ALLOW_OBCS_WEST */
264 ENDDO
265 #endif /* ALLOW_SEAICE */
266
267 #ifdef ALLOW_PTRACERS
268 #ifndef ALLOW_AUTODIFF_TAMC
269 IF ( usePTRACERS ) THEN
270 #endif
271 DO iTracer=1,PTRACERS_numInUse
272 DO K=1,Nr
273 DO I=1-Olx,sNx+Olx
274 #ifdef ALLOW_OBCS_NORTH
275 OBNptr (I,K,bi,bj,iTracer)=0. _d 0
276 # ifdef ALLOW_OBCS_PRESCRIBE
277 OBNptr0(I,K,bi,bj,iTracer)=0. _d 0
278 OBNptr1(I,K,bi,bj,iTracer)=0. _d 0
279 # endif
280 #endif /* ALLOW_OBCS_NORTH */
281
282 #ifdef ALLOW_OBCS_SOUTH
283 OBSptr (I,K,bi,bj,iTracer)=0. _d 0
284 # ifdef ALLOW_OBCS_PRESCRIBE
285 OBSptr0(I,K,bi,bj,iTracer)=0. _d 0
286 OBSptr1(I,K,bi,bj,iTracer)=0. _d 0
287 # endif
288 #endif /* ALLOW_OBCS_SOUTH */
289 ENDDO
290
291 DO J=1-Oly,sNy+Oly
292 #ifdef ALLOW_OBCS_EAST
293 OBEptr (J,K,bi,bj,iTracer)=0. _d 0
294 # ifdef ALLOW_OBCS_PRESCRIBE
295 OBEptr0(J,K,bi,bj,iTracer)=0. _d 0
296 OBEptr1(J,K,bi,bj,iTracer)=0. _d 0
297 # endif
298 #endif /* ALLOW_OBCS_EAST */
299
300 #ifdef ALLOW_OBCS_WEST
301 OBWptr (J,K,bi,bj,iTracer)=0. _d 0
302 # ifdef ALLOW_OBCS_PRESCRIBE
303 OBWptr0(J,K,bi,bj,iTracer)=0. _d 0
304 OBWptr1(J,K,bi,bj,iTracer)=0. _d 0
305 # endif
306 #endif /* ALLOW_OBCS_WEST */
307 ENDDO
308 ENDDO
309 ENDDO
310 #ifndef ALLOW_AUTODIFF_TAMC
311 ENDIF
312 #endif
313 #endif /* ALLOW_PTRACERS */
314
315 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
316
317 #ifdef ALLOW_ORLANSKI
318 IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
319 & useOrlanskiEast.OR.useOrlanskiWest) THEN
320 #ifdef ALLOW_DEBUG
321 IF (debugMode) CALL DEBUG_CALL('ORLANSKI_INIT',myThid)
322 #endif
323 CALL ORLANSKI_INIT(bi, bj, myThid)
324 ENDIF
325 #endif /* ALLOW_ORLANSKI */
326
327 ENDDO
328 ENDDO
329
330 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
331 C Only needed for Orlanski:
332 IF ( nIter0.NE.0 .OR. pickupSuff.NE.' ' ) THEN
333 CALL OBCS_READ_PICKUP( nIter0, myThid )
334 ENDIF
335 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
336
337 C-- Load/compute OBCS values (initial conditions only)
338 IF ( nIter0.EQ.0 .AND. pickupSuff.EQ.' ' ) THEN
339 #ifdef ALLOW_DEBUG
340 IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
341 #endif
342 CALL OBCS_CALC( startTime, nIter0,
343 & uVel, vVel, wVel, theta, salt, myThid )
344
345 C-- Apply OBCS values to initial conditions for consistency
346 C (but initial conditions only)
347 #ifdef ALLOW_DEBUG
348 IF (debugMode)
349 & CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid)
350 #endif
351 DO bj = myByLo(myThid), myByHi(myThid)
352 DO bi = myBxLo(myThid), myBxHi(myThid)
353 CALL OBCS_APPLY_UV( bi, bj, 0, uVel, vVel, myThid )
354 CALL OBCS_APPLY_TS( bi, bj, 0, theta, salt, myThid )
355 ENDDO
356 ENDDO
357 IF (useOBCSprescribe) THEN
358 C After applying the boundary conditions exchange the 3D-fields.
359 C This is only necessary of the boundary values have been read
360 C from a file.
361 #ifdef ALLOW_DEBUG
362 IF (debugMode)
363 & CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid)
364 #endif
365 CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
366 _EXCH_XYZ_RL( theta, myThid )
367 _EXCH_XYZ_RL( salt , myThid )
368 ENDIF
369 C endif start from rest
370 #ifdef ALLOW_OBCS_PRESCRIBE
371 ELSEIF ( useOBCSprescribe ) THEN
372 C No real need to set OB values here.
373 C However, with present implementation, only do initialisation when called
374 C with myTime=startTime (S/R EXF_GETFFIELDREC, setting "first")
375 C or with myIter=nIter0 (S/R OBCS_EXTERNAL_FIELDS_LOAD). And this
376 C cannot be changed because of OBCS_CALC(startTime,nIter0) call above.
377 CALL OBCS_PRESCRIBE_READ( startTime, nIter0, myThid )
378 #endif
379 ENDIF
380 DO bj = myByLo(myThid), myByHi(myThid)
381 DO bi = myBxLo(myThid), myBxHi(myThid)
382 CALL OBCS_COPY_TRACER( theta(1-Olx,1-Oly,1,bi,bj),
383 I Nr, bi, bj, myThid )
384 CALL OBCS_COPY_TRACER( salt (1-Olx,1-Oly,1,bi,bj),
385 I Nr, bi, bj, myThid )
386 ENDDO
387 ENDDO
388
389 #ifdef ALLOW_PTRACERS
390 C repeat everything for passive tracers
391 IF ( usePTRACERS ) THEN
392 C catch the case when we do start from a pickup for dynamics variables
393 C but initialise ptracers differently
394 IF ( nIter0.EQ.PTRACERS_Iter0 ) THEN
395 #ifdef ALLOW_DEBUG
396 IF (debugMode)
397 & CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid)
398 #endif
399 DO iTracer=1,PTRACERS_numInUse
400 DO bj = myByLo(myThid), myByHi(myThid)
401 DO bi = myBxLo(myThid), myBxHi(myThid)
402 DO K=1,Nr
403 CALL OBCS_APPLY_PTRACER(
404 I bi, bj, K, iTracer,
405 U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer),
406 I myThid )
407 ENDDO
408 ENDDO
409 ENDDO
410 ENDDO
411 C endif start from rest
412 ENDIF
413 IF ( nIter0.EQ.PTRACERS_Iter0 .AND. useOBCSprescribe ) THEN
414 C After applying the boundary conditions exchange the 3D-fields.
415 C This is only necessary of the boundary values have been read
416 C from a file.
417 #ifdef ALLOW_DEBUG
418 IF (debugMode) CALL DEBUG_CALL(
419 & 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid)
420 #endif
421 CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid )
422 ELSE
423 C- This call is part of ptracers exchange S/R but is needed in all cases
424 DO iTracer=1,PTRACERS_numInUse
425 DO bj = myByLo(myThid), myByHi(myThid)
426 DO bi = myBxLo(myThid), myBxHi(myThid)
427 CALL OBCS_COPY_TRACER( pTracer(1-Olx,1-Oly,1,bi,bj,iTracer),
428 I Nr, bi, bj, myThid )
429 ENDDO
430 ENDDO
431 ENDDO
432 ENDIF
433 C endif usePTRACERS
434 ENDIF
435 #endif /* ALLOW_PTRACERS */
436
437 #endif /* ALLOW_OBCS */
438
439 #ifdef ALLOW_DEBUG
440 IF (debugMode) CALL DEBUG_LEAVE('OBCS_INIT_VARIABLES',myThid)
441 #endif
442 RETURN
443 END

  ViewVC Help
Powered by ViewVC 1.1.22