Back to home page

MITgcm

 
 

    


File indexing completed on 2024-06-06 05:11:01 UTC

view on githubraw file Latest commit af61e5eb on 2024-06-06 03:30:35 UTC
56f43c4e8a Mart*0001 #include "OBCS_OPTIONS.h"
1b21d1d746 Jean*0002 
acc2fd269d Jean*0003 C--  File obcs_external_fields_load.F: Routines to read of OBC fields from files
                0004 C--   Contents
50e2c0b6cd Jean*0005 C--   o OBCS_FIELDS_LOAD
                0006 C--   o OBCS_TIME_INTERP_XZ
                0007 C--   o OBCS_TIME_INTERP_YZ
acc2fd269d Jean*0008 
                0009 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
56f43c4e8a Mart*0010 CBOP
50e2c0b6cd Jean*0011 C     !ROUTINE: OBCS_FIELDS_LOAD
56f43c4e8a Mart*0012 C     !INTERFACE:
50e2c0b6cd Jean*0013       SUBROUTINE OBCS_FIELDS_LOAD( myTime, myIter, myThid )
8b081ca9eb Jean*0014 
56f43c4e8a Mart*0015 C     !DESCRIPTION: \bv
                0016 C     *==========================================================*
50e2c0b6cd Jean*0017 C     | SUBROUTINE OBCS_FIELDS_LOAD
1b21d1d746 Jean*0018 C     | o Control reading of fields from external source.
56f43c4e8a Mart*0019 C     *==========================================================*
ee1c912a22 Mart*0020 C     | External source field loading routine for open boundaries.
1b21d1d746 Jean*0021 C     | This routine is called every time we want to
                0022 C     | load a a set of external open boundary fields.
ee1c912a22 Mart*0023 C     | Only if there are fields available (file names are not empty)
                0024 C     | the open boundary fields are overwritten.
                0025 C     | The routine decides which fields to load and then reads them in.
1b21d1d746 Jean*0026 C     | This routine needs to be customised for particular
                0027 C     | experiments.
                0028 C     | Notes
                0029 C     | =====
                0030 C     | Two-dimensional and three-dimensional I/O are handled in
                0031 C     | the following way under MITgcmUV. A master thread
                0032 C     | performs I/O using system calls. This threads reads data
                0033 C     | into a temporary buffer. At present the buffer is loaded
                0034 C     | with the entire model domain. This is probably OK for now
                0035 C     | Each thread then copies data from the buffer to the
                0036 C     | region of the proper array it is responsible for.
56f43c4e8a Mart*0037 C     | =====
                0038 C     | This routine is the complete analogue to external_fields_load,
                0039 C     | except for exchanges of forcing fields. These are done in
                0040 C     | obcs_precribe_exchanges, which is called from dynamics.
                0041 C     | - Forcing period and cycle are the same as for other fields
                0042 C     |   in external forcing.
                0043 C     | - constant boundary values are also read here and not
1b21d1d746 Jean*0044 C     |   directly in obcs_init_variables (which calls obcs_calc
ee1c912a22 Mart*0045 C     |   which in turn calls this routine)
56f43c4e8a Mart*0046 C     *==========================================================*
                0047 C     \ev
                0048 
                0049 C     !USES:
                0050       IMPLICIT NONE
                0051 C     === Global variables ===
                0052 #include "SIZE.h"
                0053 #include "EEPARAMS.h"
                0054 #include "PARAMS.h"
                0055 #include "GRID.h"
9b4f2a04e2 Jean*0056 #include "OBCS_PARAMS.h"
                0057 #include "OBCS_FIELDS.h"
9bd340abd6 Jean*0058 #ifdef ALLOW_PTRACERS
                0059 #include "PTRACERS_SIZE.h"
                0060 #include "OBCS_PTRACERS.h"
                0061 #include "PTRACERS_PARAMS.h"
                0062 #endif /* ALLOW_PTRACERS */
1b21d1d746 Jean*0063 
56f43c4e8a Mart*0064 C     !INPUT/OUTPUT PARAMETERS:
                0065 C     === Routine arguments ===
0fc7dbfcbd Jean*0066 C     myTime :: Simulation time
                0067 C     myIter :: Simulation timestep number
50e2c0b6cd Jean*0068 C     myThid :: my Thread Id. number
56f43c4e8a Mart*0069       _RL     myTime
                0070       INTEGER myIter
0fc7dbfcbd Jean*0071       INTEGER myThid
1b21d1d746 Jean*0072 
9bd340abd6 Jean*0073 C     if external forcing (exf) package is enabled (useEXF=T), all loading of
                0074 C     external fields is done by exf
af61e5eb16 Mart*0075 #ifndef EXCLUDE_FFIELDS_LOAD
                0076 #if ( defined ALLOW_OBCS && defined ALLOW_OBCS_PRESCRIBE )
56f43c4e8a Mart*0077 
                0078 C     !LOCAL VARIABLES:
                0079 C     === Local arrays ===
                0080 C     aWght, bWght :: Interpolation weights
2d12bccb16 Jean*0081 C     msgBuf       :: Informational/error message buffer
0fc7dbfcbd Jean*0082       INTEGER fp
8b081ca9eb Jean*0083       INTEGER iRecP, iRec0, iRec1
                0084       _RL aWght, bWght
ee1c912a22 Mart*0085       CHARACTER*(MAX_LEN_MBUF) msgBuf
8b081ca9eb Jean*0086       INTEGER bi, bj
8d129534f3 Jean*0087 #ifdef NONLIN_FRSURF
005af54e38 Jean*0088 # if (defined ALLOW_OBCS_EAST ) || (defined ALLOW_OBCS_WEST )
                0089       INTEGER j
                0090 # endif
                0091 # if (defined ALLOW_OBCS_NORTH) || (defined ALLOW_OBCS_SOUTH)
                0092       INTEGER i
                0093 # endif
8d129534f3 Jean*0094 #endif /* NONLIN_FRSURF */
                0095 #ifdef ALLOW_PTRACERS
                0096       INTEGER iTr
                0097 #endif
56f43c4e8a Mart*0098 CEOP
                0099 
0fc7dbfcbd Jean*0100       fp = readBinaryPrec
                0101 
56f43c4e8a Mart*0102       IF ( periodicExternalForcing ) THEN
                0103 
8b081ca9eb Jean*0104 C--   Now calculate whether it is time to update the forcing arrays
                0105       CALL GET_PERIODIC_INTERVAL(
                0106      O                  iRecP, iRec0, iRec1, bWght, aWght,
                0107      I                  externForcingCycle, externForcingPeriod,
005af54e38 Jean*0108      I                  deltaTClock, myTime, myThid )
8b081ca9eb Jean*0109 
                0110       bi = myBxLo(myThid)
                0111       bj = myByLo(myThid)
                0112 #ifdef ALLOW_DEBUG
f3b6ef0cda Patr*0113 # ifndef ALLOW_AUTODIFF
8830b8f970 Jean*0114       IF ( debugLevel.GE.debLevB ) THEN
8b081ca9eb Jean*0115         _BEGIN_MASTER(myThid)
                0116         WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
                0117      &   ' OBCS_FIELDS_LOAD,', myIter,
                0118      &   ' : iP,iLd,i0,i1=', iRecP,OBCS_ldRec(bi,bj), iRec0,iRec1,
                0119      &   ' ; Wght=', bWght, aWght
                0120         _END_MASTER(myThid)
                0121       ENDIF
f3b6ef0cda Patr*0122 # endif
8b081ca9eb Jean*0123 #endif /* ALLOW_DEBUG */
                0124 
f3b6ef0cda Patr*0125 #ifdef ALLOW_AUTODIFF
8b081ca9eb Jean*0126 C-    assuming that we call S/R OBCS_FIELDS_LOAD at each time-step and
                0127 C     with increasing time, this will catch when we need to load new records;
                0128 C     But with Adjoint run, this is not always the case => might end-up using
                0129 C     the wrong time-records
                0130       IF ( iRec0.NE.iRecP .OR. myIter.EQ.nIter0 ) THEN
f3b6ef0cda Patr*0131 #else /* ALLOW_AUTODIFF */
8b081ca9eb Jean*0132 C-    Make no assumption on sequence of calls to OBCS_FIELDS_LOAD ;
                0133 C     This is the correct formulation (works in Adjoint run).
                0134 C     Unfortunatly, produces many recomputations <== not used until it is fixed
                0135       IF ( iRec1.NE.OBCS_ldRec(bi,bj) ) THEN
f3b6ef0cda Patr*0136 #endif /* ALLOW_AUTODIFF */
8b081ca9eb Jean*0137 
f3b6ef0cda Patr*0138 # ifndef ALLOW_AUTODIFF
8b081ca9eb Jean*0139 C--   If the above condition is met then we need to read in
                0140 C     data for the period ahead and the period behind myTime.
8830b8f970 Jean*0141        IF ( debugLevel.GE.debLevZero ) THEN
8b081ca9eb Jean*0142         _BEGIN_MASTER(myThid)
                0143         WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
                0144      &   ' OBCS_FIELDS_LOAD, it=', myIter,
                0145      &   ' : Reading new data, i0,i1=', iRec0, iRec1,
                0146      &    ' (prev=', iRecP, OBCS_ldRec(bi,bj), ' )'
                0147         _END_MASTER(myThid)
8830b8f970 Jean*0148        ENDIF
f3b6ef0cda Patr*0149 # endif /* ALLOW_AUTODIFF */
56f43c4e8a Mart*0150 
0fc7dbfcbd Jean*0151 #ifndef ALLOW_MDSIO
50e2c0b6cd Jean*0152        STOP 'ABNORMAL END: OBCS_FIELDS_LOAD: NEEDS MSDIO PKG'
0fc7dbfcbd Jean*0153 #endif /* ALLOW_MDSIO */
                0154 
392e004d68 Jean*0155        _BARRIER
56f43c4e8a Mart*0156 
b67ae883c8 Mart*0157 #ifdef ALLOW_OBCS_EAST
56f43c4e8a Mart*0158 C     Eastern boundary
                0159       IF ( OBEuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0160        CALL READ_REC_YZ_RL( OBEuFile, fp,Nr,OBEu0,iRec0,myIter,myThid )
                0161        CALL READ_REC_YZ_RL( OBEuFile, fp,Nr,OBEu1,iRec1,myIter,myThid )
56f43c4e8a Mart*0162       ENDIF
                0163       IF ( OBEvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0164        CALL READ_REC_YZ_RL( OBEvFile, fp,Nr,OBEv0,iRec0,myIter,myThid )
                0165        CALL READ_REC_YZ_RL( OBEvFile, fp,Nr,OBEv1,iRec1,myIter,myThid )
56f43c4e8a Mart*0166       ENDIF
b67ae883c8 Mart*0167       IF ( OBEtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0168        CALL READ_REC_YZ_RL( OBEtFile, fp,Nr,OBEt0,iRec0,myIter,myThid )
                0169        CALL READ_REC_YZ_RL( OBEtFile, fp,Nr,OBEt1,iRec1,myIter,myThid )
56f43c4e8a Mart*0170       ENDIF
b67ae883c8 Mart*0171       IF ( OBEsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0172        CALL READ_REC_YZ_RL( OBEsFile, fp,Nr,OBEs0,iRec0,myIter,myThid )
                0173        CALL READ_REC_YZ_RL( OBEsFile, fp,Nr,OBEs1,iRec1,myIter,myThid )
56f43c4e8a Mart*0174       ENDIF
2d12bccb16 Jean*0175 # ifdef ALLOW_NONHYDROSTATIC
                0176       IF ( OBEwFile .NE. ' '  ) THEN
                0177        CALL READ_REC_YZ_RL( OBEwFile, fp,Nr,OBEw0,iRec0,myIter,myThid )
                0178        CALL READ_REC_YZ_RL( OBEwFile, fp,Nr,OBEw1,iRec1,myIter,myThid )
                0179       ENDIF
                0180 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0181 # ifdef NONLIN_FRSURF
                0182       IF ( OBEetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0183        CALL READ_REC_YZ_RL(OBEetaFile,fp,1,OBEeta0,iRec0,myIter,myThid)
                0184        CALL READ_REC_YZ_RL(OBEetaFile,fp,1,OBEeta1,iRec1,myIter,myThid)
d260176b41 Mart*0185       ENDIF
                0186 # endif /* NONLIN_FRSURF */
                0187 #endif /* ALLOW_OBCS_EAST */
56f43c4e8a Mart*0188 #ifdef ALLOW_OBCS_WEST
                0189 C     Western boundary
                0190       IF ( OBWuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0191        CALL READ_REC_YZ_RL( OBWuFile, fp,Nr,OBWu0,iRec0,myIter,myThid )
                0192        CALL READ_REC_YZ_RL( OBWuFile, fp,Nr,OBWu1,iRec1,myIter,myThid )
56f43c4e8a Mart*0193       ENDIF
                0194       IF ( OBWvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0195        CALL READ_REC_YZ_RL( OBWvFile, fp,Nr,OBWv0,iRec0,myIter,myThid )
                0196        CALL READ_REC_YZ_RL( OBWvFile, fp,Nr,OBWv1,iRec1,myIter,myThid )
56f43c4e8a Mart*0197       ENDIF
b67ae883c8 Mart*0198       IF ( OBWtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0199        CALL READ_REC_YZ_RL( OBWtFile, fp,Nr,OBWt0,iRec0,myIter,myThid )
                0200        CALL READ_REC_YZ_RL( OBWtFile, fp,Nr,OBWt1,iRec1,myIter,myThid )
56f43c4e8a Mart*0201       ENDIF
b67ae883c8 Mart*0202       IF ( OBWsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0203        CALL READ_REC_YZ_RL( OBWsFile, fp,Nr,OBWs0,iRec0,myIter,myThid )
                0204        CALL READ_REC_YZ_RL( OBWsFile, fp,Nr,OBWs1,iRec1,myIter,myThid )
56f43c4e8a Mart*0205       ENDIF
2d12bccb16 Jean*0206 # ifdef ALLOW_NONHYDROSTATIC
                0207       IF ( OBWwFile .NE. ' '  ) THEN
                0208        CALL READ_REC_YZ_RL( OBWwFile, fp,Nr,OBWw0,iRec0,myIter,myThid )
                0209        CALL READ_REC_YZ_RL( OBWwFile, fp,Nr,OBWw1,iRec1,myIter,myThid )
                0210       ENDIF
                0211 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0212 # ifdef NONLIN_FRSURF
                0213       IF ( OBWetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0214        CALL READ_REC_YZ_RL(OBWetaFile,fp,1,OBWeta0,iRec0,myIter,myThid)
                0215        CALL READ_REC_YZ_RL(OBWetaFile,fp,1,OBWeta1,iRec1,myIter,myThid)
d260176b41 Mart*0216       ENDIF
                0217 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0218 #endif /* ALLOW_OBCS_WEST */
                0219 #ifdef ALLOW_OBCS_NORTH
                0220 C     Northern boundary
                0221       IF ( OBNuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0222        CALL READ_REC_XZ_RL( OBNuFile, fp,Nr,OBNu0,iRec0,myIter,myThid )
                0223        CALL READ_REC_XZ_RL( OBNuFile, fp,Nr,OBNu1,iRec1,myIter,myThid )
56f43c4e8a Mart*0224       ENDIF
                0225       IF ( OBNvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0226        CALL READ_REC_XZ_RL( OBNvFile, fp,Nr,OBNv0,iRec0,myIter,myThid )
                0227        CALL READ_REC_XZ_RL( OBNvFile, fp,Nr,OBNv1,iRec1,myIter,myThid )
56f43c4e8a Mart*0228       ENDIF
b67ae883c8 Mart*0229       IF ( OBNtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0230        CALL READ_REC_XZ_RL( OBNtFile, fp,Nr,OBNt0,iRec0,myIter,myThid )
                0231        CALL READ_REC_XZ_RL( OBNtFile, fp,Nr,OBNt1,iRec1,myIter,myThid )
56f43c4e8a Mart*0232       ENDIF
b67ae883c8 Mart*0233       IF ( OBNsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0234        CALL READ_REC_XZ_RL( OBNsFile, fp,Nr,OBNs0,iRec0,myIter,myThid )
                0235        CALL READ_REC_XZ_RL( OBNsFile, fp,Nr,OBNs1,iRec1,myIter,myThid )
56f43c4e8a Mart*0236       ENDIF
2d12bccb16 Jean*0237 # ifdef ALLOW_NONHYDROSTATIC
                0238       IF ( OBNwFile .NE. ' '  ) THEN
                0239        CALL READ_REC_XZ_RL( OBNwFile, fp,Nr,OBNw0,iRec0,myIter,myThid )
                0240        CALL READ_REC_XZ_RL( OBNwFile, fp,Nr,OBNw1,iRec1,myIter,myThid )
                0241       ENDIF
                0242 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0243 # ifdef NONLIN_FRSURF
                0244       IF ( OBNetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0245        CALL READ_REC_XZ_RL(OBNetaFile,fp,1,OBNeta0,iRec0,myIter,myThid)
                0246        CALL READ_REC_XZ_RL(OBNetaFile,fp,1,OBNeta1,iRec1,myIter,myThid)
d260176b41 Mart*0247       ENDIF
                0248 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0249 #endif /* ALLOW_OBCS_NORTH */
                0250 #ifdef ALLOW_OBCS_SOUTH
                0251 C     Southern boundary
                0252       IF ( OBSuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0253        CALL READ_REC_XZ_RL( OBSuFile, fp,Nr,OBSu0,iRec0,myIter,myThid )
                0254        CALL READ_REC_XZ_RL( OBSuFile, fp,Nr,OBSu1,iRec1,myIter,myThid )
56f43c4e8a Mart*0255       ENDIF
                0256       IF ( OBSvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0257        CALL READ_REC_XZ_RL( OBSvFile, fp,Nr,OBSv0,iRec0,myIter,myThid )
                0258        CALL READ_REC_XZ_RL( OBSvFile, fp,Nr,OBSv1,iRec1,myIter,myThid )
56f43c4e8a Mart*0259       ENDIF
b67ae883c8 Mart*0260       IF ( OBStFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0261        CALL READ_REC_XZ_RL( OBStFile, fp,Nr,OBSt0,iRec0,myIter,myThid )
                0262        CALL READ_REC_XZ_RL( OBStFile, fp,Nr,OBSt1,iRec1,myIter,myThid )
56f43c4e8a Mart*0263       ENDIF
b67ae883c8 Mart*0264       IF ( OBSsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0265        CALL READ_REC_XZ_RL( OBSsFile, fp,Nr,OBSs0,iRec0,myIter,myThid )
                0266        CALL READ_REC_XZ_RL( OBSsFile, fp,Nr,OBSs1,iRec1,myIter,myThid )
56f43c4e8a Mart*0267       ENDIF
2d12bccb16 Jean*0268 # ifdef ALLOW_NONHYDROSTATIC
                0269       IF ( OBSwFile .NE. ' '  ) THEN
                0270        CALL READ_REC_XZ_RL( OBSwFile, fp,Nr,OBSw0,iRec0,myIter,myThid )
                0271        CALL READ_REC_XZ_RL( OBSwFile, fp,Nr,OBSw1,iRec1,myIter,myThid )
                0272       ENDIF
                0273 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0274 # ifdef NONLIN_FRSURF
                0275       IF ( OBSetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0276        CALL READ_REC_XZ_RL(OBSetaFile,fp,1,OBSeta0,iRec0,myIter,myThid)
                0277        CALL READ_REC_XZ_RL(OBSetaFile,fp,1,OBSeta1,iRec1,myIter,myThid)
d260176b41 Mart*0278       ENDIF
                0279 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0280 #endif /* ALLOW_OBCS_SOUTH */
f3b6ef0cda Patr*0281 
ee1c912a22 Mart*0282 #ifdef ALLOW_PTRACERS
                0283       IF (usePTRACERS) THEN
                0284 C     read boundary values for passive tracers
0fc7dbfcbd Jean*0285        DO iTr = 1, PTRACERS_numInUse
ee1c912a22 Mart*0286 # ifdef ALLOW_OBCS_EAST
                0287 C     Eastern boundary
0fc7dbfcbd Jean*0288         IF ( OBEptrFile(iTr) .NE. ' '  ) THEN
                0289          CALL READ_REC_YZ_RL( OBEptrFile(iTr), fp, Nr,
005af54e38 Jean*0290      &                OBEptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
0fc7dbfcbd Jean*0291          CALL READ_REC_YZ_RL( OBEptrFile(iTr), fp, Nr,
005af54e38 Jean*0292      &                OBEptr1(1-OLy,1,1,1,iTr), iRec1, myIter, myThid )
ee1c912a22 Mart*0293         ENDIF
65e667c895 Mart*0294 # endif /* ALLOW_OBCS_EAST */
ee1c912a22 Mart*0295 # ifdef ALLOW_OBCS_WEST
                0296 C     Western boundary
0fc7dbfcbd Jean*0297         IF ( OBWptrFile(iTr) .NE. ' '  ) THEN
                0298          CALL READ_REC_YZ_RL( OBWptrFile(iTr), fp, Nr,
005af54e38 Jean*0299      &                OBWptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
0fc7dbfcbd Jean*0300          CALL READ_REC_YZ_RL( OBWptrFile(iTr), fp, Nr,
005af54e38 Jean*0301      &                OBWptr1(1-OLy,1,1,1,iTr), iRec1, myIter, myThid )
ee1c912a22 Mart*0302         ENDIF
                0303 # endif /* ALLOW_OBCS_WEST */
                0304 # ifdef ALLOW_OBCS_NORTH
                0305 C     Northern boundary
0fc7dbfcbd Jean*0306         IF ( OBNptrFile(iTr) .NE. ' '  ) THEN
                0307          CALL READ_REC_XZ_RL( OBNptrFile(iTr), fp, Nr,
005af54e38 Jean*0308      &                OBNptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
0fc7dbfcbd Jean*0309          CALL READ_REC_XZ_RL( OBNptrFile(iTr), fp, Nr,
005af54e38 Jean*0310      &                OBNptr1(1-OLy,1,1,1,iTr), iRec1, myIter, myThid )
ee1c912a22 Mart*0311         ENDIF
                0312 # endif /* ALLOW_OBCS_NORTH */
                0313 # ifdef ALLOW_OBCS_SOUTH
                0314 C     Southern boundary
0fc7dbfcbd Jean*0315         IF ( OBSptrFile(iTr) .NE. ' '  ) THEN
                0316          CALL READ_REC_XZ_RL( OBSptrFile(iTr), fp, Nr,
005af54e38 Jean*0317      &                OBSptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
0fc7dbfcbd Jean*0318          CALL READ_REC_XZ_RL( OBSptrFile(iTr), fp, Nr,
005af54e38 Jean*0319      &                OBSptr1(1-OLy,1,1,1,iTr), iRec1, myIter, myThid )
ee1c912a22 Mart*0320         ENDIF
                0321 # endif /* ALLOW_OBCS_SOUTH */
0fc7dbfcbd Jean*0322 C     end do iTr
ee1c912a22 Mart*0323        ENDDO
                0324 C     end if (usePTRACERS)
                0325       ENDIF
                0326 #endif /* ALLOW_PTRACERS */
1b21d1d746 Jean*0327 
56f43c4e8a Mart*0328 C     At this point in external_fields_load the input fields are exchanged.
1b21d1d746 Jean*0329 C     However, we do not have exchange routines for vertical
56f43c4e8a Mart*0330 C     slices and they are not planned, either, so the approriate fields
1b21d1d746 Jean*0331 C     are exchanged after the open boundary conditions have been
56f43c4e8a Mart*0332 C     applied. (in DYNAMICS and DO_FIELDS_BLOCKING_EXCHANGES)
392e004d68 Jean*0333        _BARRIER
                0334 
f3b6ef0cda Patr*0335 # ifndef ALLOW_AUTODIFF
8b081ca9eb Jean*0336 C-    save newly loaded time-record
                0337         DO bj = myByLo(myThid), myByHi(myThid)
                0338          DO bi = myBxLo(myThid), myBxHi(myThid)
                0339            OBCS_ldRec(bi,bj) = iRec1
                0340          ENDDO
                0341         ENDDO
f3b6ef0cda Patr*0342 # endif /* ALLOW_AUTODIFF */
8b081ca9eb Jean*0343 
392e004d68 Jean*0344 C     end if time to read new data
56f43c4e8a Mart*0345       ENDIF
                0346 
                0347 C     if not periodicForcing
                0348       ELSE
ee1c912a22 Mart*0349        aWght = 0. _d 0
                0350        bWght = 1. _d 0
56f43c4e8a Mart*0351 C     read boundary values once and for all
                0352        IF ( myIter .EQ. nIter0 ) THEN
0fc7dbfcbd Jean*0353 #ifndef ALLOW_MDSIO
50e2c0b6cd Jean*0354          STOP 'ABNORMAL END: OBCS_FIELDS_LOAD: NEEDS MSDIO PKG'
0fc7dbfcbd Jean*0355 #endif /* ALLOW_MDSIO */
392e004d68 Jean*0356         _BARRIER
b67ae883c8 Mart*0357 C      Read constant boundary conditions only for myIter = nIter0
ee1c912a22 Mart*0358         WRITE(msgBuf,'(1X,A,I10,1P1E20.12)')
50e2c0b6cd Jean*0359      &       'OBCS_FIELDS_LOAD: Reading initial data:',
ee1c912a22 Mart*0360      &       myIter, myTime
                0361         CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
                0362      &       SQUEEZE_RIGHT,myThid)
0fc7dbfcbd Jean*0363         iRec0 = 1
                0364 
b67ae883c8 Mart*0365 #ifdef ALLOW_OBCS_EAST
56f43c4e8a Mart*0366 C     Eastern boundary
                0367         IF ( OBEuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0368          CALL READ_REC_YZ_RL( OBEuFile,fp,Nr,OBEu0,iRec0,myIter,myThid )
56f43c4e8a Mart*0369         ENDIF
                0370         IF ( OBEvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0371          CALL READ_REC_YZ_RL( OBEvFile,fp,Nr,OBEv0,iRec0,myIter,myThid )
56f43c4e8a Mart*0372         ENDIF
b67ae883c8 Mart*0373         IF ( OBEtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0374          CALL READ_REC_YZ_RL( OBEtFile,fp,Nr,OBEt0,iRec0,myIter,myThid )
56f43c4e8a Mart*0375         ENDIF
b67ae883c8 Mart*0376         IF ( OBEsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0377          CALL READ_REC_YZ_RL( OBEsFile,fp,Nr,OBEs0,iRec0,myIter,myThid )
56f43c4e8a Mart*0378         ENDIF
2d12bccb16 Jean*0379 # ifdef ALLOW_NONHYDROSTATIC
                0380         IF ( OBEwFile .NE. ' '  ) THEN
                0381          CALL READ_REC_YZ_RL( OBEwFile,fp,Nr,OBEw0,iRec0,myIter,myThid )
                0382         ENDIF
                0383 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0384 # ifdef NONLIN_FRSURF
                0385         IF ( OBEetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0386          CALL READ_REC_YZ_RL( OBEetaFile, fp, 1, OBEeta0, iRec0,
                0387      &                        myIter, myThid )
d260176b41 Mart*0388         ENDIF
                0389 # endif /* NONLIN_FRSURF */
65e667c895 Mart*0390 #endif /* ALLOW_OBCS_EAST */
56f43c4e8a Mart*0391 #ifdef ALLOW_OBCS_WEST
                0392 C     Western boundary
                0393         IF ( OBWuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0394          CALL READ_REC_YZ_RL( OBWuFile,fp,Nr,OBWu0,iRec0,myIter,myThid )
56f43c4e8a Mart*0395         ENDIF
                0396         IF ( OBWvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0397          CALL READ_REC_YZ_RL( OBWvFile,fp,Nr,OBWv0,iRec0,myIter,myThid )
56f43c4e8a Mart*0398         ENDIF
b67ae883c8 Mart*0399         IF ( OBWtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0400          CALL READ_REC_YZ_RL( OBWtFile,fp,Nr,OBWt0,iRec0,myIter,myThid )
56f43c4e8a Mart*0401         ENDIF
b67ae883c8 Mart*0402         IF ( OBWsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0403          CALL READ_REC_YZ_RL( OBWsFile,fp,Nr,OBWs0,iRec0,myIter,myThid )
56f43c4e8a Mart*0404         ENDIF
2d12bccb16 Jean*0405 # ifdef ALLOW_NONHYDROSTATIC
                0406         IF ( OBWwFile .NE. ' '  ) THEN
                0407          CALL READ_REC_YZ_RL( OBWwFile,fp,Nr,OBWw0,iRec0,myIter,myThid )
                0408         ENDIF
                0409 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0410 # ifdef NONLIN_FRSURF
                0411         IF ( OBWetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0412          CALL READ_REC_YZ_RL( OBWetaFile, fp, 1, OBWeta0, iRec0,
                0413      &                        myIter, myThid )
d260176b41 Mart*0414         ENDIF
                0415 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0416 #endif /* ALLOW_OBCS_WEST */
                0417 #ifdef ALLOW_OBCS_NORTH
                0418 C     Northern boundary
                0419         IF ( OBNuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0420          CALL READ_REC_XZ_RL( OBNuFile,fp,Nr,OBNu0,iRec0,myIter,myThid )
56f43c4e8a Mart*0421         ENDIF
                0422         IF ( OBNvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0423          CALL READ_REC_XZ_RL( OBNvFile,fp,Nr,OBNv0,iRec0,myIter,myThid )
56f43c4e8a Mart*0424         ENDIF
b67ae883c8 Mart*0425         IF ( OBNtFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0426          CALL READ_REC_XZ_RL( OBNtFile,fp,Nr,OBNt0,iRec0,myIter,myThid )
56f43c4e8a Mart*0427         ENDIF
b67ae883c8 Mart*0428         IF ( OBNsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0429          CALL READ_REC_XZ_RL( OBNsFile,fp,Nr,OBNs0,iRec0,myIter,myThid )
56f43c4e8a Mart*0430         ENDIF
2d12bccb16 Jean*0431 # ifdef ALLOW_NONHYDROSTATIC
                0432         IF ( OBNwFile .NE. ' '  ) THEN
acc2fd269d Jean*0433          CALL READ_REC_XZ_RL( OBNwFile,fp,Nr,OBNw0,iRec0,myIter,myThid )
2d12bccb16 Jean*0434         ENDIF
                0435 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0436 # ifdef NONLIN_FRSURF
                0437         IF ( OBNetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0438          CALL READ_REC_XZ_RL( OBNetaFile, fp, 1, OBNeta0, iRec0,
                0439      &                        myIter, myThid )
d260176b41 Mart*0440         ENDIF
                0441 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0442 #endif /* ALLOW_OBCS_NORTH */
                0443 #ifdef ALLOW_OBCS_SOUTH
                0444 C     Southern boundary
                0445         IF ( OBSuFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0446          CALL READ_REC_XZ_RL( OBSuFile,fp,Nr,OBSu0,iRec0,myIter,myThid )
56f43c4e8a Mart*0447         ENDIF
                0448         IF ( OBSvFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0449          CALL READ_REC_XZ_RL( OBSvFile,fp,Nr,OBSv0,iRec0,myIter,myThid )
56f43c4e8a Mart*0450         ENDIF
b67ae883c8 Mart*0451         IF ( OBStFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0452          CALL READ_REC_XZ_RL( OBStFile,fp,Nr,OBSt0,iRec0,myIter,myThid )
56f43c4e8a Mart*0453         ENDIF
b67ae883c8 Mart*0454         IF ( OBSsFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0455          CALL READ_REC_XZ_RL( OBSsFile,fp,Nr,OBSs0,iRec0,myIter,myThid )
56f43c4e8a Mart*0456         ENDIF
2d12bccb16 Jean*0457 # ifdef ALLOW_NONHYDROSTATIC
                0458         IF ( OBSwFile .NE. ' '  ) THEN
acc2fd269d Jean*0459          CALL READ_REC_XZ_RL( OBSwFile,fp,Nr,OBSw0,iRec0,myIter,myThid )
2d12bccb16 Jean*0460         ENDIF
                0461 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0462 # ifdef NONLIN_FRSURF
                0463         IF ( OBSetaFile .NE. ' '  ) THEN
0fc7dbfcbd Jean*0464          CALL READ_REC_XZ_RL( OBSetaFile, fp, 1, OBSeta0, iRec0,
                0465      &                        myIter, myThid )
d260176b41 Mart*0466         ENDIF
                0467 # endif /* NONLIN_FRSURF */
56f43c4e8a Mart*0468 #endif /* ALLOW_OBCS_SOUTH */
005af54e38 Jean*0469 
ee1c912a22 Mart*0470 #ifdef ALLOW_PTRACERS
                0471         IF (usePTRACERS) THEN
                0472 C     read passive tracer boundary values
0fc7dbfcbd Jean*0473          DO iTr = 1, PTRACERS_numInUse
ee1c912a22 Mart*0474 # ifdef ALLOW_OBCS_EAST
                0475 C     Eastern boundary
0fc7dbfcbd Jean*0476           IF ( OBEptrFile(iTr) .NE. ' '  ) THEN
                0477            CALL READ_REC_YZ_RL( OBEptrFile(iTr), fp, Nr,
005af54e38 Jean*0478      &               OBEptr0(1-OLy,1,1,1,iTr), iRec0,myIter, myThid )
ee1c912a22 Mart*0479           ENDIF
65e667c895 Mart*0480 # endif /* ALLOW_OBCS_EAST */
ee1c912a22 Mart*0481 # ifdef ALLOW_OBCS_WEST
                0482 C     Western boundary
0fc7dbfcbd Jean*0483           IF ( OBWptrFile(iTr) .NE. ' '  ) THEN
                0484            CALL READ_REC_YZ_RL( OBWptrFile(iTr), fp, Nr,
005af54e38 Jean*0485      &               OBWptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
ee1c912a22 Mart*0486           ENDIF
                0487 # endif /* ALLOW_OBCS_WEST */
                0488 # ifdef ALLOW_OBCS_NORTH
                0489 C     Northern boundary
0fc7dbfcbd Jean*0490           IF ( OBNptrFile(iTr) .NE. ' '  ) THEN
                0491            CALL READ_REC_XZ_RL( OBNptrFile(iTr), fp, Nr,
005af54e38 Jean*0492      &               OBNptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
ee1c912a22 Mart*0493           ENDIF
                0494 # endif /* ALLOW_OBCS_NORTH */
                0495 # ifdef ALLOW_OBCS_SOUTH
                0496 C     Southern boundary
0fc7dbfcbd Jean*0497           IF ( OBSptrFile(iTr) .NE. ' '  ) THEN
                0498            CALL READ_REC_XZ_RL( OBSptrFile(iTr), fp, Nr,
005af54e38 Jean*0499      &               OBSptr0(1-OLy,1,1,1,iTr), iRec0, myIter, myThid )
ee1c912a22 Mart*0500           ENDIF
                0501 # endif /* ALLOW_OBCS_SOUTH */
0fc7dbfcbd Jean*0502 C     end do iTr
ee1c912a22 Mart*0503          ENDDO
                0504 C     end if (usePTRACERS)
                0505         ENDIF
                0506 #endif /* ALLOW_PTRACERS */
392e004d68 Jean*0507         _BARRIER
56f43c4e8a Mart*0508 C     endif myIter .EQ. nIter0
                0509        ENDIF
ee1c912a22 Mart*0510 C     endif for periodicForcing
                0511       ENDIF
                0512 
                0513 C--   Now interpolate OBSu, OBSv, OBSt, OBSs, OBSptr, etc.
1b21d1d746 Jean*0514 C--   For periodicForcing, aWght = 0. and bWght = 1. so that the
                0515 C--   interpolation boilds down to copying the time-independent
ee1c912a22 Mart*0516 C--   forcing field OBSu0 to OBSu
b67ae883c8 Mart*0517 #ifdef ALLOW_OBCS_EAST
50e2c0b6cd Jean*0518        IF ( OBEuFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0519      &      OBEu, OBEu0, OBEu1, aWght, bWght, myThid )
50e2c0b6cd Jean*0520        IF ( OBEvFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0521      &      OBEv, OBEv0, OBEv1, aWght, bWght, myThid )
50e2c0b6cd Jean*0522        IF ( OBEtFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0523      &      OBEt, OBEt0, OBEt1, aWght, bWght, myThid )
50e2c0b6cd Jean*0524        IF ( OBEsFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0525      &      OBEs, OBEs0, OBEs1, aWght, bWght, myThid )
2d12bccb16 Jean*0526 # ifdef ALLOW_NONHYDROSTATIC
50e2c0b6cd Jean*0527        IF ( OBEwFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
2d12bccb16 Jean*0528      &      OBEw, OBEw0, OBEw1, aWght, bWght, myThid )
                0529 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0530 # ifdef NONLIN_FRSURF
                0531        IF ( OBEetaFile .NE. ' ' ) THEN
                0532         DO bj = myByLo(myThid), myByHi(myThid)
                0533          DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0534           DO j=1-OLy,sNy+OLy
d260176b41 Mart*0535            OBEeta(j,bi,bj) = bWght*OBEeta0(j,bi,bj)
                0536      &                      +aWght*OBEeta1(j,bi,bj)
                0537           ENDDO
                0538          ENDDO
0fc7dbfcbd Jean*0539         ENDDO
d260176b41 Mart*0540        ENDIF
                0541 # endif /* NONLIN_FRSURF */
b67ae883c8 Mart*0542 #endif /* ALLOW_OBCS_EAST */
                0543 #ifdef ALLOW_OBCS_WEST
50e2c0b6cd Jean*0544        IF ( OBWuFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0545      &      OBWu, OBWu0, OBWu1, aWght, bWght, myThid )
50e2c0b6cd Jean*0546        IF ( OBWvFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0547      &      OBWv, OBWv0, OBWv1, aWght, bWght, myThid )
50e2c0b6cd Jean*0548        IF ( OBWtFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0549      &      OBWt, OBWt0, OBWt1, aWght, bWght, myThid )
50e2c0b6cd Jean*0550        IF ( OBWsFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
ee1c912a22 Mart*0551      &      OBWs, OBWs0, OBWs1, aWght, bWght, myThid )
2d12bccb16 Jean*0552 # ifdef ALLOW_NONHYDROSTATIC
50e2c0b6cd Jean*0553        IF ( OBWwFile .NE. ' '  ) CALL OBCS_TIME_INTERP_YZ(
2d12bccb16 Jean*0554      &      OBWw, OBWw0, OBWw1, aWght, bWght, myThid )
                0555 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0556 # ifdef NONLIN_FRSURF
                0557        IF ( OBWetaFile .NE. ' ' ) THEN
                0558         DO bj = myByLo(myThid), myByHi(myThid)
                0559          DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0560           DO j=1-OLy,sNy+OLy
d260176b41 Mart*0561            OBWeta(j,bi,bj) = bWght*OBWeta0(j,bi,bj)
                0562      &                      +aWght*OBWeta1(j,bi,bj)
                0563           ENDDO
                0564          ENDDO
0fc7dbfcbd Jean*0565         ENDDO
d260176b41 Mart*0566        ENDIF
                0567 # endif /* NONLIN_FRSURF */
b67ae883c8 Mart*0568 #endif /* ALLOW_OBCS_WEST */
                0569 #ifdef ALLOW_OBCS_NORTH
50e2c0b6cd Jean*0570        IF ( OBNuFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0571      &      OBNu, OBNu0, OBNu1, aWght, bWght, myThid )
50e2c0b6cd Jean*0572        IF ( OBNvFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0573      &      OBNv, OBNv0, OBNv1, aWght, bWght, myThid )
50e2c0b6cd Jean*0574        IF ( OBNtFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0575      &      OBNt, OBNt0, OBNt1, aWght, bWght, myThid )
50e2c0b6cd Jean*0576        IF ( OBNsFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0577      &      OBNs, OBNs0, OBNs1, aWght, bWght, myThid )
2d12bccb16 Jean*0578 # ifdef ALLOW_NONHYDROSTATIC
50e2c0b6cd Jean*0579        IF ( OBNwFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
2d12bccb16 Jean*0580      &      OBNw, OBNw0, OBNw1, aWght, bWght, myThid )
                0581 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0582 # ifdef NONLIN_FRSURF
                0583        IF ( OBNetaFile .NE. ' ' ) THEN
                0584         DO bj = myByLo(myThid), myByHi(myThid)
                0585          DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0586           DO i=1-OLx,sNx+OLx
d260176b41 Mart*0587            OBNeta(i,bi,bj) = bWght*OBNeta0(i,bi,bj)
                0588      &                      +aWght*OBNeta1(i,bi,bj)
                0589           ENDDO
                0590          ENDDO
0fc7dbfcbd Jean*0591         ENDDO
d260176b41 Mart*0592        ENDIF
                0593 # endif /* NONLIN_FRSURF */
b67ae883c8 Mart*0594 #endif /* ALLOW_OBCS_NORTH */
                0595 #ifdef ALLOW_OBCS_SOUTH
50e2c0b6cd Jean*0596        IF ( OBSuFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0597      &      OBSu, OBSu0, OBSu1, aWght, bWght, myThid )
50e2c0b6cd Jean*0598        IF ( OBSvFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0599      &      OBSv, OBSv0, OBSv1, aWght, bWght, myThid )
50e2c0b6cd Jean*0600        IF ( OBStFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0601      &      OBSt, OBSt0, OBSt1, aWght, bWght, myThid )
50e2c0b6cd Jean*0602        IF ( OBSsFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
ee1c912a22 Mart*0603      &      OBSs, OBSs0, OBSs1, aWght, bWght, myThid )
2d12bccb16 Jean*0604 # ifdef ALLOW_NONHYDROSTATIC
50e2c0b6cd Jean*0605        IF ( OBSwFile .NE. ' '  ) CALL OBCS_TIME_INTERP_XZ(
2d12bccb16 Jean*0606      &      OBSw, OBSw0, OBSw1, aWght, bWght, myThid )
                0607 # endif /* ALLOW_NONHYDROSTATIC */
d260176b41 Mart*0608 # ifdef NONLIN_FRSURF
                0609        IF ( OBSetaFile .NE. ' ' ) THEN
                0610         DO bj = myByLo(myThid), myByHi(myThid)
                0611          DO bi = myBxLo(myThid), myBxHi(myThid)
005af54e38 Jean*0612           DO i=1-OLx,sNx+OLx
d260176b41 Mart*0613            OBSeta(i,bi,bj) = bWght*OBSeta0(i,bi,bj)
                0614      &                      +aWght*OBSeta1(i,bi,bj)
                0615           ENDDO
                0616          ENDDO
0fc7dbfcbd Jean*0617         ENDDO
d260176b41 Mart*0618        ENDIF
                0619 # endif /* NONLIN_FRSURF */
b67ae883c8 Mart*0620 #endif /* ALLOW_OBCS_SOUTH */
005af54e38 Jean*0621 
ee1c912a22 Mart*0622 #ifdef ALLOW_PTRACERS
                0623       IF (usePTRACERS) THEN
                0624 C     "interpolate" passive tracer boundary values
0fc7dbfcbd Jean*0625        DO iTr = 1, PTRACERS_numInUse
ee1c912a22 Mart*0626 # ifdef ALLOW_OBCS_EAST
0fc7dbfcbd Jean*0627         IF ( OBEptrFile(iTr) .NE. ' '  )
50e2c0b6cd Jean*0628      &       CALL OBCS_TIME_INTERP_YZ(
005af54e38 Jean*0629      O       OBEptr (1-OLy,1,1,1,iTr),
                0630      I       OBEptr0(1-OLy,1,1,1,iTr),
                0631      I       OBEptr1(1-OLy,1,1,1,iTr), aWght, bWght, myThid )
ee1c912a22 Mart*0632 # endif /* ALLOW_OBCS_EAST */
                0633 # ifdef ALLOW_OBCS_WEST
0fc7dbfcbd Jean*0634         IF ( OBWptrFile(iTr) .NE. ' '  )
50e2c0b6cd Jean*0635      &       CALL OBCS_TIME_INTERP_YZ(
005af54e38 Jean*0636      O       OBWptr (1-OLy,1,1,1,iTr),
                0637      I       OBWptr0(1-OLy,1,1,1,iTr),
                0638      I       OBWptr1(1-OLy,1,1,1,iTr), aWght, bWght, myThid )
ee1c912a22 Mart*0639 # endif /* ALLOW_OBCS_WEST */
                0640 # ifdef ALLOW_OBCS_NORTH
0fc7dbfcbd Jean*0641         IF ( OBNptrFile(iTr) .NE. ' '  )
50e2c0b6cd Jean*0642      &       CALL OBCS_TIME_INTERP_XZ(
005af54e38 Jean*0643      O       OBNptr (1-OLx,1,1,1,iTr),
                0644      I       OBNptr0(1-OLx,1,1,1,iTr),
                0645      I       OBNptr1(1-OLx,1,1,1,iTr), aWght, bWght, myThid )
ee1c912a22 Mart*0646 # endif /* ALLOW_OBCS_NORTH */
                0647 # ifdef ALLOW_OBCS_SOUTH
0fc7dbfcbd Jean*0648         IF ( OBSptrFile(iTr) .NE. ' '  )
50e2c0b6cd Jean*0649      &       CALL OBCS_TIME_INTERP_XZ(
005af54e38 Jean*0650      O       OBSptr (1-OLx,1,1,1,iTr),
                0651      I       OBSptr0(1-OLx,1,1,1,iTr),
                0652      I       OBSptr1(1-OLx,1,1,1,iTr), aWght, bWght, myThid )
ee1c912a22 Mart*0653 # endif /* ALLOW_OBCS_SOUTH */
0fc7dbfcbd Jean*0654 C     end do iTr
ee1c912a22 Mart*0655        ENDDO
                0656 C     end if (usePTRACERS)
                0657       ENDIF
                0658 #endif /* ALLOW_PTRACERS */
                0659 
                0660       RETURN
                0661       END
                0662 
acc2fd269d Jean*0663 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
ee1c912a22 Mart*0664 CBOP
50e2c0b6cd Jean*0665 C     !ROUTINE: OBCS_TIME_INTERP_XZ
ee1c912a22 Mart*0666 C     !INTERFACE:
50e2c0b6cd Jean*0667       SUBROUTINE OBCS_TIME_INTERP_XZ(
1b21d1d746 Jean*0668      O     fld,
ee1c912a22 Mart*0669      I     fld0, fld1, aWght, bWght, myThid )
8b081ca9eb Jean*0670 
ee1c912a22 Mart*0671 C     !DESCRIPTION: \bv
                0672 C     *==========================================================*
50e2c0b6cd Jean*0673 C     | SUBROUTINE OBCS_TIME_INTERP_XZ
ee1c912a22 Mart*0674 C     | o Interpolate between to records
                0675 C     *==========================================================*
                0676 C     \ev
                0677 
                0678 C     !USES:
                0679       IMPLICIT NONE
                0680 C     === Global variables ===
                0681 #include "SIZE.h"
                0682 #include "EEPARAMS.h"
                0683 #include "PARAMS.h"
1b21d1d746 Jean*0684 
ee1c912a22 Mart*0685 C     !INPUT/OUTPUT PARAMETERS:
                0686 C     === Routine arguments ===
                0687 C     aWght, bWght :: Interpolation weights
50e2c0b6cd Jean*0688 C     myThid       :: my Thread Id. number
005af54e38 Jean*0689       _RL fld (1-OLx:sNx+OLx,Nr,nSx,nSy)
                0690       _RL fld0(1-OLx:sNx+OLx,Nr,nSx,nSy)
                0691       _RL fld1(1-OLx:sNx+OLx,Nr,nSx,nSy)
50e2c0b6cd Jean*0692       _RL aWght,bWght
                0693       INTEGER myThid
ee1c912a22 Mart*0694 
                0695 C     !LOCAL VARIABLES:
                0696 C     === Local arrays ===
                0697 C     bi,bj,i,j :: loop counters
                0698       INTEGER bi,bj,i,k
                0699 CEOP
                0700        DO bj = myByLo(myThid), myByHi(myThid)
                0701         DO bi = myBxLo(myThid), myBxHi(myThid)
50e2c0b6cd Jean*0702          DO k = 1, Nr
005af54e38 Jean*0703           DO i=1-OLx,sNx+OLx
1b21d1d746 Jean*0704            fld(i,k,bi,bj)   = bWght*fld0(i,k,bi,bj)
ee1c912a22 Mart*0705      &                       +aWght*fld1(i,k,bi,bj)
b67ae883c8 Mart*0706           ENDDO
                0707          ENDDO
                0708         ENDDO
392e004d68 Jean*0709        ENDDO
56f43c4e8a Mart*0710 
                0711       RETURN
                0712       END
acc2fd269d Jean*0713 
                0714 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
ee1c912a22 Mart*0715 CBOP
50e2c0b6cd Jean*0716 C     !ROUTINE: OBCS_TIME_INTERP_YZ
ee1c912a22 Mart*0717 C     !INTERFACE:
50e2c0b6cd Jean*0718       SUBROUTINE OBCS_TIME_INTERP_YZ(
1b21d1d746 Jean*0719      O     fld,
ee1c912a22 Mart*0720      I     fld0, fld1, aWght, bWght, myThid )
8b081ca9eb Jean*0721 
ee1c912a22 Mart*0722 C     !DESCRIPTION: \bv
                0723 C     *==========================================================*
50e2c0b6cd Jean*0724 C     | SUBROUTINE OBCS_TIME_INTERP_YZ
ee1c912a22 Mart*0725 C     | o Interpolate between to records
                0726 C     *==========================================================*
                0727 C     \ev
                0728 
                0729 C     !USES:
                0730       IMPLICIT NONE
                0731 C     === Global variables ===
                0732 #include "SIZE.h"
                0733 #include "EEPARAMS.h"
                0734 #include "PARAMS.h"
1b21d1d746 Jean*0735 
ee1c912a22 Mart*0736 C     !INPUT/OUTPUT PARAMETERS:
                0737 C     === Routine arguments ===
                0738 C     aWght, bWght :: Interpolation weights
50e2c0b6cd Jean*0739 C     myThid       :: my Thread Id. number
005af54e38 Jean*0740       _RL fld (1-OLy:sNy+OLy,Nr,nSx,nSy)
                0741       _RL fld0(1-OLy:sNy+OLy,Nr,nSx,nSy)
                0742       _RL fld1(1-OLy:sNy+OLy,Nr,nSx,nSy)
50e2c0b6cd Jean*0743       _RL aWght,bWght
                0744       INTEGER myThid
ee1c912a22 Mart*0745 
                0746 C     !LOCAL VARIABLES:
                0747 C     === Local arrays ===
                0748 C     bi,bj,i,j :: loop counters
                0749       INTEGER bi,bj,j,k
                0750 CEOP
                0751        DO bj = myByLo(myThid), myByHi(myThid)
                0752         DO bi = myBxLo(myThid), myBxHi(myThid)
50e2c0b6cd Jean*0753          DO k = 1, Nr
005af54e38 Jean*0754           DO j=1-OLy,sNy+OLy
1b21d1d746 Jean*0755            fld(j,k,bi,bj)   = bWght*fld0(j,k,bi,bj)
ee1c912a22 Mart*0756      &                       +aWght*fld1(j,k,bi,bj)
                0757           ENDDO
                0758          ENDDO
                0759         ENDDO
0fc7dbfcbd Jean*0760        ENDDO
ee1c912a22 Mart*0761 
9bd340abd6 Jean*0762 #endif /* ALLOW_OBCS AND ALLOW_OBCS_PRESCRIBE */
af61e5eb16 Mart*0763 #endif /* ndef EXCLUDE_FFIELDS_LOAD */
56f43c4e8a Mart*0764 
ee1c912a22 Mart*0765        RETURN
                0766        END