1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
#include "OBCS_OPTIONS.h" |
#include "OBCS_OPTIONS.h" |
4 |
|
|
5 |
CBOP |
CBOP |
6 |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_LOAD |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_LOAD |
7 |
C !INTERFACE: |
C !INTERFACE: |
8 |
SUBROUTINE OBCS_EXTERNAL_FIELDS_LOAD( myTime, myIter, myThid ) |
SUBROUTINE OBCS_EXTERNAL_FIELDS_LOAD( myTime, myIter, myThid ) |
9 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
10 |
C *==========================================================* |
C *==========================================================* |
11 |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_LOAD |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_LOAD |
12 |
C | o Control reading of fields from external source. |
C | o Control reading of fields from external source. |
13 |
C *==========================================================* |
C *==========================================================* |
14 |
C | External source field loading routine for open boundaries. |
C | External source field loading routine for open boundaries. |
15 |
C | This routine is called every time we want to |
C | This routine is called every time we want to |
16 |
C | load a a set of external open boundary fields. |
C | load a a set of external open boundary fields. |
17 |
C | Only if there are fields available (file names are not empty) |
C | Only if there are fields available (file names are not empty) |
18 |
C | the open boundary fields are overwritten. |
C | the open boundary fields are overwritten. |
19 |
C | The routine decides which fields to load and then reads them in. |
C | The routine decides which fields to load and then reads them in. |
20 |
C | This routine needs to be customised for particular |
C | This routine needs to be customised for particular |
21 |
C | experiments. |
C | experiments. |
22 |
C | Notes |
C | Notes |
23 |
C | ===== |
C | ===== |
24 |
C | Two-dimensional and three-dimensional I/O are handled in |
C | Two-dimensional and three-dimensional I/O are handled in |
25 |
C | the following way under MITgcmUV. A master thread |
C | the following way under MITgcmUV. A master thread |
26 |
C | performs I/O using system calls. This threads reads data |
C | performs I/O using system calls. This threads reads data |
27 |
C | into a temporary buffer. At present the buffer is loaded |
C | into a temporary buffer. At present the buffer is loaded |
28 |
C | with the entire model domain. This is probably OK for now |
C | with the entire model domain. This is probably OK for now |
29 |
C | Each thread then copies data from the buffer to the |
C | Each thread then copies data from the buffer to the |
30 |
C | region of the proper array it is responsible for. |
C | region of the proper array it is responsible for. |
31 |
C | ===== |
C | ===== |
32 |
C | This routine is the complete analogue to external_fields_load, |
C | This routine is the complete analogue to external_fields_load, |
33 |
C | except for exchanges of forcing fields. These are done in |
C | except for exchanges of forcing fields. These are done in |
35 |
C | - Forcing period and cycle are the same as for other fields |
C | - Forcing period and cycle are the same as for other fields |
36 |
C | in external forcing. |
C | in external forcing. |
37 |
C | - constant boundary values are also read here and not |
C | - constant boundary values are also read here and not |
38 |
C | directly in obcs_init_variables (which calls obcs_calc |
C | directly in obcs_init_variables (which calls obcs_calc |
39 |
C | which in turn calls this routine) |
C | which in turn calls this routine) |
40 |
C *==========================================================* |
C *==========================================================* |
41 |
C \ev |
C \ev |
47 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
48 |
#include "PARAMS.h" |
#include "PARAMS.h" |
49 |
#include "GRID.h" |
#include "GRID.h" |
50 |
|
|
51 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
52 |
C === Routine arguments === |
C === Routine arguments === |
53 |
C myThid - Thread no. that called this routine. |
C myThid - Thread no. that called this routine. |
56 |
INTEGER myThid |
INTEGER myThid |
57 |
_RL myTime |
_RL myTime |
58 |
INTEGER myIter |
INTEGER myIter |
59 |
|
|
60 |
C if external forcing (exf) package is enabled, all loading of external |
C if external forcing (exf) package is enabled, all loading of external |
61 |
C fields is done by exf |
C fields is done by exf |
62 |
#if (defined ALLOW_OBCS && defined ALLOW_OBCS_PRESCRIBE && !defined ALLOW_EXF) |
#if (defined ALLOW_OBCS && defined ALLOW_OBCS_PRESCRIBE && !defined ALLOW_EXF) |
63 |
C |
C |
64 |
#include "OBCS.h" |
#include "OBCS.h" |
65 |
#ifdef ALLOW_PTRACERS.h |
#ifdef ALLOW_PTRACERS |
66 |
#include "PTRACERS_SIZE.h" |
#include "PTRACERS_SIZE.h" |
67 |
#include "OBCS_PTRACERS.h" |
#include "OBCS_PTRACERS.h" |
68 |
#include "PTRACERS.h" |
#include "PTRACERS.h" |
112 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
113 |
& SQUEEZE_RIGHT,myThid) |
& SQUEEZE_RIGHT,myThid) |
114 |
|
|
115 |
|
#ifdef ALLOW_MDSIO |
116 |
#ifdef ALLOW_OBCS_EAST |
#ifdef ALLOW_OBCS_EAST |
117 |
C Eastern boundary |
C Eastern boundary |
118 |
IF ( OBEuFile .NE. ' ' ) THEN |
IF ( OBEuFile .NE. ' ' ) THEN |
229 |
C Eastern boundary |
C Eastern boundary |
230 |
IF ( OBEptrFile(iTracer) .NE. ' ' ) THEN |
IF ( OBEptrFile(iTracer) .NE. ' ' ) THEN |
231 |
CALL MDSREADFIELDYZ ( OBEptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDYZ ( OBEptrFile(itracer), readBinaryPrec, |
232 |
& 'RL', Nr, OBEptr0(1-Oly,1,1,1,iTracer), |
& 'RL', Nr, OBEptr0(1-Oly,1,1,1,iTracer), |
233 |
& intime0, myThid ) |
& intime0, myThid ) |
234 |
CALL MDSREADFIELDYZ ( OBEptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDYZ ( OBEptrFile(itracer), readBinaryPrec, |
235 |
& 'RL', Nr, OBEptr1(1-Oly,1,1,1,iTracer), |
& 'RL', Nr, OBEptr1(1-Oly,1,1,1,iTracer), |
236 |
& intime1, myThid ) |
& intime1, myThid ) |
237 |
ENDIF |
ENDIF |
238 |
# endif /* ALLOW_OBCS_WEST */ |
# endif /* ALLOW_OBCS_WEST */ |
240 |
C Western boundary |
C Western boundary |
241 |
IF ( OBWptrFile(iTracer) .NE. ' ' ) THEN |
IF ( OBWptrFile(iTracer) .NE. ' ' ) THEN |
242 |
CALL MDSREADFIELDYZ ( OBWptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDYZ ( OBWptrFile(itracer), readBinaryPrec, |
243 |
& 'RL', Nr, OBWptr0(1-Oly,1,1,1,iTracer), |
& 'RL', Nr, OBWptr0(1-Oly,1,1,1,iTracer), |
244 |
& intime0, myThid ) |
& intime0, myThid ) |
245 |
CALL MDSREADFIELDYZ ( OBWptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDYZ ( OBWptrFile(itracer), readBinaryPrec, |
246 |
& 'RL', Nr, OBWptr1(1-Oly,1,1,1,iTracer), |
& 'RL', Nr, OBWptr1(1-Oly,1,1,1,iTracer), |
247 |
& intime1, myThid ) |
& intime1, myThid ) |
248 |
ENDIF |
ENDIF |
249 |
# endif /* ALLOW_OBCS_WEST */ |
# endif /* ALLOW_OBCS_WEST */ |
251 |
C Northern boundary |
C Northern boundary |
252 |
IF ( OBNptrFile(iTracer) .NE. ' ' ) THEN |
IF ( OBNptrFile(iTracer) .NE. ' ' ) THEN |
253 |
CALL MDSREADFIELDXZ ( OBNptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDXZ ( OBNptrFile(itracer), readBinaryPrec, |
254 |
& 'RL', Nr, OBNptr0(1-Olx,1,1,1,iTracer), |
& 'RL', Nr, OBNptr0(1-Olx,1,1,1,iTracer), |
255 |
& intime0, myThid ) |
& intime0, myThid ) |
256 |
CALL MDSREADFIELDXZ ( OBNptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDXZ ( OBNptrFile(itracer), readBinaryPrec, |
257 |
& 'RL', Nr, OBNptr1(1-Olx,1,1,1,iTracer), |
& 'RL', Nr, OBNptr1(1-Olx,1,1,1,iTracer), |
258 |
& intime1, myThid ) |
& intime1, myThid ) |
259 |
ENDIF |
ENDIF |
260 |
# endif /* ALLOW_OBCS_NORTH */ |
# endif /* ALLOW_OBCS_NORTH */ |
262 |
C Southern boundary |
C Southern boundary |
263 |
IF ( OBSptrFile(iTracer) .NE. ' ' ) THEN |
IF ( OBSptrFile(iTracer) .NE. ' ' ) THEN |
264 |
CALL MDSREADFIELDXZ ( OBSptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDXZ ( OBSptrFile(itracer), readBinaryPrec, |
265 |
& 'RL', Nr, OBSptr0(1-Olx,1,1,1,iTracer), |
& 'RL', Nr, OBSptr0(1-Olx,1,1,1,iTracer), |
266 |
& intime0, myThid ) |
& intime0, myThid ) |
267 |
CALL MDSREADFIELDXZ ( OBSptrFile(itracer), readBinaryPrec, |
CALL MDSREADFIELDXZ ( OBSptrFile(itracer), readBinaryPrec, |
268 |
& 'RL', Nr, OBSptr1(1-Olx,1,1,1,iTracer), |
& 'RL', Nr, OBSptr1(1-Olx,1,1,1,iTracer), |
269 |
& intime1, myThid ) |
& intime1, myThid ) |
270 |
ENDIF |
ENDIF |
271 |
# endif /* ALLOW_OBCS_SOUTH */ |
# endif /* ALLOW_OBCS_SOUTH */ |
274 |
C end if (usePTRACERS) |
C end if (usePTRACERS) |
275 |
ENDIF |
ENDIF |
276 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
277 |
|
#else /* ALLOW_MDSIO */ |
278 |
|
STOP 'ABNORMAL END: OBCS_EXTERNAL_FIELDS_LOAD: NEEDS MSDIO PKG' |
279 |
|
#endif /* ALLOW_MDSIO */ |
280 |
|
|
281 |
_END_MASTER(myThid) |
_END_MASTER(myThid) |
282 |
C |
C |
283 |
C At this point in external_fields_load the input fields are exchanged. |
C At this point in external_fields_load the input fields are exchanged. |
284 |
C However, we do not have exchange routines for vertical |
C However, we do not have exchange routines for vertical |
285 |
C slices and they are not planned, either, so the approriate fields |
C slices and they are not planned, either, so the approriate fields |
286 |
C are exchanged after the open boundary conditions have been |
C are exchanged after the open boundary conditions have been |
287 |
C applied. (in DYNAMICS and DO_FIELDS_BLOCKING_EXCHANGES) |
C applied. (in DYNAMICS and DO_FIELDS_BLOCKING_EXCHANGES) |
288 |
_BARRIER |
_BARRIER |
289 |
|
|
305 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
306 |
& SQUEEZE_RIGHT,myThid) |
& SQUEEZE_RIGHT,myThid) |
307 |
inTime0 = 1 |
inTime0 = 1 |
308 |
|
#ifdef ALLOW_MDSIO |
309 |
#ifdef ALLOW_OBCS_EAST |
#ifdef ALLOW_OBCS_EAST |
310 |
C Eastern boundary |
C Eastern boundary |
311 |
IF ( OBEuFile .NE. ' ' ) THEN |
IF ( OBEuFile .NE. ' ' ) THEN |
423 |
C end if (usePTRACERS) |
C end if (usePTRACERS) |
424 |
ENDIF |
ENDIF |
425 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
426 |
|
#else /* ALLOW_MDSIO */ |
427 |
|
STOP 'ABNORMAL END: OBCS_EXTERNAL_FIELDS_LOAD: NEEDS MSDIO PKG' |
428 |
|
#endif /* ALLOW_MDSIO */ |
429 |
_END_MASTER(myThid) |
_END_MASTER(myThid) |
430 |
_BARRIER |
_BARRIER |
431 |
C endif myIter .EQ. nIter0 |
C endif myIter .EQ. nIter0 |
434 |
ENDIF |
ENDIF |
435 |
|
|
436 |
C-- Now interpolate OBSu, OBSv, OBSt, OBSs, OBSptr, etc. |
C-- Now interpolate OBSu, OBSv, OBSt, OBSs, OBSptr, etc. |
437 |
C-- For periodicForcing, aWght = 0. and bWght = 1. so that the |
C-- For periodicForcing, aWght = 0. and bWght = 1. so that the |
438 |
C-- interpolation boilds down to copying the time-independent |
C-- interpolation boilds down to copying the time-independent |
439 |
C-- forcing field OBSu0 to OBSu |
C-- forcing field OBSu0 to OBSu |
440 |
#ifdef ALLOW_OBCS_EAST |
#ifdef ALLOW_OBCS_EAST |
441 |
IF ( OBEuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBEuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
442 |
& OBEu, OBEu0, OBEu1, aWght, bWght, myThid ) |
& OBEu, OBEu0, OBEu1, aWght, bWght, myThid ) |
443 |
IF ( OBEvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBEvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
444 |
& OBEv, OBEv0, OBEv1, aWght, bWght, myThid ) |
& OBEv, OBEv0, OBEv1, aWght, bWght, myThid ) |
445 |
IF ( OBEtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBEtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
446 |
& OBEt, OBEt0, OBEt1, aWght, bWght, myThid ) |
& OBEt, OBEt0, OBEt1, aWght, bWght, myThid ) |
447 |
IF ( OBEsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBEsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
448 |
& OBEs, OBEs0, OBEs1, aWght, bWght, myThid ) |
& OBEs, OBEs0, OBEs1, aWght, bWght, myThid ) |
449 |
#endif /* ALLOW_OBCS_EAST */ |
#endif /* ALLOW_OBCS_EAST */ |
450 |
#ifdef ALLOW_OBCS_WEST |
#ifdef ALLOW_OBCS_WEST |
451 |
IF ( OBWuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBWuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
452 |
& OBWu, OBWu0, OBWu1, aWght, bWght, myThid ) |
& OBWu, OBWu0, OBWu1, aWght, bWght, myThid ) |
453 |
IF ( OBWvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBWvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
454 |
& OBWv, OBWv0, OBWv1, aWght, bWght, myThid ) |
& OBWv, OBWv0, OBWv1, aWght, bWght, myThid ) |
455 |
IF ( OBWtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBWtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
456 |
& OBWt, OBWt0, OBWt1, aWght, bWght, myThid ) |
& OBWt, OBWt0, OBWt1, aWght, bWght, myThid ) |
457 |
IF ( OBWsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
IF ( OBWsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
458 |
& OBWs, OBWs0, OBWs1, aWght, bWght, myThid ) |
& OBWs, OBWs0, OBWs1, aWght, bWght, myThid ) |
459 |
#endif /* ALLOW_OBCS_WEST */ |
#endif /* ALLOW_OBCS_WEST */ |
460 |
#ifdef ALLOW_OBCS_NORTH |
#ifdef ALLOW_OBCS_NORTH |
461 |
IF ( OBNuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBNuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
462 |
& OBNu, OBNu0, OBNu1, aWght, bWght, myThid ) |
& OBNu, OBNu0, OBNu1, aWght, bWght, myThid ) |
463 |
IF ( OBNvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBNvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
464 |
& OBNv, OBNv0, OBNv1, aWght, bWght, myThid ) |
& OBNv, OBNv0, OBNv1, aWght, bWght, myThid ) |
465 |
IF ( OBNtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBNtFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
466 |
& OBNt, OBNt0, OBNt1, aWght, bWght, myThid ) |
& OBNt, OBNt0, OBNt1, aWght, bWght, myThid ) |
467 |
IF ( OBNsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBNsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
468 |
& OBNs, OBNs0, OBNs1, aWght, bWght, myThid ) |
& OBNs, OBNs0, OBNs1, aWght, bWght, myThid ) |
469 |
#endif /* ALLOW_OBCS_NORTH */ |
#endif /* ALLOW_OBCS_NORTH */ |
470 |
#ifdef ALLOW_OBCS_SOUTH |
#ifdef ALLOW_OBCS_SOUTH |
471 |
IF ( OBSuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBSuFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
472 |
& OBSu, OBSu0, OBSu1, aWght, bWght, myThid ) |
& OBSu, OBSu0, OBSu1, aWght, bWght, myThid ) |
473 |
IF ( OBSvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBSvFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
474 |
& OBSv, OBSv0, OBSv1, aWght, bWght, myThid ) |
& OBSv, OBSv0, OBSv1, aWght, bWght, myThid ) |
475 |
IF ( OBStFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBStFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
476 |
& OBSt, OBSt0, OBSt1, aWght, bWght, myThid ) |
& OBSt, OBSt0, OBSt1, aWght, bWght, myThid ) |
477 |
IF ( OBSsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
IF ( OBSsFile .NE. ' ' ) CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
478 |
& OBSs, OBSs0, OBSs1, aWght, bWght, myThid ) |
& OBSs, OBSs0, OBSs1, aWght, bWght, myThid ) |
479 |
#endif /* ALLOW_OBCS_SOUTH */ |
#endif /* ALLOW_OBCS_SOUTH */ |
480 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
483 |
DO iTracer = 1, PTRACERS_numInUse |
DO iTracer = 1, PTRACERS_numInUse |
484 |
# ifdef ALLOW_OBCS_EAST |
# ifdef ALLOW_OBCS_EAST |
485 |
IF ( OBEptrFile(iTracer) .NE. ' ' ) |
IF ( OBEptrFile(iTracer) .NE. ' ' ) |
486 |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
487 |
O OBEptr (1-Oly,1,1,1,iTracer), |
O OBEptr (1-Oly,1,1,1,iTracer), |
488 |
I OBEptr0(1-Oly,1,1,1,iTracer), |
I OBEptr0(1-Oly,1,1,1,iTracer), |
489 |
I OBEptr1(1-Oly,1,1,1,iTracer), aWght, bWght, myThid ) |
I OBEptr1(1-Oly,1,1,1,iTracer), aWght, bWght, myThid ) |
490 |
# endif /* ALLOW_OBCS_EAST */ |
# endif /* ALLOW_OBCS_EAST */ |
491 |
# ifdef ALLOW_OBCS_WEST |
# ifdef ALLOW_OBCS_WEST |
492 |
IF ( OBWptrFile(iTracer) .NE. ' ' ) |
IF ( OBWptrFile(iTracer) .NE. ' ' ) |
493 |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
494 |
O OBWptr (1-Oly,1,1,1,iTracer), |
O OBWptr (1-Oly,1,1,1,iTracer), |
495 |
I OBWptr0(1-Oly,1,1,1,iTracer), |
I OBWptr0(1-Oly,1,1,1,iTracer), |
496 |
I OBWptr1(1-Oly,1,1,1,iTracer), aWght, bWght, myThid ) |
I OBWptr1(1-Oly,1,1,1,iTracer), aWght, bWght, myThid ) |
497 |
# endif /* ALLOW_OBCS_WEST */ |
# endif /* ALLOW_OBCS_WEST */ |
498 |
# ifdef ALLOW_OBCS_NORTH |
# ifdef ALLOW_OBCS_NORTH |
499 |
IF ( OBNptrFile(iTracer) .NE. ' ' ) |
IF ( OBNptrFile(iTracer) .NE. ' ' ) |
500 |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
501 |
O OBNptr (1-Olx,1,1,1,iTracer), |
O OBNptr (1-Olx,1,1,1,iTracer), |
502 |
I OBNptr0(1-Olx,1,1,1,iTracer), |
I OBNptr0(1-Olx,1,1,1,iTracer), |
503 |
I OBNptr1(1-Olx,1,1,1,iTracer), aWght, bWght, myThid ) |
I OBNptr1(1-Olx,1,1,1,iTracer), aWght, bWght, myThid ) |
504 |
# endif /* ALLOW_OBCS_NORTH */ |
# endif /* ALLOW_OBCS_NORTH */ |
505 |
# ifdef ALLOW_OBCS_SOUTH |
# ifdef ALLOW_OBCS_SOUTH |
506 |
IF ( OBSptrFile(iTracer) .NE. ' ' ) |
IF ( OBSptrFile(iTracer) .NE. ' ' ) |
507 |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
& CALL OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
508 |
O OBSptr (1-Olx,1,1,1,iTracer), |
O OBSptr (1-Olx,1,1,1,iTracer), |
509 |
I OBSptr0(1-Olx,1,1,1,iTracer), |
I OBSptr0(1-Olx,1,1,1,iTracer), |
510 |
I OBSptr1(1-Olx,1,1,1,iTracer), aWght, bWght, myThid ) |
I OBSptr1(1-Olx,1,1,1,iTracer), aWght, bWght, myThid ) |
511 |
# endif /* ALLOW_OBCS_SOUTH */ |
# endif /* ALLOW_OBCS_SOUTH */ |
512 |
C end do iTracer |
C end do iTracer |
523 |
CBOP |
CBOP |
524 |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_INTERP_XZ |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_INTERP_XZ |
525 |
C !INTERFACE: |
C !INTERFACE: |
526 |
SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_XZ( |
527 |
O fld, |
O fld, |
528 |
I fld0, fld1, aWght, bWght, myThid ) |
I fld0, fld1, aWght, bWght, myThid ) |
529 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
530 |
C *==========================================================* |
C *==========================================================* |
531 |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_XZ |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_XZ |
532 |
C | o Interpolate between to records |
C | o Interpolate between to records |
533 |
C *==========================================================* |
C *==========================================================* |
534 |
C \ev |
C \ev |
539 |
#include "SIZE.h" |
#include "SIZE.h" |
540 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
541 |
#include "PARAMS.h" |
#include "PARAMS.h" |
542 |
|
|
543 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
544 |
C === Routine arguments === |
C === Routine arguments === |
545 |
C myThid - Thread no. that called this routine. |
C myThid - Thread no. that called this routine. |
559 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
560 |
DO K = 1, Nr |
DO K = 1, Nr |
561 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
562 |
fld(i,k,bi,bj) = bWght*fld0(i,k,bi,bj) |
fld(i,k,bi,bj) = bWght*fld0(i,k,bi,bj) |
563 |
& +aWght*fld1(i,k,bi,bj) |
& +aWght*fld1(i,k,bi,bj) |
564 |
ENDDO |
ENDDO |
565 |
ENDDO |
ENDDO |
571 |
CBOP |
CBOP |
572 |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_INTERP_YZ |
C !ROUTINE: OBCS_EXTERNAL_FIELDS_INTERP_YZ |
573 |
C !INTERFACE: |
C !INTERFACE: |
574 |
SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_YZ( |
575 |
O fld, |
O fld, |
576 |
I fld0, fld1, aWght, bWght, myThid ) |
I fld0, fld1, aWght, bWght, myThid ) |
577 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
578 |
C *==========================================================* |
C *==========================================================* |
579 |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_YZ |
C | SUBROUTINE OBCS_EXTERNAL_FIELDS_INTERP_YZ |
580 |
C | o Interpolate between to records |
C | o Interpolate between to records |
581 |
C *==========================================================* |
C *==========================================================* |
582 |
C \ev |
C \ev |
587 |
#include "SIZE.h" |
#include "SIZE.h" |
588 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
589 |
#include "PARAMS.h" |
#include "PARAMS.h" |
590 |
|
|
591 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
592 |
C === Routine arguments === |
C === Routine arguments === |
593 |
C myThid - Thread no. that called this routine. |
C myThid - Thread no. that called this routine. |
607 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
608 |
DO K = 1, Nr |
DO K = 1, Nr |
609 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
610 |
fld(j,k,bi,bj) = bWght*fld0(j,k,bi,bj) |
fld(j,k,bi,bj) = bWght*fld0(j,k,bi,bj) |
611 |
& +aWght*fld1(j,k,bi,bj) |
& +aWght*fld1(j,k,bi,bj) |
612 |
ENDDO |
ENDDO |
613 |
ENDDO |
ENDDO |