/[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.23 - (show annotations) (download)
Fri Oct 26 02:00:47 2007 UTC (16 years, 7 months ago) by dimitri
Branch: MAIN
Changes since 1.22: +25 -1 lines
Added open boundary conditions capability for seaice UICE, and VICE
UICE and VICE are reset at the edges after calling the solver and
before advection/diffusion.  Needs testing.

1 C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_init_variables.F,v 1.22 2007/10/23 08:25:28 dimitri 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.h"
24 #include "OBCS_PTRACERS.h"
25 #endif /* ALLOW_PTRACERS */
26
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 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)
47 DO bi = myBxLo(myThid), myBxHi(myThid)
48
49 DO K=1,Nr
50 DO I=1-Olx,sNx+Olx
51 #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 ENDDO
91
92 DO J=1-Oly,sNy+Oly
93 #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 ENDDO
133 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 OBNuice (I,bi,bj)=0. _d 0
151 OBNvice (I,bi,bj)=0. _d 0
152 OBNuice0(I,bi,bj)=0. _d 0
153 OBNvice0(I,bi,bj)=0. _d 0
154 OBNuice1(I,bi,bj)=0. _d 0
155 OBNvice1(I,bi,bj)=0. _d 0
156 #endif /* ALLOW_OBCS_NORTH */
157 #ifdef ALLOW_OBCS_SOUTH
158 OBSa (I,bi,bj)=0. _d 0
159 OBSh (I,bi,bj)=0. _d 0
160 OBSa0(I,bi,bj)=0. _d 0
161 OBSh0(I,bi,bj)=0. _d 0
162 OBSa1(I,bi,bj)=0. _d 0
163 OBSh1(I,bi,bj)=0. _d 0
164 OBSsl (I,bi,bj)=0. _d 0
165 OBSsn (I,bi,bj)=0. _d 0
166 OBSsl0(I,bi,bj)=0. _d 0
167 OBSsn0(I,bi,bj)=0. _d 0
168 OBSsl1(I,bi,bj)=0. _d 0
169 OBSsn1(I,bi,bj)=0. _d 0
170 OBSuice (I,bi,bj)=0. _d 0
171 OBSvice (I,bi,bj)=0. _d 0
172 OBSuice0(I,bi,bj)=0. _d 0
173 OBSvice0(I,bi,bj)=0. _d 0
174 OBSuice1(I,bi,bj)=0. _d 0
175 OBSvice1(I,bi,bj)=0. _d 0
176 #endif /* ALLOW_OBCS_SOUTH */
177 ENDDO
178 DO J=1-Oly,sNy+Oly
179 #ifdef ALLOW_OBCS_EAST
180 OBEa (J,bi,bj)=0. _d 0
181 OBEh (J,bi,bj)=0. _d 0
182 OBEa0(J,bi,bj)=0. _d 0
183 OBEh0(J,bi,bj)=0. _d 0
184 OBEa1(J,bi,bj)=0. _d 0
185 OBEh1(J,bi,bj)=0. _d 0
186 OBEsl (I,bi,bj)=0. _d 0
187 OBEsn (I,bi,bj)=0. _d 0
188 OBEsl0(I,bi,bj)=0. _d 0
189 OBEsn0(I,bi,bj)=0. _d 0
190 OBEsl1(I,bi,bj)=0. _d 0
191 OBEsn1(I,bi,bj)=0. _d 0
192 OBEuice (I,bi,bj)=0. _d 0
193 OBEvice (I,bi,bj)=0. _d 0
194 OBEuice0(I,bi,bj)=0. _d 0
195 OBEvice0(I,bi,bj)=0. _d 0
196 OBEuice1(I,bi,bj)=0. _d 0
197 OBEvice1(I,bi,bj)=0. _d 0
198 #endif /* ALLOW_OBCS_EAST */
199 #ifdef ALLOW_OBCS_WEST
200 OBWa (J,bi,bj)=0. _d 0
201 OBWh (J,bi,bj)=0. _d 0
202 OBWa0(J,bi,bj)=0. _d 0
203 OBWh0(J,bi,bj)=0. _d 0
204 OBWa1(J,bi,bj)=0. _d 0
205 OBWh1(J,bi,bj)=0. _d 0
206 OBWsl (I,bi,bj)=0. _d 0
207 OBWsn (I,bi,bj)=0. _d 0
208 OBWsl0(I,bi,bj)=0. _d 0
209 OBWsn0(I,bi,bj)=0. _d 0
210 OBWsl1(I,bi,bj)=0. _d 0
211 OBWsn1(I,bi,bj)=0. _d 0
212 OBWuice (I,bi,bj)=0. _d 0
213 OBWvice (I,bi,bj)=0. _d 0
214 OBWuice0(I,bi,bj)=0. _d 0
215 OBWvice0(I,bi,bj)=0. _d 0
216 OBWuice1(I,bi,bj)=0. _d 0
217 OBWvice1(I,bi,bj)=0. _d 0
218 #endif /* ALLOW_OBCS_WEST */
219 ENDDO
220 #endif /* ALLOW_SEAICE */
221
222 #ifdef ALLOW_PTRACERS
223 #ifndef ALLOW_AUTODIFF_TAMC
224 IF ( usePTRACERS ) THEN
225 #endif
226 DO iTracer=1,PTRACERS_numInUse
227 DO K=1,Nr
228 DO I=1-Olx,sNx+Olx
229 #ifdef ALLOW_OBCS_NORTH
230 OBNptr (I,K,bi,bj,iTracer)=0. _d 0
231 # ifdef ALLOW_OBCS_PRESCRIBE
232 OBNptr0(I,K,bi,bj,iTracer)=0. _d 0
233 OBNptr1(I,K,bi,bj,iTracer)=0. _d 0
234 # endif
235 #endif /* ALLOW_OBCS_NORTH */
236
237 #ifdef ALLOW_OBCS_SOUTH
238 OBSptr (I,K,bi,bj,iTracer)=0. _d 0
239 # ifdef ALLOW_OBCS_PRESCRIBE
240 OBSptr0(I,K,bi,bj,iTracer)=0. _d 0
241 OBSptr1(I,K,bi,bj,iTracer)=0. _d 0
242 # endif
243 #endif /* ALLOW_OBCS_SOUTH */
244 ENDDO
245
246 DO J=1-Oly,sNy+Oly
247 #ifdef ALLOW_OBCS_EAST
248 OBEptr (J,K,bi,bj,iTracer)=0. _d 0
249 # ifdef ALLOW_OBCS_PRESCRIBE
250 OBEptr0(J,K,bi,bj,iTracer)=0. _d 0
251 OBEptr1(J,K,bi,bj,iTracer)=0. _d 0
252 # endif
253 #endif /* ALLOW_OBCS_EAST */
254
255 #ifdef ALLOW_OBCS_WEST
256 OBWptr (J,K,bi,bj,iTracer)=0. _d 0
257 # ifdef ALLOW_OBCS_PRESCRIBE
258 OBWptr0(J,K,bi,bj,iTracer)=0. _d 0
259 OBWptr1(J,K,bi,bj,iTracer)=0. _d 0
260 # endif
261 #endif /* ALLOW_OBCS_WEST */
262 ENDDO
263 ENDDO
264 ENDDO
265 #ifndef ALLOW_AUTODIFF_TAMC
266 ENDIF
267 #endif
268 #endif /* ALLOW_PTRACERS */
269
270 #ifdef NONLIN_FRSURF
271 DO I=1-Olx,sNx+Olx
272 OBNeta(I,bi,bj)=0.
273 OBSeta(I,bi,bj)=0.
274 ENDDO
275 DO J=1-Oly,sNy+Oly
276 OBEeta(J,bi,bj)=0.
277 OBWeta(J,bi,bj)=0.
278 ENDDO
279 #endif /* NONLIN_FRSURF */
280
281 #ifdef ALLOW_ORLANSKI
282 IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR.
283 & useOrlanskiEast.OR.useOrlanskiWest) THEN
284 #ifdef ALLOW_DEBUG
285 IF (debugMode) CALL DEBUG_CALL('ORLANSKI_INIT',myThid)
286 #endif
287 CALL ORLANSKI_INIT(bi, bj, myThid)
288 ENDIF
289 #endif /* ALLOW_ORLANSKI */
290
291 ENDDO
292 ENDDO
293
294 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
295 C jmc: here is the logical place to read OBCS-pickup files
296 C but a) without Orlanski: pass the test 1+1=2 without reading pickup.
297 C b) with Orlanski: 1+1=2 fail even with this bit of code
298 IF ( nIter0.NE.0 ) THEN
299 prec = precFloat64
300 IF (pickupSuff.EQ.' ') THEN
301 WRITE(suff,'(I10.10)') nIter0
302 ELSE
303 WRITE(suff,'(A10)') pickupSuff
304 ENDIF
305 c CALL OBCS_READ_CHECKPOINT(prec, nIter0, suff, myThid)
306 ENDIF
307 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
308
309 C-- Load/compute OBCS values in all cases, although these values are
310 C-- only used for initialisation and never for restart:
311 #ifdef ALLOW_DEBUG
312 IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
313 #endif
314 DO bj = myByLo(myThid), myByHi(myThid)
315 DO bi = myBxLo(myThid), myBxHi(myThid)
316 CALL OBCS_CALC( bi, bj, startTime, nIter0,
317 & uVel, vVel, wVel, theta, salt, myThid )
318 ENDDO
319 ENDDO
320
321 IF ( startTime .EQ. baseTime .AND. nIter0 .EQ. 0
322 & .AND. pickupSuff .EQ. ' ' ) THEN
323 C-- Apply OBCS values to initial conditions for consistency
324 C (but initial conditions only)
325 #ifdef ALLOW_DEBUG
326 IF (debugMode)
327 & CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid)
328 #endif
329 DO bj = myByLo(myThid), myByHi(myThid)
330 DO bi = myBxLo(myThid), myBxHi(myThid)
331 DO K=1,Nr
332 CALL OBCS_APPLY_UV( bi, bj, k, uVel, vVel, myThid )
333 CALL OBCS_APPLY_TS( bi, bj, k, theta, salt, myThid )
334 ENDDO
335 ENDDO
336 ENDDO
337 IF (useOBCSprescribe) THEN
338 C After applying the boundary conditions exchange the 3D-fields.
339 C This is only necessary of the boudnary values have been read
340 C from a file.
341 #ifdef ALLOW_DEBUG
342 IF (debugMode)
343 & CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid)
344 #endif
345 CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
346 _EXCH_XYZ_R8( theta, myThid )
347 _EXCH_XYZ_R8( salt , myThid )
348 ENDIF
349 C endif start from rest
350 ENDIF
351 #ifdef ALLOW_PTRACERS
352 C repeat everything for passive tracers
353 IF ( usePTRACERS ) THEN
354 C catch the case when we do start from a pickup for dynamics variables
355 C but initialise ptracers differently
356 IF ( nIter0 .EQ. PTRACERS_Iter0 ) THEN
357 #ifdef ALLOW_DEBUG
358 IF (debugMode)
359 & CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid)
360 #endif
361 DO iTracer=1,PTRACERS_numInUse
362 DO bj = myByLo(myThid), myByHi(myThid)
363 DO bi = myBxLo(myThid), myBxHi(myThid)
364 DO K=1,Nr
365 CALL OBCS_APPLY_PTRACER(
366 I bi, bj, K, iTracer,
367 U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer),
368 I myThid )
369 ENDDO
370 ENDDO
371 ENDDO
372 ENDDO
373 IF (useOBCSprescribe) THEN
374 C After applying the boundary conditions exchange the 3D-fields.
375 C This is only necessary of the boudnary values have been read
376 C from a file.
377 #ifdef ALLOW_DEBUG
378 IF (debugMode) CALL DEBUG_CALL(
379 & 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid)
380 #endif
381 CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid )
382 ENDIF
383 C endif start from rest
384 ENDIF
385 C endif usePTRACERS
386 ENDIF
387 #endif /* ALLOW_PTRACERS */
388
389 #endif /* ALLOW_OBCS */
390
391 #ifdef ALLOW_DEBUG
392 IF (debugMode) CALL DEBUG_LEAVE('OBCS_INIT_VARIABLES',myThid)
393 #endif
394 RETURN
395 END

  ViewVC Help
Powered by ViewVC 1.1.22