/[MITgcm]/MITgcm/pkg/my82/my82_do_diags.F
ViewVC logotype

Contents of /MITgcm/pkg/my82/my82_do_diags.F

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


Revision 1.6 - (show annotations) (download)
Mon Apr 14 10:12:40 2008 UTC (16 years, 2 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint61l, checkpoint59q, checkpoint59r, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61p
Changes since 1.5: +1 -3 lines
holy ...

1 C $Header: /u/gcmpack/MITgcm/pkg/my82/my82_do_diags.F,v 1.5 2008/04/14 10:09:34 mlosch Exp $
2 C $Name: $
3
4 #include "MY82_OPTIONS.h"
5
6 #undef MULTIPLE_RECORD_MY82_STATE_FILES
7 CBOP
8 C !ROUTINE: MY82_DO_DIAGS
9 C !INTERFACE:
10 SUBROUTINE MY82_DO_DIAGS( myCurrentTime, myIter, myThid )
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE MY82_DO_DIAGS
14 C | o Do MY82 diagnostic output.
15 C *==========================================================
16 C | The following CPP flag (MULTIPLE_RECORD_MY82_STATE_FILES) is
17 C | #define/#undefed here since it is specific to this routine
18 C | and very user-preference specific.
19 C |
20 C | If #undefed (default) the state files are written as in all versions
21 C | prior to checkpoint32, where a file is created per variable, per time
22 C | and per tile. This *has* to be the default because most users use this
23 C | mode and all utilities and scripts (diagnostic) assume this form.
24 C | It is also robust, as explained below.
25 C |
26 C | If #defined, subsequent snap-shots are written as records in the
27 C | same file (no iteration number in filenames).
28 C | Advantages: - fewer files
29 C | - for small problems, is easy to copy the output around
30 C | Disadvantages:
31 C | - breaks a lot of diagnostic scripts
32 C | - for large or long problems this creates huge files
33 C | - is an unexpected, unsolicited change in behaviour which came
34 C | as a surprise (in c32) and inconvenience to several users
35 C | - can not accomodate changing the frequency of output
36 C | after a pickup (this is trivial in previous method
37 C | but needs new code and parameters in this new method)
38 C *==========================================================*
39 C \ev
40
41 C !USES:
42 IMPLICIT NONE
43 C === Global variables ===
44 #include "SIZE.h"
45 #include "EEPARAMS.h"
46 #include "PARAMS.h"
47 #ifdef ALLOW_MNC
48 #include "MNC_PARAMS.h"
49 #endif
50 #include "MY82.h"
51 #include "MY82_DIAGS.h"
52
53 C !INPUT/OUTPUT PARAMETERS:
54 C == Routine arguments ==
55 C myCurrentTime - Current time of simulation ( s )
56 C myIter - Iteration number
57 C myThid - Number of this instance of INI_FORCING
58 _RL myCurrentTime
59 INTEGER myIter
60 INTEGER myThid
61
62 #ifdef ALLOW_MY82
63
64 C !LOCAL VARIABLES:
65 C == Local variables ==
66 CHARACTER*(MAX_LEN_MBUF) suff
67 LOGICAL DIFFERENT_MULTIPLE
68 EXTERNAL DIFFERENT_MULTIPLE
69 INTEGER bi, bj, K
70 _RL DDTT
71 CHARACTER*(1) pf
72 CEOP
73
74 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
75 pf(1:1) = 'D'
76 ELSE
77 pf(1:1) = 'R'
78 ENDIF
79
80 C----------------------------------------------------------------
81 C Dump snapshot of MY82 variables.
82 C----------------------------------------------------------------
83
84 IF (
85 & DIFFERENT_MULTIPLE(MYdumpFreq,
86 & myCurrentTime,deltaTClock)
87 & ) THEN
88
89 IF (MYmixingMaps) THEN
90 CALL PLOT_FIELD_XYRL ( MYhbl , 'MYhbl' ,
91 & myIter, myThid )
92 CALL PLOT_FIELD_XYZRL ( MYviscAr, 'MYviscAr',
93 & Nr, myIter, myThid )
94 CALL PLOT_FIELD_XYZRL ( MYdiffKr, 'MYdiffKr',
95 & Nr, myIter, myThid )
96 ENDIF
97
98 IF (MYwriteState .AND. snapshot_mdsio) THEN
99 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
100 C Write each snap-shot as a new record in one file per variable
101 C - creates relatively few files but these files can become huge
102 CALL WRITE_REC_XYZ_RL('MYviscAr',MYviscAr,my_drctrec,
103 & myIter,myThid)
104 CALL WRITE_REC_XYZ_RL('MYdiffKr',MYdiffKr,my_drctrec,
105 & myIter,myThid)
106 CALL WRITE_REC_XY_RL('MYhbl',MYhbl,my_drctrec,
107 & myIter,myThid)
108 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
109 C Write each snap-shot as a new file
110 C - creates many files but for large configurations is easier to
111 C transfer analyse a particular snap-shots
112 WRITE(suff,'(I10.10)') myIter
113 CALL WRITE_FLD_XYZ_RL('MYviscAr.',suff,MYviscAr,
114 & myIter,myThid)
115 CALL WRITE_FLD_XYZ_RL('MYdiffKr.',suff,MYdiffKr,
116 & myIter,myThid)
117 CALL WRITE_FLD_XY_RL('MYhbl.',suff,MYhbl,
118 & myIter,myThid)
119 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
120 ENDIF
121
122 #ifdef ALLOW_MNC
123 IF (MYwriteState .AND. useMNC .AND. snapshot_mnc ) THEN
124 CALL MNC_CW_SET_UDIM('my_state', -1, myThid)
125 CALL MNC_CW_RL_W_S('D','my_state',0,0,'T',myCurrentTime,myThid)
126 CALL MNC_CW_SET_UDIM('my_state', 0, myThid)
127 CALL MNC_CW_I_W_S('I','my_state',0,0,'iter',myIter,myThid)
128 CALL MNC_CW_RL_W(pf,'my_state',0,0,
129 & 'MYviscAr', MYviscAr, myThid)
130 CALL MNC_CW_RL_W(pf,'my_state',0,0,
131 & 'MYdiffKr', MYdiffKr, myThid)
132 CALL MNC_CW_RL_W(pf,'my_state',0,0,
133 & 'MYhbl', MYhbl, myThid)
134 ENDIF
135 #endif /* ALLOW_MNC */
136
137 C-- Increment record counter
138 my_drctrec = my_drctrec + 1
139
140 ENDIF
141
142 C----------------------------------------------------------------
143 C Do MY82 time averaging.
144 C----------------------------------------------------------------
145
146 #ifdef ALLOW_TIMEAVE
147
148 C Initialize averages to zero
149 IF ( myIter.EQ.nIter0 ) THEN
150 DO bj = myByLo(myThid), myByHi(myThid)
151 DO bi = myBxLo(myThid), myBxHi(myThid)
152 CALL TIMEAVE_RESET(MYviscArtave, Nr,bi,bj,myThid)
153 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
154 CALL TIMEAVE_RESET(MYhbltave, 1, bi,bj,myThid)
155 DO k=1,Nr
156 my_TimeAve(k,bi,bj)=0.
157 ENDDO
158 ENDDO
159 ENDDO
160 ENDIF
161
162 C Time Average MY82 fields
163 IF ( myIter .EQ. nIter0 .OR.
164 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
165 & ) THEN
166 DDTT=0.5*deltaTclock
167 ELSE
168 DDTT=deltaTclock
169 ENDIF
170 DO bj = myByLo(myThid), myByHi(myThid)
171 DO bi = myBxLo(myThid), myBxHi(myThid)
172 CALL TIMEAVE_CUMULATE(
173 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
174 CALL TIMEAVE_CUMULATE(
175 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
176 CALL TIMEAVE_CUMULATE(
177 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
178 C Keep record of how much time has been integrated over
179 DO k=1,Nr
180 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
181 ENDDO
182 ENDDO
183 ENDDO
184
185 C Dump files and restart average computation if needed
186 IF ( myIter.NE.nIter0 .AND.
187 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
188 & ) THEN
189
190 C Normalize by integrated time
191 DO bj = myByLo(myThid), myByHi(myThid)
192 DO bi = myBxLo(myThid), myBxHi(myThid)
193 CALL TIMEAVE_NORMALIZ(MYviscArtave,my_timeave,
194 & Nr, bi,bj,myThid)
195 CALL TIMEAVE_NORMALIZ(MYdiffKrtave,my_timeave,
196 & Nr, bi,bj,myThid)
197 CALL TIMEAVE_NORMALIZ(MYhbltave ,my_timeave,
198 & 1, bi,bj,myThid)
199 ENDDO
200 ENDDO
201
202 IF (MYwriteState .AND. timeave_mdsio) THEN
203 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
204 C Write each snap-shot as a new record in one file per variable
205 C - creates relatively few files but these files can become huge
206 CALL WRITE_REC_XYZ_RL('MYviscAr-T',MYviscArTave,
207 & my_drctrecTave,myIter,myThid)
208 CALL WRITE_REC_XYZ_RL('MYdiffKr-T',MYdiffKrTave,
209 & my_drctrecTave,myIter,myThid)
210 CALL WRITE_REC_XY_RL('MYhbl-T', MYhblTave,
211 & my_drctrecTave,myIter,myThid)
212 C-- Increment record counter
213 my_drctrecTave = my_drctrecTave + 1
214
215 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
216
217 C Write each snap-shot as a new file
218 C - creates many files but for large configurations is easier to
219 C transfer analyse a particular snap-shots
220 WRITE(suff,'(I10.10)') myIter
221 CALL WRITE_FLD_XYZ_RL('MYviscAr-T.',suff,MYviscArTave,
222 & myIter,myThid)
223 CALL WRITE_FLD_XYZ_RL('MYdiffKr-T.',suff,MYdiffKrTave,
224 & myIter,myThid)
225 CALL WRITE_FLD_XY_RL('MYhbl-T.', suff,MYhblTave,
226 & myIter,myThid)
227 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
228 ENDIF
229
230 #ifdef ALLOW_MNC
231 IF (MYwriteState .AND. useMNC .AND. timeave_mnc) THEN
232 CALL MNC_CW_SET_UDIM('my_timeave', -1, myThid)
233 CALL MNC_CW_RL_W_S('D','my_timeave',0,0,'T',myCurrentTime,myThid)
234 CALL MNC_CW_SET_UDIM('my_timeave', 0, myThid)
235 CALL MNC_CW_I_W_S('I','my_timeave',0,0,'iter',myIter,myThid)
236 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
237 & 'MYviscAr', MYviscArTave, myThid)
238 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
239 & 'MYdiffKr', MYdiffKrTave, myThid)
240 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
241 & 'MYhbl', MYhblTave, myThid)
242 ENDIF
243 #endif /* ALLOW_MNC */
244
245 C Reset averages to zero
246 DO bj = myByLo(myThid), myByHi(myThid)
247 DO bi = myBxLo(myThid), myBxHi(myThid)
248 CALL TIMEAVE_RESET(MYviscArtave,Nr,bi,bj,myThid)
249 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
250 CALL TIMEAVE_RESET(MYhbltave, 1,bi,bj,myThid)
251 DO k=1,Nr
252 my_TimeAve(k,bi,bj)=0.
253 ENDDO
254 ENDDO
255 ENDDO
256
257 C Time Average MY fields
258 DDTT=0.5*deltaTclock
259 DO bj = myByLo(myThid), myByHi(myThid)
260 DO bi = myBxLo(myThid), myBxHi(myThid)
261 CALL TIMEAVE_CUMULATE(
262 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
263 CALL TIMEAVE_CUMULATE(
264 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
265 CALL TIMEAVE_CUMULATE(
266 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
267 C Keep record of how much time has been integrated over
268 DO k=1,Nr
269 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
270 ENDDO
271 ENDDO
272 ENDDO
273 ENDIF
274
275 #endif /* ALLOW_TIMEAVE */
276
277 #ifdef ALLOW_DIAGNOSTICS
278 IF ( useDiagnostics ) THEN
279 CALL DIAGNOSTICS_FILL(MYviscAr,'MYVISCAR',0,Nr,0,1,1,myThid)
280 CALL DIAGNOSTICS_FILL(MYdiffKr,'MYDIFFKR',0,Nr,0,1,1,myThid)
281 CALL DIAGNOSTICS_FILL(MYhbl ,'MYHBL ',0,1 ,0,1,1,myThid)
282 ENDIF
283 #endif /* ALLOW_DIAGNOSTICS */
284
285 #endif /* ALLOW_MY82 */
286
287 RETURN
288 END

  ViewVC Help
Powered by ViewVC 1.1.22