/[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.7 - (show annotations) (download)
Thu Sep 29 12:19:52 2005 UTC (18 years, 7 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint57y_post, checkpoint57y_pre, checkpoint57v_post, checkpoint58, checkpoint57x_post, checkpoint57w_post, checkpint57u_post, checkpoint58a_post, checkpoint57z_post
Changes since 1.6: +37 -26 lines
 o make mnc honor the writeBinaryPrec flag for all the non-pickup and
   non-diagnostics output types

1 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_output.F,v 1.6 2005/08/24 23:23:34 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 #ifdef ALLOW_MNC
51 INTEGER i
52 CHARACTER*(MAX_LEN_MBUF) mncf
53 CHARACTER*(1) pf
54 #endif
55
56 #ifdef ALLOW_TIMEAVE
57
58 c set arrays to zero if first timestep
59 IF ( myIter .EQ. nIter0 ) THEN
60 DO bj = myByLo(myThid), myByHi(myThid)
61 DO bi = myBxLo(myThid), myBxHi(myThid)
62 CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi, bj, myThid)
63 CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi, bj, myThid)
64 CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi, bj, myThid)
65 CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi, bj, myThid)
66 CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi, bj, myThid)
67 CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi, bj, myThid)
68 CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi, bj, myThid)
69 CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi, bj, myThid)
70 CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi, bj, myThid)
71 CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi, bj, myThid)
72 CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi, bj, myThid)
73 CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi, bj, myThid)
74 CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi, bj, myThid)
75 CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
76 CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
77 ice_timeAve(1,bi,bj)=0.
78 ENDDO
79 ENDDO
80
81 C Dump files and restart average computation if needed
82 ELSEIF (
83 & DIFFERENT_MULTIPLE(thSIce_taveFreq,myTime,deltaTClock)
84 & ) THEN
85
86 C-- Normalize by integrated time
87 DO bj = myByLo(myThid), myByHi(myThid)
88 DO bi = myBxLo(myThid), myBxHi(myThid)
89 C- area weighted average (with ice-fraction)
90 CALL TIMEAVE_NORMA_2V( ice_iceH_Ave,
91 & ice_fract_Ave, 1, bi, bj, myThid )
92 CALL TIMEAVE_NORMA_2V( ice_snowH_Ave,
93 & ice_fract_Ave, 1, bi, bj, myThid )
94 CALL TIMEAVE_NORMA_2V( ice_Tsrf_Ave,
95 & ice_fract_Ave, 1, bi, bj, myThid )
96 CALL TIMEAVE_NORMA_2V( ice_Tice1_Ave,
97 & ice_fract_Ave, 1, bi, bj, myThid )
98 CALL TIMEAVE_NORMA_2V( ice_Tice2_Ave,
99 & ice_fract_Ave, 1, bi, bj, myThid )
100 CALL TIMEAVE_NORMA_2V( ice_snowPr_Ave,
101 & ice_fract_Ave, 1, bi, bj, myThid )
102 CALL TIMEAVE_NORMA_2V( ice_albedo_Ave,
103 & ice_fract_Ave, 1, bi, bj, myThid )
104
105 C- simple time average :
106 CALL TIMEAVE_NORMALIZ(ice_fract_Ave,ice_timeAve,1 ,
107 & bi,bj,myThid)
108 c CALL TIMEAVE_NORMALIZ(ice_iceH_Ave, ice_timeAve, 1 ,
109 c & bi,bj,myThid)
110 c CALL TIMEAVE_NORMALIZ(ice_snowH_Ave, ice_timeAve, 1 ,
111 c & bi,bj,myThid)
112 c CALL TIMEAVE_NORMALIZ(ice_Tsrf_Ave, ice_timeAve, 1 ,
113 c & bi,bj,myThid)
114 c CALL TIMEAVE_NORMALIZ(ice_Tice1_Ave, ice_timeAve, 1 ,
115 c & bi,bj,myThid)
116 c CALL TIMEAVE_NORMALIZ(ice_Tice2_Ave, ice_timeAve, 1 ,
117 c & bi,bj,myThid)
118 c CALL TIMEAVE_NORMALIZ(ice_snowPr_Ave, ice_timeAve, 1 ,
119 c & bi,bj,myThid)
120 CALL TIMEAVE_NORMALIZ(ice_flx2oc_Ave, ice_timeAve, 1 ,
121 & bi,bj,myThid)
122 CALL TIMEAVE_NORMALIZ(ice_frw2oc_Ave, ice_timeAve, 1 ,
123 & bi,bj,myThid)
124 CALL TIMEAVE_NORMALIZ(ice_salFx_Ave, ice_timeAve, 1 ,
125 & bi,bj,myThid)
126 IF ( fluidIsWater ) THEN
127 CALL TIMEAVE_NORMALIZ(ice_flxAtm_Ave,ice_timeAve, 1 ,
128 & bi,bj,myThid)
129 CALL TIMEAVE_NORMALIZ(ice_frwAtm_Ave,ice_timeAve, 1 ,
130 & bi,bj,myThid)
131 ENDIF
132 IF ( stepFwd_oceMxL ) THEN
133 CALL TIMEAVE_NORMALIZ(ice_tMxL_Ave, ice_timeAve, 1 ,
134 & bi,bj,myThid)
135 CALL TIMEAVE_NORMALIZ(ice_sMxL_Ave, ice_timeAve, 1 ,
136 & bi,bj,myThid)
137 ENDIF
138 ENDDO
139 ENDDO
140
141 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
142
143 C-- Write 1 file per time-average variable:
144 c WRITE(suff,'(I10.10)') myIter
145 c CALL WRITE_FLD_XY_RL('ICE_fract-T.', suff,
146 c & ice_fract_Ave, myIter,myThid)
147 c CALL WRITE_FLD_XY_RL('ICE_iceH-T.', suff,
148 c & ice_iceH_Ave, myIter,myThid)
149 c CALL WRITE_FLD_XY_RL('ICE_snowH-T.', suff,
150 c & ice_snowH_Ave, myIter,myThid)
151 c CALL WRITE_FLD_XY_RL('ICE_Tsrf-T.', suff,
152 c & ice_Tsrf_Ave, myIter,myThid)
153 c CALL WRITE_FLD_XY_RL('ICE_Tice1-T.', suff,
154 c & ice_Tice1_Ave, myIter,myThid)
155 c CALL WRITE_FLD_XY_RL('ICE_Tice2-T.', suff,
156 c & ice_Tice2_Ave, myIter,myThid)
157 c CALL WRITE_FLD_XY_RL('ICE_snowPr-T.', suff,
158 c & ice_snowPr_Ave, myIter,myThid)
159 c CALL WRITE_FLD_XY_RL('ICE_albedo-T.', suff,
160 c & ice_albedo_Ave, myIter,myThid)
161 c CALL WRITE_FLD_XY_RL('ICE_flx2oc-T.', suff,
162 c & ice_flx2oc_Ave, myIter,myThid)
163 c CALL WRITE_FLD_XY_RL('ICE_frw2oc-T.', suff,
164 c & ice_frw2oc_Ave, myIter,myThid)
165 c CALL WRITE_FLD_XY_RL('ICE_salFx-T.', suff,
166 c & ice_salFx_Ave, myIter,myThid)
167 c IF ( fluidIsWater ) THEN
168 c CALL WRITE_FLD_XY_RL('ICE_flxAtm-T.', suff,
169 c & ice_flxAtm_Ave, myIter,myThid)
170 c CALL WRITE_FLD_XY_RL('ICE_frwAtm-T.', suff,
171 c & ice_frwAtm_Ave, myIter,myThid)
172 c ENDIF
173 c IF ( stepFwd_oceMxL ) THEN
174 c CALL WRITE_FLD_XY_RL('ICE_tMxL-T.', suff,
175 c & ice_tMxL_Ave, myIter,myThid)
176 c CALL WRITE_FLD_XY_RL('ICE_sMxL-T.', suff,
177 c & ice_sMxL_Ave, myIter,myThid)
178 c ENDIF
179
180
181 C-- Write all time-average variables in 1 file :
182 _BARRIER
183 _BEGIN_MASTER( myThid )
184
185 IF ( thSIce_tave_mdsio ) THEN
186
187 C find wether we are writing globalFile or tile-files:
188 CALL GET_WRITE_GLOBAL_FLD( gf )
189
190 WRITE(fn,'(A,I10.10)') 'thSIce_tave.', myIter
191
192 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
193 & ice_fract_Ave, 1, myIter, myThid )
194 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
195 & ice_iceH_Ave, 2, myIter, myThid )
196 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
197 & ice_snowH_Ave, 3, myIter, myThid )
198 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
199 & ice_Tsrf_Ave, 4, myIter, myThid )
200 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
201 & ice_Tice1_Ave, 5, myIter, myThid )
202 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
203 & ice_Tice2_Ave, 6, myIter, myThid )
204 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
205 & ice_snowPr_Ave, 7, myIter, myThid )
206 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
207 & ice_albedo_Ave, 8, myIter, myThid )
208 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
209 & ice_flx2oc_Ave, 9, myIter, myThid )
210 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
211 & ice_frw2oc_Ave,10, myIter, myThid )
212 kl = 11
213 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
214 & ice_salFx_Ave, kl, myIter, myThid )
215 IF ( fluidIsWater ) THEN
216 kl = kl+1
217 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
218 & ice_flxAtm_Ave,kl, myIter, myThid )
219 kl = kl+1
220 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
221 & ice_frwAtm_Ave,kl, myIter, myThid )
222 ENDIF
223 IF ( stepFwd_oceMxL ) THEN
224 kl = kl+1
225 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
226 & ice_tMxL_Ave, kl, myIter, myThid )
227 kl = kl+1
228 CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
229 & ice_sMxL_Ave, kl, myIter, myThid )
230 ENDIF
231
232 ENDIF
233
234 #ifdef ALLOW_MNC
235 IF ( useMNC .AND. thSIce_tave_mnc ) THEN
236 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
237 pf(1:1) = 'D'
238 ELSE
239 pf(1:1) = 'R'
240 ENDIF
241 DO i = 1,MAX_LEN_MBUF
242 mncf(i:i) = ' '
243 ENDDO
244 C C 123456789 1
245 mncf(1:11) = 'thsice_tave'
246 CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
247 CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
248 CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
249 CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
250 CALL MNC_CW_RL_W(pf,mncf,0,0,
251 & 'fract_ave', ice_fract_Ave, myThid)
252 CALL MNC_CW_RL_W(pf,mncf,0,0,
253 & 'iceH_ave', ice_iceH_Ave, myThid)
254 CALL MNC_CW_RL_W(pf,mncf,0,0,
255 & 'snowH_ave', ice_snowH_Ave, myThid)
256 CALL MNC_CW_RL_W(pf,mncf,0,0,
257 & 'Tsrf_ave', ice_Tsrf_Ave, myThid)
258 CALL MNC_CW_RL_W(pf,mncf,0,0,
259 & 'Tice1_ave', ice_Tice1_Ave, myThid)
260 CALL MNC_CW_RL_W(pf,mncf,0,0,
261 & 'Tice2_ave', ice_Tice2_Ave, myThid)
262 CALL MNC_CW_RL_W(pf,mncf,0,0,
263 & 'snowPr_ave',ice_snowPr_Ave,myThid)
264 CALL MNC_CW_RL_W(pf,mncf,0,0,
265 & 'albedo_ave',ice_albedo_Ave,myThid)
266 CALL MNC_CW_RL_W(pf,mncf,0,0,
267 & 'flx2oc_ave',ice_flx2oc_Ave,myThid)
268 CALL MNC_CW_RL_W(pf,mncf,0,0,
269 & 'frw2oc_ave',ice_frw2oc_Ave,myThid)
270 IF ( fluidIsWater ) THEN
271 CALL MNC_CW_RL_W(pf,mncf,0,0,
272 & 'flxAtm_ave',ice_flxAtm_Ave,myThid)
273 CALL MNC_CW_RL_W(pf,mncf,0,0,
274 & 'frwAtm_ave',ice_frwAtm_Ave,myThid)
275 ENDIF
276 IF ( stepFwd_oceMxL ) THEN
277 CALL MNC_CW_RL_W(pf,mncf,0,0,'tMxL_ave',ice_tMxL_Ave,myThid)
278 CALL MNC_CW_RL_W(pf,mncf,0,0,'sMxL_ave',ice_sMxL_Ave,myThid)
279 ENDIF
280 ENDIF
281 #endif
282
283 _END_MASTER( myThid )
284 _BARRIER
285
286 C-- Reset averages to zero
287 DO bj = myByLo(myThid), myByHi(myThid)
288 DO bi = myBxLo(myThid), myBxHi(myThid)
289 CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi,bj, myThid)
290 CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi,bj, myThid)
291 CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi,bj, myThid)
292 CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi,bj, myThid)
293 CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi,bj, myThid)
294 CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi,bj, myThid)
295 CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi,bj, myThid)
296 CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi,bj, myThid)
297 CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi,bj, myThid)
298 CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi,bj, myThid)
299 CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi,bj, myThid)
300 CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi,bj, myThid)
301 CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi,bj, myThid)
302 CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
303 CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
304 ice_timeAve(1,bi,bj) = 0.
305 ENDDO
306 ENDDO
307
308 ENDIF
309
310 #endif /* ALLOW_TIMEAVE */
311
312 C Dump a snap-shot of main state variables:
313 IF (
314 & DIFFERENT_MULTIPLE( thSIce_diagFreq, myTime, deltaTClock )
315 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
316 & myTime.EQ.startTime )
317 & ) THEN
318
319 IF ( thSIce_snapshot_mdsio ) THEN
320
321 WRITE(suff,'(I10.10)') myIter
322
323 CALL WRITE_FLD_XY_RL('ice_fract.', suff,iceMask,
324 & myIter,myThid)
325 CALL WRITE_FLD_XY_RL('ice_iceH.', suff,iceheight,
326 & myIter,myThid)
327 CALL WRITE_FLD_XY_RL('ice_snowH.', suff,snowheight,
328 & myIter,myThid)
329 CALL WRITE_FLD_XY_RL('ice_Tsrf.', suff,Tsrf,
330 & myIter,myThid)
331 CALL WRITE_FLD_XY_RL('ice_Tice1.', suff,Tice1,
332 & myIter,myThid)
333 CALL WRITE_FLD_XY_RL('ice_Tice2.', suff,Tice2,
334 & myIter,myThid)
335 CALL WRITE_FLD_XY_RL('ice_Qice1.', suff,Qice1,
336 & myIter,myThid)
337 CALL WRITE_FLD_XY_RL('ice_Qice2.', suff,Qice2,
338 & myIter,myThid)
339 CALL WRITE_FLD_XY_RL('ice_snowPrc.',suff,snowPrc,
340 & myIter,myThid)
341 CALL WRITE_FLD_XY_RL('ice_snowAge.',suff,snowAge,
342 & myIter,myThid)
343 IF ( stepFwd_oceMxL ) THEN
344 CALL WRITE_FLD_XY_RL('ice_tOceMxL.', suff, tOceMxL,
345 & myIter,myThid)
346 CALL WRITE_FLD_XY_RL('ice_sOceMxL.', suff, sOceMxL,
347 & myIter,myThid)
348 ENDIF
349
350 ENDIF
351
352 #ifdef ALLOW_MNC
353 IF ( thSIce_snapshot_mnc ) THEN
354 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
355 pf(1:1) = 'D'
356 ELSE
357 pf(1:1) = 'R'
358 ENDIF
359 DO i = 1,MAX_LEN_MBUF
360 mncf(i:i) = ' '
361 ENDDO
362 C C 123456789 12345
363 mncf(1:15) = 'thsice_snapshot'
364 CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
365 CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
366 CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
367 CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
368 CALL MNC_CW_RL_W(pf,mncf,0,0,'iceMask', iceMask, myThid)
369 CALL MNC_CW_RL_W(pf,mncf,0,0,'iceHeight', iceHeight, myThid)
370 CALL MNC_CW_RL_W(pf,mncf,0,0,'snowHeight',snowHeight,myThid)
371 CALL MNC_CW_RL_W(pf,mncf,0,0,'Tsrf', Tsrf, myThid)
372 CALL MNC_CW_RL_W(pf,mncf,0,0,'Tice1', Tice1, myThid)
373 CALL MNC_CW_RL_W(pf,mncf,0,0,'Tice2', Tice1, myThid)
374 CALL MNC_CW_RL_W(pf,mncf,0,0,'Qice1', Qice1, myThid)
375 CALL MNC_CW_RL_W(pf,mncf,0,0,'Qice2', Qice2, myThid)
376 CALL MNC_CW_RL_W(pf,mncf,0,0,'snowAge', snowAge, myThid)
377 IF ( stepFwd_oceMxL ) THEN
378 CALL MNC_CW_RL_W(pf,mncf,0,0,'tOceMxL',tOceMxL,myThid)
379 CALL MNC_CW_RL_W(pf,mncf,0,0,'sOceMxL',sOceMxL,myThid)
380 ENDIF
381 ENDIF
382 #endif /* ALLOW_MNC */
383
384
385 ENDIF
386
387 IF ( thSIce_monFreq.GT. 0. _d 0 )
388 & CALL THSICE_MONITOR( myTime, myIter, myThid )
389
390 #endif /* ALLOW_THSICE */
391
392 RETURN
393 END

  ViewVC Help
Powered by ViewVC 1.1.22