/[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.2 - (hide annotations) (download)
Wed Apr 6 18:47:11 2005 UTC (19 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57g_post, checkpoint57g_pre, checkpoint57f_post, checkpoint57h_pre, checkpoint57h_post
Changes since 1.1: +6 -5 lines
use baseTime as time origin ; DIFF_BASE_MULTIPLE replaces DIFFERENT_MULTIPLE

1 jmc 1.2 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_output.F,v 1.1 2005/01/04 00:23:58 jmc 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.2 LOGICAL DIFF_BASE_MULTIPLE
46     EXTERNAL DIFF_BASE_MULTIPLE
47 jmc 1.1 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 jmc 1.2 & DIFF_BASE_MULTIPLE(baseTime,thSIce_taveFreq,myTime,deltaTClock)
79 jmc 1.1 & ) 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 jmc 1.2 IF (
256     & DIFF_BASE_MULTIPLE(baseTime,thSIce_diagFreq,myTime,deltaTClock)
257 jmc 1.1 & .OR. myTime.EQ.startTime
258     & .OR. myTime.EQ.endTime ) THEN
259    
260     WRITE(suff,'(I10.10)') myIter
261    
262     CALL WRITE_FLD_XY_RL('ice_fract.', suff,iceMask,
263     & myIter,myThid)
264     CALL WRITE_FLD_XY_RL('ice_iceH.', suff,iceheight,
265     & myIter,myThid)
266     CALL WRITE_FLD_XY_RL('ice_snowH.', suff,snowheight,
267     & myIter,myThid)
268     CALL WRITE_FLD_XY_RL('ice_Tsrf.', suff,Tsrf,
269     & myIter,myThid)
270     CALL WRITE_FLD_XY_RL('ice_Tice1.', suff,Tice1,
271     & myIter,myThid)
272     CALL WRITE_FLD_XY_RL('ice_Tice2.', suff,Tice2,
273     & myIter,myThid)
274     CALL WRITE_FLD_XY_RL('ice_Qice1.', suff,Qice1,
275     & myIter,myThid)
276     CALL WRITE_FLD_XY_RL('ice_Qice2.', suff,Qice2,
277     & myIter,myThid)
278     CALL WRITE_FLD_XY_RL('ice_snowPrc.',suff,snowPrc,
279     & myIter,myThid)
280     CALL WRITE_FLD_XY_RL('ice_snowAge.',suff,snowAge,
281     & myIter,myThid)
282     IF ( stepFwd_oceMxL ) THEN
283     CALL WRITE_FLD_XY_RL('ice_tOceMxL.', suff, tOceMxL,
284     & myIter,myThid)
285     CALL WRITE_FLD_XY_RL('ice_sOceMxL.', suff, sOceMxL,
286     & myIter,myThid)
287     ENDIF
288    
289     ENDIF
290    
291     IF ( thSIce_monFreq.GT. 0. _d 0 )
292     & CALL THSICE_MONITOR( myTime, myIter, myThid )
293    
294     #endif /* ALLOW_THSICE */
295    
296     RETURN
297     END

  ViewVC Help
Powered by ViewVC 1.1.22