/[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.11 - (show annotations) (download)
Mon Nov 5 15:21:18 2007 UTC (16 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint62, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59k, checkpoint59j, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.10: +22 -41 lines
- replace call to MDSIO S/R with call to RW interface S/R.
- all threads call RW S/R (needed for useSingleCpuIO).

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

  ViewVC Help
Powered by ViewVC 1.1.22