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

Annotation of /MITgcm/model/src/write_state.F

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


Revision 1.66 - (hide annotations) (download)
Fri Mar 24 23:26:36 2017 UTC (7 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.65: +7 -3 lines
use new S/R to get file suffix (according to "rwSuffixType")

1 jmc 1.66 C $Header: /u/gcmpack/MITgcm/model/src/write_state.F,v 1.65 2016/02/15 18:00:26 jmc Exp $
2 mlosch 1.19 C $Name: $
3 edhill 1.25
4     #include "PACKAGES_CONFIG.h"
5 adcroft 1.1 #include "CPP_OPTIONS.h"
6    
7 adcroft 1.5 #undef MULTIPLE_RECORD_STATE_FILES
8    
9 edhill 1.42 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
10 cnh 1.15 CBOP
11 jmc 1.60 C !ROUTINE: WRITE_STATE
12 edhill 1.42
13 cnh 1.15 C !INTERFACE:
14 adcroft 1.17 SUBROUTINE WRITE_STATE ( myTime, myIter, myThid )
15 edhill 1.42
16     C !DESCRIPTION:
17     C This is the controlling routine for writing mid-level IO. It
18     C includes code for diagnosing W and RHO for output.
19    
20     C The CPP flag (MULTIPLE_RECORD_STATE_FILES) is #define/#undefed
21     C here since it is specific to this routine and very user-preference
22     C specific. If #undefed (default) the state files are written as in
23     C all versions prior to checkpoint32, where a file is created per
24     C variable, per time and per tile. This *has* to be the default
25     C because most users use this mode and all utilities and scripts
26     C (diagnostic) assume this form. It is also robust, as explained
27     C below.
28 jmc 1.60 C
29 edhill 1.42 C If #defined, subsequent snap-shots are written as records in the
30     C same file (no iteration number in filenames). The main advantage
31     C is fewer files. The disadvantages are that:
32     C (1) it breaks a lot of diagnostic scripts,
33     C (2) for large or long problems this creates huge files,
34 jmc 1.60 C (3) its an unexpected, unsolicited change in behaviour which
35     C came as a surprise (in c32) and is an inconvenience to
36 edhill 1.42 C several users
37     C (4) it can not accomodate changing the frequency of output
38 jmc 1.60 C after a pickup (this is trivial in previous method but
39 edhill 1.42 C needs new code and parameters in this new method)
40     C
41 jmc 1.60 C Known Bugs include:
42 edhill 1.42 C (1) if the length of integration is not exactly an integer
43     C times the output frequency then the last record written
44     C (at end of integration) overwrites a previously written
45     C record corresponding to an earier time. *BE WARNED*
46 adcroft 1.5
47 cnh 1.15 C !USES:
48 adcroft 1.1 IMPLICIT NONE
49     #include "SIZE.h"
50     #include "EEPARAMS.h"
51     #include "PARAMS.h"
52 jmc 1.60 #include "GRID.h"
53 jmc 1.58 #include "DYNVARS.h"
54     #ifdef ALLOW_NONHYDROSTATIC
55     #include "NH_VARS.h"
56     #endif
57 edhill 1.47 #ifdef ALLOW_MNC
58     #include "MNC_PARAMS.h"
59     #endif
60 heimbach 1.43
61 jmc 1.53 LOGICAL DIFFERENT_MULTIPLE
62     EXTERNAL DIFFERENT_MULTIPLE
63 adcroft 1.1 INTEGER IO_ERRCOUNT
64     EXTERNAL IO_ERRCOUNT
65    
66 cnh 1.15 C !INPUT/OUTPUT PARAMETERS:
67 adcroft 1.1 C myThid - Thread number for this instance of the routine.
68     C myIter - Iteration number
69 adcroft 1.17 C myTime - Current time of simulation ( s )
70     _RL myTime
71 adcroft 1.1 INTEGER myThid
72     INTEGER myIter
73    
74 cnh 1.15 C !LOCAL VARIABLES:
75 adcroft 1.5 CHARACTER*(MAX_LEN_MBUF) suff
76 jmc 1.57 INTEGER iRec
77     #ifdef ALLOW_MNC
78 edhill 1.56 CHARACTER*(1) pf
79 jmc 1.57 #endif
80 cnh 1.15 CEOP
81 adcroft 1.1
82 jmc 1.60 IF (
83 jmc 1.53 & DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock)
84 jmc 1.55 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
85     & myTime.EQ.startTime )
86     & ) THEN
87 edhill 1.42 IF ( dumpFreq .EQ. 0.0 ) THEN
88     iRec = 1
89     ELSE
90 jmc 1.66 iRec = 1 + NINT( (myTime-startTime) / dumpFreq )
91 edhill 1.42 ENDIF
92 jmc 1.60
93 edhill 1.42 C Going to really do some IO. Make everyone except master thread wait.
94 jmc 1.60 C this is done within IO routines => no longer needed
95     c _BARRIER
96 adcroft 1.1
97 edhill 1.42 C Write model fields
98     IF (snapshot_mdsio) THEN
99 jmc 1.16
100 adcroft 1.5 #ifdef MULTIPLE_RECORD_STATE_FILES
101 jmc 1.16
102 edhill 1.42 C Write each snap-shot as a new record in one file per variable
103     C - creates relatively few files but these files can become huge
104     CALL WRITE_REC_XYZ_RL( 'U', uVel,iRec,myIter,myThid)
105     CALL WRITE_REC_XYZ_RL( 'V', vVel,iRec,myIter,myThid)
106     CALL WRITE_REC_XYZ_RL( 'T', theta,iRec,myIter,myThid)
107     CALL WRITE_REC_XYZ_RL( 'S', salt,iRec,myIter,myThid)
108     CALL WRITE_REC_XY_RL('Eta',etaN,iRec,myIter,myThid)
109     CALL WRITE_REC_XYZ_RL( 'W',wVel,iRec,myIter,myThid)
110 adcroft 1.1 #ifdef ALLOW_NONHYDROSTATIC
111 edhill 1.42 IF (nonHydroStatic) THEN
112     CALL WRITE_REC_XYZ_RL( 'PNH',phi_nh,iRec,myIter,myThid)
113     ENDIF
114 adcroft 1.5 #endif /* ALLOW_NONHYDROSTATIC */
115 jmc 1.16 #ifdef NONLIN_FRSURF
116 edhill 1.42 c CALL WRITE_REC_XYZ_RS('hFacC.',hFacC,iRec,myIter,myThid)
117     c CALL WRITE_REC_XYZ_RS('hFacW.',hFacW,iRec,myIter,myThid)
118     c CALL WRITE_REC_XYZ_RS('hFacS.',hFacS,iRec,myIter,myThid)
119 jmc 1.16 #endif /* NONLIN_FRSURF */
120    
121     #else /* MULTIPLE_RECORD_STATE_FILES */
122    
123 edhill 1.42 C Write each snap-shot as a new file (original and default
124     C method) -- creates many files but for large configurations is
125     C easier to transfer analyse a particular snap-shots
126 jmc 1.66 IF ( rwSuffixType.EQ.0 ) THEN
127     WRITE(suff,'(I10.10)') myIter
128     ELSE
129     CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
130     ENDIF
131 heimbach 1.62
132 jmc 1.64 #ifdef ALLOW_OPENAD
133 utke 1.63 # ifndef ALLOW_STREAMICE
134 heimbach 1.62 CALL WRITE_FLD_XYZ_RL( 'U.',suff,uVel%v,myIter,myThid)
135     CALL WRITE_FLD_XYZ_RL( 'V.',suff,vVel%v,myIter,myThid)
136     CALL WRITE_FLD_XYZ_RL( 'T.',suff,theta%v,myIter,myThid)
137     CALL WRITE_FLD_XYZ_RL( 'S.',suff,salt%v,myIter,myThid)
138     CALL WRITE_FLD_XY_RL('Eta.',suff,etaN%v,myIter,myThid)
139     CALL WRITE_FLD_XYZ_RL( 'W.',suff,wVel%v,myIter,myThid)
140 jmc 1.65 IF ( storePhiHyd4Phys .OR. myIter.NE.nIter0 ) THEN
141 heimbach 1.62 CALL WRITE_FLD_XYZ_RL('PH.',suff,totPhiHyd%v,myIter,myThid)
142     ENDIF
143 utke 1.63 # endif
144 heimbach 1.62 #else
145 edhill 1.42 CALL WRITE_FLD_XYZ_RL( 'U.',suff,uVel,myIter,myThid)
146     CALL WRITE_FLD_XYZ_RL( 'V.',suff,vVel,myIter,myThid)
147     CALL WRITE_FLD_XYZ_RL( 'T.',suff,theta,myIter,myThid)
148     CALL WRITE_FLD_XYZ_RL( 'S.',suff,salt,myIter,myThid)
149     CALL WRITE_FLD_XY_RL('Eta.',suff,etaN,myIter,myThid)
150     CALL WRITE_FLD_XYZ_RL( 'W.',suff,wVel,myIter,myThid)
151 jmc 1.65 IF ( storePhiHyd4Phys .OR. myIter.NE.nIter0 ) THEN
152 edhill 1.42 CALL WRITE_FLD_XYZ_RL('PH.',suff,totPhiHyd,myIter,myThid)
153     ENDIF
154 heimbach 1.62 #endif
155    
156 jmc 1.48 IF ( fluidIsWater .AND. (myIter.NE.nIter0) ) THEN
157 edhill 1.42 CALL WRITE_FLD_XY_RL('PHL.',suff,phiHydLow,myIter,myThid)
158     ENDIF
159 adcroft 1.5 #ifdef ALLOW_NONHYDROSTATIC
160 edhill 1.42 IF (nonHydroStatic) THEN
161 jmc 1.61 CALL WRITE_FLD_XYZ_RL( 'PNH.',suff,phi_nh,myIter,myThid )
162     ENDIF
163     IF ( selectNHfreeSurf.GE.1 ) THEN
164     CALL WRITE_FLD_XY_RL( 'dPnh.',suff,dPhiNH,myIter,myThid )
165 edhill 1.42 ENDIF
166 adcroft 1.5 #endif /* ALLOW_NONHYDROSTATIC */
167 jmc 1.16 #ifdef NONLIN_FRSURF
168 edhill 1.42 c CALL WRITE_FLD_XYZ_RS('hFacC.',suff,hFacC,myIter,myThid)
169     c CALL WRITE_FLD_XYZ_RS('hFacW.',suff,hFacW,myIter,myThid)
170     c CALL WRITE_FLD_XYZ_RS('hFacS.',suff,hFacS,myIter,myThid)
171 jmc 1.16 #endif /* NONLIN_FRSURF */
172    
173 adcroft 1.5 #endif /* MULTIPLE_RECORD_STATE_FILES */
174 adcroft 1.1
175 edhill 1.42 ENDIF
176 edhill 1.26
177     #ifdef ALLOW_MNC
178 edhill 1.42 IF (useMNC .AND. snapshot_mnc) THEN
179 edhill 1.56
180     IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
181     pf(1:1) = 'D'
182     ELSE
183     pf(1:1) = 'R'
184     ENDIF
185    
186 edhill 1.42 C Write dynvars using the MNC package
187     CALL MNC_CW_SET_UDIM('state', -1, myThid)
188 edhill 1.54 CALL MNC_CW_RL_W_S('D','state',0,0,'T', myTime, myThid)
189 edhill 1.42 CALL MNC_CW_SET_UDIM('state', 0, myThid)
190 edhill 1.54 CALL MNC_CW_I_W_S('I','state',0,0,'iter', myIter, myThid)
191     C CALL MNC_CW_RL_W_S('D','state',0,0,'model_time',myTime,myThid)
192 edhill 1.56 CALL MNC_CW_RL_W(pf,'state',0,0,'U', uVel, myThid)
193     CALL MNC_CW_RL_W(pf,'state',0,0,'V', vVel, myThid)
194     CALL MNC_CW_RL_W(pf,'state',0,0,'Temp', theta, myThid)
195     CALL MNC_CW_RL_W(pf,'state',0,0,'S', salt, myThid)
196     CALL MNC_CW_RL_W(pf,'state',0,0,'Eta', etaN, myThid)
197     CALL MNC_CW_RL_W(pf,'state',0,0,'W', wVel, myThid)
198 jmc 1.65 IF ( storePhiHyd4Phys .OR. myIter.NE.nIter0 ) THEN
199 edhill 1.42 CALL MNC_CW_SET_UDIM('phiHyd', -1, myThid)
200 edhill 1.54 CALL MNC_CW_RL_W_S('D','phiHyd',0,0,'T',myTime,myThid)
201 edhill 1.42 CALL MNC_CW_SET_UDIM('phiHyd', 0, myThid)
202 edhill 1.54 CALL MNC_CW_I_W_S('I','phiHyd',0,0,'iter',myIter,myThid)
203 edhill 1.56 CALL MNC_CW_RL_W(pf,'phiHyd',0,0,'phiHyd',
204 edhill 1.42 & totPhiHyd, myThid)
205     ENDIF
206 jmc 1.48 IF ( fluidIsWater .AND. (myIter .NE. nIter0) ) THEN
207 edhill 1.42 CALL MNC_CW_SET_UDIM('phiHydLow', -1, myThid)
208 edhill 1.54 CALL MNC_CW_RL_W_S('D','phiHydLow',0,0,'T', myTime, myThid)
209     CALL MNC_CW_SET_UDIM('phiHydLow', 0, myThid)
210     CALL MNC_CW_I_W_S('I','phiHydLow',0,0,'iter',myIter,myThid)
211 edhill 1.56 CALL MNC_CW_RL_W(pf,'phiHydLow',0,0,'phiHydLow',
212 edhill 1.42 & phiHydLow, myThid)
213     ENDIF
214 edhill 1.32 #ifdef ALLOW_NONHYDROSTATIC
215 edhill 1.42 IF (nonHydroStatic) THEN
216 edhill 1.56 CALL MNC_CW_RL_W(pf,'state',0,0,'phi_nh',phi_nh,myThid)
217 edhill 1.42 ENDIF
218     #endif /* ALLOW_NONHYDROSTATIC */
219 edhill 1.36 ENDIF
220 edhill 1.32 #endif /* ALLOW_MNC */
221 jmc 1.60
222 adcroft 1.1 ENDIF
223    
224     RETURN
225     END

  ViewVC Help
Powered by ViewVC 1.1.22