/[MITgcm]/MITgcm/pkg/seaice/seaice_do_diags.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/seaice_do_diags.F

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


Revision 1.23 - (show annotations) (download)
Thu Aug 17 00:18:44 2006 UTC (17 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58o_post, checkpoint58p_post, checkpoint58q_post
Changes since 1.22: +6 -1 lines
- write seaice fields at 1rst & last iter (dumpInitAndLast).
- add snow thickness to snap-shot output list

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_do_diags.F,v 1.22 2006/08/09 04:33:25 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 SUBROUTINE SEAICE_DO_DIAGS( myTime, myIter, myThid )
7 C /==========================================================\
8 C | SUBROUTINE SEAICE_DO_DIAGS |
9 C | o Do SEAICE diagnostic output. |
10 C \==========================================================/
11 IMPLICIT NONE
12
13 C === Global variables ===
14 #include "SIZE.h"
15 #include "EEPARAMS.h"
16 #include "PARAMS.h"
17 #include "FFIELDS.h"
18 #include "SEAICE_DIAGS.h"
19 #include "SEAICE_PARAMS.h"
20 #include "SEAICE_FFIELDS.h"
21 #include "SEAICE.h"
22
23 C == Routine arguments ==
24 C myTime - Current time of simulation ( s )
25 C myIter - Iteration number
26 C myThid - Number of this instance of SEAICE_DO_DIAGS
27 _RL myTime
28 INTEGER myIter
29 INTEGER myThid
30
31 C == Local variables ==
32 CHARACTER*(MAX_LEN_MBUF) suff
33 LOGICAL DIFFERENT_MULTIPLE
34 EXTERNAL DIFFERENT_MULTIPLE
35 INTEGER i, j, k, bi, bj
36 _RS arr(1-oLx:sNx+oLx,1-oLy:sNy+oLy,nSx,nSy)
37 LOGICAL dumpFiles
38 CHARACTER*(1) pf
39
40 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
41 pf(1:1) = 'D'
42 ELSE
43 pf(1:1) = 'R'
44 ENDIF
45
46 IF (SEAICEwriteState) THEN
47
48 IF ( DIFFERENT_MULTIPLE(SEAICE_dumpFreq,myTime,deltaTClock)
49 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
50 & myTime.EQ.startTime )
51 & ) THEN
52
53 _BARRIER
54 #ifdef ALLOW_MNC
55 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
56 CALL MNC_CW_SET_UDIM('sice', -1, myThid)
57 CALL MNC_CW_RL_W_S('D','sice',0,0,'T', myTime, myThid)
58 CALL MNC_CW_SET_UDIM('sice', 0, myThid)
59 CALL MNC_CW_I_W_S('I','sice',0,0,'iter', myIter, myThid)
60 CALL MNC_CW_RL_W_S('D','sice',0,0,'model_time',
61 & myTime,myThid)
62 #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
63 IF ( SEAICEuseEVP ) THEN
64 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_sigma1',
65 & seaice_sigma1,myThid)
66 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_sigma2',
67 & seaice_sigma2,myThid)
68 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_sigma12',
69 & seaice_sigma12,myThid)
70 ENDIF
71 #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
72 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_UWIND',uwind,myThid)
73 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_VWIND',vwind,myThid)
74 CALL MNC_CW_RS_W(pf,'sice',0,0,'fu',fu,myThid)
75 CALL MNC_CW_RS_W(pf,'sice',0,0,'fv',fv,myThid)
76 CALL MNC_CW_RS_W(pf,'sice',0,0,'EmPmR',EmPmR,myThid)
77 CALL MNC_CW_RS_W(pf,'sice',0,0,'Qnet',Qnet,myThid)
78 CALL MNC_CW_RS_W(pf,'sice',0,0,'Qsw',Qsw,myThid)
79 ENDIF
80 #endif
81 IF (SEAICE_dump_mdsio) THEN
82 WRITE(suff,'(I10.10)') myIter
83 IF ( myIter.NE.nIter0 ) THEN
84 CALL WRITE_FLD_XY_RS( 'UWIND.',suff,uwind,myIter,myThid)
85 CALL WRITE_FLD_XY_RS( 'VWIND.',suff,vwind,myIter,myThid)
86 CALL WRITE_FLD_XY_RS( 'FU.',suff,fu,myIter,myThid)
87 CALL WRITE_FLD_XY_RS( 'FV.',suff,fv,myIter,myThid)
88 CALL WRITE_FLD_XY_RS( 'EmPmR.',suff,EmPmR,myIter,myThid)
89 CALL WRITE_FLD_XY_RS( 'Qnet.',suff,Qnet,myIter,myThid)
90 CALL WRITE_FLD_XY_RS( 'Qsw.',suff,Qsw,myIter,myThid)
91 ENDIF
92 CALL WRITE_FLD_XY_RL( 'HSNOW.',suff,HSNOW,myIter,myThid)
93 #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
94 IF ( SEAICEuseEVP ) THEN
95 CALL WRITE_FLD_XY_RS('SIGMA1.',suff,seaice_sigma1,
96 & myIter,myThid)
97 CALL WRITE_FLD_XY_RS('SIGMA2.',suff,seaice_sigma2,
98 & myIter,myThid)
99 CALL WRITE_FLD_XY_RS('SIGMA12.',suff,seaice_sigma12,
100 & myIter,myThid)
101 ENDIF
102 #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
103 ENDIF
104
105 #ifdef SEAICE_DEBUG
106 CALL PLOT_FIELD_XYRS( uwind , 'Current uwind ', myIter, myThid )
107 CALL PLOT_FIELD_XYRS( vwind , 'Current vwind ', myIter, myThid )
108 CALL PLOT_FIELD_XYRS( atemp , 'Current atemp ', myIter, myThid )
109 CALL PLOT_FIELD_XYRS( aqh , 'Current aqh ', myIter, myThid )
110 CALL PLOT_FIELD_XYRS( lwdown, 'Current lwdown', myIter, myThid )
111 CALL PLOT_FIELD_XYRS( swdown, 'Current swdown', myIter, myThid )
112 CALL PLOT_FIELD_XYRS( precip, 'Current precip', myIter, myThid )
113 CALL PLOT_FIELD_XYRL( evap , 'Current evap ', myIter, myThid )
114 CALL PLOT_FIELD_XYRS( runoff, 'Current runoff', myIter, myThid )
115 CALL PLOT_FIELD_XYRS( SSS , 'Current SSS ', myIter, myThid )
116 CALL PLOT_FIELD_XYRS( SST , 'Current SST ', myIter, myThid )
117 CALL PLOT_FIELD_XYRL( fu , 'Current fu ', myIter, myThid )
118 CALL PLOT_FIELD_XYRL( fv , 'Current fv ', myIter, myThid )
119 CALL PLOT_FIELD_XYRL( EmPmR , 'Current EmPmR ', myIter, myThid )
120 CALL PLOT_FIELD_XYRL( Qnet , 'Current Qnet ', myIter, myThid )
121 CALL PLOT_FIELD_XYRL( Qsw , 'Current Qsw ', myIter, myThid )
122 #endif
123
124 DO bj=myByLo(myThid),myByHi(myThid)
125 DO bi=myBxLo(myThid),myBxHi(myThid)
126 DO j=1-Oly,sNy+Oly
127 DO i=1-Olx,sNx+Olx
128 arr(i,j,bi,bj)=UICE(i,j,1,bi,bj)
129 ENDDO
130 ENDDO
131 ENDDO
132 ENDDO
133 _BARRIER
134 IF (SEAICE_dump_mdsio) THEN
135 CALL WRITE_FLD_XY_RS( 'UICE.',suff,arr,myIter,myThid)
136 ENDIF
137 #ifdef ALLOW_MNC
138 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
139 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_UICE',arr,myThid)
140 ENDIF
141 #endif
142 #ifdef SEAICE_DEBUG
143 _EXCH_XY_R4( arr, myThid )
144 CALL PLOT_FIELD_XYRS( arr , 'Current uice ',
145 & myIter, myThid )
146 #endif
147 _BARRIER
148
149 DO bj=myByLo(myThid),myByHi(myThid)
150 DO bi=myBxLo(myThid),myBxHi(myThid)
151 DO j=1-Oly,sNy+Oly
152 DO i=1-Olx,sNx+Olx
153 arr(i,j,bi,bj)=VICE(i,j,1,bi,bj)
154 ENDDO
155 ENDDO
156 ENDDO
157 ENDDO
158 _BARRIER
159 IF (SEAICE_dump_mdsio) THEN
160 CALL WRITE_FLD_XY_RS( 'VICE.',suff,arr,myIter,myThid)
161 ENDIF
162 #ifdef ALLOW_MNC
163 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
164 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_VICE',arr,myThid)
165 ENDIF
166 #endif
167 #ifdef SEAICE_DEBUG
168 _EXCH_XY_R4( arr, myThid )
169 CALL PLOT_FIELD_XYRS( arr , 'Current vice ',
170 & myIter, myThid )
171 #endif
172 _BARRIER
173
174 DO bj=myByLo(myThid),myByHi(myThid)
175 DO bi=myBxLo(myThid),myBxHi(myThid)
176 DO j=1-Oly,sNy+Oly
177 DO i=1-Olx,sNx+Olx
178 arr(i,j,bi,bj)=HEFF(i,j,1,bi,bj)
179 ENDDO
180 ENDDO
181 ENDDO
182 ENDDO
183 _BARRIER
184 IF (SEAICE_dump_mdsio) THEN
185 CALL WRITE_FLD_XY_RS( 'HEFF.',suff,arr,myIter,myThid)
186 ENDIF
187 #ifdef ALLOW_MNC
188 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
189 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_HEFF',arr,myThid)
190 ENDIF
191 #endif
192 #ifdef SEAICE_DEBUG
193 _EXCH_XY_R4( arr, myThid )
194 CALL PLOT_FIELD_XYRS( arr , 'Current heff ',
195 & myIter, myThid )
196 #endif
197 _BARRIER
198
199 DO bj=myByLo(myThid),myByHi(myThid)
200 DO bi=myBxLo(myThid),myBxHi(myThid)
201 DO j=1-Oly,sNy+Oly
202 DO i=1-Olx,sNx+Olx
203 arr(i,j,bi,bj)=AREA(i,j,1,bi,bj)
204 ENDDO
205 ENDDO
206 ENDDO
207 ENDDO
208 _BARRIER
209 IF (SEAICE_dump_mdsio) THEN
210 CALL WRITE_FLD_XY_RS( 'AREA.',suff,arr,myIter,myThid)
211 ENDIF
212 #ifdef ALLOW_MNC
213 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
214 CALL MNC_CW_RS_W(pf,'sice',0,0,'si_AREA',arr,myThid)
215 ENDIF
216 #endif
217 #ifdef SEAICE_DEBUG
218 _EXCH_XY_R4( arr, myThid )
219 CALL PLOT_FIELD_XYRS( arr , 'Current area ',
220 & myIter, myThid )
221 #endif
222 _BARRIER
223
224 ENDIF
225 ENDIF
226
227 C----------------------------------------------------------------
228 C Do SEAICE time averaging.
229 C----------------------------------------------------------------
230
231 #ifdef ALLOW_TIMEAVE
232
233 C-- Time-cumulations
234 DO bj = myByLo(myThid), myByHi(myThid)
235 DO bi = myBxLo(myThid), myBxHi(myThid)
236 DO j=1,sNy
237 DO i=1,sNx
238 FUtave(i,j,1,bi,bj) =
239 & FUtave(i,j,1,bi,bj) +FU(i,j,bi,bj) *deltaTclock
240 FVtave(i,j,1,bi,bj) =
241 & FVtave(i,j,1,bi,bj) +FV(i,j,bi,bj) *deltaTclock
242 EmPmRtave(i,j,1,bi,bj)=
243 & EmPmRtave(i,j,1,bi,bj)+EmPmR(i,j,bi,bj) *deltaTclock
244 QNETtave(i,j,1,bi,bj) =
245 & QNETtave(i,j,1,bi,bj) +QNET(i,j,bi,bj) *deltaTclock
246 QSWtave(i,j,1,bi,bj) =
247 & QSWtave(i,j,1,bi,bj) +QSW(i,j,bi,bj) *deltaTclock
248 UICEtave(i,j,1,bi,bj) =
249 & UICEtave(i,j,1,bi,bj) +UICE(i,j,1,bi,bj)*deltaTclock
250 VICEtave(i,j,1,bi,bj) =
251 & VICEtave(i,j,1,bi,bj) +VICE(i,j,1,bi,bj)*deltaTclock
252 HEFFtave(i,j,1,bi,bj) =
253 & HEFFtave(i,j,1,bi,bj) +HEFF(i,j,1,bi,bj)*deltaTclock
254 AREAtave(i,j,1,bi,bj) =
255 & AREAtave(i,j,1,bi,bj) +AREA(i,j,1,bi,bj)*deltaTclock
256 ENDDO
257 ENDDO
258 DO k=1,Nr
259 SEAICE_TimeAve(k,bi,bj)=SEAICE_TimeAve(k,bi,bj)+deltaTclock
260 ENDDO
261 ENDDO
262 ENDDO
263
264 C Dump files and restart average computation if needed
265 dumpFiles = .FALSE.
266 IF ( myIter .NE. nIter0 ) THEN
267 dumpFiles =
268 & DIFFERENT_MULTIPLE(SEAICE_taveFreq,myTime,deltaTClock)
269 #ifdef ALLOW_CAL
270 IF ( useCAL ) THEN
271 CALL CAL_TIME2DUMP( SEAICE_taveFreq, deltaTClock,
272 U dumpFiles,
273 I myTime, myIter, myThid )
274 ENDIF
275 #endif
276 ENDIF
277
278 IF (dumpFiles) THEN
279 C Normalize by integrated time
280 DO bj = myByLo(myThid), myByHi(myThid)
281 DO bi = myBxLo(myThid), myBxHi(myThid)
282 CALL TIMEAVE_NORMALIZ(FUtave ,SEAICE_timeave, 1,
283 & bi,bj,myThid)
284 CALL TIMEAVE_NORMALIZ(FVtave ,SEAICE_timeave, 1,
285 & bi,bj,myThid)
286 CALL TIMEAVE_NORMALIZ(EmPmRtave,SEAICE_timeave, 1,
287 & bi,bj,myThid)
288 CALL TIMEAVE_NORMALIZ(QNETtave ,SEAICE_timeave, 1,
289 & bi,bj,myThid)
290 CALL TIMEAVE_NORMALIZ(QSWtave ,SEAICE_timeave, 1,
291 & bi,bj,myThid)
292 CALL TIMEAVE_NORMALIZ(UICEtave ,SEAICE_timeave, 1,
293 & bi,bj,myThid)
294 CALL TIMEAVE_NORMALIZ(VICEtave ,SEAICE_timeave, 1,
295 & bi,bj,myThid)
296 CALL TIMEAVE_NORMALIZ(HEFFtave ,SEAICE_timeave, 1,
297 & bi,bj,myThid)
298 CALL TIMEAVE_NORMALIZ(AREAtave ,SEAICE_timeave, 1,
299 & bi,bj,myThid)
300 ENDDO
301 ENDDO
302 c IF (myIter.EQ.10) WRITE(0,*) myThid, dumpFiles
303
304 _BARRIER
305 #ifdef ALLOW_MNC
306 IF (useMNC .AND. SEAICE_tave_mnc) THEN
307 CALL MNC_CW_SET_UDIM('sice_tave', -1, myThid)
308 CALL MNC_CW_RL_W_S('D','sice_tave',0,0,'T', myTime, myThid)
309 CALL MNC_CW_SET_UDIM('sice_tave', 0, myThid)
310 CALL MNC_CW_I_W_S('I','sice_tave',0,0,'iter', myIter, myThid)
311 C CALL MNC_CW_RL_W_S('D','sice_tave',0,0,'model_time',
312 C & myTime,myThid)
313 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
314 & 'si_UICEtave',UICEtave,myThid)
315 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
316 & 'si_VICEtave',VICEtave,myThid)
317 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
318 & 'si_FUtave',FUtave,myThid)
319 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
320 & 'si_FVtave',FVtave,myThid)
321 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
322 & 'si_EmPmRtave',EmPmRtave,myThid)
323 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
324 & 'si_QNETtave',QNETtave,myThid)
325 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
326 & 'si_QSWtave',QSWtave,myThid)
327 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
328 & 'si_HEFFtave',HEFFtave,myThid)
329 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
330 & 'si_AREAtave',AREAtave,myThid)
331 ENDIF
332 #endif
333 IF (SEAICE_tave_mdsio) THEN
334 WRITE(suff,'(I10.10)') myIter
335 CALL WRITE_FLD_XY_RL('FUtave.' ,suff,FUtave ,myIter,myThid)
336 CALL WRITE_FLD_XY_RL('FVtave.' ,suff,FVtave ,myIter,myThid)
337 CALL WRITE_FLD_XY_RL('EmPmRtave.',suff,EmPmRtave,myIter,myThid)
338 CALL WRITE_FLD_XY_RL('QNETtave.' ,suff,QNETtave ,myIter,myThid)
339 CALL WRITE_FLD_XY_RL('QSWtave.' ,suff,QSWtave ,myIter,myThid)
340 CALL WRITE_FLD_XY_RL('UICEtave.' ,suff,UICEtave ,myIter,myThid)
341 CALL WRITE_FLD_XY_RL('VICEtave.' ,suff,VICEtave ,myIter,myThid)
342 CALL WRITE_FLD_XY_RL('HEFFtave.' ,suff,HEFFtave ,myIter,myThid)
343 CALL WRITE_FLD_XY_RL('AREAtave.' ,suff,AREAtave ,myIter,myThid)
344 ENDIF
345 _BARRIER
346
347 C Reset averages to zero
348 DO bj = myByLo(myThid), myByHi(myThid)
349 DO bi = myBxLo(myThid), myBxHi(myThid)
350 CALL TIMEAVE_RESET(FUtave ,1,bi,bj,myThid)
351 CALL TIMEAVE_RESET(FVtave ,1,bi,bj,myThid)
352 CALL TIMEAVE_RESET(EmPmRtave,1,bi,bj,myThid)
353 CALL TIMEAVE_RESET(QNETtave ,1,bi,bj,myThid)
354 CALL TIMEAVE_RESET(QSWtave ,1,bi,bj,myThid)
355 CALL TIMEAVE_RESET(UICEtave ,1,bi,bj,myThid)
356 CALL TIMEAVE_RESET(VICEtave ,1,bi,bj,myThid)
357 CALL TIMEAVE_RESET(HEFFtave ,1,bi,bj,myThid)
358 CALL TIMEAVE_RESET(AREAtave ,1,bi,bj,myThid)
359 DO k=1,Nr
360 SEAICE_TimeAve(k,bi,bj)=ZERO
361 ENDDO
362 ENDDO
363 ENDDO
364
365 ENDIF
366
367 #endif /* ALLOW_TIMEAVE */
368
369 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
370
371 C-- do SEAICE monitor output : print some statistics about seaice fields
372 CALL SEAICE_MONITOR( myTime, myIter, myThid )
373
374 RETURN
375 END

  ViewVC Help
Powered by ViewVC 1.1.22