/[MITgcm]/MITgcm/pkg/gmredi/gmredi_output.F
ViewVC logotype

Contents of /MITgcm/pkg/gmredi/gmredi_output.F

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


Revision 1.6 - (show annotations) (download)
Sat Jan 2 23:10:47 2010 UTC (14 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62a
Changes since 1.5: +52 -46 lines
time-ave: use simpler (no level index) cumulative-time counter: GM_timeAve(bi,bj)

1 C $Header: /u/gcmpack/MITgcm/pkg/gmredi/gmredi_output.F,v 1.5 2005/09/29 12:19:52 edhill Exp $
2 C $Name: $
3
4 #include "GMREDI_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: GMREDI_OUTPUT
8
9 C !INTERFACE:
10 SUBROUTINE GMREDI_OUTPUT( myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE GMREDI_OUTPUT
15 C | o general routine for GM/Redi output
16 C *==========================================================*
17 C | write time-average & snap-shot output
18 C *==========================================================*
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C === Global variables ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "GMREDI.h"
29 #include "GMREDI_TAVE.h"
30
31 C !INPUT PARAMETERS:
32 C == Routine arguments ==
33 C myTime :: Current time of simulation ( s )
34 C myIter :: Iteration number
35 C myThid :: my Thread Id number
36 _RL myTime
37 INTEGER myIter
38 INTEGER myThid
39 CEOP
40
41 #ifdef ALLOW_GMREDI
42 C !FUNCTIONS:
43 LOGICAL DIFFERENT_MULTIPLE
44 EXTERNAL DIFFERENT_MULTIPLE
45
46 C !LOCAL VARIABLES:
47 C == Local variables ==
48 CHARACTER*(MAX_LEN_MBUF) suff
49 #ifdef ALLOW_TIMEAVE
50 INTEGER bi, bj
51 #endif
52 #ifdef ALLOW_MNC
53 CHARACTER*(1) pf
54 #endif
55
56 #if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) )
57
58 IF ( DIFFERENT_MULTIPLE(diagFreq,myTime,deltaTClock)
59 & ) THEN
60
61 IF ( GM_MDSIO ) THEN
62 WRITE(suff,'(I10.10)') myIter
63 #ifdef GM_NON_UNITY_DIAGONAL
64 CALL WRITE_FLD_XYZ_RL( 'GM_Kux.',suff,Kux,myIter,myThid)
65 CALL WRITE_FLD_XYZ_RL( 'GM_Kvy.',suff,Kvy,myIter,myThid)
66 #endif
67 #ifdef GM_EXTRA_DIAGONAL
68 IF (GM_ExtraDiag) THEN
69 CALL WRITE_FLD_XYZ_RL( 'GM_Kuz.',suff,Kuz,myIter,myThid)
70 CALL WRITE_FLD_XYZ_RL( 'GM_Kvz.',suff,Kvz,myIter,myThid)
71 ENDIF
72 #endif
73 ENDIF
74
75 #ifdef ALLOW_MNC
76 IF ( GM_MNC ) THEN
77 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
78 pf(1:1) = 'D'
79 ELSE
80 pf(1:1) = 'R'
81 ENDIF
82 CALL MNC_CW_SET_UDIM('gm_inst', -1, myThid)
83 CALL MNC_CW_RL_W_S('D','gm_inst',0,0,'T',myTime,myThid)
84 CALL MNC_CW_SET_UDIM('gm_inst', 0, myThid)
85 CALL MNC_CW_I_W_S('I','gm_inst',0,0,'iter',myIter,myThid)
86 #ifdef GM_NON_UNITY_DIAGONAL
87 CALL MNC_CW_RL_W(pf,'gm_inst',0,0,'Kux',Kux,myThid)
88 CALL MNC_CW_RL_W(pf,'gm_inst',0,0,'Kvy',Kvy,myThid)
89 #endif
90 #ifdef GM_EXTRA_DIAGONAL
91 IF (GM_ExtraDiag) THEN
92 CALL MNC_CW_RL_W(pf,'gm_inst',0,0,'Kuz',Kuz,myThid)
93 CALL MNC_CW_RL_W(pf,'gm_inst',0,0,'Kvz',Kvz,myThid)
94 ENDIF
95 #endif
96 ENDIF
97 #endif
98
99 ENDIF
100
101 #endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */
102
103
104 #ifdef ALLOW_TIMEAVE
105 C Dump files and restart average computation if needed
106 IF ( DIFFERENT_MULTIPLE( taveFreq, myTime, deltaTClock )
107 & ) THEN
108
109 C Normalize by integrated time
110 DO bj = myByLo(myThid), myByHi(myThid)
111 DO bi = myBxLo(myThid), myBxHi(myThid)
112 CALL TIMEAVE_NORMALIZE( GM_Kwx_T, GM_timeAve,
113 & Nr, bi, bj, myThid )
114 CALL TIMEAVE_NORMALIZE( GM_Kwy_T, GM_timeAve,
115 & Nr, bi, bj, myThid )
116 CALL TIMEAVE_NORMALIZE( GM_Kwz_T, GM_timeAve,
117 & Nr, bi, bj, myThid )
118 #ifdef GM_VISBECK_VARIABLE_K
119 IF (GM_Visbeck_alpha.NE.0.)
120 & CALL TIMEAVE_NORMALIZE( Visbeck_K_T, GM_timeAve,
121 & 1 , bi, bj, myThid )
122 #endif
123 #ifdef GM_BOLUS_ADVEC
124 IF (GM_AdvForm) THEN
125 CALL TIMEAVE_NORMALIZE( GM_PsiXtave, GM_timeAve,
126 & Nr, bi, bj, myThid )
127 CALL TIMEAVE_NORMALIZE( GM_PsiYtave, GM_timeAve,
128 & Nr, bi, bj, myThid )
129 ENDIF
130 #endif
131 ENDDO
132 ENDDO
133
134 IF ( GM_MDSIO ) THEN
135 WRITE(suff,'(I10.10)') myIter
136 CALL WRITE_FLD_XYZ_RL('GM_Kwx-T.',suff,GM_Kwx_T,myIter,myThid)
137 CALL WRITE_FLD_XYZ_RL('GM_Kwy-T.',suff,GM_Kwy_T,myIter,myThid)
138 CALL WRITE_FLD_XYZ_RL('GM_Kwz-T.',suff,GM_Kwz_T,myIter,myThid)
139 #ifdef GM_VISBECK_VARIABLE_K
140 IF (GM_Visbeck_alpha.NE.0.)
141 & CALL WRITE_FLD_XY_RL('Visbeck_K-T.',suff,Visbeck_K_T,
142 & myIter,myThid)
143 #endif
144 #ifdef GM_BOLUS_ADVEC
145 IF (GM_AdvForm) THEN
146 CALL WRITE_FLD_XYZ_RL('GM_PsiXtave.',suff,GM_PsiXtave,
147 & myIter,myThid)
148 CALL WRITE_FLD_XYZ_RL('GM_PsiYtave.',suff,GM_PsiYtave,
149 & myIter,myThid)
150 ENDIF
151 #endif
152 ENDIF
153
154 #ifdef ALLOW_MNC
155 IF ( GM_MNC ) THEN
156 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
157 pf(1:1) = 'D'
158 ELSE
159 pf(1:1) = 'R'
160 ENDIF
161 CALL MNC_CW_SET_UDIM('gm_tave', -1, myThid)
162 CALL MNC_CW_RL_W_S('D','gm_tave',0,0,'T',myTime,myThid)
163 CALL MNC_CW_SET_UDIM('gm_tave', 0, myThid)
164 CALL MNC_CW_I_W_S('I','gm_tave',0,0,'iter',myIter,myThid)
165 CALL MNC_CW_RL_W(pf,'gm_tave',0,0,'Kwx',GM_Kwx_T,myThid)
166 CALL MNC_CW_RL_W(pf,'gm_tave',0,0,'Kwy',GM_Kwy_T,myThid)
167 CALL MNC_CW_RL_W(pf,'gm_tave',0,0,'Kwz',GM_Kwz_T,myThid)
168 #ifdef GM_VISBECK_VARIABLE_K
169 IF (GM_Visbeck_alpha.NE.0.) THEN
170 CALL MNC_CW_RL_W(pf,'gm_tave',0,0,'VisbK',
171 & Visbeck_K_T, myThid)
172 ENDIF
173 #endif
174 #ifdef GM_BOLUS_ADVEC
175 IF (GM_AdvForm) THEN
176 CALL MNC_CW_RL_W(
177 & pf,'gm_tave',0,0,'PsiX', GM_PsiXtave, myThid)
178 CALL MNC_CW_RL_W(
179 & pf,'gm_tave',0,0,'PsiY', GM_PsiYtave, myThid)
180 ENDIF
181 #endif
182 ENDIF
183 #endif
184
185 C Reset averages to zero
186 DO bj = myByLo(myThid), myByHi(myThid)
187 DO bi = myBxLo(myThid), myBxHi(myThid)
188 CALL TIMEAVE_RESET( GM_Kwx_T, Nr, bi, bj, myThid )
189 CALL TIMEAVE_RESET( GM_Kwy_T, Nr, bi, bj, myThid )
190 CALL TIMEAVE_RESET( GM_Kwz_T, Nr, bi, bj, myThid )
191 #ifdef GM_VISBECK_VARIABLE_K
192 IF (GM_Visbeck_alpha.NE.0.)
193 & CALL TIMEAVE_RESET( Visbeck_K_T, 1, bi, bj, myThid )
194 #endif
195 #ifdef GM_BOLUS_ADVEC
196 IF (GM_AdvForm) THEN
197 CALL TIMEAVE_RESET( GM_PsiXtave, Nr, bi, bj, myThid )
198 CALL TIMEAVE_RESET( GM_PsiYtave, Nr, bi, bj, myThid )
199 ENDIF
200 #endif
201 GM_timeAve(bi,bj) = 0.
202 ENDDO
203 ENDDO
204
205 ENDIF
206 #endif /* ALLOW_TIMEAVE */
207
208 #endif /* ALLOW_GMREDI */
209
210 RETURN
211 END

  ViewVC Help
Powered by ViewVC 1.1.22