/[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.5 - (show annotations) (download)
Mon Apr 14 10:09:34 2008 UTC (16 years, 10 months ago) by mlosch
Branch: MAIN
Changes since 1.4: +55 -53 lines
oops: fixing bugs and renaming diagnostics names

1 C $Header: /u/gcmpack/MITgcm/pkg/my82/my82_do_diags.F,v 1.4 2008/04/14 09:42:03 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 print *, 'ml-hbl 1'
133 CALL MNC_CW_RL_W(pf,'my_state',0,0,
134 & 'MYhbl', MYhbl, myThid)
135 print *, 'ml-hbl 2'
136 ENDIF
137 #endif /* ALLOW_MNC */
138
139 C-- Increment record counter
140 my_drctrec = my_drctrec + 1
141
142 ENDIF
143
144 C----------------------------------------------------------------
145 C Do MY82 time averaging.
146 C----------------------------------------------------------------
147
148 #ifdef ALLOW_TIMEAVE
149
150 C Initialize averages to zero
151 IF ( myIter.EQ.nIter0 ) THEN
152 DO bj = myByLo(myThid), myByHi(myThid)
153 DO bi = myBxLo(myThid), myBxHi(myThid)
154 CALL TIMEAVE_RESET(MYviscArtave, Nr,bi,bj,myThid)
155 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
156 CALL TIMEAVE_RESET(MYhbltave, 1, bi,bj,myThid)
157 DO k=1,Nr
158 my_TimeAve(k,bi,bj)=0.
159 ENDDO
160 ENDDO
161 ENDDO
162 ENDIF
163
164 C Time Average MY82 fields
165 IF ( myIter .EQ. nIter0 .OR.
166 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
167 & ) THEN
168 DDTT=0.5*deltaTclock
169 ELSE
170 DDTT=deltaTclock
171 ENDIF
172 DO bj = myByLo(myThid), myByHi(myThid)
173 DO bi = myBxLo(myThid), myBxHi(myThid)
174 CALL TIMEAVE_CUMULATE(
175 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
176 CALL TIMEAVE_CUMULATE(
177 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
178 CALL TIMEAVE_CUMULATE(
179 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
180 C Keep record of how much time has been integrated over
181 DO k=1,Nr
182 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
183 ENDDO
184 ENDDO
185 ENDDO
186
187 C Dump files and restart average computation if needed
188 IF ( myIter.NE.nIter0 .AND.
189 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
190 & ) THEN
191
192 C Normalize by integrated time
193 DO bj = myByLo(myThid), myByHi(myThid)
194 DO bi = myBxLo(myThid), myBxHi(myThid)
195 CALL TIMEAVE_NORMALIZ(MYviscArtave,my_timeave,
196 & Nr, bi,bj,myThid)
197 CALL TIMEAVE_NORMALIZ(MYdiffKrtave,my_timeave,
198 & Nr, bi,bj,myThid)
199 CALL TIMEAVE_NORMALIZ(MYhbltave ,my_timeave,
200 & 1, bi,bj,myThid)
201 ENDDO
202 ENDDO
203
204 IF (MYwriteState .AND. timeave_mdsio) THEN
205 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
206 C Write each snap-shot as a new record in one file per variable
207 C - creates relatively few files but these files can become huge
208 CALL WRITE_REC_XYZ_RL('MYviscAr-T',MYviscArTave,
209 & my_drctrecTave,myIter,myThid)
210 CALL WRITE_REC_XYZ_RL('MYdiffKr-T',MYdiffKrTave,
211 & my_drctrecTave,myIter,myThid)
212 CALL WRITE_REC_XY_RL('MYhbl-T', MYhblTave,
213 & my_drctrecTave,myIter,myThid)
214 C-- Increment record counter
215 my_drctrecTave = my_drctrecTave + 1
216
217 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
218
219 C Write each snap-shot as a new file
220 C - creates many files but for large configurations is easier to
221 C transfer analyse a particular snap-shots
222 WRITE(suff,'(I10.10)') myIter
223 CALL WRITE_FLD_XYZ_RL('MYviscAr-T.',suff,MYviscArTave,
224 & myIter,myThid)
225 CALL WRITE_FLD_XYZ_RL('MYdiffKr-T.',suff,MYdiffKrTave,
226 & myIter,myThid)
227 CALL WRITE_FLD_XY_RL('MYhbl-T.', suff,MYhblTave,
228 & myIter,myThid)
229 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
230 ENDIF
231
232 #ifdef ALLOW_MNC
233 IF (MYwriteState .AND. useMNC .AND. timeave_mnc) THEN
234 CALL MNC_CW_SET_UDIM('my_timeave', -1, myThid)
235 CALL MNC_CW_RL_W_S('D','my_timeave',0,0,'T',myCurrentTime,myThid)
236 CALL MNC_CW_SET_UDIM('my_timeave', 0, myThid)
237 CALL MNC_CW_I_W_S('I','my_timeave',0,0,'iter',myIter,myThid)
238 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
239 & 'MYviscAr', MYviscArTave, myThid)
240 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
241 & 'MYdiffKr', MYdiffKrTave, myThid)
242 CALL MNC_CW_RL_W(pf,'my_timeave',0,0,
243 & 'MYhbl', MYhblTave, myThid)
244 ENDIF
245 #endif /* ALLOW_MNC */
246
247 C Reset averages to zero
248 DO bj = myByLo(myThid), myByHi(myThid)
249 DO bi = myBxLo(myThid), myBxHi(myThid)
250 CALL TIMEAVE_RESET(MYviscArtave,Nr,bi,bj,myThid)
251 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
252 CALL TIMEAVE_RESET(MYhbltave, 1,bi,bj,myThid)
253 DO k=1,Nr
254 my_TimeAve(k,bi,bj)=0.
255 ENDDO
256 ENDDO
257 ENDDO
258
259 C Time Average MY fields
260 DDTT=0.5*deltaTclock
261 DO bj = myByLo(myThid), myByHi(myThid)
262 DO bi = myBxLo(myThid), myBxHi(myThid)
263 CALL TIMEAVE_CUMULATE(
264 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
265 CALL TIMEAVE_CUMULATE(
266 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
267 CALL TIMEAVE_CUMULATE(
268 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
269 C Keep record of how much time has been integrated over
270 DO k=1,Nr
271 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
272 ENDDO
273 ENDDO
274 ENDDO
275 ENDIF
276
277 #endif /* ALLOW_TIMEAVE */
278
279 #ifdef ALLOW_DIAGNOSTICS
280 IF ( useDiagnostics ) THEN
281 CALL DIAGNOSTICS_FILL(MYviscAr,'MYVISCAR',0,Nr,0,1,1,myThid)
282 CALL DIAGNOSTICS_FILL(MYdiffKr,'MYDIFFKR',0,Nr,0,1,1,myThid)
283 CALL DIAGNOSTICS_FILL(MYhbl ,'MYHBL ',0,1 ,0,1,1,myThid)
284 ENDIF
285 #endif /* ALLOW_DIAGNOSTICS */
286
287 #endif /* ALLOW_MY82 */
288
289 RETURN
290 END

  ViewVC Help
Powered by ViewVC 1.1.22