/[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.68 - (show annotations) (download)
Tue Jan 9 18:09:27 2007 UTC (17 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.67: +1 -1 lines
FILE REMOVED
isolate in set_write_global_pickup.F the only S/R of checkpoint.F that is
still used (after the re-writing & splitting of checkpoint.F into
 read_pickup, do_write_pickup & write_pickup, 4 months ago)

1 C $Header: /u/gcmpack/MITgcm/model/src/checkpoint.F,v 1.67 2006/08/09 02:23:13 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8 CBOP
9 C !ROUTINE: SET_WRITE_GLOBAL_PICKUP
10 C !INTERFACE:
11 SUBROUTINE SET_WRITE_GLOBAL_PICKUP( flag )
12
13 C !DESCRIPTION:
14 C Sets an internal logical state to indicate whether files written
15 C by subsequent calls to the READ_WRITE_FLD package should create
16 C "global" or "tiled" files:
17 C \begin{center}
18 C \begin{tabular}[h]{|l|l|}\hline
19 C \texttt{flag} & Meaning \\\hline
20 C \texttt{.TRUE.} & use ``global'' files \\
21 C \texttt{.TRUE.} & use ``tiled'' files \\\hline
22 C \end{tabular}
23 C \end{center}
24
25 C !USES:
26 IMPLICIT NONE
27
28 C !INPUT PARAMETERS:
29 LOGICAL flag
30 CEOP
31 COMMON /PCKP_GBLFLS/ globalFile
32 LOGICAL globalFile
33
34 globalFile = flag
35
36 RETURN
37 END
38
39 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
40 CBOP
41 C !ROUTINE: READ_CHECKPOINT
42 C !INTERFACE:
43 SUBROUTINE READ_CHECKPOINT(
44 I myIter, myThid )
45
46 C !DESCRIPTION:
47 C This is the controlling routine for IO to write restart (or
48 C ``pickup'' or ``checkpoint'') files. It calls routines from other
49 C packages (\textit{eg.} mdsio and mnc) to do the per-variable
50 C reads.
51
52 C !USES:
53 IMPLICIT NONE
54 #include "SIZE.h"
55 #include "EEPARAMS.h"
56 #include "PARAMS.h"
57 #ifdef ALLOW_MNC
58 #include "MNC_PARAMS.h"
59 #endif
60 #include "DYNVARS.h"
61 #include "SURFACE.h"
62 #ifdef ALLOW_NONHYDROSTATIC
63 #include "NH_VARS.h"
64 #endif
65 INTEGER IO_ERRCOUNT
66 EXTERNAL IO_ERRCOUNT
67
68 C !INPUT/OUTPUT PARAMETERS:
69 C myThid - Thread number for this instance of the routine.
70 C myIter - Iteration number
71 INTEGER myThid
72 INTEGER myIter
73 CEOP
74
75 C !LOCAL VARIABLES:
76 C oldPrec :: Temp. for hold I/O precision information
77 C prec :: pickup-file precision
78 C fn :: Temp. for building file name.
79 INTEGER prec
80 INTEGER i, nj
81 CHARACTER*(MAX_LEN_FNAM) fn
82 CHARACTER*(10) suff
83 #ifdef OLD_STYLE_WITH_MANY_FILES
84 INTEGER oldPrec
85 #endif
86 #ifdef ALLOW_ADAMSBASHFORTH_3
87 INTEGER j
88 #endif
89
90 C Suffix for pickup files
91 DO i = 1,MAX_LEN_FNAM
92 fn(i:i) = ' '
93 ENDDO
94 IF (pickupSuff .EQ. ' ') THEN
95 WRITE(suff,'(I10.10)') myIter
96 ELSE
97 WRITE(suff,'(A10)') pickupSuff
98 ENDIF
99 WRITE(fn,'(A,A10)') 'pickup.',suff
100
101 C Going to really do some IO. Make everyone except master thread wait.
102 _BARRIER
103 C _BEGIN_MASTER( myThid )
104
105 IF (pickup_read_mdsio) THEN
106
107 #ifdef OLD_STYLE_WITH_MANY_FILES
108
109 C Force 64-bit IO
110 oldPrec = readBinaryPrec
111 readBinaryPrec = precFloat64
112
113 C Read model fields
114 C Raw fields
115 CALL READ_REC_XYZ_RL( 'uVel', uVel, 1,myIter,myThid)
116 CALL READ_REC_XYZ_RL( 'gU', gU, 1,myIter,myThid)
117 CALL READ_REC_XYZ_RL( 'guNm1', guNm1, 1,myIter,myThid)
118 CALL READ_REC_XYZ_RL( 'vVel', vVel, 1,myIter,myThid)
119 CALL READ_REC_XYZ_RL( 'gV', gV, 1,myIter,myThid)
120 CALL READ_REC_XYZ_RL( 'gvNm1', gvNm1, 1,myIter,myThid)
121 CALL READ_REC_XYZ_RL( 'theta', theta, 1,myIter,myThid)
122 CALL READ_REC_XYZ_RL( 'gT', gT, 1,myIter,myThid)
123 CALL READ_REC_XYZ_RL( 'gtNm1', gtNm1, 1,myIter,myThid)
124 CALL READ_REC_XYZ_RL( 'salt', salt, 1,myIter,myThid)
125 CALL READ_REC_XYZ_RL( 'gS', gS, 1,myIter,myThid)
126 CALL READ_REC_XYZ_RL( 'gsNm1', gsNm1, 1,myIter,myThid)
127 CALL READ_REC_XY_RL ( 'etaN', etaN, 1,myIter,myThid)
128
129 #ifdef ALLOW_NONHYDROSTATIC
130 IF ( use3Dsolver ) THEN
131 CALL READ_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid)
132 c CALL READ_REC_XYZ_RL( 'gW', gW,1,myIter,myThid)
133 CALL READ_REC_XYZ_RL( 'gWnm1', gwNm1,1,myIter,myThid)
134 ENDIF
135 #endif
136
137 C Reset default IO precision
138 readBinaryPrec = oldPrec
139
140 #else /* OLD_STYLE_WITH_MANY_FILES */
141
142 prec = precFloat64
143
144 #ifdef ALLOW_MDSIO
145
146 C Read model fields
147 IF ( usePickupBeforeC54 ) THEN
148 #ifndef ALLOW_ADAMSBASHFORTH_3
149 CALL MDSREADFIELD(fn,prec,'RL',Nr,uVel, 1,myThid)
150 CALL MDSREADFIELD(fn,prec,'RL',Nr,gU, 2,myThid)
151 CALL MDSREADFIELD(fn,prec,'RL',Nr,guNm1, 3,myThid)
152 CALL MDSREADFIELD(fn,prec,'RL',Nr,vVel, 4,myThid)
153 CALL MDSREADFIELD(fn,prec,'RL',Nr,gV, 5,myThid)
154 CALL MDSREADFIELD(fn,prec,'RL',Nr,gvNm1, 6,myThid)
155 CALL MDSREADFIELD(fn,prec,'RL',Nr,theta, 7,myThid)
156 CALL MDSREADFIELD(fn,prec,'RL',Nr,gT, 8,myThid)
157 CALL MDSREADFIELD(fn,prec,'RL',Nr,gtNm1, 9,myThid)
158 CALL MDSREADFIELD(fn,prec,'RL',Nr,salt, 10,myThid)
159 CALL MDSREADFIELD(fn,prec,'RL',Nr,gS, 11,myThid)
160 CALL MDSREADFIELD(fn,prec,'RL',Nr,gsNm1, 12,myThid)
161 #endif /* ALLOW_ADAMSBASHFORTH_3 */
162 CALL MDSREADFIELD(fn,prec,'RL', 1,etaN,12*Nr+1,myThid)
163 #ifdef NONLIN_FRSURF
164 IF (nonlinFreeSurf .GE. 0) THEN
165 CALL MDSREADFIELD(fn,prec,'RL',1,etaH,12*Nr+2,myThid)
166 ENDIF
167 #endif
168 ELSE
169 #ifdef ALLOW_ADAMSBASHFORTH_3
170 j = 3
171 IF ( startFromPickupAB2 ) j = 2
172 nj = 0
173 CALL MDSREADFIELD(fn,prec,'RL',Nr,uVel, nj+1,myThid)
174 CALL MDSREADFIELD(fn,prec,'RL',Nr,
175 & guNm(1-Olx,1-Oly,1,1,1,1), nj+2,myThid)
176 CALL MDSREADFIELD(fn,prec,'RL',Nr,
177 & guNm(1-Olx,1-Oly,1,1,1,2), nj+j,myThid)
178 nj = j
179 CALL MDSREADFIELD(fn,prec,'RL',Nr,vVel, nj+1,myThid)
180 CALL MDSREADFIELD(fn,prec,'RL',Nr,
181 & gvNm(1-Olx,1-Oly,1,1,1,1), nj+2,myThid)
182 CALL MDSREADFIELD(fn,prec,'RL',Nr,
183 & gvNm(1-Olx,1-Oly,1,1,1,2), nj+j,myThid)
184 nj = 2*j
185 CALL MDSREADFIELD(fn,prec,'RL',Nr,theta,nj+1,myThid)
186 CALL MDSREADFIELD(fn,prec,'RL',Nr,
187 & gtNm(1-Olx,1-Oly,1,1,1,1), nj+2,myThid)
188 CALL MDSREADFIELD(fn,prec,'RL',Nr,
189 & gtNm(1-Olx,1-Oly,1,1,1,2), nj+j,myThid)
190 nj = 3*j
191 CALL MDSREADFIELD(fn,prec,'RL',Nr,salt, nj+1,myThid)
192 CALL MDSREADFIELD(fn,prec,'RL',Nr,
193 & gsNm(1-Olx,1-Oly,1,1,1,1), nj+2,myThid)
194 CALL MDSREADFIELD(fn,prec,'RL',Nr,
195 & gsNm(1-Olx,1-Oly,1,1,1,2), nj+j,myThid)
196 nj = 4*j
197 #else /* ALLOW_ADAMSBASHFORTH_3 */
198 CALL MDSREADFIELD(fn,prec,'RL',Nr,uVel, 1,myThid)
199 CALL MDSREADFIELD(fn,prec,'RL',Nr,guNm1, 2,myThid)
200 CALL MDSREADFIELD(fn,prec,'RL',Nr,vVel, 3,myThid)
201 CALL MDSREADFIELD(fn,prec,'RL',Nr,gvNm1, 4,myThid)
202 CALL MDSREADFIELD(fn,prec,'RL',Nr,theta, 5,myThid)
203 CALL MDSREADFIELD(fn,prec,'RL',Nr,gtNm1, 6,myThid)
204 CALL MDSREADFIELD(fn,prec,'RL',Nr,salt, 7,myThid)
205 CALL MDSREADFIELD(fn,prec,'RL',Nr,gsNm1, 8,myThid)
206 nj = 8
207 #endif /* ALLOW_ADAMSBASHFORTH_3 */
208 CALL MDSREADFIELD(fn,prec,'RL', 1,etaN, nj*Nr+1,myThid)
209 #ifdef EXACT_CONSERV
210 IF (exactConserv) THEN
211 CALL MDSREADFIELD(fn,prec,'RL',1,dEtaHdt,nj*Nr+2,myThid)
212 ENDIF
213 IF (nonlinFreeSurf .GT. 0) THEN
214 CALL MDSREADFIELD(fn,prec,'RL',1,etaH, nj*Nr+3,myThid)
215 ENDIF
216 #endif
217 ENDIF
218
219 IF ( useDynP_inEos_Zc ) THEN
220 WRITE(fn,'(A,A10)') 'pickup_ph.',suff
221 CALL MDSREADFIELD(fn,prec,'RL',Nr,totPhiHyd,1,myThid)
222 ENDIF
223 #ifdef ALLOW_NONHYDROSTATIC
224 IF ( use3Dsolver ) THEN
225 WRITE(fn,'(A,A10)') 'pickup_nh.',suff
226 CALL MDSREADFIELD(fn,prec,'RL',Nr,phi_nh,1,myThid)
227 c CALL MDSREADFIELD(fn,prec,'RL',Nr, gW,2,myThid)
228 CALL MDSREADFIELD(fn,prec,'RL',Nr, gwNm1,2,myThid)
229 ENDIF
230 #endif
231
232 #endif /* ALLOW_MDSIO */
233
234 #endif /* OLD_STYLE_WITH_MANY_FILES */
235
236 ENDIF
237
238 #ifdef ALLOW_MNC
239 IF (useMNC .AND. pickup_read_mnc) THEN
240 WRITE(fn,'(A)') 'pickup'
241 CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
242 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
243 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
244 CALL MNC_CW_RL_R('D',fn,0,0,'U',uVel, myThid)
245 CALL MNC_CW_RL_R('D',fn,0,0,'V',vVel, myThid)
246 CALL MNC_CW_RL_R('D',fn,0,0,'Temp',theta, myThid)
247 CALL MNC_CW_RL_R('D',fn,0,0,'S',salt, myThid)
248 CALL MNC_CW_RL_R('D',fn,0,0,'Eta',etaN, myThid)
249 #ifndef ALLOW_ADAMSBASHFORTH_3
250 CALL MNC_CW_RL_R('D',fn,0,0,'gUnm1',guNm1, myThid)
251 CALL MNC_CW_RL_R('D',fn,0,0,'gVnm1',gvNm1, myThid)
252 CALL MNC_CW_RL_R('D',fn,0,0,'gTnm1',gtNm1, myThid)
253 CALL MNC_CW_RL_R('D',fn,0,0,'gSnm1',gsNm1, myThid)
254 #endif /* ALLOW_ADAMSBASHFORTH_3 */
255 C#ifdef NONLIN_FRSURF
256 C IF ( nonlinFreeSurf.GE.0 .AND. usePickupBeforeC54 )
257 C & CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
258 C#endif
259 #ifdef EXACT_CONSERV
260 IF (exactConserv) THEN
261 CALL MNC_CW_RL_R('D',fn,0,0,'dEtaHdt',dEtaHdt,myThid)
262 ENDIF
263 IF (nonlinFreeSurf .GT. 0) THEN
264 CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
265 ENDIF
266 #endif
267 #ifdef ALLOW_NONHYDROSTATIC
268 IF (use3Dsolver) THEN
269 CALL MNC_CW_RL_R('D',fn,0,0,'phi_nh', phi_nh, myThid)
270 c CALL MNC_CW_RL_R('D',fn,0,0,'gW', gW, myThid)
271 CALL MNC_CW_RL_R('D',fn,0,0,'gWnm1', gwNm1, myThid)
272 ENDIF
273 #endif
274 IF ( useDynP_inEos_Zc ) THEN
275 CALL MNC_CW_RL_R('D',fn,0,0,'phiHyd',totPhiHyd,myThid)
276 ENDIF
277 ENDIF
278 #endif /* ALLOW_MNC */
279
280 C _END_MASTER( myThid )
281 _BARRIER
282
283 C Fill in edge regions
284 CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
285 _EXCH_XYZ_R8(theta , myThid )
286 _EXCH_XYZ_R8(salt , myThid )
287 c CALL EXCH_UV_XYZ_RL(gU,gV,.TRUE.,myThid)
288 c _EXCH_XYZ_R8(gt , myThid )
289 c _EXCH_XYZ_R8(gs , myThid )
290 #ifdef ALLOW_ADAMSBASHFORTH_3
291 CALL EXCH_UV_XYZ_RL(guNm(1-Olx,1-Oly,1,1,1,1),
292 & gvNm(1-Olx,1-Oly,1,1,1,1),.TRUE.,myThid)
293 _EXCH_XYZ_R8( gtNm(1-Olx,1-Oly,1,1,1,1), myThid )
294 _EXCH_XYZ_R8( gsNm(1-Olx,1-Oly,1,1,1,1), myThid )
295 CALL EXCH_UV_XYZ_RL(guNm(1-Olx,1-Oly,1,1,1,2),
296 & gvNm(1-Olx,1-Oly,1,1,1,2),.TRUE.,myThid)
297 _EXCH_XYZ_R8( gtNm(1-Olx,1-Oly,1,1,1,2), myThid )
298 _EXCH_XYZ_R8( gsNm(1-Olx,1-Oly,1,1,1,2), myThid )
299 #else /* ALLOW_ADAMSBASHFORTH_3 */
300 CALL EXCH_UV_XYZ_RL(guNm1,gvNm1,.TRUE.,myThid)
301 _EXCH_XYZ_R8(gtNm1 , myThid )
302 _EXCH_XYZ_R8(gsNm1 , myThid )
303 #endif /* ALLOW_ADAMSBASHFORTH_3 */
304 _EXCH_XY_R8 (etaN, myThid )
305 _EXCH_XY_R8( etaH, myThid )
306 #ifdef EXACT_CONSERV
307 _EXCH_XY_R8( detaHdt, myThid )
308 #endif
309
310 IF ( useDynP_inEos_Zc )
311 & _EXCH_XYZ_RL( totPhiHyd, myThid )
312
313 #ifdef ALLOW_NONHYDROSTATIC
314 IF ( use3Dsolver ) THEN
315 _EXCH_XYZ_R8(phi_nh, myThid )
316 c _EXCH_XYZ_R8(gW , myThid )
317 _EXCH_XYZ_R8(gwNm1 , myThid )
318 ENDIF
319 #endif
320
321 RETURN
322 END
323
324 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
325 CBOP
326 C !ROUTINE: WRITE_CHECKPOINT
327 C !INTERFACE:
328 SUBROUTINE WRITE_CHECKPOINT(
329 I modelEnd, myTime,
330 I myIter, myThid )
331
332 C !DESCRIPTION:
333 C This is the controlling routine for IO to write restart (or
334 C ``pickup'' or ``checkpoint'') files. It calls routines from other
335 C packages (\textit{eg.} mdsio and mnc) to do the per-variable
336 C writes.
337 C
338 C Both ``rolling-checkpoint'' files and permanent checkpoint files
339 C are written here. A rolling checkpoint works through a circular
340 C list of suffices. Generally the circular list has two entries so
341 C that a rolling checkpoint will overwrite the last rolling
342 C checkpoint but one. This is useful for running long jobs without
343 C filling too much disk space. In a permanent checkpoint, data is
344 C written suffixed by the current timestep number. Permanent
345 C checkpoints can be used to provide snap-shots from which the
346 C model can be restarted.
347
348 C !USES:
349 IMPLICIT NONE
350 #include "SIZE.h"
351 #include "EEPARAMS.h"
352 #include "PARAMS.h"
353 LOGICAL DIFFERENT_MULTIPLE
354 EXTERNAL DIFFERENT_MULTIPLE
355 INTEGER IO_ERRCOUNT
356 EXTERNAL IO_ERRCOUNT
357
358 C !INPUT PARAMETERS:
359 C modelEnd :: Checkpoint call at end of model run.
360 C myThid :: Thread number for this instance of the routine.
361 C myIter :: Iteration number
362 C myTime :: Current time of simulation ( s )
363 LOGICAL modelEnd
364 INTEGER myThid
365 INTEGER myIter
366 _RL myTime
367 CEOP
368
369 C !LOCAL VARIABLES:
370 C permCheckPoint :: Flag indicating whether a permanent checkpoint will
371 C be written.
372 C tempCheckPoint :: Flag indicating if it is time to write a non-permanent
373 C checkpoint (that will be permanent if permCheckPoint=T)
374 LOGICAL permCheckPoint, tempCheckPoint
375
376 IF ( .NOT.useOffLine ) THEN
377 permCheckPoint = .FALSE.
378 tempCheckPoint = .FALSE.
379 permCheckPoint =
380 & DIFFERENT_MULTIPLE(pChkPtFreq,myTime,deltaTClock)
381 tempCheckPoint =
382 & DIFFERENT_MULTIPLE( chkPtFreq,myTime,deltaTClock)
383
384 #ifdef ALLOW_CAL
385 IF ( useCAL ) THEN
386 CALL CAL_TIME2DUMP( pChkPtFreq, deltaTClock,
387 U permCheckPoint,
388 I myTime, myIter, myThid )
389 CALL CAL_TIME2DUMP( chkPtFreq, deltaTClock,
390 U tempCheckPoint,
391 I myTime, myIter, myThid )
392 ENDIF
393 #endif
394
395 IF (
396 & ( .NOT.modelEnd .AND. (permCheckPoint.OR.tempCheckPoint) )
397 & .OR.
398 & ( modelEnd .AND. .NOT.(permCheckPoint.OR.tempCheckPoint) )
399 & ) THEN
400 CALL WRITE_CHECKPOINT_NOW(
401 & permCheckPoint, myTime, myIter, myThid )
402 ENDIF
403
404 C- if not useOffLine: end
405 ENDIF
406
407 RETURN
408 END
409
410 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
411 CBOP
412 C !ROUTINE: WRITE_CHECKPOINT_NOW
413 C !INTERFACE:
414 SUBROUTINE WRITE_CHECKPOINT_NOW(
415 I permCheckPoint, myTime,
416 I myIter, myThid )
417
418 C !DESCRIPTION:
419 C Write the checkpoint and do it NOW.
420
421 C !USES:
422 IMPLICIT NONE
423 #include "SIZE.h"
424 #include "EEPARAMS.h"
425 #include "PARAMS.h"
426 #ifdef ALLOW_MNC
427 #include "MNC_PARAMS.h"
428 #endif
429 #include "DYNVARS.h"
430 #include "SURFACE.h"
431 #ifdef ALLOW_NONHYDROSTATIC
432 #include "NH_VARS.h"
433 #endif
434 INTEGER IO_ERRCOUNT
435 EXTERNAL IO_ERRCOUNT
436 COMMON /PCKP_GBLFLS/ globalFile
437 LOGICAL globalFile
438
439 C !INPUT PARAMETERS:
440 C permCheckPoint :: Is or is not a permanent checkpoint.
441 C myThid :: Thread number for this instance of the routine.
442 C myIter :: Iteration number
443 C myTime :: Current time of simulation ( s )
444 LOGICAL permCheckPoint
445 INTEGER myThid
446 INTEGER myIter
447 _RL myTime
448 CEOP
449
450 C !LOCAL VARIABLES:
451 C oldPrc :: Temp. for holding I/O precision
452 C fn :: Temp. for building file name string.
453 C lgf :: Flag to indicate whether to use global file mode.
454 #ifdef OLD_STYLE_WITH_MANY_FILES
455 INTEGER oldPrec
456 #endif
457 INTEGER prec
458 INTEGER i, nj
459 CHARACTER*(MAX_LEN_FNAM) fn
460 CHARACTER*(MAX_LEN_MBUF) msgBuf
461 LOGICAL lgf
462
463 C Write model fields
464 DO i = 1,MAX_LEN_FNAM
465 fn(i:i) = ' '
466 ENDDO
467 IF ( permCheckPoint ) THEN
468 WRITE(fn,'(A,I10.10)') 'pickup.',myIter
469 ELSE
470 WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
471 ENDIF
472
473 C Going to really do some IO. Make everyone except master thread wait.
474 _BARRIER
475 C _BEGIN_MASTER( myThid )
476
477 IF (pickup_write_mdsio) THEN
478
479 #ifdef OLD_STYLE_WITH_MANY_FILES
480
481 C Force 64-bit IO
482 oldPrec = writeBinaryPrec
483 writeBinaryPrec = precFloat64
484 C Write model fields
485 C Raw fields
486 CALL WRITE_REC_XYZ_RL( 'uVel', uVel, 1,myIter,myThid)
487 CALL WRITE_REC_XYZ_RL( 'gU', gU, 1,myIter,myThid)
488 CALL WRITE_REC_XYZ_RL( 'gUNm1', guNm1, 1,myIter,myThid)
489 CALL WRITE_REC_XYZ_RL( 'vVel', vVel, 1,myIter,myThid)
490 CALL WRITE_REC_XYZ_RL( 'gV', gV, 1,myIter,myThid)
491 CALL WRITE_REC_XYZ_RL( 'gVNm1', gvNm1, 1,myIter,myThid)
492 CALL WRITE_REC_XYZ_RL( 'theta', theta, 1,myIter,myThid)
493 CALL WRITE_REC_XYZ_RL( 'gT', gT, 1,myIter,myThid)
494 CALL WRITE_REC_XYZ_RL( 'gTNm1', gtNm1, 1,myIter,myThid)
495 CALL WRITE_REC_XYZ_RL( 'salt', salt, 1,myIter,myThid)
496 CALL WRITE_REC_XYZ_RL( 'gS', gS, 1,myIter,myThid)
497 CALL WRITE_REC_XYZ_RL( 'gSNm1', gsNm1, 1,myIter,myThid)
498 CALL WRITE_REC_XY_RL ( 'etaN', etaN, 1,myIter,myThid)
499 #ifdef ALLOW_NONHYDROSTATIC
500 IF ( use3Dsolver ) THEN
501 CALL WRITE_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid)
502 c CALL WRITE_REC_XYZ_RL( 'gW', gW,1,myIter,myThid)
503 CALL WRITE_REC_XYZ_RL( 'gWnm1', gwNm1,1,myIter,myThid)
504 ENDIF
505 #endif
506 C Reset binary precision
507 writeBinaryPrec = oldPrec
508
509 #else /* OLD_STYLE_WITH_MANY_FILES */
510
511 prec = precFloat64
512 lgf = globalFile
513
514 #ifdef ALLOW_MDSIO
515
516 #ifdef ALLOW_ADAMSBASHFORTH_3
517 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVel, 1,myIter,myThid)
518 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
519 & guNm(1-Olx,1-Oly,1,1,1,1), 2,myIter,myThid)
520 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
521 & guNm(1-Olx,1-Oly,1,1,1,2), 3,myIter,myThid)
522 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVel, 4,myIter,myThid)
523 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
524 & gvNm(1-Olx,1-Oly,1,1,1,1), 5,myIter,myThid)
525 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
526 & gvNm(1-Olx,1-Oly,1,1,1,2), 6,myIter,myThid)
527 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,theta, 7,myIter,myThid)
528 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
529 & gtNm(1-Olx,1-Oly,1,1,1,1), 8,myIter,myThid)
530 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
531 & gtNm(1-Olx,1-Oly,1,1,1,2), 9,myIter,myThid)
532 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,salt, 10,myIter,myThid)
533 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
534 & gsNm(1-Olx,1-Oly,1,1,1,1),11,myIter,myThid)
535 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
536 & gsNm(1-Olx,1-Oly,1,1,1,2),12,myIter,myThid)
537 nj = 12
538 #else /* ALLOW_ADAMSBASHFORTH_3 */
539 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVel, 1,myIter,myThid)
540 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,guNm1,2,myIter,myThid)
541 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVel, 3,myIter,myThid)
542 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gvNm1,4,myIter,myThid)
543 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,theta,5,myIter,myThid)
544 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gtNm1,6,myIter,myThid)
545 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,salt, 7,myIter,myThid)
546 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gsNm1,8,myIter,myThid)
547 nj = 8
548 #endif /* ALLOW_ADAMSBASHFORTH_3 */
549 CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaN, nj*Nr+1,
550 & myIter,myThid)
551 #ifdef EXACT_CONSERV
552 CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,dEtaHdt,nj*Nr+2,
553 & myIter,myThid)
554 CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaHnm1,nj*Nr+3,
555 & myIter,myThid)
556 #endif /* EXACT_CONSERV */
557 IF ( useDynP_inEos_Zc ) THEN
558 IF ( permCheckPoint ) THEN
559 WRITE(fn,'(A,I10.10)') 'pickup_ph.',myIter
560 ELSE
561 WRITE(fn,'(A,A)') 'pickup_ph.',checkPtSuff(nCheckLev)
562 ENDIF
563 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,totPhiHyd,
564 & 1,myIter,myThid)
565 ENDIF
566 #ifdef ALLOW_NONHYDROSTATIC
567 IF ( use3Dsolver ) THEN
568 IF ( permCheckPoint ) THEN
569 WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter
570 ELSE
571 WRITE(fn,'(A,A)') 'pickup_nh.',checkPtSuff(nCheckLev)
572 ENDIF
573 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,phi_nh, 1,
574 & myIter,myThid)
575 c CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gW, 2,
576 c & myIter,myThid)
577 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gwNm1, 2,
578 & myIter,myThid)
579 ENDIF
580 #endif /* ALLOW_NONHYDROSTATIC */
581
582 #endif /* ALLOW_MDSIO */
583
584 #endif /* OLD_STYLE_WITH_MANY_FILES */
585
586 ENDIF
587
588 #ifdef ALLOW_MNC
589 IF (useMNC .AND. pickup_write_mnc) THEN
590 IF ( permCheckPoint ) THEN
591 WRITE(fn,'(A)') 'pickup'
592 ELSE
593 WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
594 ENDIF
595 C First ***define*** the file group name
596 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
597 IF ( permCheckPoint ) THEN
598 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, 0, myThid)
599 ELSE
600 CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
601 ENDIF
602 C Then set the actual unlimited dimension
603 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
604 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
605 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
606 CALL MNC_CW_RL_W('D',fn,0,0,'U', uVel, myThid)
607 CALL MNC_CW_RL_W('D',fn,0,0,'V', vVel, myThid)
608 CALL MNC_CW_RL_W('D',fn,0,0,'Temp', theta, myThid)
609 CALL MNC_CW_RL_W('D',fn,0,0,'S', salt, myThid)
610 CALL MNC_CW_RL_W('D',fn,0,0,'Eta', etaN, myThid)
611 #ifndef ALLOW_ADAMSBASHFORTH_3
612 CALL MNC_CW_RL_W('D',fn,0,0,'gUnm1', guNm1, myThid)
613 CALL MNC_CW_RL_W('D',fn,0,0,'gVnm1', gvNm1, myThid)
614 CALL MNC_CW_RL_W('D',fn,0,0,'gTnm1', gtNm1, myThid)
615 CALL MNC_CW_RL_W('D',fn,0,0,'gSnm1', gsNm1, myThid)
616 #endif /* ALLOW_ADAMSBASHFORTH_3 */
617 #ifdef EXACT_CONSERV
618 CALL MNC_CW_RL_W('D',fn,0,0,'dEtaHdt', dEtaHdt, myThid)
619 CALL MNC_CW_RL_W('D',fn,0,0,'EtaH', etaHnm1, myThid)
620 #endif
621 #ifdef ALLOW_NONHYDROSTATIC
622 IF ( use3Dsolver ) THEN
623 CALL MNC_CW_RL_W('D',fn,0,0,'phi_nh', phi_nh, myThid)
624 c CALL MNC_CW_RL_W('D',fn,0,0,'gW', gW, myThid)
625 CALL MNC_CW_RL_W('D',fn,0,0,'gWnm1', gwNm1, myThid)
626 ENDIF
627 #endif
628 IF ( useDynP_inEos_Zc ) THEN
629 CALL MNC_CW_RL_W('D',fn,0,0,'phiHyd', totPhiHyd, myThid)
630 ENDIF
631 ENDIF
632 #endif /* ALLOW_MNC */
633
634 _BEGIN_MASTER(myThid)
635 C Write suffix for stdout information
636 IF ( permCheckPoint ) THEN
637 WRITE(fn,'(I10.10)') myIter
638 ELSE
639 WRITE(fn,'(A)') checkPtSuff(nCheckLev)
640 ENDIF
641
642 C Write information to stdout so there is a record that the
643 C checkpoint was completed
644 WRITE(msgBuf,'(A11,I10,1X,A10)')
645 & "%CHECKPOINT ",myIter,fn
646 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
647 & SQUEEZE_RIGHT, myThid )
648 _END_MASTER(myThid)
649
650 C _END_MASTER(myThid)
651 C-- Every one else must wait until writing is done.
652 _BARRIER
653
654 C Update checkpoint level for the next time we write pickup
655 IF ( .NOT. permCheckPoint ) THEN
656 _BEGIN_MASTER(myThid)
657 nCheckLev = MOD(nCheckLev, maxNoChkptLev)+1
658 _END_MASTER(myThid)
659 ENDIF
660
661 RETURN
662 END

  ViewVC Help
Powered by ViewVC 1.1.22