Back to home page

MITgcm

 
 

    


File indexing completed on 2021-08-12 05:11:02 UTC

view on githubraw file Latest commit 0320e252 on 2021-08-11 16:08:52 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 )
                0225 #ifdef EXACT_CONSERV
d6ed4854d6 Jean*0226           IF ( exactConserv ) THEN
92e77d50bf Jean*0227            CALL READ_REC_3D_RL(fn,fp,1,dEtaHdt,nj*Nr+2,myIter,myThid )
                0228           ENDIF
d6ed4854d6 Jean*0229           IF ( nonlinFreeSurf.GT.0 ) THEN
92e77d50bf Jean*0230            CALL READ_REC_3D_RL(fn,fp,1, etaH, nj*Nr+3, myIter,myThid )
                0231           ENDIF
                0232 #endif
                0233         ENDIF
                0234 
901f12b7bc Jean*0235         IF ( storePhiHyd4Phys ) THEN
92e77d50bf Jean*0236           WRITE(fn,'(A,A10)') 'pickup_ph.',suff
                0237           CALL READ_REC_3D_RL( fn, fp, Nr, totPhiHyd,1,myIter,myThid )
d6ed4854d6 Jean*0238          ENDIF
92e77d50bf Jean*0239 #ifdef ALLOW_NONHYDROSTATIC
d6ed4854d6 Jean*0240          IF ( use3Dsolver ) THEN
92e77d50bf Jean*0241           WRITE(fn,'(A,A10)') 'pickup_nh.',suff
                0242           CALL READ_REC_3D_RL( fn, fp, Nr, phi_nh,  1, myIter,myThid )
cba4501825 Jean*0243 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0244           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,1),
cba4501825 Jean*0245      &                                              2, myIter,myThid )
229ac9feb6 Jean*0246           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,2),
cba4501825 Jean*0247      &                                              2, myIter,myThid )
                0248 #else /*  ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0249           CALL READ_REC_3D_RL( fn, fp, Nr, gwNm1,   2, myIter,myThid )
cba4501825 Jean*0250 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0251         ENDIF
cba4501825 Jean*0252 #endif /* ALLOW_NONHYDROSTATIC */
d6ed4854d6 Jean*0253        ELSE
                0254 C---   New way to read model fields:
                0255           nj = 0
                0256 C---    read State 3-D fields for restart
                0257           CALL READ_MFLDS_3D_RL( 'Uvel    ', uVel,
                0258      &                                     nj, fp, Nr, myIter, myThid )
                0259           CALL READ_MFLDS_3D_RL( 'Vvel    ', vVel,
                0260      &                                     nj, fp, Nr, myIter, myThid )
eda0e8da44 Mich*0261 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0262           IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0263             CALL READ_MFLDS_3D_RL( 'UEulerM ', uEulerMean,
bcc58d6972 Mich*0264      &                                      nj, fp, Nr, myIter, myThid )
fd6656ef94 Jean*0265             CALL READ_MFLDS_3D_RL( 'VEulerM ', vEulerMean,
bcc58d6972 Mich*0266      &                                      nj, fp, Nr, myIter, myThid )
                0267           ENDIF
                0268 #endif
d6ed4854d6 Jean*0269           CALL READ_MFLDS_3D_RL( 'Theta   ', theta,
                0270      &                                     nj, fp, Nr, myIter, myThid )
                0271           CALL READ_MFLDS_3D_RL( 'Salt    ', salt,
                0272      &                                     nj, fp, Nr, myIter, myThid )
                0273 C---    read 3-D fields for AB-restart
                0274 #ifdef ALLOW_ADAMSBASHFORTH_3
fdf5fb6af0 Jean*0275 
d6ed4854d6 Jean*0276          m1 = 1 + MOD(myIter+1,2)
                0277          m2 = 1 + MOD( myIter ,2)
04b6a7043d Jean*0278         IF ( momStepping ) THEN
d6ed4854d6 Jean*0279 C--     U velocity:
                0280          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0281           CALL READ_MFLDS_3D_RL( 'GuNm1   ',guNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0282      &                                     nj, fp, Nr, myIter, myThid )
                0283          ENDIF
                0284          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0285           CALL READ_MFLDS_3D_RL( 'GuNm2   ',guNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0286      &                                     nj, fp, Nr, myIter, myThid )
                0287          ENDIF
                0288 C--     V velocity:
                0289          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0290           CALL READ_MFLDS_3D_RL( 'GvNm1   ',gvNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0291      &                                     nj, fp, Nr, myIter, myThid )
                0292          ENDIF
                0293          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0294           CALL READ_MFLDS_3D_RL( 'GvNm2   ',gvNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0295      &                                     nj, fp, Nr, myIter, myThid )
                0296          ENDIF
04b6a7043d Jean*0297         ENDIF
d6ed4854d6 Jean*0298 C--     Temperature:
                0299         IF ( AdamsBashforthGt ) THEN
                0300          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0301           CALL READ_MFLDS_3D_RL( 'GtNm1   ',gtNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0302      &                                     nj, fp, Nr, myIter, myThid )
                0303          ENDIF
                0304          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0305           CALL READ_MFLDS_3D_RL( 'GtNm2   ',gtNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0306      &                                     nj, fp, Nr, myIter, myThid )
                0307          ENDIF
                0308         ELSEIF ( AdamsBashforth_T ) THEN
                0309          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0310           CALL READ_MFLDS_3D_RL( 'TempNm1 ',gtNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0311      &                                     nj, fp, Nr, myIter, myThid )
                0312          ENDIF
                0313          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0314           CALL READ_MFLDS_3D_RL( 'TempNm2 ',gtNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0315      &                                     nj, fp, Nr, myIter, myThid )
                0316          ENDIF
                0317         ENDIF
                0318 C--     Salinity:
                0319         IF ( AdamsBashforthGs ) THEN
                0320          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0321           CALL READ_MFLDS_3D_RL( 'GsNm1   ',gsNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0322      &                                     nj, fp, Nr, myIter, myThid )
                0323          ENDIF
                0324          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0325           CALL READ_MFLDS_3D_RL( 'GsNm2   ',gsNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0326      &                                     nj, fp, Nr, myIter, myThid )
                0327          ENDIF
                0328         ELSEIF ( AdamsBashforth_S ) THEN
                0329          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0330           CALL READ_MFLDS_3D_RL( 'SaltNm1 ',gsNm(1-OLx,1-OLy,1,1,1,m1),
d6ed4854d6 Jean*0331      &                                     nj, fp, Nr, myIter, myThid )
                0332          ENDIF
                0333          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0334           CALL READ_MFLDS_3D_RL( 'SaltNm2 ',gsNm(1-OLx,1-OLy,1,1,1,m2),
d6ed4854d6 Jean*0335      &                                     nj, fp, Nr, myIter, myThid )
                0336          ENDIF
                0337         ENDIF
cba4501825 Jean*0338 #ifdef ALLOW_NONHYDROSTATIC
                0339         IF ( nonHydrostatic ) THEN
                0340 C--     W velocity:
                0341          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0342           CALL READ_MFLDS_3D_RL( 'GwNm1   ',gwNm(1-OLx,1-OLy,1,1,1,m1),
cba4501825 Jean*0343      &                                     nj, fp, Nr, myIter, myThid )
                0344          ENDIF
                0345          IF ( beta_AB.NE.0. ) THEN
229ac9feb6 Jean*0346           CALL READ_MFLDS_3D_RL( 'GwNm2   ',gwNm(1-OLx,1-OLy,1,1,1,m2),
cba4501825 Jean*0347      &                                     nj, fp, Nr, myIter, myThid )
                0348          ENDIF
                0349         ENDIF
                0350 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0351 #ifdef ALLOW_QHYD_STAGGER_TS
                0352 C--     Quasi-Hydrostatic Adams-Bashforth variables:
                0353         IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0354          IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
                0355           CALL READ_MFLDS_3D_RL( 'QH_GwNm1',
                0356      O                           QHydGwNm(1-OLx,1-OLy,1,1,1,m1),
                0357      I                                     nj, fp, Nr, myIter, myThid )
                0358          ENDIF
                0359          IF ( beta_AB.NE.0. ) THEN
                0360           CALL READ_MFLDS_3D_RL( 'QH_GwNm2',
                0361      O                           QHydGwNm(1-OLx,1-OLy,1,1,1,m2),
                0362      I                                     nj, fp, Nr, myIter, myThid )
                0363          ENDIF
                0364         ENDIF
                0365 #endif /* ALLOW_QHYD_STAGGER_TS */
                0366 
d6ed4854d6 Jean*0367 #else /*  ALLOW_ADAMSBASHFORTH_3 */
04b6a7043d Jean*0368         IF ( momStepping ) THEN
d6ed4854d6 Jean*0369 C--     U velocity:
                0370           CALL READ_MFLDS_3D_RL( 'GuNm1   ', guNm1,
                0371      &                                     nj, fp, Nr, myIter, myThid )
                0372 C--     V velocity:
                0373           CALL READ_MFLDS_3D_RL( 'GvNm1   ', gvNm1,
                0374      &                                     nj, fp, Nr, myIter, myThid )
04b6a7043d Jean*0375         ENDIF
d6ed4854d6 Jean*0376 C--     Temperature
                0377         IF ( AdamsBashforthGt ) THEN
                0378           CALL READ_MFLDS_3D_RL( 'GtNm1   ', gtNm1,
                0379      &                                     nj, fp, Nr, myIter, myThid )
b4f60a0901 Jean*0380         ELSEIF ( AdamsBashforth_T ) THEN
                0381           CALL READ_MFLDS_3D_RL( 'TempNm1 ', gtNm1,
                0382      &                                     nj, fp, Nr, myIter, myThid )
d6ed4854d6 Jean*0383         ENDIF
                0384 C--     Salinity
                0385         IF ( AdamsBashforthGs ) THEN
                0386           CALL READ_MFLDS_3D_RL( 'GsNm1   ', gsNm1,
                0387      &                                     nj, fp, Nr, myIter, myThid )
b4f60a0901 Jean*0388         ELSEIF ( AdamsBashforth_S ) THEN
                0389           CALL READ_MFLDS_3D_RL( 'SaltNm1 ', gsNm1,
                0390      &                                     nj, fp, Nr, myIter, myThid )
d6ed4854d6 Jean*0391         ENDIF
cba4501825 Jean*0392 #ifdef ALLOW_NONHYDROSTATIC
                0393         IF ( nonHydrostatic ) THEN
                0394           CALL READ_MFLDS_3D_RL( 'GwNm1   ', gwNm1,
                0395      &                                     nj, fp, Nr, myIter, myThid )
                0396         ENDIF
                0397 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0398 #ifdef ALLOW_QHYD_STAGGER_TS
                0399 C--     Quasi-Hydrostatic Adams-Bashforth variables:
                0400         IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0401           CALL READ_MFLDS_3D_RL( 'QH_GwNm1', QHydGwNm,
                0402      &                                     nj, fp, Nr, myIter, myThid )
                0403         ENDIF
                0404 #endif /* ALLOW_QHYD_STAGGER_TS */
                0405 
d6ed4854d6 Jean*0406 #endif /*  ALLOW_ADAMSBASHFORTH_3 */
                0407 
                0408 C-      read Full Pressure for EOS in pressure:
901f12b7bc Jean*0409         IF ( storePhiHyd4Phys ) THEN
d6ed4854d6 Jean*0410           CALL READ_MFLDS_3D_RL( 'PhiHyd  ', totPhiHyd,
                0411      &                                     nj, fp, Nr, myIter, myThid )
                0412         ENDIF
                0413 #ifdef ALLOW_NONHYDROSTATIC
                0414         IF ( use3Dsolver ) THEN
                0415           CALL READ_MFLDS_3D_RL( 'Phi_NHyd', phi_nh,
                0416      &                                     nj, fp, Nr, myIter, myThid )
                0417         ENDIF
cba4501825 Jean*0418 #endif /* ALLOW_NONHYDROSTATIC */
2d5bb917cc Jean*0419 #ifdef ALLOW_SMAG_3D_DIFFUSIVITY
                0420 C-    With synchronous time-stepping, Smag-3D diffusivity is lagging by 1 time-step
                0421 C     (i.e., used before being updated meaning field is from previous time-step calc)
                0422 C     --> needs to be read-in from pickup file
                0423         IF ( smag3D_diffCoeff.GT.zeroRL
                0424      &       .AND. .NOT.staggerTimeStep ) THEN
                0425           CALL READ_MFLDS_3D_RL( 'SmagDiff', smag3D_diffK,
                0426      &                                     nj, fp, Nr, myIter, myThid )
                0427         ENDIF
                0428 #endif /* ALLOW_SMAG_3D_DIFFUSIVITY */
d2a11ab670 Jean*0429 #ifdef ALLOW_ADDFLUID
                0430 C-    read mass source/sink of fluid
                0431         IF ( selectAddFluid.GE.1 ) THEN
                0432           CALL READ_MFLDS_3D_RL( 'AddMass ', addMass,
                0433      &                                     nj, fp, Nr, myIter, myThid )
                0434         ENDIF
                0435 #endif /* ALLOW_ADDFLUID */
fd6656ef94 Jean*0436 #ifdef ALLOW_FRICTION_HEATING
                0437 C-    needs frictional heating when using synchronous time-stepping
                0438         IF ( addFrictionHeating .AND. .NOT.staggerTimeStep ) THEN
                0439           CALL READ_MFLDS_LEV_RS( 'FricHeat', frictionHeating,
                0440      &                              nj, fp, Nr, 1, Nr, myIter, myThid )
                0441         ENDIF
                0442 #endif /* ALLOW_FRICTION_HEATING */
d6ed4854d6 Jean*0443 
                0444 C---    read 2-D fields, starting with Eta:
                0445           nj = nj*Nr
                0446           CALL READ_MFLDS_3D_RL( 'EtaN    ', etaN,
                0447      &                                     nj, fp, 1 , myIter, myThid )
0320e25227 Mart*0448         IF ( usingPCoords .AND. useSEAICE ) THEN
                0449           CALL READ_MFLDS_3D_RL( 'Phi_rLow', phiHydLow,
                0450      &                                     nj, fp, 1 , myIter, myThid )
                0451         ENDIF
cba4501825 Jean*0452 #ifdef ALLOW_NONHYDROSTATIC
                0453         IF ( selectNHfreeSurf.GE.1 ) THEN
                0454           CALL READ_MFLDS_3D_RL( 'dPhiNH  ', dPhiNH,
                0455      &                                     nj, fp, 1 , myIter, myThid )
                0456         ENDIF
                0457 #endif /* ALLOW_NONHYDROSTATIC */
d6ed4854d6 Jean*0458 #ifdef EXACT_CONSERV
                0459         IF ( exactConserv ) THEN
                0460           CALL READ_MFLDS_3D_RL( 'dEtaHdt ', dEtaHdt,
                0461      &                                     nj, fp, 1 , myIter, myThid )
                0462         ENDIF
                0463         IF ( nonlinFreeSurf.GT.0 ) THEN
                0464           CALL READ_MFLDS_3D_RL( 'EtaH    ', etaH,
                0465      &                                     nj, fp, 1 , myIter, myThid )
                0466         ENDIF
cba4501825 Jean*0467 #endif /* EXACT_CONSERV */
d6ed4854d6 Jean*0468 C--    end: new way to read pickup file
                0469        ENDIF
                0470 
                0471 C--    Check for missing fields:
                0472        nMissing = missFldDim
                0473        CALL READ_MFLDS_CHECK(
                0474      O                    missFldList,
                0475      U                    nMissing,
                0476      I                    myIter, myThid )
                0477        IF ( nMissing.GT.missFldDim ) THEN
                0478          WRITE(msgBuf,'(2A,I4)') 'READ_PICKUP: ',
                0479      &     'missing fields list has been truncated to', missFldDim
                0480          CALL PRINT_ERROR( msgBuf, myThid )
                0481          STOP 'ABNORMAL END: S/R READ_PICKUP (list-size Pb)'
                0482        ENDIF
                0483        CALL CHECK_PICKUP(
                0484      I                    missFldList,
                0485      I                    nMissing, nbFields,
                0486      I                    myIter, myThid )
92e77d50bf Jean*0487 
d6ed4854d6 Jean*0488 C--   end: pickup_read_mdsio
92e77d50bf Jean*0489       ENDIF
                0490 
                0491 #ifdef ALLOW_MNC
                0492       IF (useMNC .AND. pickup_read_mnc) THEN
                0493         WRITE(fn,'(A)') 'pickup'
                0494         CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
                0495         CALL MNC_CW_SET_UDIM(fn, 1, myThid)
                0496         CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
                0497         CALL MNC_CW_RL_R('D',fn,0,0,'U',uVel, myThid)
                0498         CALL MNC_CW_RL_R('D',fn,0,0,'V',vVel, myThid)
eda0e8da44 Mich*0499 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0500         IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0501           CALL MNC_CW_RL_R('D',fn,0,0,'UEulerM',uEulerMean, myThid)
                0502           CALL MNC_CW_RL_R('D',fn,0,0,'VEulerM',vEulerMean, myThid)
bcc58d6972 Mich*0503         ENDIF
                0504 #endif
92e77d50bf Jean*0505         CALL MNC_CW_RL_R('D',fn,0,0,'Temp',theta, myThid)
                0506         CALL MNC_CW_RL_R('D',fn,0,0,'S',salt, myThid)
                0507         CALL MNC_CW_RL_R('D',fn,0,0,'Eta',etaN, myThid)
                0508 #ifndef ALLOW_ADAMSBASHFORTH_3
                0509         CALL MNC_CW_RL_R('D',fn,0,0,'gUnm1',guNm1, myThid)
                0510         CALL MNC_CW_RL_R('D',fn,0,0,'gVnm1',gvNm1, myThid)
                0511         CALL MNC_CW_RL_R('D',fn,0,0,'gTnm1',gtNm1, myThid)
                0512         CALL MNC_CW_RL_R('D',fn,0,0,'gSnm1',gsNm1, myThid)
                0513 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0514 C#ifdef NONLIN_FRSURF
                0515 C        IF ( nonlinFreeSurf.GE.0 .AND. usePickupBeforeC54 )
                0516 C     &    CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
                0517 C#endif
                0518 #ifdef EXACT_CONSERV
                0519         IF (exactConserv) THEN
                0520           CALL MNC_CW_RL_R('D',fn,0,0,'dEtaHdt',dEtaHdt,myThid)
                0521         ENDIF
                0522         IF (nonlinFreeSurf .GT. 0) THEN
                0523           CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
                0524         ENDIF
                0525 #endif
                0526 #ifdef ALLOW_NONHYDROSTATIC
                0527         IF (use3Dsolver) THEN
                0528           CALL MNC_CW_RL_R('D',fn,0,0,'phi_nh', phi_nh, myThid)
                0529 c         CALL MNC_CW_RL_R('D',fn,0,0,'gW', gW, myThid)
cba4501825 Jean*0530 #ifndef ALLOW_ADAMSBASHFORTH_3
92e77d50bf Jean*0531           CALL MNC_CW_RL_R('D',fn,0,0,'gWnm1', gwNm1, myThid)
cba4501825 Jean*0532 #endif
92e77d50bf Jean*0533         ENDIF
                0534 #endif
901f12b7bc Jean*0535         IF ( storePhiHyd4Phys ) THEN
92e77d50bf Jean*0536           CALL MNC_CW_RL_R('D',fn,0,0,'phiHyd',totPhiHyd,myThid)
                0537         ENDIF
                0538       ENDIF
                0539 #endif /*  ALLOW_MNC  */
                0540 
                0541 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0542 
                0543 C     Fill in edge regions
                0544       CALL EXCH_UV_3D_RL( uVel, vVel, .TRUE., Nr, myThid )
eda0e8da44 Mich*0545 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
bcc58d6972 Mich*0546       IF (GM_InMomAsStress) THEN
fd6656ef94 Jean*0547         CALL EXCH_UV_3D_RL( uEulerMean, vEulerMean, .TRUE., Nr, myThid )
bcc58d6972 Mich*0548       ENDIF
                0549 #endif
92e77d50bf Jean*0550       CALL EXCH_3D_RL( theta, Nr, myThid )
                0551       CALL EXCH_3D_RL( salt,  Nr, myThid )
                0552 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0553       CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,1),
                0554      &                    gvNm(1-OLx,1-OLy,1,1,1,1),.TRUE.,Nr,myThid )
                0555       CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,2),
                0556      &                    gvNm(1-OLx,1-OLy,1,1,1,2),.TRUE.,Nr,myThid )
                0557       CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0558       CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
                0559       CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0560       CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
92e77d50bf Jean*0561 #else /* ALLOW_ADAMSBASHFORTH_3 */
                0562       CALL EXCH_UV_3D_RL( guNm1, gvNm1, .TRUE., Nr, myThid )
                0563       CALL EXCH_3D_RL( gtNm1, Nr, myThid )
                0564       CALL EXCH_3D_RL( gsNm1, Nr, myThid )
                0565 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0566       CALL EXCH_XY_RL( etaN, myThid )
                0567       CALL EXCH_XY_RL( etaH, myThid )
                0568 #ifdef EXACT_CONSERV
                0569       CALL EXCH_XY_RL( detaHdt, myThid )
                0570 #endif
                0571 
901f12b7bc Jean*0572       IF ( storePhiHyd4Phys )
92e77d50bf Jean*0573      &  CALL EXCH_3D_RL( totPhiHyd, Nr, myThid )
0320e25227 Mart*0574       IF ( usingPCoords .AND. useSEAICE )
                0575      &  CALL EXCH_XY_RL( phiHydLow, myThid )
92e77d50bf Jean*0576 
                0577 #ifdef ALLOW_NONHYDROSTATIC
                0578       IF ( use3Dsolver ) THEN
                0579         CALL EXCH_3D_RL( phi_nh, Nr, myThid )
cba4501825 Jean*0580       ENDIF
                0581       IF ( nonHydrostatic ) THEN
                0582 #ifdef ALLOW_ADAMSBASHFORTH_3
229ac9feb6 Jean*0583         CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0584         CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
cba4501825 Jean*0585 #else /* ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0586         CALL EXCH_3D_RL( gwNm1,  Nr, myThid )
cba4501825 Jean*0587 #endif /* ALLOW_ADAMSBASHFORTH_3 */
92e77d50bf Jean*0588       ENDIF
cba4501825 Jean*0589       IF ( selectNHfreeSurf.GE.1 ) THEN
                0590         CALL EXCH_XY_RL( dPhiNH, myThid )
                0591       ENDIF
                0592 #endif /* ALLOW_NONHYDROSTATIC */
fdf5fb6af0 Jean*0593 #ifdef ALLOW_QHYD_STAGGER_TS
                0594       IF ( quasiHydrostatic .AND. staggerTimeStep ) THEN
                0595 #ifdef ALLOW_ADAMSBASHFORTH_3
                0596         CALL EXCH_3D_RL( QHydGwNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
                0597         CALL EXCH_3D_RL( QHydGwNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
                0598 #else /* ALLOW_ADAMSBASHFORTH_3 */
                0599         CALL EXCH_3D_RL( QHydGwNm, Nr, myThid )
                0600 #endif /* ALLOW_ADAMSBASHFORTH_3 */
                0601       ENDIF
                0602 #endif /* ALLOW_QHYD_STAGGER_TS */
92e77d50bf Jean*0603 
                0604       RETURN
                0605       END