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

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

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


Revision 1.5 - (hide annotations) (download)
Thu Aug 11 21:08:17 2005 UTC (18 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57q_post
Changes since 1.4: +32 -22 lines
fix mnc filename (timeave output) and use the right #ifdef ALLOW_MNC

1 jmc 1.5 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_output.F,v 1.4 2005/06/24 04:36:54 edhill Exp $
2 jmc 1.1 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 jmc 1.3 LOGICAL DIFFERENT_MULTIPLE
46     EXTERNAL DIFFERENT_MULTIPLE
47 jmc 1.1 INTEGER bi, bj, kl
48     CHARACTER*(MAX_LEN_MBUF) suff, fn
49     LOGICAL gf
50 jmc 1.5 #ifdef ALLOW_MNC
51 edhill 1.4 INTEGER i
52     CHARACTER*(MAX_LEN_MBUF) mncf
53     #endif
54 jmc 1.1
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 jmc 1.3 & DIFFERENT_MULTIPLE(thSIce_taveFreq,myTime,deltaTClock)
83 jmc 1.1 & ) 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     _BEGIN_MASTER( myThid )
183    
184 edhill 1.4 IF ( thSIce_tave_mdsio ) THEN
185    
186     C find wether we are writing globalFile or tile-files:
187     CALL GET_WRITE_GLOBAL_FLD( gf )
188 jmc 1.1
189 edhill 1.4 WRITE(fn,'(A,I10.10)') 'thSIce_tave.', myIter
190    
191     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
192     & ice_fract_Ave, 1, myIter, myThid )
193     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
194     & ice_iceH_Ave, 2, myIter, myThid )
195     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
196     & ice_snowH_Ave, 3, myIter, myThid )
197     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
198     & ice_Tsrf_Ave, 4, myIter, myThid )
199     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
200     & ice_Tice1_Ave, 5, myIter, myThid )
201     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
202     & ice_Tice2_Ave, 6, myIter, myThid )
203     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
204     & ice_snowPr_Ave, 7, myIter, myThid )
205     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
206     & ice_albedo_Ave, 8, myIter, myThid )
207     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
208     & ice_flx2oc_Ave, 9, myIter, myThid )
209     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
210     & ice_frw2oc_Ave,10, myIter, myThid )
211     kl = 11
212     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
213     & ice_salFx_Ave, kl, myIter, myThid )
214     IF ( fluidIsWater ) THEN
215     kl = kl+1
216     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
217     & ice_flxAtm_Ave,kl, myIter, myThid )
218     kl = kl+1
219     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
220     & ice_frwAtm_Ave,kl, myIter, myThid )
221     ENDIF
222     IF ( stepFwd_oceMxL ) THEN
223     kl = kl+1
224     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
225     & ice_tMxL_Ave, kl, myIter, myThid )
226     kl = kl+1
227     CALL MDSWRITEFIELD( fn, writeBinaryPrec, gf, 'RL', 1,
228     & ice_sMxL_Ave, kl, myIter, myThid )
229     ENDIF
230 jmc 1.1
231     ENDIF
232 edhill 1.4
233     #ifdef ALLOW_MNC
234     IF ( useMNC .AND. thSIce_tave_mnc ) THEN
235     DO i = 1,MAX_LEN_MBUF
236     mncf(i:i) = ' '
237     ENDDO
238     C C 123456789 1
239     mncf(1:11) = 'thsice_tave'
240 jmc 1.5 CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
241     CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
242     CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
243     CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
244     CALL MNC_CW_RL_W('D',mncf,0,0,
245     & 'fract_ave', ice_fract_Ave, myThid)
246     CALL MNC_CW_RL_W('D',mncf,0,0,
247     & 'iceH_ave', ice_iceH_Ave, myThid)
248     CALL MNC_CW_RL_W('D',mncf,0,0,
249     & 'snowH_ave', ice_snowH_Ave, myThid)
250     CALL MNC_CW_RL_W('D',mncf,0,0,
251     & 'Tsrf_ave', ice_Tsrf_Ave, myThid)
252     CALL MNC_CW_RL_W('D',mncf,0,0,
253     & 'Tice1_ave', ice_Tice1_Ave, myThid)
254     CALL MNC_CW_RL_W('D',mncf,0,0,
255     & 'Tice2_ave', ice_Tice2_Ave, myThid)
256     CALL MNC_CW_RL_W('D',mncf,0,0,
257     & 'snowPr_ave',ice_snowPr_Ave,myThid)
258     CALL MNC_CW_RL_W('D',mncf,0,0,
259     & 'albedo_ave',ice_albedo_Ave,myThid)
260     CALL MNC_CW_RL_W('D',mncf,0,0,
261     & 'flx2oc_ave',ice_flx2oc_Ave,myThid)
262     CALL MNC_CW_RL_W('D',mncf,0,0,
263     & 'frw2oc_ave',ice_frw2oc_Ave,myThid)
264 edhill 1.4 IF ( fluidIsWater ) THEN
265 jmc 1.5 CALL MNC_CW_RL_W('D',mncf,0,0,
266     & 'flxAtm_ave',ice_flxAtm_Ave,myThid)
267     CALL MNC_CW_RL_W('D',mncf,0,0,
268     & 'frwAtm_ave',ice_frwAtm_Ave,myThid)
269 edhill 1.4 ENDIF
270     IF ( stepFwd_oceMxL ) THEN
271 jmc 1.5 CALL MNC_CW_RL_W('D',mncf,0,0,'tMxL_ave',ice_tMxL_Ave,myThid)
272     CALL MNC_CW_RL_W('D',mncf,0,0,'sMxL_ave',ice_sMxL_Ave,myThid)
273 edhill 1.4 ENDIF
274 jmc 1.1 ENDIF
275 edhill 1.4 #endif
276 jmc 1.1
277     _END_MASTER( myThid )
278     _BARRIER
279    
280     C-- Reset averages to zero
281     DO bj = myByLo(myThid), myByHi(myThid)
282     DO bi = myBxLo(myThid), myBxHi(myThid)
283     CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi,bj, myThid)
284     CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi,bj, myThid)
285     CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi,bj, myThid)
286     CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi,bj, myThid)
287     CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi,bj, myThid)
288     CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi,bj, myThid)
289     CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi,bj, myThid)
290     CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi,bj, myThid)
291     CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi,bj, myThid)
292     CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi,bj, myThid)
293     CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi,bj, myThid)
294     CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi,bj, myThid)
295     CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi,bj, myThid)
296     CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
297     CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
298     ice_timeAve(1,bi,bj) = 0.
299     ENDDO
300     ENDDO
301    
302     ENDIF
303    
304     #endif /* ALLOW_TIMEAVE */
305    
306     C Dump a snap-shot of main state variables:
307 jmc 1.2 IF (
308 jmc 1.3 & DIFFERENT_MULTIPLE(thSIce_diagFreq,myTime,deltaTClock)
309 jmc 1.1 & .OR. myTime.EQ.startTime
310     & .OR. myTime.EQ.endTime ) THEN
311    
312 edhill 1.4 IF ( thSIce_snapshot_mdsio ) THEN
313    
314     WRITE(suff,'(I10.10)') myIter
315    
316     CALL WRITE_FLD_XY_RL('ice_fract.', suff,iceMask,
317     & myIter,myThid)
318     CALL WRITE_FLD_XY_RL('ice_iceH.', suff,iceheight,
319     & myIter,myThid)
320     CALL WRITE_FLD_XY_RL('ice_snowH.', suff,snowheight,
321     & myIter,myThid)
322     CALL WRITE_FLD_XY_RL('ice_Tsrf.', suff,Tsrf,
323     & myIter,myThid)
324     CALL WRITE_FLD_XY_RL('ice_Tice1.', suff,Tice1,
325     & myIter,myThid)
326     CALL WRITE_FLD_XY_RL('ice_Tice2.', suff,Tice2,
327     & myIter,myThid)
328     CALL WRITE_FLD_XY_RL('ice_Qice1.', suff,Qice1,
329     & myIter,myThid)
330     CALL WRITE_FLD_XY_RL('ice_Qice2.', suff,Qice2,
331     & myIter,myThid)
332     CALL WRITE_FLD_XY_RL('ice_snowPrc.',suff,snowPrc,
333     & myIter,myThid)
334     CALL WRITE_FLD_XY_RL('ice_snowAge.',suff,snowAge,
335     & myIter,myThid)
336     IF ( stepFwd_oceMxL ) THEN
337     CALL WRITE_FLD_XY_RL('ice_tOceMxL.', suff, tOceMxL,
338     & myIter,myThid)
339     CALL WRITE_FLD_XY_RL('ice_sOceMxL.', suff, sOceMxL,
340     & myIter,myThid)
341     ENDIF
342    
343     ENDIF
344    
345     #ifdef ALLOW_MNC
346     IF ( thSIce_snapshot_mnc ) THEN
347     DO i = 1,MAX_LEN_MBUF
348     mncf(i:i) = ' '
349     ENDDO
350     C C 123456789 12345
351     mncf(1:15) = 'thsice_snapshot'
352     CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
353     CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
354     CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
355     CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
356     CALL MNC_CW_RL_W('D',mncf,0,0,'iceMask', iceMask, myThid)
357     CALL MNC_CW_RL_W('D',mncf,0,0,'iceHeight', iceHeight, myThid)
358     CALL MNC_CW_RL_W('D',mncf,0,0,'snowHeight',snowHeight,myThid)
359     CALL MNC_CW_RL_W('D',mncf,0,0,'Tsrf', Tsrf, myThid)
360     CALL MNC_CW_RL_W('D',mncf,0,0,'Tice1', Tice1, myThid)
361     CALL MNC_CW_RL_W('D',mncf,0,0,'Tice2', Tice1, myThid)
362     CALL MNC_CW_RL_W('D',mncf,0,0,'Qice1', Qice1, myThid)
363     CALL MNC_CW_RL_W('D',mncf,0,0,'Qice2', Qice2, myThid)
364     CALL MNC_CW_RL_W('D',mncf,0,0,'snowAge', snowAge, myThid)
365     IF ( stepFwd_oceMxL ) THEN
366     CALL MNC_CW_RL_W('D',mncf,0,0,'tOceMxL',tOceMxL,myThid)
367     CALL MNC_CW_RL_W('D',mncf,0,0,'sOceMxL',sOceMxL,myThid)
368     ENDIF
369     ENDIF
370     #endif /* ALLOW_MNC */
371 jmc 1.1
372    
373     ENDIF
374    
375     IF ( thSIce_monFreq.GT. 0. _d 0 )
376     & CALL THSICE_MONITOR( myTime, myIter, myThid )
377    
378     #endif /* ALLOW_THSICE */
379    
380     RETURN
381     END

  ViewVC Help
Powered by ViewVC 1.1.22