/[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.36 - (show annotations) (download)
Wed Mar 10 05:50:16 2004 UTC (20 years, 2 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint52l_pre, checkpoint52l_post
Changes since 1.35: +19 -1 lines
 o fix bug: too many files open
 o add some testing code for pickups

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

  ViewVC Help
Powered by ViewVC 1.1.22