/[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.1 - (show annotations) (download)
Thu Sep 2 09:11:54 2004 UTC (20 years, 5 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint55c_post, checkpoint57b_post, checkpoint57f_pre, checkpoint55d_pre, checkpoint57d_post, checkpoint57c_pre, checkpoint55j_post, checkpoint56b_post, checkpoint55h_post, checkpoint57e_post, checkpoint56c_post, checkpoint54e_post, checkpoint55b_post, checkpoint55, checkpoint55a_post, checkpoint57a_post, checkpoint55g_post, checkpoint55f_post, checkpoint57a_pre, checkpoint57, checkpoint56, checkpoint54f_post, checkpoint55e_post, eckpoint57e_pre, checkpoint57c_post, checkpoint55i_post, checkpoint56a_post, checkpoint55d_post
o add two new packages
  - pp81 (Packanowski and Philander, 1981), Richardson number and
    stratification dependent mixing
  - my82 (Mellor and Yamada, 1982) level 2 turbulence closure scheme

1 C $Header: $
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,myCurrentTime,
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
140 & (MYtaveFreq,myCurrentTime,myCurrentTime-deltaTClock) )
141 & THEN
142 DDTT=0.5*deltaTclock
143 ELSE
144 DDTT=deltaTclock
145 ENDIF
146 DO bj = myByLo(myThid), myByHi(myThid)
147 DO bi = myBxLo(myThid), myBxHi(myThid)
148 CALL TIMEAVE_CUMULATE(
149 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
150 CALL TIMEAVE_CUMULATE(
151 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
152 CALL TIMEAVE_CUMULATE(
153 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
154 C Keep record of how much time has been integrated over
155 DO k=1,Nr
156 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
157 ENDDO
158 ENDDO
159 ENDDO
160
161 C Dump files and restart average computation if needed
162 IF ( myIter.NE.nIter0 .AND.
163 & DIFFERENT_MULTIPLE(MYtaveFreq,myCurrentTime,
164 & myCurrentTime-deltaTClock)
165 & ) THEN
166
167 C Normalize by integrated time
168 DO bj = myByLo(myThid), myByHi(myThid)
169 DO bi = myBxLo(myThid), myBxHi(myThid)
170 CALL TIMEAVE_NORMALIZ(MYviscArtave,my_timeave,
171 & Nr, bi,bj,myThid)
172 CALL TIMEAVE_NORMALIZ(MYdiffKrtave,my_timeave,
173 & Nr, bi,bj,myThid)
174 CALL TIMEAVE_NORMALIZ(MYhbltave ,my_timeave,
175 & 1, bi,bj,myThid)
176 ENDDO
177 ENDDO
178
179 #ifdef MULTIPLE_RECORD_MY82_STATE_FILES
180 C Write each snap-shot as a new record in one file per variable
181 C - creates relatively few files but these files can become huge
182 CALL WRITE_REC_XYZ_RL('MYviscAr-T',MYviscArTave,
183 & my_drctrecTave,myIter,myThid)
184 CALL WRITE_REC_XYZ_RL('MYdiffKr-T',MYdiffKrTave,
185 & my_drctrecTave,myIter,myThid)
186 CALL WRITE_REC_XY_RL('MYhbl-T', MYhblTave,
187 & my_drctrecTave,myIter,myThid)
188 C-- Increment record counter
189 my_drctrecTave = my_drctrecTave + 1
190
191 #else /* MULTIPLE_RECORD_MY82_STATE_FILES */
192
193 C Write each snap-shot as a new file
194 C - creates many files but for large configurations is easier to
195 C transfer analyse a particular snap-shots
196 WRITE(suff,'(I10.10)') myIter
197 CALL WRITE_FLD_XYZ_RL('MYviscAr-T.',suff,MYviscArTave,
198 & myIter,myThid)
199 CALL WRITE_FLD_XYZ_RL('MYdiffKr-T.',suff,MYdiffKrTave,
200 & myIter,myThid)
201 CALL WRITE_FLD_XY_RL('MYhbl-T.', suff,MYhblTave,
202 & myIter,myThid)
203 #endif /* MULTIPLE_RECORD_MY82_STATE_FILES */
204
205 C Reset averages to zero
206 DO bj = myByLo(myThid), myByHi(myThid)
207 DO bi = myBxLo(myThid), myBxHi(myThid)
208 CALL TIMEAVE_RESET(MYviscArtave,Nr,bi,bj,myThid)
209 CALL TIMEAVE_RESET(MYdiffKrtave,Nr,bi,bj,myThid)
210 CALL TIMEAVE_RESET(MYhbltave, 1,bi,bj,myThid)
211 DO k=1,Nr
212 my_TimeAve(k,bi,bj)=0.
213 ENDDO
214 ENDDO
215 ENDDO
216
217 C Time Average MY fields
218 DDTT=0.5*deltaTclock
219 DO bj = myByLo(myThid), myByHi(myThid)
220 DO bi = myBxLo(myThid), myBxHi(myThid)
221 CALL TIMEAVE_CUMULATE(
222 & MYviscArtave,MYviscAr,Nr,DDTT,bi,bj,myThid)
223 CALL TIMEAVE_CUMULATE(
224 & MYdiffKrtave,MYdiffKr,Nr,DDTT,bi,bj,myThid)
225 CALL TIMEAVE_CUMULATE(
226 & MYhbltave, MYhbl, 1, DDTT,bi,bj,myThid)
227 C Keep record of how much time has been integrated over
228 DO k=1,Nr
229 my_TimeAve(k,bi,bj)=my_TimeAve(k,bi,bj)+DDTT
230 ENDDO
231 ENDDO
232 ENDDO
233 ENDIF
234
235 #endif
236
237 #endif
238
239 RETURN
240 END

  ViewVC Help
Powered by ViewVC 1.1.22