/[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.1 - (show annotations) (download)
Wed Jul 30 03:28:05 2014 UTC (9 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
-  add new pkg "kl10" for mixing due to internal wave breaking
  ( http://www.sciencedirect.com/science/article/pii/S1463500310000144 )

1 C $Header: /u/gcmpack/MITgcm/pkg/pp81/pp81_output.F,v 1.3 2011/10/26 09:29:36 mlosch Exp $
2 C $Name: checkpoint63o $
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*(MAX_LEN_MBUF) 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 WRITE(suff,'(I10.10)') myIter
88 CALL WRITE_FLD_XYZ_RL('KLviscAr.',suff,KLviscAr,
89 & myIter,myThid)
90 CALL WRITE_FLD_XYZ_RL('KLeps.',suff,KLeps,
91 & myIter,myThid)
92 ENDIF
93
94 ENDIF
95
96 C----------------------------------------------------------------
97 C Do KL time averaging.
98 C----------------------------------------------------------------
99
100 #ifdef ALLOW_TIMEAVE
101 IF ( KLtaveFreq.GT.0. _d 0 ) THEN
102
103 IF ( myIter.EQ.nIter0 ) THEN
104 C Initialize averages to zero
105 DO bj = myByLo(myThid), myByHi(myThid)
106 DO bi = myBxLo(myThid), myBxHi(myThid)
107 CALL TIMEAVE_RESET( KLviscArtave, Nr, bi, bj, myThid )
108 CALL TIMEAVE_RESET( KLdiffKrtave, Nr, bi, bj, myThid )
109 KL_timeAve(bi,bj) = 0.
110 ENDDO
111 ENDDO
112
113 ELSE
114 C Cumulate KL fields (for Time Average)
115 DDTT=deltaTClock
116 DO bj = myByLo(myThid), myByHi(myThid)
117 DO bi = myBxLo(myThid), myBxHi(myThid)
118 CALL TIMEAVE_CUMULATE( KLviscArtave, KLviscAr,
119 & Nr, DDTT, bi, bj, myThid )
120 CALL TIMEAVE_CUMULATE( KLdiffKrtave, KLeps,
121 & Nr, DDTT, bi, bj, myThid )
122 C Keep record of how much time has been integrated over
123 KL_timeAve(bi,bj) = KL_timeAve(bi,bj)+DDTT
124 ENDDO
125 ENDDO
126 ENDIF
127
128 C Dump files and restart average computation if needed
129 IF ( myIter.NE.nIter0 .AND.
130 & DIFFERENT_MULTIPLE( KLtaveFreq, myTime, deltaTClock )
131 & ) THEN
132
133 C Normalize by integrated time
134 DO bj = myByLo(myThid), myByHi(myThid)
135 DO bi = myBxLo(myThid), myBxHi(myThid)
136 CALL TIMEAVE_NORMALIZE( KLviscArtave,
137 & KL_timeAve, Nr, bi, bj, myThid )
138 CALL TIMEAVE_NORMALIZE( KLdiffKrtave,
139 & KL_timeAve, Nr, bi, bj, myThid )
140 ENDDO
141 ENDDO
142
143 C Write each snap-shot as a new file
144 WRITE(suff,'(I10.10)') myIter
145 CALL WRITE_FLD_XYZ_RL( 'KLviscAr-T.', suff,
146 & KLviscArTave, myIter, myThid )
147 CALL WRITE_FLD_XYZ_RL( 'KLeps-T.', suff,
148 & KLdiffKrTave, myIter, myThid )
149
150 C Reset averages to zero
151 DO bj = myByLo(myThid), myByHi(myThid)
152 DO bi = myBxLo(myThid), myBxHi(myThid)
153 CALL TIMEAVE_RESET( KLviscArtave, Nr, bi, bj, myThid )
154 CALL TIMEAVE_RESET( KLdiffKrtave, Nr, bi, bj, myThid )
155 KL_timeAve(bi,bj) = 0.
156 ENDDO
157 ENDDO
158
159 C- end dump-files block
160 ENDIF
161
162 C- end if KLtaveFreq > 0
163 ENDIF
164 #endif /* ALLOW_TIMEAVE */
165
166 #ifdef ALLOW_DIAGNOSTICS
167 IF ( useDiagnostics .AND. myIter.NE.nIter0 ) THEN
168 CALL DIAGNOSTICS_FILL(KLviscAr,'KLviscAr',0,Nr,0,1,1,myThid)
169 CALL DIAGNOSTICS_FILL(KLdiffKr,'KLdiffKr',0,Nr,0,1,1,myThid)
170 CALL DIAGNOSTICS_FILL(KLeps, 'KLeps ',0,Nr,0,1,1,myThid)
171 ENDIF
172 #endif /* ALLOW_DIAGNOSTICS */
173
174 #endif /* ALLOW_KL10 */
175
176 RETURN
177 END

  ViewVC Help
Powered by ViewVC 1.1.22