/[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.13 - (show annotations) (download)
Sun Jan 3 21:09:28 2010 UTC (14 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint63, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.12: +12 -7 lines
avoid unused variables

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

  ViewVC Help
Powered by ViewVC 1.1.22