/[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.54 - (show annotations) (download)
Sun May 15 03:02:08 2005 UTC (19 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57h_done
Changes since 1.53: +5 -5 lines
remove "baseTime" (no used) from arg. list of DIFF_BASE_MULTIPLE
and rename it: DIFFERENT_MULTIPLE

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

  ViewVC Help
Powered by ViewVC 1.1.22