/[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.21 - (show annotations) (download)
Tue Jun 20 20:57:06 2006 UTC (17 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint58m_post, checkpoint58k_post
Changes since 1.20: +7 -2 lines
change seaice_monitor: - independant of main-monitor (write it's own mnc file)
 - called from the end of S/R SEAICE_DO_DIAGS

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

  ViewVC Help
Powered by ViewVC 1.1.22