/[MITgcm]/MITgcm/pkg/thsice/thsice_output.F
ViewVC logotype

Contents of /MITgcm/pkg/thsice/thsice_output.F

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


Revision 1.1 - (show annotations) (download)
Tue Jan 4 00:23:58 2005 UTC (19 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57d_post, checkpoint57c_pre, checkpoint57e_post, checkpoint57f_pre, eckpoint57e_pre, checkpoint57c_post
rename thsice_diags.F -> thsice_output.F (like ptracers_output.F) to
 be less confusing with diagnostics pkg stuff.

1 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_diags.F,v 1.7 2004/11/11 01:29:48 jmc Exp $
2 C $Name: $
3
4 #include "THSICE_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: THSICE_OUTPUT
8 C !INTERFACE:
9 SUBROUTINE THSICE_OUTPUT( myTime, myIter, myThid )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | S/R THSICE_OUTPUT
14 C | o general routine for ThSIce output
15 C *==========================================================*
16 C | - write time-average & snap-shot output
17 C | - call monitor to write global quantities
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 "THSICE_PARAMS.h"
29 #include "THSICE_VARS.h"
30 #include "THSICE_TAVE.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C == Routine arguments ==
34 C myTime :: Current time of simulation ( s )
35 C myIter :: Iteration number
36 C myThid :: my Thread Id number
37 _RL myTime
38 INTEGER myIter
39 INTEGER myThid
40 CEOP
41
42 #ifdef ALLOW_THSICE
43
44 C == Local variables ==
45 LOGICAL DIFFERENT_MULTIPLE
46 EXTERNAL DIFFERENT_MULTIPLE
47 INTEGER bi, bj, kl
48 CHARACTER*(MAX_LEN_MBUF) suff, fn
49 LOGICAL gf
50
51 #ifdef ALLOW_TIMEAVE
52
53 c set arrays to zero if first timestep
54 IF ( myIter .EQ. nIter0 ) THEN
55 DO bj = myByLo(myThid), myByHi(myThid)
56 DO bi = myBxLo(myThid), myBxHi(myThid)
57 CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi, bj, myThid)
58 CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi, bj, myThid)
59 CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi, bj, myThid)
60 CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi, bj, myThid)
61 CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi, bj, myThid)
62 CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi, bj, myThid)
63 CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi, bj, myThid)
64 CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi, bj, myThid)
65 CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi, bj, myThid)
66 CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi, bj, myThid)
67 CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi, bj, myThid)
68 CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi, bj, myThid)
69 CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi, bj, myThid)
70 CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
71 CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
72 ice_timeAve(1,bi,bj)=0.
73 ENDDO
74 ENDDO
75
76 C Dump files and restart average computation if needed
77 ELSEIF (
78 & DIFFERENT_MULTIPLE(thSIce_taveFreq,myTime,myTime-deltaTClock)
79 & ) THEN
80
81 C-- Normalize by integrated time
82 DO bj = myByLo(myThid), myByHi(myThid)
83 DO bi = myBxLo(myThid), myBxHi(myThid)
84 C- area weighted average (with ice-fraction)
85 CALL TIMEAVE_NORMA_2V( ice_iceH_Ave,
86 & ice_fract_Ave, 1, bi, bj, myThid )
87 CALL TIMEAVE_NORMA_2V( ice_snowH_Ave,
88 & ice_fract_Ave, 1, bi, bj, myThid )
89 CALL TIMEAVE_NORMA_2V( ice_Tsrf_Ave,
90 & ice_fract_Ave, 1, bi, bj, myThid )
91 CALL TIMEAVE_NORMA_2V( ice_Tice1_Ave,
92 & ice_fract_Ave, 1, bi, bj, myThid )
93 CALL TIMEAVE_NORMA_2V( ice_Tice2_Ave,
94 & ice_fract_Ave, 1, bi, bj, myThid )
95 CALL TIMEAVE_NORMA_2V( ice_snowPr_Ave,
96 & ice_fract_Ave, 1, bi, bj, myThid )
97 CALL TIMEAVE_NORMA_2V( ice_albedo_Ave,
98 & ice_fract_Ave, 1, bi, bj, myThid )
99
100 C- simple time average :
101 CALL TIMEAVE_NORMALIZ(ice_fract_Ave,ice_timeAve,1 ,
102 & bi,bj,myThid)
103 c CALL TIMEAVE_NORMALIZ(ice_iceH_Ave, ice_timeAve, 1 ,
104 c & bi,bj,myThid)
105 c CALL TIMEAVE_NORMALIZ(ice_snowH_Ave, ice_timeAve, 1 ,
106 c & bi,bj,myThid)
107 c CALL TIMEAVE_NORMALIZ(ice_Tsrf_Ave, ice_timeAve, 1 ,
108 c & bi,bj,myThid)
109 c CALL TIMEAVE_NORMALIZ(ice_Tice1_Ave, ice_timeAve, 1 ,
110 c & bi,bj,myThid)
111 c CALL TIMEAVE_NORMALIZ(ice_Tice2_Ave, ice_timeAve, 1 ,
112 c & bi,bj,myThid)
113 c CALL TIMEAVE_NORMALIZ(ice_snowPr_Ave, ice_timeAve, 1 ,
114 c & bi,bj,myThid)
115 CALL TIMEAVE_NORMALIZ(ice_flx2oc_Ave, ice_timeAve, 1 ,
116 & bi,bj,myThid)
117 CALL TIMEAVE_NORMALIZ(ice_frw2oc_Ave, ice_timeAve, 1 ,
118 & bi,bj,myThid)
119 CALL TIMEAVE_NORMALIZ(ice_salFx_Ave, ice_timeAve, 1 ,
120 & bi,bj,myThid)
121 IF ( fluidIsWater ) THEN
122 CALL TIMEAVE_NORMALIZ(ice_flxAtm_Ave,ice_timeAve, 1 ,
123 & bi,bj,myThid)
124 CALL TIMEAVE_NORMALIZ(ice_frwAtm_Ave,ice_timeAve, 1 ,
125 & bi,bj,myThid)
126 ENDIF
127 IF ( stepFwd_oceMxL ) THEN
128 CALL TIMEAVE_NORMALIZ(ice_tMxL_Ave, ice_timeAve, 1 ,
129 & bi,bj,myThid)
130 CALL TIMEAVE_NORMALIZ(ice_sMxL_Ave, ice_timeAve, 1 ,
131 & bi,bj,myThid)
132 ENDIF
133 ENDDO
134 ENDDO
135
136 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
137
138 C-- Write 1 file per time-average variable:
139 c WRITE(suff,'(I10.10)') myIter
140 c CALL WRITE_FLD_XY_RL('ICE_fract-T.', suff,
141 c & ice_fract_Ave, myIter,myThid)
142 c CALL WRITE_FLD_XY_RL('ICE_iceH-T.', suff,
143 c & ice_iceH_Ave, myIter,myThid)
144 c CALL WRITE_FLD_XY_RL('ICE_snowH-T.', suff,
145 c & ice_snowH_Ave, myIter,myThid)
146 c CALL WRITE_FLD_XY_RL('ICE_Tsrf-T.', suff,
147 c & ice_Tsrf_Ave, myIter,myThid)
148 c CALL WRITE_FLD_XY_RL('ICE_Tice1-T.', suff,
149 c & ice_Tice1_Ave, myIter,myThid)
150 c CALL WRITE_FLD_XY_RL('ICE_Tice2-T.', suff,
151 c & ice_Tice2_Ave, myIter,myThid)
152 c CALL WRITE_FLD_XY_RL('ICE_snowPr-T.', suff,
153 c & ice_snowPr_Ave, myIter,myThid)
154 c CALL WRITE_FLD_XY_RL('ICE_albedo-T.', suff,
155 c & ice_albedo_Ave, myIter,myThid)
156 c CALL WRITE_FLD_XY_RL('ICE_flx2oc-T.', suff,
157 c & ice_flx2oc_Ave, myIter,myThid)
158 c CALL WRITE_FLD_XY_RL('ICE_frw2oc-T.', suff,
159 c & ice_frw2oc_Ave, myIter,myThid)
160 c CALL WRITE_FLD_XY_RL('ICE_salFx-T.', suff,
161 c & ice_salFx_Ave, myIter,myThid)
162 c IF ( fluidIsWater ) THEN
163 c CALL WRITE_FLD_XY_RL('ICE_flxAtm-T.', suff,
164 c & ice_flxAtm_Ave, myIter,myThid)
165 c CALL WRITE_FLD_XY_RL('ICE_frwAtm-T.', suff,
166 c & ice_frwAtm_Ave, myIter,myThid)
167 c ENDIF
168 c IF ( stepFwd_oceMxL ) THEN
169 c CALL WRITE_FLD_XY_RL('ICE_tMxL-T.', suff,
170 c & ice_tMxL_Ave, myIter,myThid)
171 c CALL WRITE_FLD_XY_RL('ICE_sMxL-T.', suff,
172 c & ice_sMxL_Ave, myIter,myThid)
173 c ENDIF
174
175
176 C-- Write all time-average variables in 1 file :
177 _BARRIER
178 _BEGIN_MASTER( myThid )
179
180 C- find wether we are writing globalFile or tile-files:
181 CALL GET_WRITE_GLOBAL_FLD( gf )
182
183 WRITE(fn,'(A,I10.10)') 'thSIce_tave.', myIter
184
185 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
186 & ice_fract_Ave, 1, myIter, myThid )
187 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
188 & ice_iceH_Ave, 2, myIter, myThid )
189 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
190 & ice_snowH_Ave, 3, myIter, myThid )
191 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
192 & ice_Tsrf_Ave, 4, myIter, myThid )
193 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
194 & ice_Tice1_Ave, 5, myIter, myThid )
195 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
196 & ice_Tice2_Ave, 6, myIter, myThid )
197 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
198 & ice_snowPr_Ave, 7, myIter, myThid )
199 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
200 & ice_albedo_Ave, 8, myIter, myThid )
201 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
202 & ice_flx2oc_Ave, 9, myIter, myThid )
203 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
204 & ice_frw2oc_Ave,10, myIter, myThid )
205 kl = 11
206 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
207 & ice_salFx_Ave, kl, myIter, myThid )
208 IF ( fluidIsWater ) THEN
209 kl = kl+1
210 CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL', 1,
211 & ice_flxAtm_Ave,kl, myIter, myThid )
212 kl = kl+1
213 CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL', 1,
214 & ice_frwAtm_Ave,kl, myIter, myThid )
215 ENDIF
216 IF ( stepFwd_oceMxL ) THEN
217 kl = kl+1
218 CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL', 1,
219 & ice_tMxL_Ave, kl, myIter, myThid )
220 kl = kl+1
221 CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL', 1,
222 & ice_sMxL_Ave, kl, myIter, myThid )
223 ENDIF
224
225 _END_MASTER( myThid )
226 _BARRIER
227
228 C-- Reset averages to zero
229 DO bj = myByLo(myThid), myByHi(myThid)
230 DO bi = myBxLo(myThid), myBxHi(myThid)
231 CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi,bj, myThid)
232 CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi,bj, myThid)
233 CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi,bj, myThid)
234 CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi,bj, myThid)
235 CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi,bj, myThid)
236 CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi,bj, myThid)
237 CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi,bj, myThid)
238 CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi,bj, myThid)
239 CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi,bj, myThid)
240 CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi,bj, myThid)
241 CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi,bj, myThid)
242 CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi,bj, myThid)
243 CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi,bj, myThid)
244 CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
245 CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
246 ice_timeAve(1,bi,bj) = 0.
247 ENDDO
248 ENDDO
249
250 ENDIF
251
252 #endif /* ALLOW_TIMEAVE */
253
254 C Dump a snap-shot of main state variables:
255 IF ( DIFFERENT_MULTIPLE(thSIce_diagFreq,myTime,myTime-deltaTClock)
256 & .OR. myTime.EQ.startTime
257 & .OR. myTime.EQ.endTime ) THEN
258
259 WRITE(suff,'(I10.10)') myIter
260
261 CALL WRITE_FLD_XY_RL('ice_fract.', suff,iceMask,
262 & myIter,myThid)
263 CALL WRITE_FLD_XY_RL('ice_iceH.', suff,iceheight,
264 & myIter,myThid)
265 CALL WRITE_FLD_XY_RL('ice_snowH.', suff,snowheight,
266 & myIter,myThid)
267 CALL WRITE_FLD_XY_RL('ice_Tsrf.', suff,Tsrf,
268 & myIter,myThid)
269 CALL WRITE_FLD_XY_RL('ice_Tice1.', suff,Tice1,
270 & myIter,myThid)
271 CALL WRITE_FLD_XY_RL('ice_Tice2.', suff,Tice2,
272 & myIter,myThid)
273 CALL WRITE_FLD_XY_RL('ice_Qice1.', suff,Qice1,
274 & myIter,myThid)
275 CALL WRITE_FLD_XY_RL('ice_Qice2.', suff,Qice2,
276 & myIter,myThid)
277 CALL WRITE_FLD_XY_RL('ice_snowPrc.',suff,snowPrc,
278 & myIter,myThid)
279 CALL WRITE_FLD_XY_RL('ice_snowAge.',suff,snowAge,
280 & myIter,myThid)
281 IF ( stepFwd_oceMxL ) THEN
282 CALL WRITE_FLD_XY_RL('ice_tOceMxL.', suff, tOceMxL,
283 & myIter,myThid)
284 CALL WRITE_FLD_XY_RL('ice_sOceMxL.', suff, sOceMxL,
285 & myIter,myThid)
286 ENDIF
287
288 ENDIF
289
290 IF ( thSIce_monFreq.GT. 0. _d 0 )
291 & CALL THSICE_MONITOR( myTime, myIter, myThid )
292
293 #endif /* ALLOW_THSICE */
294
295 RETURN
296 END

  ViewVC Help
Powered by ViewVC 1.1.22