/[MITgcm]/MITgcm/pkg/ggl90/ggl90_do_diags.F
ViewVC logotype

Contents of /MITgcm/pkg/ggl90/ggl90_do_diags.F

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


Revision 1.1 - (show annotations) (download)
Thu Sep 16 11:27:18 2004 UTC (19 years, 8 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, 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 initial check-in of TKE-model of Gaspar et al. 1990

1 C $Header: $
2 C $Name: $
3
4 #include "GGL90_OPTIONS.h"
5
6 #undef MULTIPLE_RECORD_GGL90_STATE_FILES
7 CBOP
8 C !ROUTINE: GGL90_DO_DIAGS
9 C !INTERFACE:
10 SUBROUTINE GGL90_DO_DIAGS( myCurrentTime, myIter, myThid )
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE GGL90_DO_DIAGS
14 C | o Do GGL90 diagnostic output.
15 C *==========================================================
16 C | The following CPP flag (MULTIPLE_RECORD_GGL90_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 "GGL90.h"
48 #include "GGL90_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_GGL90
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 GGL90 variables.
72 C----------------------------------------------------------------
73
74 IF (
75 & DIFFERENT_MULTIPLE(GGL90dumpFreq,myCurrentTime,
76 & myCurrentTime-deltaTClock)
77 & ) THEN
78
79 IF (GGL90mixingMaps) THEN
80 CALL PLOT_FIELD_XYZRL ( GGL90TKE , 'GGL90TKE' ,
81 & Nr, myIter, myThid )
82 CALL PLOT_FIELD_XYZRL ( GGL90viscAr, 'GGL90viscAr',
83 & Nr, myIter, myThid )
84 CALL PLOT_FIELD_XYZRL ( GGL90diffKr, 'GGL90diffKr',
85 & Nr, myIter, myThid )
86 ENDIF
87
88 if (GGL90writeState) then
89 #ifdef MULTIPLE_RECORD_GGL90_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('GGL90viscAr',GGL90viscAr,ggl90_drctrec,
93 & myIter,myThid)
94 CALL WRITE_REC_XYZ_RL('GGL90diffKr',GGL90diffKr,ggl90_drctrec,
95 & myIter,myThid)
96 CALL WRITE_REC_XYZ_RL('GGL90TKE' ,GGL90TKE ,ggl90_drctrec,
97 & myIter,myThid)
98 #else /* MULTIPLE_RECORD_GGL90_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('GGL90viscAr.',suff,GGL90viscAr,
104 & myIter,myThid)
105 CALL WRITE_FLD_XYZ_RL('GGL90diffKr.',suff,GGL90diffKr,
106 & myIter,myThid)
107 CALL WRITE_FLD_XYZ_RL('GGL90TKE.' ,suff,GGL90TKE,
108 & myIter,myThid)
109 #endif /* MULTIPLE_RECORD_GGL90_STATE_FILES */
110 endif
111
112 C-- Increment record counter
113 ggl90_drctrec = ggl90_drctrec + 1
114
115 ENDIF
116
117 C----------------------------------------------------------------
118 C Do GGL90 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(GGL90viscArtave,Nr,bi,bj,myThid)
128 CALL TIMEAVE_RESET(GGL90diffKrtave,Nr,bi,bj,myThid)
129 CALL TIMEAVE_RESET(GGL90TKEtave, Nr,bi,bj,myThid)
130 DO k=1,Nr
131 ggl90_TimeAve(k,bi,bj)=0.
132 ENDDO
133 ENDDO
134 ENDDO
135 ENDIF
136
137 C Time Average GGL90 fields
138 IF ( myIter .EQ. nIter0 .OR.
139 & DIFFERENT_MULTIPLE
140 & (GGL90taveFreq,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 & GGL90viscArtave,GGL90viscAr,Nr,DDTT,bi,bj,myThid)
150 CALL TIMEAVE_CUMULATE(
151 & GGL90diffKrtave,GGL90diffKr,Nr,DDTT,bi,bj,myThid)
152 CALL TIMEAVE_CUMULATE(
153 & GGL90TKEtave, GGL90TKE, Nr,DDTT,bi,bj,myThid)
154 C Keep record of how much time has been integrated over
155 DO k=1,Nr
156 ggl90_TimeAve(k,bi,bj)=ggl90_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(GGL90taveFreq,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(GGL90viscArtave,ggl90_timeave,
171 & Nr, bi,bj,myThid)
172 CALL TIMEAVE_NORMALIZ(GGL90diffKrtave,ggl90_timeave,
173 & Nr, bi,bj,myThid)
174 CALL TIMEAVE_NORMALIZ(GGL90TKEtave ,ggl90_timeave,
175 & Nr, bi,bj,myThid)
176 ENDDO
177 ENDDO
178
179 #ifdef MULTIPLE_RECORD_GGL90_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('GGL90viscAr-T',GGL90viscArTave,
183 & ggl90_drctrecTave,myIter,myThid)
184 CALL WRITE_REC_XYZ_RL('GGL90diffKr-T',GGL90diffKrTave,
185 & ggl90_drctrecTave,myIter,myThid)
186 CALL WRITE_REC_XYZ_RL('GGL90TKE-T', GGL90TKETave,
187 & ggl90_drctrecTave,myIter,myThid)
188 C-- Increment record counter
189 ggl90_drctrecTave = ggl90_drctrecTave + 1
190
191 #else /* MULTIPLE_RECORD_GGL90_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('GGL90viscAr-T.',suff,GGL90viscArTave,
198 & myIter,myThid)
199 CALL WRITE_FLD_XYZ_RL('GGL90diffKr-T.',suff,GGL90diffKrTave,
200 & myIter,myThid)
201 CALL WRITE_FLD_XYZ_RL('GGL90TKE-T.', suff,GGL90TKETave,
202 & myIter,myThid)
203 #endif /* MULTIPLE_RECORD_GGL90_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(GGL90viscArtave,Nr,bi,bj,myThid)
209 CALL TIMEAVE_RESET(GGL90diffKrtave,Nr,bi,bj,myThid)
210 CALL TIMEAVE_RESET(GGL90TKEtave, Nr,bi,bj,myThid)
211 DO k=1,Nr
212 ggl90_TimeAve(k,bi,bj)=0.
213 ENDDO
214 ENDDO
215 ENDDO
216
217 C Time Average GGL90 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 & GGL90viscArtave,GGL90viscAr,Nr,DDTT,bi,bj,myThid)
223 CALL TIMEAVE_CUMULATE(
224 & GGL90diffKrtave,GGL90diffKr,Nr,DDTT,bi,bj,myThid)
225 CALL TIMEAVE_CUMULATE(
226 & GGL90TKEtave, GGL90TKE, Nr,DDTT,bi,bj,myThid)
227 C Keep record of how much time has been integrated over
228 DO k=1,Nr
229 ggl90_TimeAve(k,bi,bj)=ggl90_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