/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_output.F
ViewVC logotype

Annotation of /MITgcm_contrib/torge/itd/code/seaice_output.F

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


Revision 1.1 - (hide annotations) (download)
Wed Jun 13 19:33:51 2012 UTC (13 years, 1 month ago) by torge
Branch: MAIN
check-in original code, before itd modifications
seaice_output.F,v 1.11 2012/02/16 01:22:02
SEAICE_TAVE.h,v 1.1 2010/01/03 00:27:36

1 torge 1.1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_output.F,v 1.11 2012/02/16 01:22:02 gforget Exp $
2     C $Name: $
3    
4     #include "SEAICE_OPTIONS.h"
5    
6     CBOP 0
7     C !ROUTINE: SEAICE_OUTPUT
8    
9     C !INTERFACE:
10     SUBROUTINE SEAICE_OUTPUT( myTime, myIter, myThid )
11    
12     C !DESCRIPTION:
13     C *==========================================================*
14     C | SUBROUTINE SEAICE_OUTPUT
15     C | o Do SEAICE output and TimeAve averaging and output.
16     C *==========================================================*
17    
18     C !USES:
19     IMPLICIT NONE
20    
21     C === Global variables ===
22     #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25     #include "FFIELDS.h"
26     #include "SEAICE_SIZE.h"
27     #include "SEAICE_PARAMS.h"
28     #include "SEAICE.h"
29     #include "SEAICE_TRACER.h"
30     #include "SEAICE_TAVE.h"
31     #ifdef ALLOW_EXF
32     # include "EXF_OPTIONS.h"
33     # include "EXF_FIELDS.h"
34     #endif
35    
36     C !INPUT PARAMETERS:
37     C == Routine arguments ==
38     C myTime :: my time in simulation ( s )
39     C myIter :: my Iteration number
40     C myThid :: my Thread Id number
41     _RL myTime
42     INTEGER myIter
43     INTEGER myThid
44    
45     C !FUNCTIONS:
46     LOGICAL DIFFERENT_MULTIPLE
47     EXTERNAL DIFFERENT_MULTIPLE
48    
49     C !LOCAL VARIABLES:
50     C == Local variables in common block :
51    
52     C == Local variables ==
53     CHARACTER*(10) suff
54     #ifdef ALLOW_SITRACER
55     CHARACTER*(13) pref
56     INTEGER iTracer
57     #endif
58     #ifdef ALLOW_TIMEAVE
59     INTEGER i, j, bi, bj
60     LOGICAL dumpFiles
61     #endif /* ALLOW_TIMEAVE */
62     #ifdef ALLOW_MNC
63     CHARACTER*(1) pf
64     #endif /* ALLOW_MNC */
65     CEOP
66    
67     IF (SEAICEwriteState) THEN
68    
69     IF ( DIFFERENT_MULTIPLE(SEAICE_dumpFreq,myTime,deltaTClock)
70     & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
71     & myTime.EQ.startTime )
72     & ) THEN
73    
74     #ifdef ALLOW_MNC
75     IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
76     IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
77     pf(1:1) = 'D'
78     ELSE
79     pf(1:1) = 'R'
80     ENDIF
81     CALL MNC_CW_SET_UDIM('sice', -1, myThid)
82     CALL MNC_CW_RL_W_S('D','sice',0,0,'T', myTime, myThid)
83     CALL MNC_CW_SET_UDIM('sice', 0, myThid)
84     CALL MNC_CW_I_W_S('I','sice',0,0,'iter', myIter, myThid)
85     CALL MNC_CW_RL_W_S('D','sice',0,0,'model_time',
86     & myTime,myThid)
87     #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
88     IF ( SEAICEuseEVP ) THEN
89     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma1',
90     & seaice_sigma1,myThid)
91     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma2',
92     & seaice_sigma2,myThid)
93     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma12',
94     & seaice_sigma12,myThid)
95     ENDIF
96     #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
97     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_UICE',uIce,myThid)
98     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_VICE',vIce,myThid)
99     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_HEFF',hEff,myThid)
100     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_AREA',area,myThid)
101     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_UWIND',uwind,myThid)
102     CALL MNC_CW_RL_W(pf,'sice',0,0,'si_VWIND',vwind,myThid)
103     CALL MNC_CW_RS_W(pf,'sice',0,0,'fu',fu,myThid)
104     CALL MNC_CW_RS_W(pf,'sice',0,0,'fv',fv,myThid)
105     CALL MNC_CW_RS_W(pf,'sice',0,0,'EmPmR',EmPmR,myThid)
106     CALL MNC_CW_RS_W(pf,'sice',0,0,'Qnet',Qnet,myThid)
107     CALL MNC_CW_RS_W(pf,'sice',0,0,'Qsw',Qsw,myThid)
108     ENDIF
109     #endif /* ALLOW_MNC */
110     IF (SEAICE_dump_mdsio) THEN
111     WRITE(suff,'(I10.10)') myIter
112     IF ( myIter.NE.nIter0 ) THEN
113     CALL WRITE_FLD_XY_RL('UWIND.',suff,uwind,myIter,myThid)
114     CALL WRITE_FLD_XY_RL('VWIND.',suff,vwind,myIter,myThid)
115     CALL WRITE_FLD_XY_RS('FU.',suff,fu,myIter,myThid)
116     CALL WRITE_FLD_XY_RS('FV.',suff,fv,myIter,myThid)
117     CALL WRITE_FLD_XY_RS('EmPmR.',suff,EmPmR,myIter,myThid)
118     CALL WRITE_FLD_XY_RS('Qnet.',suff,Qnet,myIter,myThid)
119     CALL WRITE_FLD_XY_RS('Qsw.',suff,Qsw,myIter,myThid)
120     ENDIF
121     CALL WRITE_FLD_XY_RL( 'UICE.',suff,uIce,myIter,myThid)
122     CALL WRITE_FLD_XY_RL( 'VICE.',suff,vIce,myIter,myThid)
123     CALL WRITE_FLD_XY_RL( 'HEFF.',suff,hEff,myIter,myThid)
124     CALL WRITE_FLD_XY_RL( 'AREA.',suff,area,myIter,myThid)
125     CALL WRITE_FLD_XY_RL( 'HSNOW.',suff,HSNOW,myIter,myThid)
126     #ifdef SEAICE_VARIABLE_SALINITY
127     CALL WRITE_FLD_XY_RL( 'HSALT.',suff,HSALT,myIter,myThid)
128     #endif
129     #ifdef ALLOW_SITRACER
130     DO iTracer = 1, SItrNumInUse
131     WRITE(pref,'(A8,I2.2,A1)') 'SITRACER', iTracer, '.'
132     CALL WRITE_FLD_XY_RL(
133     & pref,suff,
134     & SItracer(1-OLx,1-OLy,1,1,iTracer),
135     & myIter,myThid)
136     ENDDO
137     #endif
138     #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
139     IF ( SEAICEuseEVP ) THEN
140     CALL WRITE_FLD_XY_RL('SIGMA1.',suff,seaice_sigma1,
141     & myIter,myThid)
142     CALL WRITE_FLD_XY_RL('SIGMA2.',suff,seaice_sigma2,
143     & myIter,myThid)
144     CALL WRITE_FLD_XY_RL('SIGMA12.',suff,seaice_sigma12,
145     & myIter,myThid)
146     ENDIF
147     #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
148     C-- end SEAICE_dump_mdsio block
149     ENDIF
150    
151     ENDIF
152     ENDIF
153    
154     C----------------------------------------------------------------
155     C Do SEAICE time averaging.
156     C----------------------------------------------------------------
157    
158     #ifdef ALLOW_TIMEAVE
159     IF ( SEAICE_taveFreq.GT.0. _d 0 ) THEN
160    
161     C-- Time-cumulations
162     DO bj = myByLo(myThid), myByHi(myThid)
163     DO bi = myBxLo(myThid), myBxHi(myThid)
164     DO j=1,sNy
165     DO i=1,sNx
166     C- note(jmc): surf.Fluxes have not yet been computed when called @ nIter0
167     FUtave(i,j,bi,bj) =
168     & FUtave(i,j,bi,bj) +FU(i,j,bi,bj) *deltaTclock
169     FVtave(i,j,bi,bj) =
170     & FVtave(i,j,bi,bj) +FV(i,j,bi,bj) *deltaTclock
171     EmPmRtave(i,j,bi,bj)=
172     & EmPmRtave(i,j,bi,bj)+EmPmR(i,j,bi,bj) *deltaTclock
173     QNETtave(i,j,bi,bj) =
174     & QNETtave(i,j,bi,bj) +QNET(i,j,bi,bj) *deltaTclock
175     QSWtave(i,j,bi,bj) =
176     & QSWtave(i,j,bi,bj) +QSW(i,j,bi,bj) *deltaTclock
177     UICEtave(i,j,bi,bj) =
178     & UICEtave(i,j,bi,bj) +UICE(i,j,bi,bj)*deltaTclock
179     VICEtave(i,j,bi,bj) =
180     & VICEtave(i,j,bi,bj) +VICE(i,j,bi,bj)*deltaTclock
181     HEFFtave(i,j,bi,bj) =
182     & HEFFtave(i,j,bi,bj) +HEFF(i,j,bi,bj)*deltaTclock
183     AREAtave(i,j,bi,bj) =
184     & AREAtave(i,j,bi,bj) +AREA(i,j,bi,bj)*deltaTclock
185     ENDDO
186     ENDDO
187     SEAICE_timeAve(bi,bj) = SEAICE_timeAve(bi,bj)+deltaTclock
188     ENDDO
189     ENDDO
190    
191     C Dump files and restart average computation if needed
192     dumpFiles = .FALSE.
193     IF ( myIter .NE. nIter0 ) THEN
194     dumpFiles =
195     & DIFFERENT_MULTIPLE(SEAICE_taveFreq,myTime,deltaTClock)
196     #ifdef ALLOW_CAL
197     IF ( useCAL ) THEN
198     CALL CAL_TIME2DUMP( SEAICE_taveFreq, deltaTClock,
199     U dumpFiles,
200     I myTime, myIter, myThid )
201     ENDIF
202     #endif
203     ENDIF
204    
205     IF (dumpFiles) THEN
206     C Normalize by integrated time
207     DO bj = myByLo(myThid), myByHi(myThid)
208     DO bi = myBxLo(myThid), myBxHi(myThid)
209     CALL TIMEAVE_NORMALIZE( FUtave,
210     & SEAICE_timeAve, 1, bi, bj, myThid )
211     CALL TIMEAVE_NORMALIZE( FVtave,
212     & SEAICE_timeAve, 1, bi, bj, myThid )
213     CALL TIMEAVE_NORMALIZE( EmPmRtave,
214     & SEAICE_timeAve, 1, bi, bj, myThid )
215     CALL TIMEAVE_NORMALIZE( QNETtave,
216     & SEAICE_timeAve, 1, bi, bj, myThid )
217     CALL TIMEAVE_NORMALIZE( QSWtave,
218     & SEAICE_timeAve, 1, bi, bj, myThid )
219     CALL TIMEAVE_NORMALIZE( UICEtave,
220     & SEAICE_timeAve, 1, bi, bj, myThid )
221     CALL TIMEAVE_NORMALIZE( VICEtave,
222     & SEAICE_timeAve, 1, bi, bj, myThid )
223     CALL TIMEAVE_NORMALIZE( HEFFtave,
224     & SEAICE_timeAve, 1, bi, bj, myThid )
225     CALL TIMEAVE_NORMALIZE( AREAtave,
226     & SEAICE_timeAve, 1, bi, bj, myThid )
227     ENDDO
228     ENDDO
229     c IF (myIter.EQ.10) WRITE(0,*) myThid, dumpFiles
230    
231     #ifdef ALLOW_MNC
232     IF (useMNC .AND. SEAICE_tave_mnc) THEN
233     IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
234     pf(1:1) = 'D'
235     ELSE
236     pf(1:1) = 'R'
237     ENDIF
238     CALL MNC_CW_SET_UDIM('sice_tave', -1, myThid)
239     CALL MNC_CW_RL_W_S('D','sice_tave',0,0,'T', myTime, myThid)
240     CALL MNC_CW_SET_UDIM('sice_tave', 0, myThid)
241     CALL MNC_CW_I_W_S('I','sice_tave',0,0,'iter', myIter, myThid)
242     C CALL MNC_CW_RL_W_S('D','sice_tave',0,0,'model_time',
243     C & myTime,myThid)
244     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
245     & 'si_UICEtave',UICEtave,myThid)
246     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
247     & 'si_VICEtave',VICEtave,myThid)
248     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
249     & 'si_FUtave',FUtave,myThid)
250     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
251     & 'si_FVtave',FVtave,myThid)
252     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
253     & 'si_EmPmRtave',EmPmRtave,myThid)
254     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
255     & 'si_QNETtave',QNETtave,myThid)
256     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
257     & 'si_QSWtave',QSWtave,myThid)
258     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
259     & 'si_HEFFtave',HEFFtave,myThid)
260     CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
261     & 'si_AREAtave',AREAtave,myThid)
262     ENDIF
263     #endif
264     IF (SEAICE_tave_mdsio) THEN
265     WRITE(suff,'(I10.10)') myIter
266     CALL WRITE_FLD_XY_RL('FUtave.' ,suff,FUtave ,myIter,myThid)
267     CALL WRITE_FLD_XY_RL('FVtave.' ,suff,FVtave ,myIter,myThid)
268     CALL WRITE_FLD_XY_RL('EmPmRtave.',suff,EmPmRtave,myIter,myThid)
269     CALL WRITE_FLD_XY_RL('QNETtave.' ,suff,QNETtave ,myIter,myThid)
270     CALL WRITE_FLD_XY_RL('QSWtave.' ,suff,QSWtave ,myIter,myThid)
271     CALL WRITE_FLD_XY_RL('UICEtave.' ,suff,UICEtave ,myIter,myThid)
272     CALL WRITE_FLD_XY_RL('VICEtave.' ,suff,VICEtave ,myIter,myThid)
273     CALL WRITE_FLD_XY_RL('HEFFtave.' ,suff,HEFFtave ,myIter,myThid)
274     CALL WRITE_FLD_XY_RL('AREAtave.' ,suff,AREAtave ,myIter,myThid)
275     ENDIF
276    
277     C Reset averages to zero
278     DO bj = myByLo(myThid), myByHi(myThid)
279     DO bi = myBxLo(myThid), myBxHi(myThid)
280     CALL TIMEAVE_RESET( FUtave , 1, bi, bj, myThid )
281     CALL TIMEAVE_RESET( FVtave , 1, bi, bj, myThid )
282     CALL TIMEAVE_RESET( EmPmRtave, 1, bi, bj, myThid )
283     CALL TIMEAVE_RESET( QNETtave , 1, bi, bj, myThid )
284     CALL TIMEAVE_RESET( QSWtave , 1, bi, bj, myThid )
285     CALL TIMEAVE_RESET( UICEtave , 1, bi, bj, myThid )
286     CALL TIMEAVE_RESET( VICEtave , 1, bi, bj, myThid )
287     CALL TIMEAVE_RESET( HEFFtave , 1, bi, bj, myThid )
288     CALL TIMEAVE_RESET( AREAtave , 1, bi, bj, myThid )
289     SEAICE_timeAve(bi,bj) = ZERO
290     ENDDO
291     ENDDO
292    
293     C-- end dumpFiles block
294     ENDIF
295    
296     C-- end if SEAICE_taveFreq > 0
297     ENDIF
298     #endif /* ALLOW_TIMEAVE */
299    
300     C-- do SEAICE monitor output : print some statistics about seaice fields
301     CALL SEAICE_MONITOR( myTime, myIter, myThid )
302    
303     C-- do SEAICE Open-Boundary output
304     IF ( useOBCS ) CALL SEAICE_OBCS_OUTPUT( myTime, myIter, myThid )
305    
306     RETURN
307     END

  ViewVC Help
Powered by ViewVC 1.1.22