/[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.16 - (hide annotations) (download)
Fri Mar 24 23:51:14 2017 UTC (7 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.15: +13 -4 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 jmc 1.16 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_output.F,v 1.15 2016/08/30 21:50:15 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 jmc 1.13 C !FUNCTIONS:
45 jmc 1.3 LOGICAL DIFFERENT_MULTIPLE
46     EXTERNAL DIFFERENT_MULTIPLE
47 jmc 1.13
48     C !LOCAL VARIABLES:
49 jmc 1.16 CHARACTER*(10) suff
50 jmc 1.13 #ifdef ALLOW_TIMEAVE
51     CHARACTER*(MAX_LEN_MBUF) fn
52 jmc 1.1 INTEGER bi, bj, kl
53 jmc 1.13 #endif
54 jmc 1.5 #ifdef ALLOW_MNC
55 edhill 1.4 INTEGER i
56     CHARACTER*(MAX_LEN_MBUF) mncf
57 edhill 1.7 CHARACTER*(1) pf
58 edhill 1.4 #endif
59 jmc 1.1
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 jmc 1.14 c CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi, bj, myThid)
73 jmc 1.1 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 jmc 1.12 ice_timeAve(bi,bj) = 0.
82 jmc 1.1 ENDDO
83     ENDDO
84    
85     C Dump files and restart average computation if needed
86 jmc 1.8 ELSEIF (
87 jmc 1.3 & DIFFERENT_MULTIPLE(thSIce_taveFreq,myTime,deltaTClock)
88 jmc 1.1 & ) 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 jmc 1.14 c CALL TIMEAVE_NORMA_2V( ice_snowPr_Ave,
105     c & ice_fract_Ave, 1, bi, bj, myThid )
106 jmc 1.1 CALL TIMEAVE_NORMA_2V( ice_albedo_Ave,
107     & ice_fract_Ave, 1, bi, bj, myThid )
108    
109     C- simple time average :
110 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_fract_Ave,ice_timeAve,1 ,
111 jmc 1.1 & bi,bj,myThid)
112 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_iceH_Ave, ice_timeAve, 1 ,
113 jmc 1.1 c & bi,bj,myThid)
114 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_snowH_Ave, ice_timeAve, 1 ,
115 jmc 1.1 c & bi,bj,myThid)
116 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_Tsrf_Ave, ice_timeAve, 1 ,
117 jmc 1.1 c & bi,bj,myThid)
118 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_Tice1_Ave, ice_timeAve, 1 ,
119 jmc 1.1 c & bi,bj,myThid)
120 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_Tice2_Ave, ice_timeAve, 1 ,
121 jmc 1.1 c & bi,bj,myThid)
122 jmc 1.12 c CALL TIMEAVE_NORMALIZE(ice_snowPr_Ave, ice_timeAve, 1 ,
123 jmc 1.1 c & bi,bj,myThid)
124 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_flx2oc_Ave, ice_timeAve, 1 ,
125 jmc 1.1 & bi,bj,myThid)
126 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_frw2oc_Ave, ice_timeAve, 1 ,
127 jmc 1.1 & bi,bj,myThid)
128 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_salFx_Ave, ice_timeAve, 1 ,
129 jmc 1.1 & bi,bj,myThid)
130     IF ( fluidIsWater ) THEN
131 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_flxAtm_Ave,ice_timeAve, 1 ,
132 jmc 1.1 & bi,bj,myThid)
133 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_frwAtm_Ave,ice_timeAve, 1 ,
134 jmc 1.1 & bi,bj,myThid)
135     ENDIF
136     IF ( stepFwd_oceMxL ) THEN
137 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_tMxL_Ave, ice_timeAve, 1 ,
138 jmc 1.1 & bi,bj,myThid)
139 jmc 1.12 CALL TIMEAVE_NORMALIZE(ice_sMxL_Ave, ice_timeAve, 1 ,
140 jmc 1.1 & bi,bj,myThid)
141     ENDIF
142     ENDDO
143     ENDDO
144 jmc 1.8
145 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
146    
147     C-- Write all time-average variables in 1 file :
148    
149 edhill 1.4 IF ( thSIce_tave_mdsio ) THEN
150    
151 jmc 1.16 IF ( rwSuffixType.EQ.0 ) THEN
152     WRITE(fn,'(A,I10.10)') 'thSIce_tave.', myIter
153     ELSE
154     CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
155     WRITE(fn,'(A,A)') 'thSIce_tave.', suff
156     ENDIF
157 edhill 1.4
158 jmc 1.11 CALL WRITE_REC_XY_RL( fn, ice_fract_Ave, 1, myIter, myThid )
159     CALL WRITE_REC_XY_RL( fn, ice_iceH_Ave, 2, myIter, myThid )
160     CALL WRITE_REC_XY_RL( fn, ice_snowH_Ave, 3, myIter, myThid )
161     CALL WRITE_REC_XY_RL( fn, ice_Tsrf_Ave, 4, myIter, myThid )
162     CALL WRITE_REC_XY_RL( fn, ice_Tice1_Ave, 5, myIter, myThid )
163     CALL WRITE_REC_XY_RL( fn, ice_Tice2_Ave, 6, myIter, myThid )
164 jmc 1.14 c CALL WRITE_REC_XY_RL( fn, ice_snowPr_Ave, 7, myIter, myThid )
165     CALL WRITE_REC_XY_RL( fn, ice_albedo_Ave, 7, myIter, myThid )
166     CALL WRITE_REC_XY_RL( fn, ice_flx2oc_Ave, 8, myIter, myThid )
167     CALL WRITE_REC_XY_RL( fn, ice_frw2oc_Ave, 9, myIter, myThid )
168     kl = 10
169 jmc 1.11 CALL WRITE_REC_XY_RL( fn, ice_salFx_Ave, kl, myIter, myThid )
170 edhill 1.4 IF ( fluidIsWater ) THEN
171 jmc 1.11 kl = kl+1
172     CALL WRITE_REC_XY_RL(fn, ice_flxAtm_Ave,kl, myIter, myThid )
173     kl = kl+1
174     CALL WRITE_REC_XY_RL(fn, ice_frwAtm_Ave,kl, myIter, myThid )
175 edhill 1.4 ENDIF
176     IF ( stepFwd_oceMxL ) THEN
177 jmc 1.11 kl = kl+1
178     CALL WRITE_REC_XY_RL(fn, ice_tMxL_Ave, kl, myIter, myThid )
179     kl = kl+1
180     CALL WRITE_REC_XY_RL(fn, ice_sMxL_Ave, kl, myIter, myThid )
181 edhill 1.4 ENDIF
182 jmc 1.1
183     ENDIF
184 edhill 1.4
185     #ifdef ALLOW_MNC
186     IF ( useMNC .AND. thSIce_tave_mnc ) THEN
187 jmc 1.13 _BARRIER
188 edhill 1.7 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
189     pf(1:1) = 'D'
190     ELSE
191     pf(1:1) = 'R'
192     ENDIF
193 edhill 1.4 DO i = 1,MAX_LEN_MBUF
194     mncf(i:i) = ' '
195     ENDDO
196     C C 123456789 1
197     mncf(1:11) = 'thsice_tave'
198 jmc 1.5 CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
199     CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
200     CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
201     CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
202 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
203 jmc 1.5 & 'fract_ave', ice_fract_Ave, myThid)
204 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
205 jmc 1.5 & 'iceH_ave', ice_iceH_Ave, myThid)
206 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
207 jmc 1.5 & 'snowH_ave', ice_snowH_Ave, myThid)
208 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
209 jmc 1.5 & 'Tsrf_ave', ice_Tsrf_Ave, myThid)
210 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
211 jmc 1.5 & 'Tice1_ave', ice_Tice1_Ave, myThid)
212 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
213 jmc 1.5 & 'Tice2_ave', ice_Tice2_Ave, myThid)
214 jmc 1.14 c CALL MNC_CW_RL_W(pf,mncf,0,0,
215     c & 'snowPr_ave',ice_snowPr_Ave,myThid)
216 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
217 jmc 1.5 & 'albedo_ave',ice_albedo_Ave,myThid)
218 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
219 jmc 1.5 & 'flx2oc_ave',ice_flx2oc_Ave,myThid)
220 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
221 jmc 1.5 & 'frw2oc_ave',ice_frw2oc_Ave,myThid)
222 edhill 1.4 IF ( fluidIsWater ) THEN
223 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
224 jmc 1.5 & 'flxAtm_ave',ice_flxAtm_Ave,myThid)
225 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,
226 jmc 1.5 & 'frwAtm_ave',ice_frwAtm_Ave,myThid)
227 edhill 1.4 ENDIF
228     IF ( stepFwd_oceMxL ) THEN
229 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,'tMxL_ave',ice_tMxL_Ave,myThid)
230     CALL MNC_CW_RL_W(pf,mncf,0,0,'sMxL_ave',ice_sMxL_Ave,myThid)
231 edhill 1.4 ENDIF
232 jmc 1.13 _BARRIER
233 jmc 1.1 ENDIF
234 edhill 1.4 #endif
235 jmc 1.1
236     C-- Reset averages to zero
237     DO bj = myByLo(myThid), myByHi(myThid)
238     DO bi = myBxLo(myThid), myBxHi(myThid)
239     CALL TIMEAVE_RESET(ice_fract_Ave, 1, bi,bj, myThid)
240     CALL TIMEAVE_RESET(ice_iceH_Ave, 1, bi,bj, myThid)
241     CALL TIMEAVE_RESET(ice_snowH_Ave, 1, bi,bj, myThid)
242     CALL TIMEAVE_RESET(ice_Tsrf_Ave, 1, bi,bj, myThid)
243     CALL TIMEAVE_RESET(ice_Tice1_Ave, 1, bi,bj, myThid)
244     CALL TIMEAVE_RESET(ice_Tice2_Ave, 1, bi,bj, myThid)
245 jmc 1.14 c CALL TIMEAVE_RESET(ice_snowPr_Ave, 1, bi,bj, myThid)
246 jmc 1.1 CALL TIMEAVE_RESET(ice_flx2oc_Ave, 1, bi,bj, myThid)
247     CALL TIMEAVE_RESET(ice_frw2oc_Ave, 1, bi,bj, myThid)
248     CALL TIMEAVE_RESET(ice_salFx_Ave, 1, bi,bj, myThid)
249     CALL TIMEAVE_RESET(ice_flxAtm_Ave, 1, bi,bj, myThid)
250     CALL TIMEAVE_RESET(ice_frwAtm_Ave, 1, bi,bj, myThid)
251     CALL TIMEAVE_RESET(ice_albedo_Ave, 1, bi,bj, myThid)
252     CALL TIMEAVE_RESET(ice_tMxL_Ave, 1, bi, bj, myThid)
253     CALL TIMEAVE_RESET(ice_sMxL_Ave, 1, bi, bj, myThid)
254 jmc 1.12 ice_timeAve(bi,bj) = 0.
255 jmc 1.1 ENDDO
256     ENDDO
257 jmc 1.8
258 jmc 1.1 ENDIF
259    
260     #endif /* ALLOW_TIMEAVE */
261    
262     C Dump a snap-shot of main state variables:
263 jmc 1.8 IF (
264 jmc 1.6 & DIFFERENT_MULTIPLE( thSIce_diagFreq, myTime, deltaTClock )
265     & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
266     & myTime.EQ.startTime )
267     & ) THEN
268 jmc 1.1
269 jmc 1.15 IF ( thSIce_snapshot_mdsio .AND.
270     & ( myTime.NE.startTime .OR. .NOT.thSIce_skipThermo
271     & .OR. .NOT.useCoupler )
272     & ) THEN
273 jmc 1.8
274 jmc 1.16 IF ( rwSuffixType.EQ.0 ) THEN
275     WRITE(suff,'(I10.10)') myIter
276     ELSE
277     CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
278     ENDIF
279 jmc 1.8
280 edhill 1.4 CALL WRITE_FLD_XY_RL('ice_fract.', suff,iceMask,
281     & myIter,myThid)
282 jmc 1.10 CALL WRITE_FLD_XY_RL('ice_iceH.', suff,iceHeight,
283 edhill 1.4 & myIter,myThid)
284 jmc 1.10 CALL WRITE_FLD_XY_RL('ice_snowH.', suff,snowHeight,
285 edhill 1.4 & myIter,myThid)
286     CALL WRITE_FLD_XY_RL('ice_Tsrf.', suff,Tsrf,
287     & myIter,myThid)
288     CALL WRITE_FLD_XY_RL('ice_Tice1.', suff,Tice1,
289     & myIter,myThid)
290     CALL WRITE_FLD_XY_RL('ice_Tice2.', suff,Tice2,
291     & myIter,myThid)
292     CALL WRITE_FLD_XY_RL('ice_Qice1.', suff,Qice1,
293     & myIter,myThid)
294     CALL WRITE_FLD_XY_RL('ice_Qice2.', suff,Qice2,
295     & myIter,myThid)
296     CALL WRITE_FLD_XY_RL('ice_snowAge.',suff,snowAge,
297     & myIter,myThid)
298 jmc 1.8 IF ( myTime.NE.startTime ) THEN
299 jmc 1.9 CALL WRITE_FLD_XY_RL('ice_flxAtm.',suff,icFlxAtm,
300     & myIter,myThid)
301     CALL WRITE_FLD_XY_RL('ice_frwAtm.',suff,icFrwAtm,
302     & myIter,myThid)
303 jmc 1.8 ENDIF
304 edhill 1.4 IF ( stepFwd_oceMxL ) THEN
305     CALL WRITE_FLD_XY_RL('ice_tOceMxL.', suff, tOceMxL,
306     & myIter,myThid)
307     CALL WRITE_FLD_XY_RL('ice_sOceMxL.', suff, sOceMxL,
308 jmc 1.8 & myIter,myThid)
309 edhill 1.4 ENDIF
310 jmc 1.8
311 edhill 1.4 ENDIF
312    
313     #ifdef ALLOW_MNC
314     IF ( thSIce_snapshot_mnc ) THEN
315 jmc 1.13 _BARRIER
316 edhill 1.7 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
317     pf(1:1) = 'D'
318     ELSE
319     pf(1:1) = 'R'
320     ENDIF
321 edhill 1.4 DO i = 1,MAX_LEN_MBUF
322     mncf(i:i) = ' '
323     ENDDO
324     C C 123456789 12345
325     mncf(1:15) = 'thsice_snapshot'
326     CALL MNC_CW_SET_UDIM(mncf, -1, myThid)
327     CALL MNC_CW_I_W_S('I',mncf,0,0,'iter', myIter, myThid)
328     CALL MNC_CW_SET_UDIM(mncf, 0, myThid)
329     CALL MNC_CW_RL_W_S('D',mncf,0,0,'T', myTime, myThid)
330 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,'iceMask', iceMask, myThid)
331     CALL MNC_CW_RL_W(pf,mncf,0,0,'iceHeight', iceHeight, myThid)
332     CALL MNC_CW_RL_W(pf,mncf,0,0,'snowHeight',snowHeight,myThid)
333     CALL MNC_CW_RL_W(pf,mncf,0,0,'Tsrf', Tsrf, myThid)
334     CALL MNC_CW_RL_W(pf,mncf,0,0,'Tice1', Tice1, myThid)
335     CALL MNC_CW_RL_W(pf,mncf,0,0,'Tice2', Tice1, myThid)
336     CALL MNC_CW_RL_W(pf,mncf,0,0,'Qice1', Qice1, myThid)
337     CALL MNC_CW_RL_W(pf,mncf,0,0,'Qice2', Qice2, myThid)
338     CALL MNC_CW_RL_W(pf,mncf,0,0,'snowAge', snowAge, myThid)
339 edhill 1.4 IF ( stepFwd_oceMxL ) THEN
340 edhill 1.7 CALL MNC_CW_RL_W(pf,mncf,0,0,'tOceMxL',tOceMxL,myThid)
341     CALL MNC_CW_RL_W(pf,mncf,0,0,'sOceMxL',sOceMxL,myThid)
342 edhill 1.4 ENDIF
343 jmc 1.13 _BARRIER
344 edhill 1.4 ENDIF
345     #endif /* ALLOW_MNC */
346 jmc 1.1
347     ENDIF
348 jmc 1.8
349 jmc 1.1 IF ( thSIce_monFreq.GT. 0. _d 0 )
350     & CALL THSICE_MONITOR( myTime, myIter, myThid )
351    
352     #endif /* ALLOW_THSICE */
353 jmc 1.8
354 jmc 1.1 RETURN
355     END

  ViewVC Help
Powered by ViewVC 1.1.22