/[MITgcm]/MITgcm/pkg/kl10/kl10_output.F
ViewVC logotype

Contents of /MITgcm/pkg/kl10/kl10_output.F

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


Revision 1.2 - (show annotations) (download)
Fri Mar 24 23:38:56 2017 UTC (7 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.1: +13 -5 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 C $Header: /u/gcmpack/MITgcm/pkg/kl10/kl10_output.F,v 1.1 2014/07/30 03:28:05 jmc Exp $
2 C $Name: $
3
4 #include "KL10_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: KL10_OUTPUT
8 C !INTERFACE:
9 SUBROUTINE KL10_OUTPUT( myTime, myIter, myThid )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE KL10_OUTPUT
14 C | o Do KL10 diagnostic output.
15 C *==========================================================
16 C | The following CPP flag (MULTIPLE_RECORD_KL10_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 "KL10.h"
48 #include "KL10_TAVE.h"
49
50 C !INPUT/OUTPUT PARAMETERS:
51 C == Routine arguments ==
52 C myTime :: my time in simulation ( s )
53 C myIter :: my Iteration number
54 C myThid :: my Thread Id number
55 _RL myTime
56 INTEGER myIter
57 INTEGER myThid
58
59 #ifdef ALLOW_KL10
60
61 C !FUNCTIONS:
62 LOGICAL DIFFERENT_MULTIPLE
63 EXTERNAL DIFFERENT_MULTIPLE
64
65 C !LOCAL VARIABLES:
66 C == Local variables ==
67 CHARACTER*(10) suff
68 #ifdef ALLOW_TIMEAVE
69 INTEGER bi, bj
70 _RL DDTT
71 #endif
72 CEOP
73
74 C JMK TODO: average KLdiffAr as well as KLviscAr. Though they are
75 C never different, but some folks may complain.
76
77 C----------------------------------------------------------------
78 C Dump snapshot of KL variables.
79 C----------------------------------------------------------------
80
81 IF ( myIter.NE.nIter0 .AND.
82 & DIFFERENT_MULTIPLE( KLdumpFreq, myTime, deltaTClock )
83 & ) THEN
84
85 IF (KLwriteState) THEN
86 C Write each snap-shot as a new file
87 IF ( rwSuffixType.EQ.0 ) THEN
88 WRITE(suff,'(I10.10)') myIter
89 ELSE
90 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
91 ENDIF
92 CALL WRITE_FLD_XYZ_RL('KLviscAr.',suff,KLviscAr,
93 & myIter,myThid)
94 CALL WRITE_FLD_XYZ_RL('KLeps.',suff,KLeps,
95 & myIter,myThid)
96 ENDIF
97
98 ENDIF
99
100 C----------------------------------------------------------------
101 C Do KL time averaging.
102 C----------------------------------------------------------------
103
104 #ifdef ALLOW_TIMEAVE
105 IF ( KLtaveFreq.GT.0. _d 0 ) THEN
106
107 IF ( myIter.EQ.nIter0 ) THEN
108 C Initialize averages to zero
109 DO bj = myByLo(myThid), myByHi(myThid)
110 DO bi = myBxLo(myThid), myBxHi(myThid)
111 CALL TIMEAVE_RESET( KLviscArtave, Nr, bi, bj, myThid )
112 CALL TIMEAVE_RESET( KLdiffKrtave, Nr, bi, bj, myThid )
113 KL_timeAve(bi,bj) = 0.
114 ENDDO
115 ENDDO
116
117 ELSE
118 C Cumulate KL fields (for Time Average)
119 DDTT=deltaTClock
120 DO bj = myByLo(myThid), myByHi(myThid)
121 DO bi = myBxLo(myThid), myBxHi(myThid)
122 CALL TIMEAVE_CUMULATE( KLviscArtave, KLviscAr,
123 & Nr, DDTT, bi, bj, myThid )
124 CALL TIMEAVE_CUMULATE( KLdiffKrtave, KLeps,
125 & Nr, DDTT, bi, bj, myThid )
126 C Keep record of how much time has been integrated over
127 KL_timeAve(bi,bj) = KL_timeAve(bi,bj)+DDTT
128 ENDDO
129 ENDDO
130 ENDIF
131
132 C Dump files and restart average computation if needed
133 IF ( myIter.NE.nIter0 .AND.
134 & DIFFERENT_MULTIPLE( KLtaveFreq, myTime, deltaTClock )
135 & ) THEN
136
137 C Normalize by integrated time
138 DO bj = myByLo(myThid), myByHi(myThid)
139 DO bi = myBxLo(myThid), myBxHi(myThid)
140 CALL TIMEAVE_NORMALIZE( KLviscArtave,
141 & KL_timeAve, Nr, bi, bj, myThid )
142 CALL TIMEAVE_NORMALIZE( KLdiffKrtave,
143 & KL_timeAve, Nr, bi, bj, myThid )
144 ENDDO
145 ENDDO
146
147 C Write each snap-shot as a new file
148 IF ( rwSuffixType.EQ.0 ) THEN
149 WRITE(suff,'(I10.10)') myIter
150 ELSE
151 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
152 ENDIF
153 CALL WRITE_FLD_XYZ_RL( 'KLviscAr-T.', suff,
154 & KLviscArTave, myIter, myThid )
155 CALL WRITE_FLD_XYZ_RL( 'KLeps-T.', suff,
156 & KLdiffKrTave, myIter, myThid )
157
158 C Reset averages to zero
159 DO bj = myByLo(myThid), myByHi(myThid)
160 DO bi = myBxLo(myThid), myBxHi(myThid)
161 CALL TIMEAVE_RESET( KLviscArtave, Nr, bi, bj, myThid )
162 CALL TIMEAVE_RESET( KLdiffKrtave, Nr, bi, bj, myThid )
163 KL_timeAve(bi,bj) = 0.
164 ENDDO
165 ENDDO
166
167 C- end dump-files block
168 ENDIF
169
170 C- end if KLtaveFreq > 0
171 ENDIF
172 #endif /* ALLOW_TIMEAVE */
173
174 #ifdef ALLOW_DIAGNOSTICS
175 IF ( useDiagnostics .AND. myIter.NE.nIter0 ) THEN
176 CALL DIAGNOSTICS_FILL(KLviscAr,'KLviscAr',0,Nr,0,1,1,myThid)
177 CALL DIAGNOSTICS_FILL(KLdiffKr,'KLdiffKr',0,Nr,0,1,1,myThid)
178 CALL DIAGNOSTICS_FILL(KLeps, 'KLeps ',0,Nr,0,1,1,myThid)
179 ENDIF
180 #endif /* ALLOW_DIAGNOSTICS */
181
182 #endif /* ALLOW_KL10 */
183
184 RETURN
185 END

  ViewVC Help
Powered by ViewVC 1.1.22