Back to home page

MITgcm

 
 

    


File indexing completed on 2025-09-19 05:08:09 UTC

view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
92e77d50bf Jean*0001 #include "PACKAGES_CONFIG.h"
                0002 #include "CPP_OPTIONS.h"
                0003 
                0004 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0005 CBOP
                0006 C     !ROUTINE: READ_PICKUP
                0007 C     !INTERFACE:
                0008       SUBROUTINE READ_PICKUP(
                0009      I                        myIter, myThid )
                0010 
                0011 C     !DESCRIPTION:
                0012 C     This is the controlling routine for IO to read restart (or
                0013 C     "pickup" or "checkpoint" ) files.  It calls routines from other
                0014 C     packages (\textit{eg.} rw and mnc) to do the per-variable
                0015 C     reads.
                0016 
                0017 C     !USES:
                0018       IMPLICIT NONE
                0019 #include "SIZE.h"
                0020 #include "EEPARAMS.h"
                0021 #include "PARAMS.h"
d6ed4854d6 Jean*0022 #include "RESTART.h"
92e77d50bf Jean*0023 #include "DYNVARS.h"
fdf5fb6af0 Jean*0024 #include "NH_VARS.h"
92e77d50bf Jean*0025 #include "SURFACE.h"
fd6656ef94 Jean*0026 #include "FFIELDS.h"
d6ed4854d6 Jean*0027 #ifdef ALLOW_GENERIC_ADVDIFF
                0028 # include "GAD.h"
                0029 #endif
92e77d50bf Jean*0030 #ifdef ALLOW_MNC
229ac9feb6 Jean*0031 # include "MNC_PARAMS.h"
92e77d50bf Jean*0032 #endif
eda0e8da44 Mich*0033 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0034 # include "GMREDI.h"
                0035 #endif
92e77d50bf Jean*0036 
                0037 C     !INPUT/OUTPUT PARAMETERS:
                0038 C     myIter :: Iteration number
d6ed4854d6 Jean*0039 C     myThid :: my Thread Id. number
92e77d50bf Jean*0040       INTEGER myIter
                0041       INTEGER myThid
                0042 CEOP
                0043 
                0044 C     !LOCAL VARIABLES:
d6ed4854d6 Jean*0045 C     fp          :: pickup-file precision
                0046 C     fn          :: Temp. for building file name.
                0047 C     suff        :: suffix of pickup file to read
                0048 C     filePrec    :: pickup-file precision (read from meta file)
                0049 C     nbFields    :: number of fields in pickup file (read from meta file)
                0050 C     missFldList :: List of missing fields   (attempted to read but not found)
                0051 C     missFldDim  :: Dimension of missing fields list array: missFldList
                0052 C     nMissing    :: Number of missing fields (attempted to read but not found)
cbf501ab81 Jean*0053 C     m1, m2      :: 6.th dim index (AB-3) corresponding to time-step N-1 & N-2
d6ed4854d6 Jean*0054 C     j           :: loop index
                0055 C     nj          :: record number
                0056 C     ioUnit      :: temp for writing msg unit
                0057 C     msgBuf      :: Informational/error message buffer
92e77d50bf Jean*0058       INTEGER fp
                0059       CHARACTER*(MAX_LEN_FNAM) fn
                0060       CHARACTER*(10) suff
d6ed4854d6 Jean*0061       INTEGER filePrec, nbFields
                0062       INTEGER missFldDim, nMissing
                0063       PARAMETER( missFldDim = 20 )
                0064       CHARACTER*(8) missFldList(missFldDim)
92e77d50bf Jean*0065 #ifdef ALLOW_ADAMSBASHFORTH_3
cbf501ab81 Jean*0066       INTEGER j, m1, m2
d6ed4854d6 Jean*0067 #endif
cbf501ab81 Jean*0068       INTEGER nj, ioUnit
d6ed4854d6 Jean*0069       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0070 #ifndef ALLOW_GENERIC_ADVDIFF
                0071       LOGICAL AdamsBashforthGt
                0072       LOGICAL AdamsBashforthGs
                0073       LOGICAL AdamsBashforth_T
                0074       LOGICAL AdamsBashforth_S
                0075       PARAMETER ( AdamsBashforthGt = .FALSE. ,
                0076      &            AdamsBashforthGs = .FALSE. ,
                0077      &            AdamsBashforth_T = .FALSE. ,
                0078      &            AdamsBashforth_S = .FALSE. )
92e77d50bf Jean*0079 #endif
                0080 
                0081 C     Suffix for pickup files
                0082       IF (pickupSuff .EQ. ' ') THEN
8f6bf732a8 Jean*0083         IF ( rwSuffixType.EQ.0 ) THEN
                0084           WRITE(suff,'(I10.10)') myIter
                0085         ELSE
                0086           CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid )
                0087         ENDIF
92e77d50bf Jean*0088       ELSE
                0089         WRITE(suff,'(A10)') pickupSuff
                0090       ENDIF
                0091       WRITE(fn,'(A,A10)') 'pickup.',suff
                0092 
                0093 C     Going to really do some IO. Make everyone except master thread wait.
3365bdc872 Jean*0094 C     this is done within IO routines => no longer needed
                0095 c     _BARRIER
92e77d50bf Jean*0096 
                0097       IF (pickup_read_mdsio) THEN
                0098 
d6ed4854d6 Jean*0099        fp = precFloat64
                0100 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0101 
                0102        CALL READ_MFLDS_SET(
                0103      I                      fn,
                0104      O                      nbFields, filePrec,
                0105      I                      Nr, myIter, myThid )
                0106 
                0107        _BEGIN_MASTER( myThid )
                0108 c      IF ( filePrec.NE.0 .AND. filePrec.NE.fp ) THEN
                0109        IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
                0110          WRITE(msgBuf,'(2A,I4)') 'READ_PICKUP: ',
                0111      &    'pickup-file binary precision do not match !'
                0112          CALL PRINT_ERROR( msgBuf, myThid )
                0113          WRITE(msgBuf,'(A,2(A,I4))') 'READ_PICKUP: ',
                0114      &    'file prec.=', filePrec, ' but expecting prec.=', fp
                0115          CALL PRINT_ERROR( msgBuf, myThid )
                0116          STOP 'ABNORMAL END: S/R READ_PICKUP (data-prec Pb)'
                0117        ENDIF
                0118        _END_MASTER( myThid )
                0119 
                0120 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0121 
                0122        IF ( nbFields.LE.0 ) THEN
                0123 C-      No meta-file or old meta-file without List of Fields
                0124         ioUnit = errorMessageUnit
                0125         IF ( pickupStrictlyMatch ) THEN
                0126           WRITE(msgBuf,'(4A)') 'READ_PICKUP: ',
                0127      &      'no field-list found in meta-file',
                0128      &      ' => cannot check for strick-matching'
                0129 c         CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0130           CALL PRINT_ERROR( msgBuf, myThid )
                0131           WRITE(msgBuf,'(4A)') 'READ_PICKUP: ',
                0132      &      'try with " pickupStrictlyMatch=.FALSE.,"',
                0133      &      ' in file: "data", NameList: "PARM03"'
                0134           CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0135           STOP 'ABNORMAL END: S/R READ_PICKUP'
                0136         ELSE
                0137           WRITE(msgBuf,'(4A)') 'WARNING >> READ_PICKUP: ',
                0138      &      ' no field-list found'
                0139           CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0140          IF ( nbFields.EQ.-1 ) THEN
                0141 C-      No meta-file
                0142           WRITE(msgBuf,'(4A)') 'WARNING >> ',
                0143      &      ' try to read pickup as currently written'
                0144           CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0145          ELSE
                0146 C-      Old meta-file without List of Fields
                0147           WRITE(msgBuf,'(4A)') 'WARNING >> ',
                0148      &      ' try to read pickup as it used to be written'
                0149           CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0150           WRITE(msgBuf,'(4A)') 'WARNING >> ',
                0151      &      ' until checkpoint59i (2007 Oct 22)'
                0152           CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
                0153          ENDIF
                0154         ENDIF
                0155        ENDIF
                0156 
                0157 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
92e77d50bf Jean*0158 
d6ed4854d6 Jean*0159 C---   Old way to read model fields:
                0160        IF ( nbFields.EQ.0 ) THEN
92e77d50bf Jean*0161         IF ( usePickupBeforeC54 ) THEN
                0162 #ifndef ALLOW_ADAMSBASHFORTH_3
                0163           CALL READ_REC_3D_RL( fn, fp, Nr, uVel,  1, myIter,myThid )
                0164           CALL READ_REC_3D_RL( fn, fp, Nr, gU,    2, myIter,myThid )
                0165           CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 3, myIter,myThid )
                0166           CALL READ_REC_3D_RL( fn, fp, Nr, vVel,  4, myIter,myThid )
                0167           CALL READ_REC_3D_RL( fn, fp, Nr, gV,    5, myIter,myThid )
                0168           CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 6, myIter,myThid )
                0169           CALL READ_REC_3D_RL( fn, fp, Nr, theta, 7, myIter,myThid )
ac35802f50 Jean*0170 c         CALL READ_REC_3D_RL( fn, fp, Nr, gT,    8, myIter,myThid )
92e77d50bf Jean*0171           CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 9, myIter,myThid )
                0172           CALL READ_REC_3D_RL( fn, fp, Nr, salt, 10, myIter,myThid )
ac35802f50 Jean*0173 c         CALL READ_REC_3D_RL( fn, fp, Nr, gS,   11, myIter,myThid )
92e77d50bf Jean*0174           CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1,12, myIter,myThid )
                0175 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
                0176           CALL READ_REC_3D_RL( fn, fp,  1, etaN,
                0177      &                                      12*Nr+1, myIter,myThid )
                0178 #ifdef NONLIN_FRSURF
                0179           IF (nonlinFreeSurf .GE. 0) THEN
                0180            CALL READ_REC_3D_RL(fn, fp,  1, etaH,
                0181      &                                      12*Nr+2, myIter,myThid )
                0182           ENDIF
                0183 #endif
                0184         ELSE
                0185 #ifdef ALLOW_ADAMSBASHFORTH_3
                0186           j = 3
                0187           IF ( startFromPickupAB2 ) j = 2
                0188           nj = 0
                0189           CALL READ_REC_3D_RL( fn, fp, Nr, uVel, nj+1, myIter,myThid )
229ac9feb6 Jean*0190           CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,1),
92e77d50bf Jean*0191      &                                           nj+2, myIter,myThid )
229ac9feb6 Jean*0192           CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,2),
92e77d50bf Jean*0193      &                                           nj+j, myIter,myThid )
                0194           nj = j
                0195           CALL READ_REC_3D_RL( fn, fp, Nr, vVel, nj+1, myIter,myThid )
229ac9feb6 Jean*0196           CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,1),
92e77d50bf Jean*0197      &                                           nj+2, myIter,myThid )
229ac9feb6 Jean*0198           CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,2),
92e77d50bf Jean*0199      &                                           nj+j, myIter,myThid )
                0200           nj = 2*j
                0201           CALL READ_REC_3D_RL( fn, fp, Nr, theta,nj+1, myIter,myThid )
229ac9feb6 Jean*0202           CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,1),
92e77d50bf Jean*0203      &                                           nj+2, myIter,myThid )
229ac9feb6 Jean*0204           CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,2),
92e77d50bf Jean*0205      &                                           nj+j, myIter,myThid )
                0206           nj = 3*j
                0207           CALL READ_REC_3D_RL( fn, fp, Nr, salt, nj+1, myIter,myThid )
229ac9feb6 Jean*0208           CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,1),
92e77d50bf Jean*0209      &                                           nj+2, myIter,myThid )
229ac9feb6 Jean*0210           CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,2),
92e77d50bf Jean*0211      &                                           nj+j, myIter,myThid )
                0212           nj = 4*j
                0213 #else /*  ALLOW_ADAMSBASHFORTH_3 */
                0214           CALL READ_REC_3D_RL( fn, fp, Nr, uVel,  1, myIter,myThid )
                0215           CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 2, myIter,myThid )
                0216           CALL READ_REC_3D_RL( fn, fp, Nr, vVel,  3, myIter,myThid )
                0217           CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 4, myIter,myThid )
                0218           CALL READ_REC_3D_RL( fn, fp, Nr, theta, 5, myIter,myThid )
                0219           CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 6, myIter,myThid )
                0220           CALL READ_REC_3D_RL( fn, fp, Nr, salt,  7, myIter,myThid )
                0221           CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1, 8, myIter,myThid )
                0222           nj = 8
                0223 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
                0224           CALL READ_REC_3D_RL( fn,fp,1, etaN, nj*Nr+1, myIter,myThid )
d6ed4854d6 Jean*0225           IF ( exactConserv ) THEN
92e77d50bf Jean*0226            CALL READ_REC_3D_RL(fn,fp,1,dEtaHdt,nj*Nr+2,myIter,myThid )
                0227           ENDIF
d6ed4854d6 Jean*0228           IF ( nonlinFreeSurf.GT.0 ) THEN
92e77d50bf Jean*0229            CALL READ_REC_3D_RL(fn,fp,1, etaH, nj*Nr+3, myIter,myThid )
                0230           ENDIF
                0231         ENDIF
                0232 
901f12b7bc Jean*0233         IF ( storePhiHyd4Phys ) THEN
92e77d50bf Jean*0234           WRITE(fn,'(A,A10)') 'pickup_ph.',suff
                0235           CALL READ_REC_3D_RL( fn, fp, Nr, totPhiHyd,1,myIter,myThid )
c3be04357d Jean*0236         ENDIF
92e77d50bf Jean*0237 #ifdef ALLOW_NONHYDROSTATIC
c3be04357d Jean*0238         IF ( use3Dsolver ) THEN
92e77d50bf Jean*0239           WRITE(fn,'(A,A10)') 'pickup_nh.',suff
                0240           CALL READ_REC_3D_RL( fn, fp, Nr, phi_nh,  1, myIter,myThid )
cba4501825 Jean*0241 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0242           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,1),
cba4501825 Jean*0243      &                                              2, myIter,myThid )
229ac9feb6 Jean*0244           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,2),
cba4501825 Jean*0245      &                                              2, myIter,myThid )
                0246 #else /*  ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0247           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm1,   2, myIter,myThid )
cba4501825 Jean*0248 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0249         ENDIF
cba4501825 Jean*0250 #endif /* ALLOW_NONHYDROSTATIC */
d6ed4854d6 Jean*0251        ELSE
                0252 C---   New way to read model fields:
                0253           nj = 0
                0254 C---    read State 3-D fields for restart
                0255           CALL READ_MFLDS_3D_RL( 'Uvel    ', uVel,
                0256      &                                     nj, fp, Nr, myIter, myThid )
                0257           CALL READ_MFLDS_3D_RL( 'Vvel    ', vVel,
                0258      &                                     nj, fp, Nr, myIter, myThid )
eda0e8da44 Mich*0259 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0260           IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0261             CALL READ_MFLDS_3D_RL( 'UEulerM ', uEulerMean,
bcc58d6972 Mich*0262      &                                      nj, fp, Nr, myIter, myThid )
fd6656ef94 Jean*0263             CALL READ_MFLDS_3D_RL( 'VEulerM ', vEulerMean,
bcc58d6972 Mich*0264      &                                      nj, fp, Nr, myIter, myThid )
                0265           ENDIF
                0266 #endif
d6ed4854d6 Jean*0267           CALL READ_MFLDS_3D_RL( 'Theta   ', theta,
                0268      &                                     nj, fp, Nr, myIter, myThid )
                0269           CALL READ_MFLDS_3D_RL( 'Salt    ', salt,
                0270      &                                     nj, fp, Nr, myIter, myThid )
                0271 C---    read 3-D fields for AB-restart
                0272 #ifdef ALLOW_ADAMSBASHFORTH_3
fdf5fb6af0 Jean*0273 
d6ed4854d6 Jean*0274          m1 = 1 + MOD(myIter+1,2)
                0275          m2 = 1 + MOD( myIter ,2)
04b6a7043d Jean*0276         IF ( momStepping ) THEN
d6ed4854d6 Jean*0277 C--     U velocity:
                0278          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0279           CALL READ_MFLDS_3D_RL( 'GuNm1   ',guNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0280      &                                     nj, fp, Nr, myIter, myThid )
                0281          ENDIF
                0282          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0283           CALL READ_MFLDS_3D_RL( 'GuNm2   ',guNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0284      &                                     nj, fp, Nr, myIter, myThid )
                0285          ENDIF
                0286 C--     V velocity:
                0287          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0288           CALL READ_MFLDS_3D_RL( 'GvNm1   ',gvNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0289      &                                     nj, fp, Nr, myIter, myThid )
                0290          ENDIF
                0291          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0292           CALL READ_MFLDS_3D_RL( 'GvNm2   ',gvNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0293      &                                     nj, fp, Nr, myIter, myThid )
                0294          ENDIF
04b6a7043d Jean*0295         ENDIF
d6ed4854d6 Jean*0296 C--     Temperature:
                0297         IF ( AdamsBashforthGt ) THEN
                0298          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0299           CALL READ_MFLDS_3D_RL( 'GtNm1   ',gtNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0300      &                                     nj, fp, Nr, myIter, myThid )
                0301          ENDIF
                0302          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0303           CALL READ_MFLDS_3D_RL( 'GtNm2   ',gtNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0304      &                                     nj, fp, Nr, myIter, myThid )
                0305          ENDIF
                0306         ELSEIF ( AdamsBashforth_T ) THEN
                0307          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0308           CALL READ_MFLDS_3D_RL( 'TempNm1 ',gtNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0309      &                                     nj, fp, Nr, myIter, myThid )
                0310          ENDIF
                0311          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0312           CALL READ_MFLDS_3D_RL( 'TempNm2 ',gtNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0313      &                                     nj, fp, Nr, myIter, myThid )
                0314          ENDIF
                0315         ENDIF
                0316 C--     Salinity:
                0317         IF ( AdamsBashforthGs ) THEN
                0318          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0319           CALL READ_MFLDS_3D_RL( 'GsNm1   ',gsNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0320      &                                     nj, fp, Nr, myIter, myThid )
                0321          ENDIF
                0322          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0323           CALL READ_MFLDS_3D_RL( 'GsNm2   ',gsNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0324      &                                     nj, fp, Nr, myIter, myThid )
                0325          ENDIF
                0326         ELSEIF ( AdamsBashforth_S ) THEN
                0327          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0328           CALL READ_MFLDS_3D_RL( 'SaltNm1 ',gsNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0329      &                                     nj, fp, Nr, myIter, myThid )
                0330          ENDIF
                0331          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0332           CALL READ_MFLDS_3D_RL( 'SaltNm2 ',gsNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0333      &                                     nj, fp, Nr, myIter, myThid )
                0334          ENDIF
                0335         ENDIF
cba4501825 Jean*0336 #ifdef ALLOW_NONHYDROSTATIC
                0337         IF ( nonHydrostatic ) THEN
                0338 C--     W velocity:
                0339          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0340           CALL READ_MFLDS_3D_RL( 'GwNm1   ',gwNm(1-OLx,1-OLy,1,1,1,m1),
cba4501825 Jean*0341      &                                     nj, fp, Nr, myIter, myThid )
                0342          ENDIF
                0343          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0344           CALL READ_MFLDS_3D_RL( 'GwNm2   ',gwNm(1-OLx,1-OLy,1,1,1,m2),
cba4501825 Jean*0345      &                                     nj, fp, Nr, myIter, myThid )
                0346          ENDIF
                0347         ENDIF
                0348 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0349 #ifdef ALLOW_QHYD_STAGGER_TS
                0350 C--     Quasi-Hydrostatic Adams-Bashforth variables:
                0351         IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0352          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
                0353           CALL READ_MFLDS_3D_RL( 'QH_GwNm1',
                0354      O                           QHydGwNm(1-OLx,1-OLy,1,1,1,m1),
                0355      I                                     nj, fp, Nr, myIter, myThid )
                0356          ENDIF
                0357          IF ( beta_AB.NE.0. ) THEN
                0358           CALL READ_MFLDS_3D_RL( 'QH_GwNm2',
                0359      O                           QHydGwNm(1-OLx,1-OLy,1,1,1,m2),
                0360      I                                     nj, fp, Nr, myIter, myThid )
                0361          ENDIF
                0362         ENDIF
                0363 #endif /* ALLOW_QHYD_STAGGER_TS */
                0364 
d6ed4854d6 Jean*0365 #else /*  ALLOW_ADAMSBASHFORTH_3 */
04b6a7043d Jean*0366         IF ( momStepping ) THEN
d6ed4854d6 Jean*0367 C--     U velocity:
                0368           CALL READ_MFLDS_3D_RL( 'GuNm1   ', guNm1,
                0369      &                                     nj, fp, Nr, myIter, myThid )
                0370 C--     V velocity:
                0371           CALL READ_MFLDS_3D_RL( 'GvNm1   ', gvNm1,
                0372      &                                     nj, fp, Nr, myIter, myThid )
04b6a7043d Jean*0373         ENDIF
d6ed4854d6 Jean*0374 C--     Temperature
                0375         IF ( AdamsBashforthGt ) THEN
                0376           CALL READ_MFLDS_3D_RL( 'GtNm1   ', gtNm1,
                0377      &                                     nj, fp, Nr, myIter, myThid )
b4f60a0901 Jean*0378         ELSEIF ( AdamsBashforth_T ) THEN
                0379           CALL READ_MFLDS_3D_RL( 'TempNm1 ', gtNm1,
                0380      &                                     nj, fp, Nr, myIter, myThid )
d6ed4854d6 Jean*0381         ENDIF
                0382 C--     Salinity
                0383         IF ( AdamsBashforthGs ) THEN
                0384           CALL READ_MFLDS_3D_RL( 'GsNm1   ', gsNm1,
                0385      &                                     nj, fp, Nr, myIter, myThid )
b4f60a0901 Jean*0386         ELSEIF ( AdamsBashforth_S ) THEN
                0387           CALL READ_MFLDS_3D_RL( 'SaltNm1 ', gsNm1,
                0388      &                                     nj, fp, Nr, myIter, myThid )
d6ed4854d6 Jean*0389         ENDIF
cba4501825 Jean*0390 #ifdef ALLOW_NONHYDROSTATIC
                0391         IF ( nonHydrostatic ) THEN
                0392           CALL READ_MFLDS_3D_RL( 'GwNm1   ', gwNm1,
                0393      &                                     nj, fp, Nr, myIter, myThid )
                0394         ENDIF
                0395 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0396 #ifdef ALLOW_QHYD_STAGGER_TS
                0397 C--     Quasi-Hydrostatic Adams-Bashforth variables:
                0398         IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0399           CALL READ_MFLDS_3D_RL( 'QH_GwNm1', QHydGwNm,
                0400      &                                     nj, fp, Nr, myIter, myThid )
                0401         ENDIF
                0402 #endif /* ALLOW_QHYD_STAGGER_TS */
                0403 
d6ed4854d6 Jean*0404 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
                0405 
                0406 C-      read Full Pressure for EOS in pressure:
901f12b7bc Jean*0407         IF ( storePhiHyd4Phys ) THEN
d6ed4854d6 Jean*0408           CALL READ_MFLDS_3D_RL( 'PhiHyd  ', totPhiHyd,
                0409      &                                     nj, fp, Nr, myIter, myThid )
                0410         ENDIF
                0411 #ifdef ALLOW_NONHYDROSTATIC
                0412         IF ( use3Dsolver ) THEN
                0413           CALL READ_MFLDS_3D_RL( 'Phi_NHyd', phi_nh,
                0414      &                                     nj, fp, Nr, myIter, myThid )
                0415         ENDIF
cba4501825 Jean*0416 #endif /* ALLOW_NONHYDROSTATIC */
2d5bb917cc Jean*0417 #ifdef ALLOW_SMAG_3D_DIFFUSIVITY
                0418 C-    With synchronous time-stepping, Smag-3D diffusivity is lagging by 1 time-step
                0419 C     (i.e., used before being updated meaning field is from previous time-step calc)
                0420 C     --> needs to be read-in from pickup file
                0421         IF ( smag3D_diffCoeff.GT.zeroRL
                0422      &       .AND. .NOT.staggerTimeStep ) THEN
                0423           CALL READ_MFLDS_3D_RL( 'SmagDiff', smag3D_diffK,
                0424      &                                     nj, fp, Nr, myIter, myThid )
                0425         ENDIF
                0426 #endif /* ALLOW_SMAG_3D_DIFFUSIVITY */
d2a11ab670 Jean*0427 #ifdef ALLOW_ADDFLUID
                0428 C-    read mass source/sink of fluid
                0429         IF ( selectAddFluid.GE.1 ) THEN
                0430           CALL READ_MFLDS_3D_RL( 'AddMass ', addMass,
                0431      &                                     nj, fp, Nr, myIter, myThid )
                0432         ENDIF
                0433 #endif /* ALLOW_ADDFLUID */
fd6656ef94 Jean*0434 #ifdef ALLOW_FRICTION_HEATING
                0435 C-    needs frictional heating when using synchronous time-stepping
                0436         IF ( addFrictionHeating .AND. .NOT.staggerTimeStep ) THEN
                0437           CALL READ_MFLDS_LEV_RS( 'FricHeat', frictionHeating,
                0438      &                              nj, fp, Nr, 1, Nr, myIter, myThid )
                0439         ENDIF
                0440 #endif /* ALLOW_FRICTION_HEATING */
d6ed4854d6 Jean*0441 
                0442 C---    read 2-D fields, starting with Eta:
                0443           nj = nj*Nr
                0444           CALL READ_MFLDS_3D_RL( 'EtaN    ', etaN,
                0445      &                                     nj, fp, 1 , myIter, myThid )
0320e25227 Mart*0446         IF ( usingPCoords .AND. useSEAICE ) THEN
                0447           CALL READ_MFLDS_3D_RL( 'Phi_rLow', phiHydLow,
                0448      &                                     nj, fp, 1 , myIter, myThid )
                0449         ENDIF
cba4501825 Jean*0450 #ifdef ALLOW_NONHYDROSTATIC
                0451         IF ( selectNHfreeSurf.GE.1 ) THEN
                0452           CALL READ_MFLDS_3D_RL( 'dPhiNH  ', dPhiNH,
                0453      &                                     nj, fp, 1 , myIter, myThid )
                0454         ENDIF
                0455 #endif /* ALLOW_NONHYDROSTATIC */
d6ed4854d6 Jean*0456         IF ( exactConserv ) THEN
                0457           CALL READ_MFLDS_3D_RL( 'dEtaHdt ', dEtaHdt,
                0458      &                                     nj, fp, 1 , myIter, myThid )
                0459         ENDIF
                0460         IF ( nonlinFreeSurf.GT.0 ) THEN
                0461           CALL READ_MFLDS_3D_RL( 'EtaH    ', etaH,
                0462      &                                     nj, fp, 1 , myIter, myThid )
                0463         ENDIF
                0464 C--    end: new way to read pickup file
                0465        ENDIF
                0466 
                0467 C--    Check for missing fields:
                0468        nMissing = missFldDim
                0469        CALL READ_MFLDS_CHECK(
                0470      O                    missFldList,
                0471      U                    nMissing,
                0472      I                    myIter, myThid )
                0473        IF ( nMissing.GT.missFldDim ) THEN
                0474          WRITE(msgBuf,'(2A,I4)') 'READ_PICKUP: ',
                0475      &     'missing fields list has been truncated to', missFldDim
                0476          CALL PRINT_ERROR( msgBuf, myThid )
                0477          STOP 'ABNORMAL END: S/R READ_PICKUP (list-size Pb)'
                0478        ENDIF
                0479        CALL CHECK_PICKUP(
                0480      I                    missFldList,
                0481      I                    nMissing, nbFields,
                0482      I                    myIter, myThid )
92e77d50bf Jean*0483 
d6ed4854d6 Jean*0484 C--   end: pickup_read_mdsio
92e77d50bf Jean*0485       ENDIF
                0486 
                0487 #ifdef ALLOW_MNC
                0488       IF (useMNC .AND. pickup_read_mnc) THEN
                0489         WRITE(fn,'(A)') 'pickup'
                0490         CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
                0491         CALL MNC_CW_SET_UDIM(fn, 1, myThid)
                0492         CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
                0493         CALL MNC_CW_RL_R('D',fn,0,0,'U',uVel, myThid)
                0494         CALL MNC_CW_RL_R('D',fn,0,0,'V',vVel, myThid)
eda0e8da44 Mich*0495 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0496         IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0497           CALL MNC_CW_RL_R('D',fn,0,0,'UEulerM',uEulerMean, myThid)
                0498           CALL MNC_CW_RL_R('D',fn,0,0,'VEulerM',vEulerMean, myThid)
bcc58d6972 Mich*0499         ENDIF
                0500 #endif
92e77d50bf Jean*0501         CALL MNC_CW_RL_R('D',fn,0,0,'Temp',theta, myThid)
                0502         CALL MNC_CW_RL_R('D',fn,0,0,'S',salt, myThid)
                0503         CALL MNC_CW_RL_R('D',fn,0,0,'Eta',etaN, myThid)
                0504 #ifndef ALLOW_ADAMSBASHFORTH_3
                0505         CALL MNC_CW_RL_R('D',fn,0,0,'gUnm1',guNm1, myThid)
                0506         CALL MNC_CW_RL_R('D',fn,0,0,'gVnm1',gvNm1, myThid)
                0507         CALL MNC_CW_RL_R('D',fn,0,0,'gTnm1',gtNm1, myThid)
                0508         CALL MNC_CW_RL_R('D',fn,0,0,'gSnm1',gsNm1, myThid)
                0509 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0510 C#ifdef NONLIN_FRSURF
                0511 C        IF ( nonlinFreeSurf.GE.0 .AND. usePickupBeforeC54 )
                0512 C     &    CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
                0513 C#endif
                0514         IF (exactConserv) THEN
                0515           CALL MNC_CW_RL_R('D',fn,0,0,'dEtaHdt',dEtaHdt,myThid)
                0516         ENDIF
                0517         IF (nonlinFreeSurf .GT. 0) THEN
                0518           CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
                0519         ENDIF
                0520 #ifdef ALLOW_NONHYDROSTATIC
                0521         IF (use3Dsolver) THEN
                0522           CALL MNC_CW_RL_R('D',fn,0,0,'phi_nh', phi_nh, myThid)
                0523 c         CALL MNC_CW_RL_R('D',fn,0,0,'gW', gW, myThid)
cba4501825 Jean*0524 #ifndef ALLOW_ADAMSBASHFORTH_3
92e77d50bf Jean*0525           CALL MNC_CW_RL_R('D',fn,0,0,'gWnm1', gwNm1, myThid)
cba4501825 Jean*0526 #endif
92e77d50bf Jean*0527         ENDIF
c3be04357d Jean*0528 #endif /*  ALLOW_NONHYDROSTATIC */
901f12b7bc Jean*0529         IF ( storePhiHyd4Phys ) THEN
92e77d50bf Jean*0530           CALL MNC_CW_RL_R('D',fn,0,0,'phiHyd',totPhiHyd,myThid)
                0531         ENDIF
                0532       ENDIF
                0533 #endif /*  ALLOW_MNC  */
                0534 
                0535 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0536 
                0537 C     Fill in edge regions
                0538       CALL EXCH_UV_3D_RL( uVel, vVel, .TRUE., Nr, myThid )
eda0e8da44 Mich*0539 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0540       IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0541         CALL EXCH_UV_3D_RL( uEulerMean, vEulerMean, .TRUE., Nr, myThid )
bcc58d6972 Mich*0542       ENDIF
                0543 #endif
92e77d50bf Jean*0544       CALL EXCH_3D_RL( theta, Nr, myThid )
                0545       CALL EXCH_3D_RL( salt,  Nr, myThid )
                0546 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0547       CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,1),
                0548      &                    gvNm(1-OLx,1-OLy,1,1,1,1),.TRUE.,Nr,myThid )
                0549       CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,2),
                0550      &                    gvNm(1-OLx,1-OLy,1,1,1,2),.TRUE.,Nr,myThid )
                0551       CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0552       CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
                0553       CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0554       CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
92e77d50bf Jean*0555 #else /* ALLOW_ADAMSBASHFORTH_3 */
                0556       CALL EXCH_UV_3D_RL( guNm1, gvNm1, .TRUE., Nr, myThid )
                0557       CALL EXCH_3D_RL( gtNm1, Nr, myThid )
                0558       CALL EXCH_3D_RL( gsNm1, Nr, myThid )
                0559 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0560       CALL EXCH_XY_RL( etaN, myThid )
                0561       CALL EXCH_XY_RL( etaH, myThid )
                0562       CALL EXCH_XY_RL( detaHdt, myThid )
                0563 
901f12b7bc Jean*0564       IF ( storePhiHyd4Phys )
92e77d50bf Jean*0565      &  CALL EXCH_3D_RL( totPhiHyd, Nr, myThid )
0320e25227 Mart*0566       IF ( usingPCoords .AND. useSEAICE )
                0567      &  CALL EXCH_XY_RL( phiHydLow, myThid )
92e77d50bf Jean*0568 
                0569 #ifdef ALLOW_NONHYDROSTATIC
                0570       IF ( use3Dsolver ) THEN
                0571         CALL EXCH_3D_RL( phi_nh, Nr, myThid )
cba4501825 Jean*0572       ENDIF
                0573       IF ( nonHydrostatic ) THEN
                0574 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0575         CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0576         CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
cba4501825 Jean*0577 #else /* ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0578         CALL EXCH_3D_RL( gwNm1,  Nr, myThid )
cba4501825 Jean*0579 #endif /* ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0580       ENDIF
cba4501825 Jean*0581       IF ( selectNHfreeSurf.GE.1 ) THEN
                0582         CALL EXCH_XY_RL( dPhiNH, myThid )
                0583       ENDIF
                0584 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0585 #ifdef ALLOW_QHYD_STAGGER_TS
                0586       IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0587 #ifdef ALLOW_ADAMSBASHFORTH_3
                0588         CALL EXCH_3D_RL( QHydGwNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0589         CALL EXCH_3D_RL( QHydGwNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
                0590 #else /* ALLOW_ADAMSBASHFORTH_3 */
                0591         CALL EXCH_3D_RL( QHydGwNm, Nr, myThid )
                0592 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0593       ENDIF
                0594 #endif /* ALLOW_QHYD_STAGGER_TS */
92e77d50bf Jean*0595 
                0596       RETURN
                0597       END