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

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

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


Revision 1.2 - (show annotations) (download)
Fri Mar 2 16:42:39 2007 UTC (17 years, 4 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint58w_post, checkpoint58x_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59h, checkpoint59, checkpoint58y_post
Changes since 1.1: +2 -1 lines
try to fix the too-many-files-open problem described by Jan and Martin
-- the idea is to close all the MNC pickup files at the end of each
series of calls that writes to them

1 C $Header: /u/gcmpack/MITgcm/model/src/write_pickup.F,v 1.1 2006/08/24 01:14:19 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: WRITE_PICKUP
10 C !INTERFACE:
11 SUBROUTINE WRITE_PICKUP(
12 I permPickup,
13 I myTime, myIter, myThid )
14
15 C !DESCRIPTION:
16 C Write the main-model pickup-file and do it NOW.
17 C It writes both "rolling-pickup" files (ckptA,ckptB) and
18 C permanent pickup files (with iteration number in the file name).
19 C It calls routines from other packages (\textit{eg.} rw and mnc)
20 C to do the per-variable writes.
21
22 C !USES:
23 IMPLICIT NONE
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "DYNVARS.h"
28 #include "SURFACE.h"
29 #ifdef ALLOW_NONHYDROSTATIC
30 #include "NH_VARS.h"
31 #endif
32 #ifdef ALLOW_MNC
33 #include "MNC_PARAMS.h"
34 #endif
35
36 C !INPUT PARAMETERS:
37 C permPickup :: Is or is not a permanent pickup.
38 C myTime :: Current time of simulation ( s )
39 C myIter :: Iteration number
40 C myThid :: Thread number for this instance of the routine.
41 LOGICAL permPickup
42 _RL myTime
43 INTEGER myIter
44 INTEGER myThid
45 CEOP
46
47 C !LOCAL VARIABLES:
48 C fn :: Temp. for building file name string.
49 C fp :: file precision
50 INTEGER fp
51 INTEGER i, nj
52 CHARACTER*(MAX_LEN_FNAM) fn
53
54 C Write model fields
55 DO i = 1,MAX_LEN_FNAM
56 fn(i:i) = ' '
57 ENDDO
58 IF ( permPickup ) THEN
59 WRITE(fn,'(A,I10.10)') 'pickup.',myIter
60 ELSE
61 WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
62 ENDIF
63
64 C Going to really do some IO. Make everyone except master thread wait.
65 _BARRIER
66
67 IF (pickup_write_mdsio) THEN
68
69 fp = precFloat64
70
71 #ifdef ALLOW_ADAMSBASHFORTH_3
72 CALL WRITE_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter, myThid )
73 CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm(1-Olx,1-Oly,1,1,1,1),
74 & 2, myIter, myThid )
75 CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm(1-Olx,1-Oly,1,1,1,2),
76 & 3, myIter, myThid )
77 CALL WRITE_REC_3D_RL( fn, fp, Nr, vVel, 4, myIter, myThid )
78 CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm(1-Olx,1-Oly,1,1,1,1),
79 & 5, myIter, myThid )
80 CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm(1-Olx,1-Oly,1,1,1,2),
81 & 6, myIter, myThid )
82 CALL WRITE_REC_3D_RL( fn, fp, Nr, theta, 7, myIter, myThid )
83 CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm(1-Olx,1-Oly,1,1,1,1),
84 & 8, myIter, myThid )
85 CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm(1-Olx,1-Oly,1,1,1,2),
86 & 9, myIter, myThid )
87 CALL WRITE_REC_3D_RL( fn, fp, Nr, salt, 10, myIter, myThid )
88 CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm(1-Olx,1-Oly,1,1,1,1),
89 & 11, myIter, myThid )
90 CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm(1-Olx,1-Oly,1,1,1,2),
91 & 12, myIter, myThid )
92 nj = 12
93 #else /* ALLOW_ADAMSBASHFORTH_3 */
94 CALL WRITE_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter, myThid )
95 CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm1, 2, myIter, myThid )
96 CALL WRITE_REC_3D_RL( fn, fp, Nr, vVel, 3, myIter, myThid )
97 CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm1, 4, myIter, myThid )
98 CALL WRITE_REC_3D_RL( fn, fp, Nr, theta, 5, myIter, myThid )
99 CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm1, 6, myIter, myThid )
100 CALL WRITE_REC_3D_RL( fn, fp, Nr, salt, 7, myIter, myThid )
101 CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm1, 8, myIter, myThid )
102 nj = 8
103 #endif /* ALLOW_ADAMSBASHFORTH_3 */
104 CALL WRITE_REC_3D_RL( fn, fp, 1,etaN, nj*Nr+1, myIter, myThid )
105 #ifdef EXACT_CONSERV
106 CALL WRITE_REC_3D_RL( fn, fp, 1,dEtaHdt,nj*Nr+2,myIter,myThid )
107 CALL WRITE_REC_3D_RL( fn, fp, 1,etaHnm1,nj*Nr+3,myIter,myThid )
108 #endif /* EXACT_CONSERV */
109 IF ( useDynP_inEos_Zc ) THEN
110 IF ( permPickup ) THEN
111 WRITE(fn,'(A,I10.10)') 'pickup_ph.',myIter
112 ELSE
113 WRITE(fn,'(A,A)') 'pickup_ph.',checkPtSuff(nCheckLev)
114 ENDIF
115 CALL WRITE_REC_3D_RL( fn,fp,Nr, totPhiHyd,1, myIter,myThid )
116 ENDIF
117 #ifdef ALLOW_NONHYDROSTATIC
118 IF ( use3Dsolver ) THEN
119 IF ( permPickup ) THEN
120 WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter
121 ELSE
122 WRITE(fn,'(A,A)') 'pickup_nh.',checkPtSuff(nCheckLev)
123 ENDIF
124 CALL WRITE_REC_3D_RL( fn,fp,Nr, phi_nh, 1, myIter, myThid )
125 CALL WRITE_REC_3D_RL( fn,fp,Nr, gwNm1, 2, myIter, myThid )
126 ENDIF
127 #endif /* ALLOW_NONHYDROSTATIC */
128
129 ENDIF
130
131 #ifdef ALLOW_MNC
132 IF (useMNC .AND. pickup_write_mnc) THEN
133 IF ( permPickup ) THEN
134 WRITE(fn,'(A)') 'pickup'
135 ELSE
136 WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
137 ENDIF
138 C First ***define*** the file group name
139 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
140 IF ( permPickup ) THEN
141 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, 0, myThid)
142 ELSE
143 CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
144 ENDIF
145 C Then set the actual unlimited dimension
146 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
147 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
148 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
149 CALL MNC_CW_RL_W('D',fn,0,0,'U', uVel, myThid)
150 CALL MNC_CW_RL_W('D',fn,0,0,'V', vVel, myThid)
151 CALL MNC_CW_RL_W('D',fn,0,0,'Temp', theta, myThid)
152 CALL MNC_CW_RL_W('D',fn,0,0,'S', salt, myThid)
153 CALL MNC_CW_RL_W('D',fn,0,0,'Eta', etaN, myThid)
154 #ifndef ALLOW_ADAMSBASHFORTH_3
155 CALL MNC_CW_RL_W('D',fn,0,0,'gUnm1', guNm1, myThid)
156 CALL MNC_CW_RL_W('D',fn,0,0,'gVnm1', gvNm1, myThid)
157 CALL MNC_CW_RL_W('D',fn,0,0,'gTnm1', gtNm1, myThid)
158 CALL MNC_CW_RL_W('D',fn,0,0,'gSnm1', gsNm1, myThid)
159 #endif /* ALLOW_ADAMSBASHFORTH_3 */
160 #ifdef EXACT_CONSERV
161 CALL MNC_CW_RL_W('D',fn,0,0,'dEtaHdt', dEtaHdt, myThid)
162 CALL MNC_CW_RL_W('D',fn,0,0,'EtaH', etaHnm1, myThid)
163 #endif
164 #ifdef ALLOW_NONHYDROSTATIC
165 IF ( use3Dsolver ) THEN
166 CALL MNC_CW_RL_W('D',fn,0,0,'phi_nh', phi_nh, myThid)
167 c CALL MNC_CW_RL_W('D',fn,0,0,'gW', gW, myThid)
168 CALL MNC_CW_RL_W('D',fn,0,0,'gWnm1', gwNm1, myThid)
169 ENDIF
170 #endif
171 IF ( useDynP_inEos_Zc ) THEN
172 CALL MNC_CW_RL_W('D',fn,0,0,'phiHyd', totPhiHyd, myThid)
173 ENDIF
174 CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
175 ENDIF
176 #endif /* ALLOW_MNC */
177
178 C-- Every one else must wait until writing is done.
179 _BARRIER
180
181 RETURN
182 END

  ViewVC Help
Powered by ViewVC 1.1.22