/[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.3 - (show annotations) (download)
Sun May 15 03:04:56 2005 UTC (19 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint58l_post, checkpoint57o_post, checkpoint57m_post, checkpoint57i_post, checkpoint58e_post, checkpoint57r_post, checkpoint57s_post, checkpoint57j_post, checkpoint58b_post, checkpoint58m_post, checkpoint57k_post, checkpoint58r_post, checkpoint57y_post, checkpoint58g_post, checkpoint57x_post, checkpoint58n_post, checkpoint58x_post, checkpoint58h_post, checkpoint58w_post, checkpoint58j_post, checkpoint57y_pre, checkpoint57v_post, checkpoint59p, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint59, checkpoint58, checkpoint57h_done, checkpoint58f_post, checkpoint57n_post, checkpoint58d_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint58a_post, checkpoint58i_post, checkpoint57q_post, checkpoint58o_post, checkpoint57z_post, checkpoint58c_post, checkpoint58k_post, checkpoint58u_post, checkpoint58y_post, checkpoint58v_post, checkpoint58s_post, checkpoint58p_post, checkpoint58t_post, checkpoint58q_post, checkpoint57l_post
Changes since 1.2: +7 -9 lines
remove "baseTime" (no used) from arg. list of DIFF_BASE_MULTIPLE
and rename it: DIFFERENT_MULTIPLE

1 C $Header: /u/gcmpack/MITgcm/pkg/my82/my82_do_diags.F,v 1.2 2005/04/06 18:43:11 jmc 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 #include "MY82.h"
48 #include "MY82_DIAGS.h"
49
50 C !INPUT/OUTPUT PARAMETERS:
51 C == Routine arguments ==
52 C myCurrentTime - Current time of simulation ( s )
53 C myIter - Iteration number
54 C myThid - Number of this instance of INI_FORCING
55 _RL myCurrentTime
56 INTEGER myIter
57 INTEGER myThid
58
59 #ifdef ALLOW_MY82
60
61 C !LOCAL VARIABLES:
62 C == Local variables ==
63 CHARACTER*(MAX_LEN_MBUF) suff
64 LOGICAL DIFFERENT_MULTIPLE
65 EXTERNAL DIFFERENT_MULTIPLE
66 INTEGER bi, bj, K
67 _RL DDTT
68 CEOP
69
70 C----------------------------------------------------------------
71 C Dump snapshot of MY82 variables.
72 C----------------------------------------------------------------
73
74 IF (
75 & DIFFERENT_MULTIPLE(MYdumpFreq,
76 & myCurrentTime,deltaTClock)
77 & ) THEN
78
79 IF (MYmixingMaps) THEN
80 CALL PLOT_FIELD_XYRL ( MYhbl , 'MYhbl' ,
81 & myIter, myThid )
82 CALL PLOT_FIELD_XYZRL ( MYviscAr, 'MYviscAr',
83 & Nr, myIter, myThid )
84 CALL PLOT_FIELD_XYZRL ( MYdiffKr, 'MYdiffKr',
85 & Nr, myIter, myThid )
86 ENDIF
87
88 if (MYwriteState) then
89 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
90 C Write each snap-shot as a new record in one file per variable
91 C - creates relatively few files but these files can become huge
92 CALL WRITE_REC_XYZ_RL('MYviscAr',MYviscAr,my_drctrec,
93 & myIter,myThid)
94 CALL WRITE_REC_XYZ_RL('MYdiffKr',MYdiffKr,my_drctrec,
95 & myIter,myThid)
96 CALL WRITE_REC_XY_RL('MYhbl',MYhbl,my_drctrec,
97 & myIter,myThid)
98 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
99 C Write each snap-shot as a new file
100 C - creates many files but for large configurations is easier to
101 C transfer analyse a particular snap-shots
102 WRITE(suff,'(I10.10)') myIter
103 CALL WRITE_FLD_XYZ_RL('MYviscAr.',suff,MYviscAr,
104 & myIter,myThid)
105 CALL WRITE_FLD_XYZ_RL('MYdiffKr.',suff,MYdiffKr,
106 & myIter,myThid)
107 CALL WRITE_FLD_XY_RL('MYhbl.',suff,MYhbl,
108 & myIter,myThid)
109 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
110 endif
111
112 C-- Increment record counter
113 my_drctrec = my_drctrec + 1
114
115 ENDIF
116
117 C----------------------------------------------------------------
118 C Do MY82 time averaging.
119 C----------------------------------------------------------------
120
121 #ifdef ALLOW_TIMEAVE
122
123 C Initialize averages to zero
124 IF ( myIter.EQ.nIter0 ) THEN
125 DO bj = myByLo(myThid), myByHi(myThid)
126 DO bi = myBxLo(myThid), myBxHi(myThid)
127 CALL TIMEAVE_RESET(MYviscArtave, Nr,bi,bj,myThid)
128 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
129 CALL TIMEAVE_RESET(MYhbltave, 1, bi,bj,myThid)
130 DO k=1,Nr
131 my_TimeAve(k,bi,bj)=0.
132 ENDDO
133 ENDDO
134 ENDDO
135 ENDIF
136
137 C Time Average MY82 fields
138 IF ( myIter .EQ. nIter0 .OR.
139 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
140 & ) THEN
141 DDTT=0.5*deltaTclock
142 ELSE
143 DDTT=deltaTclock
144 ENDIF
145 DO bj = myByLo(myThid), myByHi(myThid)
146 DO bi = myBxLo(myThid), myBxHi(myThid)
147 CALL TIMEAVE_CUMULATE(
148 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
149 CALL TIMEAVE_CUMULATE(
150 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
151 CALL TIMEAVE_CUMULATE(
152 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
153 C Keep record of how much time has been integrated over
154 DO k=1,Nr
155 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
156 ENDDO
157 ENDDO
158 ENDDO
159
160 C Dump files and restart average computation if needed
161 IF ( myIter.NE.nIter0 .AND.
162 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,deltaTClock)
163 & ) THEN
164
165 C Normalize by integrated time
166 DO bj = myByLo(myThid), myByHi(myThid)
167 DO bi = myBxLo(myThid), myBxHi(myThid)
168 CALL TIMEAVE_NORMALIZ(MYviscArtave,my_timeave,
169 & Nr, bi,bj,myThid)
170 CALL TIMEAVE_NORMALIZ(MYdiffKrtave,my_timeave,
171 & Nr, bi,bj,myThid)
172 CALL TIMEAVE_NORMALIZ(MYhbltave ,my_timeave,
173 & 1, bi,bj,myThid)
174 ENDDO
175 ENDDO
176
177 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
178 C Write each snap-shot as a new record in one file per variable
179 C - creates relatively few files but these files can become huge
180 CALL WRITE_REC_XYZ_RL('MYviscAr-T',MYviscArTave,
181 & my_drctrecTave,myIter,myThid)
182 CALL WRITE_REC_XYZ_RL('MYdiffKr-T',MYdiffKrTave,
183 & my_drctrecTave,myIter,myThid)
184 CALL WRITE_REC_XY_RL('MYhbl-T', MYhblTave,
185 & my_drctrecTave,myIter,myThid)
186 C-- Increment record counter
187 my_drctrecTave = my_drctrecTave + 1
188
189 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
190
191 C Write each snap-shot as a new file
192 C - creates many files but for large configurations is easier to
193 C transfer analyse a particular snap-shots
194 WRITE(suff,'(I10.10)') myIter
195 CALL WRITE_FLD_XYZ_RL('MYviscAr-T.',suff,MYviscArTave,
196 & myIter,myThid)
197 CALL WRITE_FLD_XYZ_RL('MYdiffKr-T.',suff,MYdiffKrTave,
198 & myIter,myThid)
199 CALL WRITE_FLD_XY_RL('MYhbl-T.', suff,MYhblTave,
200 & myIter,myThid)
201 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
202
203 C Reset averages to zero
204 DO bj = myByLo(myThid), myByHi(myThid)
205 DO bi = myBxLo(myThid), myBxHi(myThid)
206 CALL TIMEAVE_RESET(MYviscArtave,Nr,bi,bj,myThid)
207 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
208 CALL TIMEAVE_RESET(MYhbltave, 1,bi,bj,myThid)
209 DO k=1,Nr
210 my_TimeAve(k,bi,bj)=0.
211 ENDDO
212 ENDDO
213 ENDDO
214
215 C Time Average MY fields
216 DDTT=0.5*deltaTclock
217 DO bj = myByLo(myThid), myByHi(myThid)
218 DO bi = myBxLo(myThid), myBxHi(myThid)
219 CALL TIMEAVE_CUMULATE(
220 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
221 CALL TIMEAVE_CUMULATE(
222 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
223 CALL TIMEAVE_CUMULATE(
224 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
225 C Keep record of how much time has been integrated over
226 DO k=1,Nr
227 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
228 ENDDO
229 ENDDO
230 ENDDO
231 ENDIF
232
233 #endif
234
235 #endif
236
237 RETURN
238 END

  ViewVC Help
Powered by ViewVC 1.1.22