Back to home page

MITgcm

 
 

    


File indexing completed on 2021-10-19 05:17:36 UTC

view on githubraw file Latest commit 11c3150c on 2021-10-18 18:00:35 UTC
b4d5e534c1 Step*0001 #include "OFFLINE_OPTIONS.h"
11c3150c71 Mart*0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
24eceaed01 Jean*0005 
72a8e44ea5 Jean*0006 CBOP
b4d5e534c1 Step*0007 C     !ROUTINE: OFFLINE_FIELDS_LOAD
                0008 C     !INTERFACE:
                0009       SUBROUTINE OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
72a8e44ea5 Jean*0010 
                0011 C     !DESCRIPTION: \bv
b4d5e534c1 Step*0012 C     *==========================================================*
24eceaed01 Jean*0013 C     | SUBROUTINE OFFLINE_FIELDS_LOAD
                0014 C     | o Control reading of fields from external source.
b4d5e534c1 Step*0015 C     *==========================================================*
33465d2b39 Jean*0016 C     | Offline External source field loading routine.
24eceaed01 Jean*0017 C     | This routine is called every time we want to
                0018 C     | load a a set of external fields. The routine decides
                0019 C     | which fields to load and then reads them in.
                0020 C     | This routine needs to be customised for particular
                0021 C     | experiments.
                0022 C     | Notes
                0023 C     | =====
76fc45bcd6 Step*0024 C     | currently the file names need to be specific lengths
                0025 C     | would like to make this more flexible QQ
b4d5e534c1 Step*0026 C     *==========================================================*
72a8e44ea5 Jean*0027 C     \ev
b4d5e534c1 Step*0028 
                0029 C     !USES:
                0030       IMPLICIT NONE
72a8e44ea5 Jean*0031 
b4d5e534c1 Step*0032 C     === Global variables ===
                0033 #include "SIZE.h"
                0034 #include "EEPARAMS.h"
                0035 #include "PARAMS.h"
f90ac18778 Jean*0036 c#include "GRID.h"
a623cc0987 Jean*0037 #include "SURFACE.h"
b4d5e534c1 Step*0038 #include "DYNVARS.h"
a623cc0987 Jean*0039 #include "FFIELDS.h"
b4d5e534c1 Step*0040 #ifdef ALLOW_GMREDI
                0041 #include "GMREDI.h"
                0042 #endif
dec8e4f41a Step*0043 #ifdef ALLOW_KPP
                0044 #include "KPP.h"
                0045 #endif
b4d5e534c1 Step*0046 #ifdef ALLOW_OFFLINE
                0047 #include "OFFLINE.h"
                0048 #endif
                0049 
                0050 C     !INPUT/OUTPUT PARAMETERS:
                0051 C     === Routine arguments ===
8647ba073d Jean*0052 C     myTime  :: Simulation time
                0053 C     myIter  :: Simulation timestep number
                0054 C     myThid  :: Thread no. that called this routine.
b4d5e534c1 Step*0055       _RL     myTime
                0056       INTEGER myIter
8647ba073d Jean*0057       INTEGER myThid
72a8e44ea5 Jean*0058 CEOP
b4d5e534c1 Step*0059 
b5faedaf88 Jean*0060 #ifdef ALLOW_OFFLINE
24eceaed01 Jean*0061 C     !FUNCTIONS:
                0062       INTEGER  IFNBLNK, ILNBLNK
                0063       EXTERNAL IFNBLNK, ILNBLNK
                0064 
b5faedaf88 Jean*0065 C     !LOCAL VARIABLES:
24eceaed01 Jean*0066 C     fn      :: Temp. for building file name.
72a8e44ea5 Jean*0067 C     msgBuf  :: Informational/error message buffer
b4d5e534c1 Step*0068       CHARACTER*(MAX_LEN_FNAM) fn
72a8e44ea5 Jean*0069       CHARACTER*(MAX_LEN_MBUF) msgBuf
b4d5e534c1 Step*0070       INTEGER prec
                0071 
72a8e44ea5 Jean*0072       INTEGER bi,bj,i,j,k
                0073       INTEGER intimeP, intime0, intime1
                0074       _RL aWght, bWght, locTime
                0075       INTEGER Ifprd
72ad6254d2 Step*0076       INTEGER I1, I2
b4d5e534c1 Step*0077 
72a8e44ea5 Jean*0078 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0079 
e625ce6084 Davi*0080       prec = offlineLoadPrec
b4d5e534c1 Step*0081 
e625ce6084 Davi*0082 c      IF ( offlinePeriodicExternalLoad ) THEN
                0083       IF ( .TRUE. ) THEN
b4d5e534c1 Step*0084 
f90ac18778 Jean*0085 C--   First call requires that we initialize everything to zero for safety
                0086 C      <= already done in OFFLINE_INIT_VARIA
b4d5e534c1 Step*0087 
72a8e44ea5 Jean*0088 C--   Now calculate whether it is time to update the forcing arrays
bdc15dcb10 Jean*0089       locTime = myTime - offlineTimeOffset
72a8e44ea5 Jean*0090       CALL GET_PERIODIC_INTERVAL(
                0091      O                  intimeP, intime0, intime1, bWght, aWght,
                0092      I                  offlineForcingCycle, offlineForcingPeriod,
                0093      I                  deltaToffline, locTime, myThid )
                0094 
                0095       bi = myBxLo(myThid)
                0096       bj = myByLo(myThid)
                0097 #ifdef ALLOW_DEBUG
8830b8f970 Jean*0098       IF ( debugLevel.GE.debLevB ) THEN
72a8e44ea5 Jean*0099         _BEGIN_MASTER(myThid)
                0100         WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
                0101      &   ' OFFLINE_FIELDS_LOAD,', myIter,
                0102      &   ' : iP,iLd,i0,i1=', intimeP, offlineLdRec(bi,bj),
                0103      &    intime0,intime1, ' ; Wght=', bWght, aWght
                0104         _END_MASTER(myThid)
                0105       ENDIF
                0106 #endif /* ALLOW_DEBUG */
                0107 
                0108 #ifdef ALLOW_AUTODIFF_TAMC
                0109 C-    assuming that we call S/R OFFLINE_FIELDS_LOAD at each time-step and
                0110 C     with increasing time, this will catch when we need to load new records;
                0111 C     But with Adjoint run, this is not always the case => might end-up using
                0112 C     the wrong time-records
                0113       IF ( intime0.NE.intimeP .OR. myIter.EQ.nIter0 ) THEN
                0114 #else /* ALLOW_AUTODIFF_TAMC */
                0115 C-    Make no assumption on sequence of calls to OFFLINE_FIELDS_LOAD ;
                0116 C     This is the correct formulation (works in Adjoint run).
                0117 C     Unfortunatly, produces many recomputations <== not used until it is fixed
                0118       IF ( intime1.NE.offlineLdRec(bi,bj) ) THEN
                0119 #endif /* ALLOW_AUTODIFF_TAMC */
                0120 
                0121        Ifprd = NINT(offlineForcingPeriod/deltaToffline)
                0122        IF ( Ifprd*deltaToffline .NE. offlineForcingPeriod ) THEN
                0123         WRITE(msgBuf,'(2A,I5,A)') 'OFFLINE_FIELDS_LOAD: ',
                0124      &     'offlineForcingPeriod not multiple of deltaToffline'
                0125         CALL PRINT_ERROR( msgBuf, myThid )
                0126         STOP 'ABNORMAL END: S/R OFFLINE_FIELDS_LOAD'
                0127        ENDIF
b4d5e534c1 Step*0128 
72a8e44ea5 Jean*0129 C--   If the above condition is met then we need to read in
                0130 C     data for the period ahead and the period behind myTime.
8830b8f970 Jean*0131        IF ( debugLevel.GE.debLevZero ) THEN
72a8e44ea5 Jean*0132         _BEGIN_MASTER(myThid)
                0133         WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
                0134      &   ' OFFLINE_FIELDS_LOAD, it=', myIter,
                0135      &   ' : Reading new data, i0,i1=', intime0, intime1,
                0136      &    ' (prev=', intimeP, offlineLdRec(bi,bj), ' )'
                0137         _END_MASTER(myThid)
8830b8f970 Jean*0138        ENDIF
b4d5e534c1 Step*0139 
72a8e44ea5 Jean*0140        _BARRIER
b4d5e534c1 Step*0141 
                0142 #ifdef NOT_MODEL_FILES
24eceaed01 Jean*0143 C if reading own files setup reading here
b4d5e534c1 Step*0144 #else
24eceaed01 Jean*0145 
a35ff864fe Jean*0146 C--   Read in 3-D fields and apply EXCH
                0147 
                0148        IF ( Uvelfile .NE. ' '  ) THEN
24eceaed01 Jean*0149         I1=IFNBLNK(Uvelfile)
                0150         I2=ILNBLNK(Uvelfile)
                0151         WRITE(fn,'(A,A,I10.10)') Uvelfile(I1:I2),'.',
9aee6cf1bd Step*0152      &        intime0*Ifprd +offlineIter0
                0153 c       print*,'OFFLINE READ', fn
24eceaed01 Jean*0154         CALL READ_REC_3D_RS( fn, prec, Nr, uvel0, 1, myIter, myThid )
                0155         WRITE(fn,'(A,A,I10.10)') Uvelfile(I1:I2),'.',
9aee6cf1bd Step*0156      &        intime1*Ifprd +offlineIter0
                0157 c       print*,'OFFLINE READ', fn
24eceaed01 Jean*0158         CALL READ_REC_3D_RS( fn, prec, Nr, uvel1, 1, myIter, myThid )
b4d5e534c1 Step*0159        ENDIF
a35ff864fe Jean*0160        IF ( Vvelfile .NE. ' '  ) THEN
24eceaed01 Jean*0161         I1=IFNBLNK(Vvelfile)
                0162         I2=ILNBLNK(Vvelfile)
                0163         WRITE(fn,'(A,A,I10.10)') Vvelfile(I1:I2),'.',
9aee6cf1bd Step*0164      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0165         CALL READ_REC_3D_RS( fn, prec, Nr, vvel0, 1, myIter, myThid )
                0166         WRITE(fn,'(A,A,I10.10)') Vvelfile(I1:I2),'.',
9aee6cf1bd Step*0167      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0168         CALL READ_REC_3D_RS( fn, prec, Nr, vvel1, 1, myIter, myThid )
b4d5e534c1 Step*0169        ENDIF
a35ff864fe Jean*0170        IF ( Uvelfile .NE. ' ' .OR. Vvelfile .NE. ' '  ) THEN
                0171         CALL EXCH_UV_XYZ_RS( uvel0, vvel0, .TRUE., myThid )
                0172         CALL EXCH_UV_XYZ_RS( uvel1, vvel1, .TRUE., myThid )
                0173        ENDIF
24eceaed01 Jean*0174 
a35ff864fe Jean*0175        IF ( Wvelfile .NE. ' '  ) THEN
24eceaed01 Jean*0176         I1=IFNBLNK(Wvelfile)
                0177         I2=ILNBLNK(Wvelfile)
                0178         WRITE(fn,'(A,A,I10.10)') Wvelfile(I1:I2),'.',
9aee6cf1bd Step*0179      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0180         CALL READ_REC_3D_RS( fn, prec, Nr, wvel0, 1, myIter, myThid )
                0181         WRITE(fn,'(A,A,I10.10)') Wvelfile(I1:I2),'.',
9aee6cf1bd Step*0182      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0183         CALL READ_REC_3D_RS( fn, prec, Nr, wvel1, 1, myIter, myThid )
a35ff864fe Jean*0184         _EXCH_XYZ_RS(wvel0, myThid )
                0185         _EXCH_XYZ_RS(wvel1, myThid )
b4d5e534c1 Step*0186        ENDIF
                0187 
a35ff864fe Jean*0188        IF ( Thetfile .NE. ' '  ) THEN
24eceaed01 Jean*0189         I1=IFNBLNK(Thetfile)
                0190         I2=ILNBLNK(Thetfile)
                0191         WRITE(fn,'(A,A,I10.10)') Thetfile(I1:I2),'.',
9aee6cf1bd Step*0192      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0193         CALL READ_REC_3D_RS( fn, prec, Nr, tave0, 1, myIter, myThid )
                0194         WRITE(fn,'(A,A,I10.10)') Thetfile(I1:I2),'.',
9aee6cf1bd Step*0195      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0196         CALL READ_REC_3D_RS( fn, prec, Nr, tave1, 1, myIter, myThid )
a35ff864fe Jean*0197         _EXCH_XYZ_RS(tave0 , myThid )
                0198         _EXCH_XYZ_RS(tave1 , myThid )
b4d5e534c1 Step*0199        ENDIF
                0200 
a35ff864fe Jean*0201        IF ( Saltfile .NE. ' ' ) THEN
24eceaed01 Jean*0202         I1=IFNBLNK(Saltfile)
                0203         I2=ILNBLNK(Saltfile)
                0204         WRITE(fn,'(A,A,I10.10)') Saltfile(I1:I2),'.',
9aee6cf1bd Step*0205      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0206         CALL READ_REC_3D_RS( fn, prec, Nr, save0, 1, myIter, myThid )
                0207         WRITE(fn,'(A,A,I10.10)') Saltfile(I1:I2),'.',
9aee6cf1bd Step*0208      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0209         CALL READ_REC_3D_RS( fn, prec, Nr, save1, 1, myIter, myThid )
a35ff864fe Jean*0210         _EXCH_XYZ_RS(save0, myThid )
                0211         _EXCH_XYZ_RS(save1, myThid )
b4d5e534c1 Step*0212        ENDIF
                0213 
dec8e4f41a Step*0214 #ifdef ALLOW_GMREDI
a35ff864fe Jean*0215        IF ( GMwxFile .NE. ' ' ) THEN
24eceaed01 Jean*0216         I1=IFNBLNK(GMwxFile)
                0217         I2=ILNBLNK(GMwxFile)
                0218         WRITE(fn,'(A,A,I10.10)') GMwxFile(I1:I2),'.',
9aee6cf1bd Step*0219      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0220         CALL READ_REC_3D_RS( fn, prec, Nr, gmkx0, 1, myIter, myThid )
                0221         WRITE(fn,'(A,A,I10.10)') GMwxFile(I1:I2),'.',
9aee6cf1bd Step*0222      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0223         CALL READ_REC_3D_RS( fn, prec, Nr, gmkx1, 1, myIter, myThid )
b4d5e534c1 Step*0224        ENDIF
a35ff864fe Jean*0225        IF ( GMwyFile .NE. ' ' ) THEN
24eceaed01 Jean*0226         I1=IFNBLNK(GMwyFile)
                0227         I2=ILNBLNK(GMwyFile)
                0228         WRITE(fn,'(A,A,I10.10)') GMwyFile(I1:I2),'.',
9aee6cf1bd Step*0229      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0230         CALL READ_REC_3D_RS( fn, prec, Nr, gmky0, 1, myIter, myThid )
                0231         WRITE(fn,'(A,A,I10.10)') GMwyFile(I1:I2),'.',
9aee6cf1bd Step*0232      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0233         CALL READ_REC_3D_RS( fn, prec, Nr, gmky1, 1, myIter, myThid )
b4d5e534c1 Step*0234        ENDIF
a35ff864fe Jean*0235        IF ( GMwxFile .NE. ' ' .OR. GMwyFile .NE. ' ' ) THEN
                0236         CALL EXCH_UV_AGRID_3D_RS( gmkx0, gmky0, .FALSE., Nr, myThid )
                0237         CALL EXCH_UV_AGRID_3D_RS( gmkx1, gmky1, .FALSE., Nr, myThid )
                0238        ENDIF
24eceaed01 Jean*0239 
a35ff864fe Jean*0240        IF ( GMwzFile       .NE. ' ') THEN
24eceaed01 Jean*0241         I1=IFNBLNK(GMwzFile)
                0242         I2=ILNBLNK(GMwzFile)
                0243         WRITE(fn,'(A,A,I10.10)') GMwzFile(I1:I2),'.',
9aee6cf1bd Step*0244      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0245         CALL READ_REC_3D_RS( fn, prec, Nr, gmkz0, 1, myIter, myThid )
                0246         WRITE(fn,'(A,A,I10.10)') GMwzFile(I1:I2),'.',
9aee6cf1bd Step*0247      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0248         CALL READ_REC_3D_RS( fn, prec, Nr, gmkz1, 1, myIter, myThid )
a35ff864fe Jean*0249         _EXCH_XYZ_RS(gmkz0, myThid )
                0250         _EXCH_XYZ_RS(gmkz1, myThid )
b4d5e534c1 Step*0251        ENDIF
97ee0aee53 Jean*0252 #endif /* ALLOW_GMREDI */
24eceaed01 Jean*0253 
a35ff864fe Jean*0254        IF ( ConvFile .NE. ' ' ) THEN
                0255         I1=IFNBLNK(ConvFile)
                0256         I2=ILNBLNK(ConvFile)
                0257         WRITE(fn,'(A,A,I10.10)') ConvFile(I1:I2),'.',
36fc25cbe5 Step*0258      &        intime0*Ifprd +offlineIter0
a35ff864fe Jean*0259         CALL READ_REC_3D_RS( fn, prec, Nr, conv0, 1, myIter, myThid )
                0260         WRITE(fn,'(A,A,I10.10)') ConvFile(I1:I2),'.',
36fc25cbe5 Step*0261      &        intime1*Ifprd +offlineIter0
a35ff864fe Jean*0262         CALL READ_REC_3D_RS( fn, prec, Nr, conv1, 1, myIter, myThid )
                0263         _EXCH_XYZ_RS(conv0, myThid )
                0264         _EXCH_XYZ_RS(conv1, myThid )
36fc25cbe5 Step*0265        ENDIF
                0266 
dec8e4f41a Step*0267 #ifdef ALLOW_KPP
a35ff864fe Jean*0268        IF ( KPP_DiffSFile .NE. ' ' ) THEN
24eceaed01 Jean*0269         I1=IFNBLNK(KPP_DiffSFile)
                0270         I2=ILNBLNK(KPP_DiffSFile)
                0271         WRITE(fn,'(A,A,I10.10)') KPP_DiffSFile(I1:I2),'.',
9aee6cf1bd Step*0272      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0273         CALL READ_REC_3D_RS( fn, prec, Nr, kdfs0, 1, myIter, myThid )
                0274         WRITE(fn,'(A,A,I10.10)') KPP_DiffSFile(I1:I2),'.',
9aee6cf1bd Step*0275      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0276         CALL READ_REC_3D_RS( fn, prec, Nr, kdfs1, 1, myIter, myThid )
a35ff864fe Jean*0277         _EXCH_XYZ_RS(kdfs0 , myThid )
                0278         _EXCH_XYZ_RS(kdfs1 , myThid )
dec8e4f41a Step*0279        ENDIF
24eceaed01 Jean*0280 
a35ff864fe Jean*0281        IF ( KPP_ghatKFile .NE. ' ' ) THEN
ce5b6f2183 Jean*0282 C-- Note: assume that KPP_ghatKFile contains the product ghat*diffKzS
                0283 C         even if, for convienience, it will be loaded into array KPPghat
                0284         I1=IFNBLNK(KPP_ghatKFile)
                0285         I2=ILNBLNK(KPP_ghatKFile)
                0286         WRITE(fn,'(A,A,I10.10)') KPP_ghatKFile(I1:I2),'.',
9aee6cf1bd Step*0287      &        intime0*Ifprd +offlineIter0
24eceaed01 Jean*0288         CALL READ_REC_3D_RS( fn, prec, Nr, kght0, 1, myIter, myThid )
ce5b6f2183 Jean*0289         WRITE(fn,'(A,A,I10.10)') KPP_ghatKFile(I1:I2),'.',
9aee6cf1bd Step*0290      &        intime1*Ifprd +offlineIter0
24eceaed01 Jean*0291         CALL READ_REC_3D_RS( fn, prec, Nr, kght1, 1, myIter, myThid )
a35ff864fe Jean*0292         _EXCH_XYZ_RS(kght0, myThid )
                0293         _EXCH_XYZ_RS(kght1, myThid )
dec8e4f41a Step*0294        ENDIF
97ee0aee53 Jean*0295 #endif /* ALLOW_KPP */
24eceaed01 Jean*0296 
a35ff864fe Jean*0297 C--   Read in 2-D fields and apply EXCH
                0298 
                0299 c      IF ( HFluxFile .NE. ' ' ) THEN
                0300 c       I1=IFNBLNK(HFluxFile)
                0301 c       I2=ILNBLNK(HFluxFile)
                0302 c       WRITE(fn,'(A,A,I10.10)') HFluxFile(I1:I2),'.',
                0303 c    &        intime0*Ifprd +offlineIter0
                0304 c       CALL READ_REC_3D_RS( fn, prec,  1, hflx0, 1, myIter, myThid )
                0305 c       WRITE(fn,'(A,A,I10.10)') HFluxFile(I1:I2),'.',
                0306 c    &        intime1*Ifprd +offlineIter0
                0307 c       CALL READ_REC_3D_RS( fn, prec,  1, hflx1, 1, myIter, myThid )
                0308 c       _EXCH_XY_RS(hflx0 , myThid )
                0309 c       _EXCH_XY_RS(hflx1 , myThid )
                0310 c      ENDIF
                0311 
                0312        IF ( SFluxFile .NE. ' ' ) THEN
                0313         I1=IFNBLNK(SFluxFile)
                0314         I2=ILNBLNK(SFluxFile)
                0315         WRITE(fn,'(A,A,I10.10)') SFluxFile(I1:I2),'.',
                0316      &        intime0*Ifprd +offlineIter0
                0317         CALL READ_REC_3D_RS( fn, prec,  1, sflx0, 1, myIter, myThid )
                0318         WRITE(fn,'(A,A,I10.10)') SFluxFile(I1:I2),'.',
                0319      &        intime1*Ifprd +offlineIter0
                0320         CALL READ_REC_3D_RS( fn, prec,  1, sflx1, 1, myIter, myThid )
                0321         _EXCH_XY_RS(sflx0, myThid )
                0322         _EXCH_XY_RS(sflx1, myThid )
                0323        ENDIF
b4d5e534c1 Step*0324 
a35ff864fe Jean*0325 c      IF ( IceFile .NE. ' ' ) THEN
                0326 c       I1=IFNBLNK(IceFile)
                0327 c       I2=ILNBLNK(IceFile)
                0328 c       WRITE(fn,'(A,A,I10.10)') IceFile(I1:I2),'.',
                0329 c    &        intime0*Ifprd +offlineIter0
                0330 c       CALL READ_REC_3D_RS( fn, prec,  1, icem0, 1, myIter, myThid )
                0331 c       WRITE(fn,'(A,A,I10.10)') IceFile(I1:I2),'.',
                0332 c    &        intime1*Ifprd +offlineIter0
                0333 c       CALL READ_REC_3D_RS( fn, prec,  1, icem1, 1, myIter, myThid )
                0334 c       _EXCH_XY_RS(icem0, myThid )
                0335 c       _EXCH_XY_RS(icem1, myThid )
                0336 c      ENDIF
                0337 
                0338 #endif /* else NOT_MODEL_FILES */
dec8e4f41a Step*0339 
72a8e44ea5 Jean*0340 C-    save newly loaded time-record
                0341        DO bj = myByLo(myThid), myByHi(myThid)
                0342          DO bi = myBxLo(myThid), myBxHi(myThid)
                0343            offlineLdRec(bi,bj) = intime1
                0344          ENDDO
                0345        ENDDO
                0346 
                0347 C--   end if-block for loading new time-records
b4d5e534c1 Step*0348       ENDIF
24eceaed01 Jean*0349 
3565540185 Jean*0350 C--   Save time-interpolation weights
b4d5e534c1 Step*0351       DO bj = myByLo(myThid), myByHi(myThid)
a35ff864fe Jean*0352        DO bi = myBxLo(myThid), myBxHi(myThid)
3565540185 Jean*0353          offline_Wght(1,bi,bj) = bWght
                0354          offline_Wght(2,bi,bj) = aWght
                0355        ENDDO
                0356       ENDDO
                0357 
                0358 C--   Interpolate State Variables: uvel, vvel, wvel
                0359       IF ( myIter.NE.nIter0 .OR. nonlinFreeSurf.LE.0 ) THEN
                0360 C     Skip initial (nIter0) setting of state vars if loaded from pickup-files
                0361 C     (as it is the case when using Non-Lin Free-Surf)
                0362        DO bj = myByLo(myThid), myByHi(myThid)
                0363         DO bi = myBxLo(myThid), myBxHi(myThid)
                0364 
a623cc0987 Jean*0365          DO k=1,Nr
                0366           DO j=1-OLy,sNy+OLy
                0367            DO i=1-OLx,sNx+OLx
3565540185 Jean*0368              uVel(i,j,k,bi,bj) = bWght*uvel0(i,j,k,bi,bj)
                0369      &                         + aWght*uvel1(i,j,k,bi,bj)
                0370              vVel(i,j,k,bi,bj) = bWght*vvel0(i,j,k,bi,bj)
                0371      &                         + aWght*vvel1(i,j,k,bi,bj)
                0372              wVel(i,j,k,bi,bj) = bWght*wvel0(i,j,k,bi,bj)
                0373      &                         + aWght*wvel1(i,j,k,bi,bj)
                0374              theta(i,j,k,bi,bj)= bWght*tave0(i,j,k,bi,bj)
                0375      &                         + aWght*tave1(i,j,k,bi,bj)
                0376              salt(i,j,k,bi,bj) = bWght*save0(i,j,k,bi,bj)
                0377      &                         + aWght*save1(i,j,k,bi,bj)
a623cc0987 Jean*0378            ENDDO
                0379           ENDDO
                0380          ENDDO
3565540185 Jean*0381 #ifdef NONLIN_FRSURF
                0382          IF ( select_rStar.GT.0 ) THEN
                0383           DO k=1,Nr
                0384            DO j=1-OLy,sNy+OLy
                0385             DO i=1-OLx,sNx+OLx
                0386               uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)
                0387      &                          / rStarFacW(i,j,bi,bj)
                0388               vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj)
                0389      &                          / rStarFacS(i,j,bi,bj)
                0390             ENDDO
a623cc0987 Jean*0391            ENDDO
                0392           ENDDO
3565540185 Jean*0393          ELSEIF ( nonlinFreeSurf.GT.0 ) THEN
a623cc0987 Jean*0394           STOP 'OFFLINE_FIELDS_LOAD: r-Coord NLFS code missing'
3565540185 Jean*0395          ENDIF
a623cc0987 Jean*0396 #endif /* NONLIN_FRSURF */
3565540185 Jean*0397 
8647ba073d Jean*0398 C--   end bi,bj loops
3565540185 Jean*0399         ENDDO
a35ff864fe Jean*0400        ENDDO
3565540185 Jean*0401       ENDIF
b4d5e534c1 Step*0402 
a35ff864fe Jean*0403 C-- Diagnostics
b4d5e534c1 Step*0404 C      IF (myThid.EQ.1 .AND. myTime.LT.62208000.) THEN
                0405 C        write(*,'(a,1p5e12.4,3i6,2e12.4)')
                0406 C     &   'time,U,V,W,i0,i1,a,b = ',
                0407 C     &   myTime,
                0408 C     &   Uvel(1,sNy,1,1,1),Vvel(1,sNy,1,1,1),
                0409 C     &   Wvel(1,sNy,1,1,1),
                0410 C     &   intime0,intime1,aWght,bWght
                0411 C        write(*,'(a,1p4e12.4,2e12.4)')
                0412 C     &   'time,uvel0,uvel1,U = ',
                0413 C     &   myTime,
                0414 C     &   uvel0(1,sNy,1,1,1),uvel1(1,sNy,1,1,1),Uvel(1,sNy,1,1,1),
                0415 C     &   aWght,bWght
                0416 C      ENDIF
                0417 
                0418 C endif for periodicForcing
                0419       ENDIF
                0420 
24eceaed01 Jean*0421 #endif /* ALLOW_OFFLINE */
b4d5e534c1 Step*0422 
                0423       RETURN
                0424       END