| 1 | afe | 1.1 | C $Header: /u/gcmpack/MITgcm_contrib/osse/code/checkpoint.F,v 1.1 2004/04/26 14:08:04 afe Exp $ | 
| 2 |  |  | C $Name:  $ | 
| 3 |  |  |  | 
| 4 |  |  | #include "CPP_OPTIONS.h" | 
| 5 |  |  |  | 
| 6 |  |  | C--  File read_write.F: Routines to handle mid-level I/O interface. | 
| 7 |  |  | C--   Contents | 
| 8 |  |  | C--   o SET_WRITE_GLOBAL_PICKUP | 
| 9 |  |  | C--   o READ_CHECKPOINT - Write out checkpoint files for restarting. | 
| 10 |  |  | C--   o WRITE_CHECKPOINT - Write out checkpoint files for restarting. | 
| 11 |  |  |  | 
| 12 |  |  | SUBROUTINE SET_WRITE_GLOBAL_PICKUP ( flag ) | 
| 13 |  |  | IMPLICIT NONE | 
| 14 |  |  | C SET_WRITE_GLOBAL_FLD( flag ) sets an internal logical state to | 
| 15 |  |  | C indicate whether files written by subsequent call to the | 
| 16 |  |  | C READ_WRITE_FLD package should create "global" or "tiled" files. | 
| 17 |  |  | C   flag = .TRUE.  indicates "global" files | 
| 18 |  |  | C   flag = .FALSE. indicates "tiled" files | 
| 19 |  |  | C | 
| 20 |  |  | C Arguments | 
| 21 |  |  | LOGICAL flag | 
| 22 |  |  | C Common | 
| 23 |  |  | COMMON /PCKP_GBLFLS/ globalFile | 
| 24 |  |  | LOGICAL globalFile | 
| 25 |  |  | C | 
| 26 |  |  | globalFile=flag | 
| 27 |  |  | C | 
| 28 |  |  | RETURN | 
| 29 |  |  | END | 
| 30 |  |  |  | 
| 31 |  |  | CBOP | 
| 32 |  |  | C     !ROUTINE: READ_CHECKPOINT | 
| 33 |  |  | C     !INTERFACE: | 
| 34 |  |  | SUBROUTINE READ_CHECKPOINT ( myIter, myThid ) | 
| 35 |  |  | C     !DESCRIPTION: \bv | 
| 36 |  |  | C     *==========================================================* | 
| 37 |  |  | C     | SUBROUTINE READ_PICKUP | 
| 38 |  |  | C     | o Controlling routine for IO to write restart file. | 
| 39 |  |  | C     *==========================================================* | 
| 40 |  |  | C     | Read model checkpoint files for use in restart. | 
| 41 |  |  | C     *==========================================================* | 
| 42 |  |  | C     \ev | 
| 43 |  |  | C     !USES: | 
| 44 |  |  | IMPLICIT NONE | 
| 45 |  |  | C     == Global variables === | 
| 46 |  |  | #include "SIZE.h" | 
| 47 |  |  | #include "EEPARAMS.h" | 
| 48 |  |  | #include "PARAMS.h" | 
| 49 |  |  | #include "DYNVARS.h" | 
| 50 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 51 |  |  | #include "GW.h" | 
| 52 |  |  | #include "SOLVE_FOR_PRESSURE3D.h" | 
| 53 |  |  | #endif | 
| 54 |  |  | INTEGER  IO_ERRCOUNT | 
| 55 |  |  | EXTERNAL IO_ERRCOUNT | 
| 56 |  |  |  | 
| 57 |  |  | C     !INPUT/OUTPUT PARAMETERS: | 
| 58 |  |  | C     == Routine arguments == | 
| 59 |  |  | C     myThid - Thread number for this instance of the routine. | 
| 60 |  |  | C     myIter - Iteration number | 
| 61 |  |  | INTEGER myThid | 
| 62 |  |  | INTEGER myIter | 
| 63 |  |  |  | 
| 64 |  |  | C     !LOCAL VARIABLES: | 
| 65 |  |  | C     == Local variables == | 
| 66 |  |  | C     oldPrec :: Temp. for hold I/O precision information | 
| 67 |  |  | C     prec | 
| 68 |  |  | C     fn      :: Temp. for building file name. | 
| 69 |  |  | INTEGER oldPrec | 
| 70 |  |  | CHARACTER*(MAX_LEN_FNAM) fn | 
| 71 |  |  | INTEGER prec | 
| 72 |  |  | CEOP | 
| 73 |  |  |  | 
| 74 |  |  | C--    Going to really do some IO. Make everyone except master thread wait. | 
| 75 |  |  | _BARRIER | 
| 76 |  |  | _BEGIN_MASTER( myThid ) | 
| 77 |  |  |  | 
| 78 |  |  | C       Force 64-bit IO | 
| 79 |  |  | oldPrec        = readBinaryPrec | 
| 80 |  |  | readBinaryPrec = precFloat64 | 
| 81 |  |  |  | 
| 82 |  |  | #ifdef OLD_STYLE_WITH_MANY_FILES | 
| 83 |  |  | C--     Read model fields | 
| 84 |  |  | C       Raw fields | 
| 85 |  |  | CALL READ_REC_XYZ_RL(  'uVel',   uVel, 1,myIter, myThid) | 
| 86 |  |  | CALL READ_REC_XYZ_RL(    'gU',     gU, 1,myIter, myThid) | 
| 87 |  |  | CALL READ_REC_XYZ_RL( 'guNm1',  gUNm1, 1,myIter, myThid) | 
| 88 |  |  | CALL READ_REC_XYZ_RL(  'vVel',   vVel, 1,myIter, myThid) | 
| 89 |  |  | CALL READ_REC_XYZ_RL(    'gV',     gV, 1,myIter, myThid) | 
| 90 |  |  | CALL READ_REC_XYZ_RL( 'gvNm1',  gVNm1, 1,myIter, myThid) | 
| 91 |  |  | CALL READ_REC_XYZ_RL( 'theta',  theta, 1,myIter, myThid) | 
| 92 |  |  | CALL READ_REC_XYZ_RL(    'gT',     gT, 1,myIter, myThid) | 
| 93 |  |  | CALL READ_REC_XYZ_RL( 'gtNm1',  gTNm1, 1,myIter, myThid) | 
| 94 |  |  | CALL READ_REC_XYZ_RL(  'salt',   salt, 1,myIter, myThid) | 
| 95 |  |  | CALL READ_REC_XYZ_RL(    'gS',     gS, 1,myIter, myThid) | 
| 96 |  |  | CALL READ_REC_XYZ_RL( 'gsNm1',  gSNm1, 1,myIter, myThid) | 
| 97 |  |  | CALL READ_REC_XY_RL ('etaN', etaN, 1,myIter, myThid) | 
| 98 |  |  | #ifdef INCLUDE_CD_CODE | 
| 99 |  |  | CALL READ_REC_XY_RL ('etaNm1', etaNm1, 1,myIter, myThid) | 
| 100 |  |  | CALL READ_REC_XYZ_RL(  'uVelD', uVelD, 1,myIter, myThid) | 
| 101 |  |  | CALL READ_REC_XYZ_RL(  'vVelD', vVelD, 1,myIter, myThid) | 
| 102 |  |  | CALL READ_REC_XYZ_RL(  'uNm1',  uNM1, 1,myIter, myThid) | 
| 103 |  |  | CALL READ_REC_XYZ_RL(  'vNm1',  vNM1, 1,myIter, myThid) | 
| 104 |  |  | CALL READ_REC_XYZ_RL(  'guCD',  guCD, 1,myIter, myThid) | 
| 105 |  |  | CALL READ_REC_XYZ_RL(  'gvCD',  gvCD, 1,myIter, myThid) | 
| 106 |  |  | #endif | 
| 107 |  |  |  | 
| 108 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 109 |  |  | IF ( nonHydrostatic ) THEN | 
| 110 |  |  | CALL READ_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid) | 
| 111 |  |  | CALL READ_REC_XYZ_RL( 'gW',gW,       1,myIter,myThid) | 
| 112 |  |  | c        CALL READ_REC_XYZ_RL( 'gWnm1',gWnm1, 1,myIter,myThid) | 
| 113 |  |  | ENDIF | 
| 114 |  |  | #endif | 
| 115 |  |  | #else /* OLD_STYLE_WITH_MANY_FILES */ | 
| 116 |  |  |  | 
| 117 |  |  | prec = precFloat64 | 
| 118 |  |  |  | 
| 119 |  |  | C--     Read model fields | 
| 120 |  |  | WRITE(fn,'(A,I10.10)') 'pickup.',myIter | 
| 121 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,uVel,   1,myThid) | 
| 122 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gU,     2,myThid) | 
| 123 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gUnm1,  3,myThid) | 
| 124 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,vVel,   4,myThid) | 
| 125 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gV,     5,myThid) | 
| 126 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gVnm1,  6,myThid) | 
| 127 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,wVel,  7,myThid) | 
| 128 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,theta,  8,myThid) | 
| 129 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gT,     9,myThid) | 
| 130 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gTnm1,  10,myThid) | 
| 131 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,salt,  11,myThid) | 
| 132 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gS,    12,myThid) | 
| 133 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gSnm1, 13,myThid) | 
| 134 |  |  | CALL MDSREADFIELD(fn,prec,'RL', 1,etaN,13*Nr+1,myThid) | 
| 135 |  |  | #ifdef NONLIN_FRSURF | 
| 136 |  |  | IF ( nonlinFreeSurf.GE.0) | 
| 137 |  |  | &  CALL MDSREADFIELD(fn,prec,'RL',1,etaH,13*Nr+2,myThid) | 
| 138 |  |  | #endif | 
| 139 |  |  | #ifdef INCLUDE_CD_CODE | 
| 140 |  |  | WRITE(fn,'(A,I10.10)') 'pickup_cd.',myIter | 
| 141 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,uVelD,    1,myThid) | 
| 142 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,vVelD,    2,myThid) | 
| 143 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,uNM1,     3,myThid) | 
| 144 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,vNM1,     4,myThid) | 
| 145 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,guCD,     5,myThid) | 
| 146 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gvCD,     6,myThid) | 
| 147 |  |  | CALL MDSREADFIELD(fn,prec,'RL', 1,etaNm1,6*Nr+1,myThid) | 
| 148 |  |  | #endif /* INCLUDE_CD_CODE */ | 
| 149 |  |  |  | 
| 150 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 151 |  |  | IF ( nonHydrostatic ) THEN | 
| 152 |  |  | WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter | 
| 153 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,phi_nh,1,myThid) | 
| 154 |  |  | CALL MDSREADFIELD(fn,prec,'RL',Nr,gW,   2,myThid) | 
| 155 |  |  | c        CALL MDSREADFIELD(fn,prec,'RL',Nr,gWnm1,3,myThid) | 
| 156 |  |  | ENDIF | 
| 157 |  |  | #endif | 
| 158 |  |  |  | 
| 159 |  |  |  | 
| 160 |  |  |  | 
| 161 |  |  | C Create suffix to pass on to package pickup routines | 
| 162 |  |  | WRITE(fn,'(I10.10)') myIter | 
| 163 |  |  |  | 
| 164 |  |  | C SPK 4/9/01: Open boundary checkpointing | 
| 165 |  |  | #ifdef  ALLOW_OBCS | 
| 166 |  |  | IF (useOBCS) THEN | 
| 167 |  |  | CALL OBCS_READ_CHECKPOINT(prec, myIter, myThid) | 
| 168 |  |  | ENDIF | 
| 169 |  |  | #endif  /* ALLOW_OBCS */ | 
| 170 |  |  |  | 
| 171 |  |  | #endif /* OLD_STYLE_WITH_MANY_FILES */ | 
| 172 |  |  |  | 
| 173 |  |  | C       Reset default IO precision | 
| 174 |  |  | readBinaryPrec = oldPrec | 
| 175 |  |  |  | 
| 176 |  |  | _END_MASTER( myThid ) | 
| 177 |  |  | _BARRIER | 
| 178 |  |  |  | 
| 179 |  |  | #ifdef ALLOW_PTRACERS | 
| 180 |  |  | C Write restart file for passive tracers | 
| 181 |  |  | IF (usePTRACERS) THEN | 
| 182 |  |  | CALL PTRACERS_READ_CHECKPOINT(myIter,myThid) | 
| 183 |  |  | ENDIF | 
| 184 |  |  | #endif /* ALLOW_PTRACERS */ | 
| 185 |  |  |  | 
| 186 |  |  | C--    Fill in edge regions | 
| 187 |  |  | CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid) | 
| 188 |  |  | CALL EXCH_UV_XYZ_RL(gU,gV,.TRUE.,myThid) | 
| 189 |  |  | CALL EXCH_UV_XYZ_RL(gUnm1,gVnm1,.TRUE.,myThid) | 
| 190 |  |  | c     _EXCH_XYZ_R8(uVel  , myThid ) | 
| 191 |  |  | c     _EXCH_XYZ_R8(gu    , myThid ) | 
| 192 |  |  | c     _EXCH_XYZ_R8(guNM1 , myThid ) | 
| 193 |  |  | c     _EXCH_XYZ_R8(vVel  , myThid ) | 
| 194 |  |  | c     _EXCH_XYZ_R8(gv    , myThid ) | 
| 195 |  |  | c     _EXCH_XYZ_R8(gvNM1 , myThid ) | 
| 196 |  |  | _EXCH_XYZ_R8(theta , myThid ) | 
| 197 |  |  | _EXCH_XYZ_R8(gt    , myThid ) | 
| 198 |  |  | _EXCH_XYZ_R8(gtNM1 , myThid ) | 
| 199 |  |  | _EXCH_XYZ_R8(salt  , myThid ) | 
| 200 |  |  | _EXCH_XYZ_R8(gs    , myThid ) | 
| 201 |  |  | _EXCH_XYZ_R8(gsNM1 , myThid ) | 
| 202 |  |  | _EXCH_XY_R8 (etaN, myThid ) | 
| 203 |  |  | _EXCH_XY_R8( etaH, myThid ) | 
| 204 |  |  |  | 
| 205 |  |  | #ifdef INCLUDE_CD_CODE | 
| 206 |  |  | c**** CALL EXCH_DUV_XYZ_RL(uVelD,vVelD,.TRUE.,myThid) | 
| 207 |  |  | c**** CALL EXCH_DUV_XYZ_RL(guCD,gvCD,.TRUE.,myThid) | 
| 208 |  |  | _EXCH_XYZ_R8( uVelD,    myThid ) | 
| 209 |  |  | _EXCH_XYZ_R8( vVelD,    myThid ) | 
| 210 |  |  | CALL EXCH_UV_XYZ_RL(uNM1,vNM1,.TRUE.,myThid) | 
| 211 |  |  | c     _EXCH_XYZ_R8( uNM1,     myThid ) | 
| 212 |  |  | c     _EXCH_XYZ_R8( vNM1,     myThid ) | 
| 213 |  |  | _EXCH_XYZ_R8( guCD,     myThid ) | 
| 214 |  |  | _EXCH_XYZ_R8( gvCD,     myThid ) | 
| 215 |  |  | _EXCH_XY_R8( etaNm1, myThid ) | 
| 216 |  |  | #endif | 
| 217 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 218 |  |  | IF ( nonHydrostatic ) THEN | 
| 219 |  |  | _EXCH_XYZ_R8(phi_nh, myThid ) | 
| 220 |  |  | _EXCH_XYZ_R8(gW    , myThid ) | 
| 221 |  |  | c        _EXCH_XYZ_R8(gWNM1 , myThid ) | 
| 222 |  |  | ENDIF | 
| 223 |  |  | #endif | 
| 224 |  |  |  | 
| 225 |  |  | RETURN | 
| 226 |  |  | END | 
| 227 |  |  |  | 
| 228 |  |  | CBOP | 
| 229 |  |  | C     !ROUTINE: WRITE_CHECKPOINT | 
| 230 |  |  | C     !INTERFACE: | 
| 231 |  |  | SUBROUTINE WRITE_CHECKPOINT ( modelEnd, myTime, | 
| 232 |  |  | &                              myIter, myThid ) | 
| 233 |  |  | C     !DESCRIPTION: \bv | 
| 234 |  |  | C     *==========================================================* | 
| 235 |  |  | C     | SUBROUTINE WRITE_CHECKPOINT | 
| 236 |  |  | C     | o Controlling routine for IO to write restart file. | 
| 237 |  |  | C     *==========================================================* | 
| 238 |  |  | C     | Write model checkpoint files for use in restart. | 
| 239 |  |  | C     | This routine writes both "rolling-checkpoint" files | 
| 240 |  |  | C     | and permanent checkpoint files. A rolling checkpoint | 
| 241 |  |  | C     | works through a circular list of suffices. Generally the | 
| 242 |  |  | C     | circular list has two entries so that a rolling | 
| 243 |  |  | C     | checkpoint will overwrite the last rolling checkpoint | 
| 244 |  |  | C     | but one. This is useful for running long jobs without | 
| 245 |  |  | C     | filling too much disk space. | 
| 246 |  |  | C     |  In a permanent checkpoint data is written suffixed by | 
| 247 |  |  | C     | the current timestep number. This sort of checkpoint can | 
| 248 |  |  | C     | be used to provided a snap-shot from which the model | 
| 249 |  |  | C     | can be rerun. | 
| 250 |  |  | C     *==========================================================* | 
| 251 |  |  | C     \ev | 
| 252 |  |  |  | 
| 253 |  |  | C     !USES: | 
| 254 |  |  | IMPLICIT NONE | 
| 255 |  |  | C     == Global variables === | 
| 256 |  |  | #include "SIZE.h" | 
| 257 |  |  | #include "EEPARAMS.h" | 
| 258 |  |  | #include "PARAMS.h" | 
| 259 |  |  | #include "DYNVARS.h" | 
| 260 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 261 |  |  | #include "GW.h" | 
| 262 |  |  | #include "SOLVE_FOR_PRESSURE3D.h" | 
| 263 |  |  | #endif | 
| 264 |  |  | LOGICAL  DIFFERENT_MULTIPLE | 
| 265 |  |  | EXTERNAL DIFFERENT_MULTIPLE | 
| 266 |  |  | INTEGER  IO_ERRCOUNT | 
| 267 |  |  | EXTERNAL IO_ERRCOUNT | 
| 268 |  |  |  | 
| 269 |  |  | C     !INPUT/OUTPUT PARAMETERS: | 
| 270 |  |  | C     == Routine arguments == | 
| 271 |  |  | C     modelEnd    :: Checkpoint call at end of model run. | 
| 272 |  |  | C     myThid :: Thread number for this instance of the routine. | 
| 273 |  |  | C     myIter :: Iteration number | 
| 274 |  |  | C     myTime :: Current time of simulation ( s ) | 
| 275 |  |  | LOGICAL modelEnd | 
| 276 |  |  | INTEGER myThid | 
| 277 |  |  | INTEGER myIter | 
| 278 |  |  | _RL     myTime | 
| 279 |  |  |  | 
| 280 |  |  | C     == Common blocks == | 
| 281 |  |  | COMMON /PCKP_GBLFLS/ globalFile | 
| 282 |  |  | LOGICAL globalFile | 
| 283 |  |  |  | 
| 284 |  |  | C     !LOCAL VARIABLES: | 
| 285 |  |  | C     == Local variables == | 
| 286 |  |  | C     permCheckPoint :: Flag indicating whether a permanent checkpoint will | 
| 287 |  |  | C                       be written. | 
| 288 |  |  | C     oldPrc :: Temp. for holding I/O precision | 
| 289 |  |  | C     fn     :: Temp. for building file name string. | 
| 290 |  |  | C     lgf    :: Flag to indicate whether to use global file mode. | 
| 291 |  |  | LOGICAL permCheckPoint | 
| 292 |  |  | INTEGER oldPrec | 
| 293 |  |  | CHARACTER*(MAX_LEN_FNAM) fn | 
| 294 |  |  | INTEGER prec | 
| 295 |  |  | LOGICAL lgf | 
| 296 |  |  | CEOP | 
| 297 |  |  |  | 
| 298 |  |  | permCheckPoint = .FALSE. | 
| 299 |  |  | permCheckPoint= | 
| 300 |  |  | & DIFFERENT_MULTIPLE(pChkptFreq,myTime, | 
| 301 |  |  | &                    myTime-deltaTClock) | 
| 302 |  |  |  | 
| 303 |  |  | IF ( | 
| 304 |  |  | &    (.NOT. modelEnd .AND. ( | 
| 305 |  |  | &     permCheckPoint | 
| 306 |  |  | &     .OR. | 
| 307 |  |  | &     DIFFERENT_MULTIPLE(chkptFreq, | 
| 308 |  |  | &    myTime,myTime-deltaTClock) | 
| 309 |  |  | &     ) .AND. myIter.NE.nIter0 | 
| 310 |  |  | &    ) | 
| 311 |  |  | &     .OR. | 
| 312 |  |  | &    ( | 
| 313 |  |  | &     modelEnd | 
| 314 |  |  | &     .AND. .NOT. | 
| 315 |  |  | &     permCheckPoint | 
| 316 |  |  | &     .AND. .NOT. | 
| 317 |  |  | &     DIFFERENT_MULTIPLE(chkptFreq, | 
| 318 |  |  | &    myTime,myTime-deltaTClock) | 
| 319 |  |  | &    ) | 
| 320 |  |  | & ) THEN | 
| 321 |  |  |  | 
| 322 |  |  | C--    Going to really do some IO. Make everyone except master thread wait. | 
| 323 |  |  | _BARRIER | 
| 324 |  |  | _BEGIN_MASTER( myThid ) | 
| 325 |  |  |  | 
| 326 |  |  | C       Force 64-bit IO | 
| 327 |  |  | oldPrec = writeBinaryPrec | 
| 328 |  |  | writeBinaryPrec = precFloat64 | 
| 329 |  |  |  | 
| 330 |  |  | #ifdef OLD_STYLE_WITH_MANY_FILES | 
| 331 |  |  | C--     Write model fields | 
| 332 |  |  | C       Raw fields | 
| 333 |  |  | CALL WRITE_REC_XYZ_RL(  'uVel',   uVel,  1,myIter, myThid) | 
| 334 |  |  | CALL WRITE_REC_XYZ_RL(    'gU',     gU,  1,myIter, myThid) | 
| 335 |  |  | CALL WRITE_REC_XYZ_RL( 'gUNm1',  gUNm1,  1,myIter, myThid) | 
| 336 |  |  | CALL WRITE_REC_XYZ_RL(  'vVel',   vVel,  1,myIter, myThid) | 
| 337 |  |  | CALL WRITE_REC_XYZ_RL(    'gV',     gV,  1,myIter, myThid) | 
| 338 |  |  | CALL WRITE_REC_XYZ_RL( 'gVNm1',  gVNm1,  1,myIter, myThid) | 
| 339 |  |  | CALL WRITE_REC_XYZ_RL( 'theta',  theta,  1,myIter, myThid) | 
| 340 |  |  | CALL WRITE_REC_XYZ_RL(    'gT',     gT,  1,myIter, myThid) | 
| 341 |  |  | CALL WRITE_REC_XYZ_RL( 'gTNm1',  gTNm1,  1,myIter, myThid) | 
| 342 |  |  | CALL WRITE_REC_XYZ_RL(  'salt',   salt,  1,myIter, myThid) | 
| 343 |  |  | CALL WRITE_REC_XYZ_RL(    'gS',     gS,  1,myIter, myThid) | 
| 344 |  |  | CALL WRITE_REC_XYZ_RL( 'gSNm1',  gSNm1,  1,myIter, myThid) | 
| 345 |  |  | CALL WRITE_REC_XY_RL ('etaN', etaN,  1,myIter, myThid) | 
| 346 |  |  | #ifdef INCLUDE_CD_CODE | 
| 347 |  |  | CALL WRITE_REC_XY_RL | 
| 348 |  |  | &   ( 'etaNm1', etaNm1,  1,myIter, myThid) | 
| 349 |  |  | CALL WRITE_REC_XYZ_RL(  'uVelD', uVelD,  1,myIter, myThid) | 
| 350 |  |  | CALL WRITE_REC_XYZ_RL(  'vVelD', vVelD,  1,myIter, myThid) | 
| 351 |  |  | CALL WRITE_REC_XYZ_RL(  'uNM1',  uNM1,  1,myIter, myThid) | 
| 352 |  |  | CALL WRITE_REC_XYZ_RL(  'vNM1',  vNM1,  1,myIter, myThid) | 
| 353 |  |  | CALL WRITE_REC_XYZ_RL(  'guCD',  guCD,  1,myIter, myThid) | 
| 354 |  |  | CALL WRITE_REC_XYZ_RL(  'gvCD',  gvCD,  1,myIter, myThid) | 
| 355 |  |  | #endif | 
| 356 |  |  |  | 
| 357 |  |  |  | 
| 358 |  |  |  | 
| 359 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 360 |  |  | IF ( nonHydrostatic ) THEN | 
| 361 |  |  | CALL WRITE_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid) | 
| 362 |  |  | CALL WRITE_REC_XYZ_RL( 'gW',gW, 1,myIter,myThid) | 
| 363 |  |  | c        CALL WRITE_REC_XYZ_RL( 'gWnm1',gWnm1, 1,myIter,myThid) | 
| 364 |  |  | ENDIF | 
| 365 |  |  | #endif | 
| 366 |  |  |  | 
| 367 |  |  | #else /* OLD_STYLE_WITH_MANY_FILES */ | 
| 368 |  |  |  | 
| 369 |  |  | prec = precFloat64 | 
| 370 |  |  | lgf = globalFile | 
| 371 |  |  |  | 
| 372 |  |  | C--     Write model fields | 
| 373 |  |  | IF ( permCheckPoint ) THEN | 
| 374 |  |  | WRITE(fn,'(A,I10.10)') 'pickup.',myIter | 
| 375 |  |  | ELSE | 
| 376 |  |  | WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev) | 
| 377 |  |  | ENDIF | 
| 378 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVel,  1,myIter,myThid) | 
| 379 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gU,    2,myIter,myThid) | 
| 380 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gUnm1, 3,myIter,myThid) | 
| 381 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVel,  4,myIter,myThid) | 
| 382 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gV,    5,myIter,myThid) | 
| 383 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gVnm1, 6,myIter,myThid) | 
| 384 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,wVel, 7,myIter,myThid) | 
| 385 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,theta, 8,myIter,myThid) | 
| 386 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gT,    9,myIter,myThid) | 
| 387 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gTnm1, 10,myIter,myThid) | 
| 388 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,salt, 11,myIter,myThid) | 
| 389 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gS,   12,myIter,myThid) | 
| 390 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gSnm1,13,myIter,myThid) | 
| 391 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaN,13*Nr+1, | 
| 392 |  |  | &                     myIter,myThid) | 
| 393 |  |  | #ifdef NONLIN_FRSURF | 
| 394 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaH,13*Nr+2, | 
| 395 |  |  | &                     myIter,myThid) | 
| 396 |  |  | #endif | 
| 397 |  |  | #ifdef INCLUDE_CD_CODE | 
| 398 |  |  | IF ( permCheckPoint ) THEN | 
| 399 |  |  | WRITE(fn,'(A,I10.10)') 'pickup_cd.',myIter | 
| 400 |  |  | ELSE | 
| 401 |  |  | WRITE(fn,'(A,A)') 'pickup_cd.',checkPtSuff(nCheckLev) | 
| 402 |  |  | ENDIF | 
| 403 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVelD,1,myIter,myThid) | 
| 404 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVelD,2,myIter,myThid) | 
| 405 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uNM1, 3,myIter,myThid) | 
| 406 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vNM1, 4,myIter,myThid) | 
| 407 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,guCD, 5,myIter,myThid) | 
| 408 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gvCD, 6,myIter,myThid) | 
| 409 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaNm1,6*Nr+1, | 
| 410 |  |  | &                     myIter,myThid) | 
| 411 |  |  | #endif /* INCLUDE_CD_CODE */ | 
| 412 |  |  | #ifdef ALLOW_NONHYDROSTATIC | 
| 413 |  |  | IF ( nonHydrostatic ) THEN | 
| 414 |  |  | IF ( permCheckPoint ) THEN | 
| 415 |  |  | WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter | 
| 416 |  |  | ELSE | 
| 417 |  |  | WRITE(fn,'(A,A)') 'pickup_nh.',checkPtSuff(nCheckLev) | 
| 418 |  |  | ENDIF | 
| 419 |  |  | WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter | 
| 420 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,phi_nh,1,myIter,myThid) | 
| 421 |  |  | CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gW,   2,myIter,myThid) | 
| 422 |  |  | c        CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gWnm1,3,myIter,myThid) | 
| 423 |  |  | ENDIF | 
| 424 |  |  | #endif | 
| 425 |  |  |  | 
| 426 |  |  | C Create suffix to pass on to package pickup routines | 
| 427 |  |  | IF ( permCheckPoint ) THEN | 
| 428 |  |  | WRITE(fn,'(I10.10)') myIter | 
| 429 |  |  | ELSE | 
| 430 |  |  | WRITE(fn,'(A)') checkPtSuff(nCheckLev) | 
| 431 |  |  | ENDIF | 
| 432 |  |  |  | 
| 433 |  |  | #ifdef  ALLOW_OBCS | 
| 434 |  |  | C SPK 4/9/01: Open boundary checkpointing | 
| 435 |  |  | IF (useOBCS) THEN | 
| 436 |  |  | CALL OBCS_WRITE_CHECKPOINT( | 
| 437 |  |  | &               prec, lgf, permCheckPoint, myIter, myThid) | 
| 438 |  |  | ENDIF | 
| 439 |  |  | #endif  /* ALLOW_OBCS */ | 
| 440 |  |  |  | 
| 441 |  |  | #ifdef ALLOW_FLT | 
| 442 |  |  | C--     Write restart file for floats | 
| 443 |  |  | IF (useFLT) THEN | 
| 444 |  |  | CALL FLT_RESTART(myTime, myIter, myThid) | 
| 445 |  |  | ENDIF | 
| 446 |  |  | #endif | 
| 447 |  |  |  | 
| 448 |  |  | IF ( .NOT. permCheckPoint ) THEN | 
| 449 |  |  | nCheckLev = MOD(nCheckLev, maxNoChkptLev)+1 | 
| 450 |  |  | ENDIF | 
| 451 |  |  |  | 
| 452 |  |  | #endif /* OLD_STYLE_WITH_MANY_FILES */ | 
| 453 |  |  |  | 
| 454 |  |  | C--     Reset binary precision | 
| 455 |  |  | writeBinaryPrec = oldPrec | 
| 456 |  |  |  | 
| 457 |  |  | _END_MASTER( myThid ) | 
| 458 |  |  | _BARRIER | 
| 459 |  |  |  | 
| 460 |  |  | #ifdef ALLOW_PTRACERS | 
| 461 |  |  | C Write restart file for passive tracers | 
| 462 |  |  | IF (usePTRACERS) THEN | 
| 463 |  |  | CALL PTRACERS_WRITE_CHECKPOINT(fn,myIter,myTime,myThid) | 
| 464 |  |  | ENDIF | 
| 465 |  |  | #endif /* ALLOW_PTRACERS */ | 
| 466 |  |  |  | 
| 467 |  |  | ENDIF | 
| 468 |  |  |  | 
| 469 |  |  | RETURN | 
| 470 |  |  | END |