20 |
#include "OBCS.h" |
#include "OBCS.h" |
21 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
22 |
#include "PTRACERS_SIZE.h" |
#include "PTRACERS_SIZE.h" |
23 |
#include "PTRACERS.h" |
#include "PTRACERS_PARAMS.h" |
24 |
|
#include "PTRACERS_FIELDS.h" |
25 |
#include "OBCS_PTRACERS.h" |
#include "OBCS_PTRACERS.h" |
26 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
27 |
|
|
34 |
C == Local variables == |
C == Local variables == |
35 |
INTEGER bi, bj |
INTEGER bi, bj |
36 |
INTEGER I, J, K |
INTEGER I, J, K |
|
CHARACTER*(10) suff |
|
|
INTEGER prec |
|
37 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
38 |
INTEGER iTracer |
INTEGER iTracer |
39 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
146 |
OBNsn0(I,bi,bj)=0. _d 0 |
OBNsn0(I,bi,bj)=0. _d 0 |
147 |
OBNsl1(I,bi,bj)=0. _d 0 |
OBNsl1(I,bi,bj)=0. _d 0 |
148 |
OBNsn1(I,bi,bj)=0. _d 0 |
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 */ |
#endif /* ALLOW_OBCS_NORTH */ |
156 |
#ifdef ALLOW_OBCS_SOUTH |
#ifdef ALLOW_OBCS_SOUTH |
157 |
OBSa (I,bi,bj)=0. _d 0 |
OBSa (I,bi,bj)=0. _d 0 |
166 |
OBSsn0(I,bi,bj)=0. _d 0 |
OBSsn0(I,bi,bj)=0. _d 0 |
167 |
OBSsl1(I,bi,bj)=0. _d 0 |
OBSsl1(I,bi,bj)=0. _d 0 |
168 |
OBSsn1(I,bi,bj)=0. _d 0 |
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 */ |
#endif /* ALLOW_OBCS_SOUTH */ |
176 |
ENDDO |
ENDDO |
177 |
DO J=1-Oly,sNy+Oly |
DO J=1-Oly,sNy+Oly |
182 |
OBEh0(J,bi,bj)=0. _d 0 |
OBEh0(J,bi,bj)=0. _d 0 |
183 |
OBEa1(J,bi,bj)=0. _d 0 |
OBEa1(J,bi,bj)=0. _d 0 |
184 |
OBEh1(J,bi,bj)=0. _d 0 |
OBEh1(J,bi,bj)=0. _d 0 |
185 |
OBEsl (I,bi,bj)=0. _d 0 |
OBEsl (J,bi,bj)=0. _d 0 |
186 |
OBEsn (I,bi,bj)=0. _d 0 |
OBEsn (J,bi,bj)=0. _d 0 |
187 |
OBEsl0(I,bi,bj)=0. _d 0 |
OBEsl0(J,bi,bj)=0. _d 0 |
188 |
OBEsn0(I,bi,bj)=0. _d 0 |
OBEsn0(J,bi,bj)=0. _d 0 |
189 |
OBEsl1(I,bi,bj)=0. _d 0 |
OBEsl1(J,bi,bj)=0. _d 0 |
190 |
OBEsn1(I,bi,bj)=0. _d 0 |
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 */ |
#endif /* ALLOW_OBCS_EAST */ |
198 |
#ifdef ALLOW_OBCS_WEST |
#ifdef ALLOW_OBCS_WEST |
199 |
OBWa (J,bi,bj)=0. _d 0 |
OBWa (J,bi,bj)=0. _d 0 |
202 |
OBWh0(J,bi,bj)=0. _d 0 |
OBWh0(J,bi,bj)=0. _d 0 |
203 |
OBWa1(J,bi,bj)=0. _d 0 |
OBWa1(J,bi,bj)=0. _d 0 |
204 |
OBWh1(J,bi,bj)=0. _d 0 |
OBWh1(J,bi,bj)=0. _d 0 |
205 |
OBWsl (I,bi,bj)=0. _d 0 |
OBWsl (J,bi,bj)=0. _d 0 |
206 |
OBWsn (I,bi,bj)=0. _d 0 |
OBWsn (J,bi,bj)=0. _d 0 |
207 |
OBWsl0(I,bi,bj)=0. _d 0 |
OBWsl0(J,bi,bj)=0. _d 0 |
208 |
OBWsn0(I,bi,bj)=0. _d 0 |
OBWsn0(J,bi,bj)=0. _d 0 |
209 |
OBWsl1(I,bi,bj)=0. _d 0 |
OBWsl1(J,bi,bj)=0. _d 0 |
210 |
OBWsn1(I,bi,bj)=0. _d 0 |
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 */ |
#endif /* ALLOW_OBCS_WEST */ |
218 |
ENDDO |
ENDDO |
219 |
#endif /* ALLOW_SEAICE */ |
#endif /* ALLOW_SEAICE */ |
232 |
OBNptr1(I,K,bi,bj,iTracer)=0. _d 0 |
OBNptr1(I,K,bi,bj,iTracer)=0. _d 0 |
233 |
# endif |
# endif |
234 |
#endif /* ALLOW_OBCS_NORTH */ |
#endif /* ALLOW_OBCS_NORTH */ |
235 |
|
|
236 |
#ifdef ALLOW_OBCS_SOUTH |
#ifdef ALLOW_OBCS_SOUTH |
237 |
OBSptr (I,K,bi,bj,iTracer)=0. _d 0 |
OBSptr (I,K,bi,bj,iTracer)=0. _d 0 |
238 |
# ifdef ALLOW_OBCS_PRESCRIBE |
# ifdef ALLOW_OBCS_PRESCRIBE |
241 |
# endif |
# endif |
242 |
#endif /* ALLOW_OBCS_SOUTH */ |
#endif /* ALLOW_OBCS_SOUTH */ |
243 |
ENDDO |
ENDDO |
244 |
|
|
245 |
DO J=1-Oly,sNy+Oly |
DO J=1-Oly,sNy+Oly |
246 |
#ifdef ALLOW_OBCS_EAST |
#ifdef ALLOW_OBCS_EAST |
247 |
OBEptr (J,K,bi,bj,iTracer)=0. _d 0 |
OBEptr (J,K,bi,bj,iTracer)=0. _d 0 |
250 |
OBEptr1(J,K,bi,bj,iTracer)=0. _d 0 |
OBEptr1(J,K,bi,bj,iTracer)=0. _d 0 |
251 |
# endif |
# endif |
252 |
#endif /* ALLOW_OBCS_EAST */ |
#endif /* ALLOW_OBCS_EAST */ |
253 |
|
|
254 |
#ifdef ALLOW_OBCS_WEST |
#ifdef ALLOW_OBCS_WEST |
255 |
OBWptr (J,K,bi,bj,iTracer)=0. _d 0 |
OBWptr (J,K,bi,bj,iTracer)=0. _d 0 |
256 |
# ifdef ALLOW_OBCS_PRESCRIBE |
# ifdef ALLOW_OBCS_PRESCRIBE |
288 |
#endif /* ALLOW_ORLANSKI */ |
#endif /* ALLOW_ORLANSKI */ |
289 |
|
|
290 |
ENDDO |
ENDDO |
291 |
ENDDO |
ENDDO |
292 |
|
|
293 |
|
#ifdef ALLOW_ORLANSKI |
294 |
|
IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR. |
295 |
|
& useOrlanskiEast.OR.useOrlanskiWest) THEN |
296 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
297 |
C jmc: here is the logical place to read OBCS-pickup files |
C Only needed for Orlanski: |
298 |
C but a) without Orlanski: pass the test 1+1=2 without reading pickup. |
IF ( nIter0.NE.0 .OR. pickupSuff.NE.' ' ) THEN |
299 |
C b) with Orlanski: 1+1=2 fail even with this bit of code |
CALL OBCS_READ_PICKUP( nIter0, myThid ) |
300 |
IF ( nIter0.NE.0 ) THEN |
ENDIF |
|
prec = precFloat64 |
|
|
IF (pickupSuff.EQ.' ') THEN |
|
|
WRITE(suff,'(I10.10)') nIter0 |
|
|
ELSE |
|
|
WRITE(suff,'(A10)') pickupSuff |
|
|
ENDIF |
|
|
c CALL OBCS_READ_CHECKPOINT(prec, nIter0, suff, myThid) |
|
|
ENDIF |
|
301 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
302 |
|
ENDIF |
303 |
|
#endif /* ALLOW_ORLANSKI */ |
304 |
|
|
305 |
C-- Load/compute OBCS values in all cases, although these values are |
C-- Load/compute OBCS values (initial conditions only) |
306 |
C-- only used for initialisation and never for restart: |
IF ( startTime .EQ. baseTime .AND. nIter0 .EQ. 0 |
307 |
|
& .AND. pickupSuff .EQ. ' ' ) THEN |
308 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
309 |
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
310 |
#endif |
#endif |
311 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
312 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
313 |
CALL OBCS_CALC( bi, bj, startTime, nIter0, |
CALL OBCS_CALC( bi, bj, startTime, nIter0, |
314 |
& uVel, vVel, wVel, theta, salt, myThid ) |
& uVel, vVel, wVel, theta, salt, myThid ) |
315 |
|
ENDDO |
316 |
ENDDO |
ENDDO |
|
ENDDO |
|
317 |
|
|
|
IF ( startTime .EQ. baseTime .AND. nIter0 .EQ. 0 |
|
|
& .AND. pickupSuff .EQ. ' ' ) THEN |
|
318 |
C-- Apply OBCS values to initial conditions for consistency |
C-- Apply OBCS values to initial conditions for consistency |
319 |
C (but initial conditions only) |
C (but initial conditions only) |
320 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
321 |
IF (debugMode) |
IF (debugMode) |
322 |
& CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid) |
& CALL DEBUG_CALL('OBCS_APPLY_UV + OBCS_APPLY_TS',myThid) |
323 |
#endif |
#endif |
324 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
334 |
C This is only necessary of the boudnary values have been read |
C This is only necessary of the boudnary values have been read |
335 |
C from a file. |
C from a file. |
336 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
337 |
IF (debugMode) |
IF (debugMode) |
338 |
& CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid) |
& CALL DEBUG_CALL('EXCHANGES in OBCS_INIT_VARIABLES',myThid) |
339 |
#endif |
#endif |
340 |
CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid) |
CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid) |
341 |
_EXCH_XYZ_R8( theta, myThid ) |
_EXCH_XYZ_RL( theta, myThid ) |
342 |
_EXCH_XYZ_R8( salt , myThid ) |
_EXCH_XYZ_RL( salt , myThid ) |
343 |
ENDIF |
ENDIF |
344 |
C endif start from rest |
C endif start from rest |
345 |
ENDIF |
ENDIF |
350 |
C but initialise ptracers differently |
C but initialise ptracers differently |
351 |
IF ( nIter0 .EQ. PTRACERS_Iter0 ) THEN |
IF ( nIter0 .EQ. PTRACERS_Iter0 ) THEN |
352 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
353 |
IF (debugMode) |
IF (debugMode) |
354 |
& CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid) |
& CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid) |
355 |
#endif |
#endif |
356 |
DO iTracer=1,PTRACERS_numInUse |
DO iTracer=1,PTRACERS_numInUse |
357 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
358 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
359 |
DO K=1,Nr |
DO K=1,Nr |
360 |
CALL OBCS_APPLY_PTRACER( |
CALL OBCS_APPLY_PTRACER( |
361 |
I bi, bj, K, iTracer, |
I bi, bj, K, iTracer, |
362 |
U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer), |
U ptracer(1-Olx,1-Oly,K,bi,bj,iTracer), |
363 |
I myThid ) |
I myThid ) |
364 |
ENDDO |
ENDDO |
370 |
C This is only necessary of the boudnary values have been read |
C This is only necessary of the boudnary values have been read |
371 |
C from a file. |
C from a file. |
372 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
373 |
IF (debugMode) CALL DEBUG_CALL( |
IF (debugMode) CALL DEBUG_CALL( |
374 |
& 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid) |
& 'PTRACERS EXCHANGES in OBCS_INIT_VARIABLES',myThid) |
375 |
#endif |
#endif |
376 |
CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid ) |
CALL PTRACERS_FIELDS_BLOCKING_EXCH( myThid ) |