/[MITgcm]/MITgcm/model/src/checkpoint.F
ViewVC logotype

Contents of /MITgcm/model/src/checkpoint.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.21 - (show annotations) (download)
Thu Jun 5 16:03:05 2003 UTC (21 years ago) by adcroft
Branch: MAIN
Changes since 1.20: +24 -12 lines
New variable in PARM03: pickupSuff is a string that can be set to
indicate the suffix on pickup files. This allows us to avoid renaming
the temporary pickup files.

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

  ViewVC Help
Powered by ViewVC 1.1.22