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

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

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


Revision 1.9 - (hide annotations) (download)
Sun Feb 20 11:46:25 2005 UTC (19 years, 2 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint57e_post, eckpoint57e_pre
Changes since 1.8: +29 -5 lines
o parameter calendarDumps: when set, approximate months (30-31 days) and years
  (360-372 days) for parameters chkPtFreq, pChkPtFreq, taveFreq, SEAICE_taveFreq,
  KPP_taveFreq, and freq in pkg/diagnostics are converted to exact calendar
  months and years.  Requires pkg/cal.

1 dimitri 1.9 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_do_diags.F,v 1.8 2004/12/27 20:34:11 dimitri Exp $
2 edhill 1.7 C $Name: $
3 heimbach 1.2
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 dimitri 1.9 INTEGER thisdate(4), prevdate(4)
38     LOGICAL dumpFiles
39 heimbach 1.2
40     IF (SEAICEwriteState) THEN
41    
42     IF ( DIFFERENT_MULTIPLE(SEAICE_dumpFreq,myTime,
43     & myTime-deltaTClock) ) THEN
44    
45     WRITE(suff,'(I10.10)') myIter
46     _BARRIER
47     _BEGIN_MASTER( myThid )
48 dimitri 1.6 CALL WRITE_FLD_XY_RS( 'UWIND.',suff,uwind,myIter,myThid)
49     CALL WRITE_FLD_XY_RS( 'VWIND.',suff,vwind,myIter,myThid)
50 heimbach 1.2 CALL WRITE_FLD_XY_RS( 'FU.',suff,fu,myIter,myThid)
51     CALL WRITE_FLD_XY_RS( 'FV.',suff,fv,myIter,myThid)
52     CALL WRITE_FLD_XY_RS( 'EmPmR.',suff,EmPmR,myIter,myThid)
53     CALL WRITE_FLD_XY_RS( 'Qnet.',suff,Qnet,myIter,myThid)
54     CALL WRITE_FLD_XY_RS( 'Qsw.',suff,Qsw,myIter,myThid)
55     _END_MASTER( myThid )
56     _BARRIER
57    
58 dimitri 1.6 #ifdef SEAICE_DEBUG
59     CALL PLOT_FIELD_XYRS( uwind , 'Current uwind ', myIter, myThid )
60     CALL PLOT_FIELD_XYRS( vwind , 'Current vwind ', myIter, myThid )
61     CALL PLOT_FIELD_XYRS( atemp , 'Current atemp ', myIter, myThid )
62     CALL PLOT_FIELD_XYRS( aqh , 'Current aqh ', myIter, myThid )
63     CALL PLOT_FIELD_XYRS( lwdown, 'Current lwdown', myIter, myThid )
64     CALL PLOT_FIELD_XYRS( swdown, 'Current swdown', myIter, myThid )
65     CALL PLOT_FIELD_XYRS( precip, 'Current precip', myIter, myThid )
66     CALL PLOT_FIELD_XYRL( evap , 'Current evap ', myIter, myThid )
67     CALL PLOT_FIELD_XYRS( runoff, 'Current runoff', myIter, myThid )
68     CALL PLOT_FIELD_XYRS( SSS , 'Current SSS ', myIter, myThid )
69     CALL PLOT_FIELD_XYRS( SST , 'Current SST ', myIter, myThid )
70     CALL PLOT_FIELD_XYRL( fu , 'Current fu ', myIter, myThid )
71     CALL PLOT_FIELD_XYRL( fv , 'Current fv ', myIter, myThid )
72     CALL PLOT_FIELD_XYRL( EmPmR , 'Current EmPmR ', myIter, myThid )
73     CALL PLOT_FIELD_XYRL( Qnet , 'Current Qnet ', myIter, myThid )
74     CALL PLOT_FIELD_XYRL( Qsw , 'Current Qsw ', myIter, myThid )
75     #endif
76    
77 heimbach 1.2 DO bj=myByLo(myThid),myByHi(myThid)
78     DO bi=myBxLo(myThid),myBxHi(myThid)
79     DO j=1,sNy
80     DO i=1,sNx
81     arr(i,j,bi,bj)=UICE(i,j,1,bi,bj)
82     ENDDO
83     ENDDO
84     ENDDO
85     ENDDO
86     _BARRIER
87     _BEGIN_MASTER( myThid )
88     CALL WRITE_FLD_XY_RS( 'UICE.',suff,arr,myIter,myThid)
89     _END_MASTER( myThid )
90     _BARRIER
91 dimitri 1.6 #ifdef SEAICE_DEBUG
92     _EXCH_XY_R4( arr, myThid )
93     CALL PLOT_FIELD_XYRS( arr , 'Current uice ', myIter, myThid )
94     #endif
95    
96 heimbach 1.2 DO bj=myByLo(myThid),myByHi(myThid)
97     DO bi=myBxLo(myThid),myBxHi(myThid)
98     DO j=1,sNy
99     DO i=1,sNx
100     arr(i,j,bi,bj)=VICE(i,j,1,bi,bj)
101     ENDDO
102     ENDDO
103     ENDDO
104     ENDDO
105     _BARRIER
106     _BEGIN_MASTER( myThid )
107     CALL WRITE_FLD_XY_RS( 'VICE.',suff,arr,myIter,myThid)
108     _END_MASTER( myThid )
109     _BARRIER
110 dimitri 1.6 #ifdef SEAICE_DEBUG
111     _EXCH_XY_R4( arr, myThid )
112     CALL PLOT_FIELD_XYRS( arr , 'Current vice ', myIter, myThid )
113     #endif
114 heimbach 1.2
115     DO bj=myByLo(myThid),myByHi(myThid)
116     DO bi=myBxLo(myThid),myBxHi(myThid)
117     DO j=1,sNy
118     DO i=1,sNx
119     arr(i,j,bi,bj)=HEFF(i,j,1,bi,bj)
120     ENDDO
121     ENDDO
122     ENDDO
123     ENDDO
124     _BARRIER
125     _BEGIN_MASTER( myThid )
126     CALL WRITE_FLD_XY_RS( 'HEFF.',suff,arr,myIter,myThid)
127     _END_MASTER( myThid )
128     _BARRIER
129 dimitri 1.6 #ifdef SEAICE_DEBUG
130     _EXCH_XY_R4( arr, myThid )
131     CALL PLOT_FIELD_XYRS( arr , 'Current heff ', myIter, myThid )
132     #endif
133 heimbach 1.2
134     DO bj=myByLo(myThid),myByHi(myThid)
135     DO bi=myBxLo(myThid),myBxHi(myThid)
136     DO j=1,sNy
137     DO i=1,sNx
138     arr(i,j,bi,bj)=AREA(i,j,1,bi,bj)
139     ENDDO
140     ENDDO
141     ENDDO
142     ENDDO
143     _BARRIER
144     _BEGIN_MASTER( myThid )
145     CALL WRITE_FLD_XY_RS( 'AREA.',suff,arr,myIter,myThid)
146     _END_MASTER( myThid )
147     _BARRIER
148     #ifdef SEAICE_DEBUG
149 dimitri 1.6 _EXCH_XY_R4( arr, myThid )
150     CALL PLOT_FIELD_XYRS( arr , 'Current area ', myIter, myThid )
151 dimitri 1.5 #endif
152 heimbach 1.2
153     ENDIF
154     ENDIF
155    
156     C----------------------------------------------------------------
157     C Do SEAICE time averaging.
158     C----------------------------------------------------------------
159    
160     #ifdef ALLOW_TIMEAVE
161    
162     C-- Time-cumulations
163     DO bj = myByLo(myThid), myByHi(myThid)
164     DO bi = myBxLo(myThid), myBxHi(myThid)
165     DO j=1,sNy
166     DO i=1,sNx
167     FUtave(i,j,1,bi,bj) =
168     & FUtave(i,j,1,bi,bj) +FU(i,j,bi,bj) *deltaTclock
169     FVtave(i,j,1,bi,bj) =
170     & FVtave(i,j,1,bi,bj) +FV(i,j,bi,bj) *deltaTclock
171     EmPmRtave(i,j,1,bi,bj)=
172     & EmPmRtave(i,j,1,bi,bj)+EmPmR(i,j,bi,bj) *deltaTclock
173     QNETtave(i,j,1,bi,bj) =
174     & QNETtave(i,j,1,bi,bj) +QNET(i,j,bi,bj) *deltaTclock
175     QSWtave(i,j,1,bi,bj) =
176     & QSWtave(i,j,1,bi,bj) +QSW(i,j,bi,bj) *deltaTclock
177     UICEtave(i,j,1,bi,bj) =
178     & UICEtave(i,j,1,bi,bj) +UICE(i,j,1,bi,bj)*deltaTclock
179     VICEtave(i,j,1,bi,bj) =
180     & VICEtave(i,j,1,bi,bj) +VICE(i,j,1,bi,bj)*deltaTclock
181     HEFFtave(i,j,1,bi,bj) =
182     & HEFFtave(i,j,1,bi,bj) +HEFF(i,j,1,bi,bj)*deltaTclock
183     AREAtave(i,j,1,bi,bj) =
184     & AREAtave(i,j,1,bi,bj) +AREA(i,j,1,bi,bj)*deltaTclock
185     ENDDO
186     ENDDO
187     DO k=1,Nr
188     SEAICE_TimeAve(k,bi,bj)=SEAICE_TimeAve(k,bi,bj)+deltaTclock
189     ENDDO
190     ENDDO
191     ENDDO
192    
193     C Dump files and restart average computation if needed
194 dimitri 1.9 dumpFiles = .FALSE.
195     IF ( myIter .NE. nIter0 ) THEN
196     IF (DIFFERENT_MULTIPLE(SEAICE_taveFreq,myTime,myTime-deltaTClock))
197     & dumpFiles = .TRUE.
198     #ifdef ALLOW_CAL
199     IF ( calendarDumps .AND. (
200     & (SEAICE_taveFreq.GE. 2592000.AND.SEAICE_taveFreq.LE. 2678400).OR.
201     & (SEAICE_taveFreq.GE.31104000.AND.SEAICE_taveFreq.LE.31968000)))
202     & THEN
203     C-- Convert approximate months (30-31 days) and years (360-372 days)
204     C to exact calendar months and years.
205     C- First determine calendar dates for this and previous time step.
206     call cal_GetDate( myiter ,mytime ,thisdate,mythid )
207     call cal_GetDate( myiter-1,mytime-deltaTClock,prevdate,mythid )
208     dumpFiles = .FALSE.
209     C- Monthly SEAICE_taveFreq:
210     IF( SEAICE_taveFreq.GE. 2592000 .AND. SEAICE_taveFreq.LE. 2678400
211     & .AND. (thisdate(1)-prevdate(1)).GT.50 ) dumpFiles = .TRUE.
212     C- Yearly SEAICE_taveFreq:
213     IF( SEAICE_taveFreq.GE.31104000 .AND. SEAICE_taveFreq.LE.31968000
214     & .AND. (thisdate(1)-prevdate(1)).GT.5000 ) dumpFiles = .TRUE.
215     ENDIF
216     #endif
217     ENDIF
218    
219     IF (dumpFiles) THEN
220 heimbach 1.2 C Normalize by integrated time
221     DO bj = myByLo(myThid), myByHi(myThid)
222     DO bi = myBxLo(myThid), myBxHi(myThid)
223     CALL TIMEAVE_NORMALIZ(FUtave ,SEAICE_timeave, 1,
224     & bi,bj,myThid)
225     CALL TIMEAVE_NORMALIZ(FVtave ,SEAICE_timeave, 1,
226     & bi,bj,myThid)
227     CALL TIMEAVE_NORMALIZ(EmPmRtave,SEAICE_timeave, 1,
228     & bi,bj,myThid)
229     CALL TIMEAVE_NORMALIZ(QNETtave ,SEAICE_timeave, 1,
230     & bi,bj,myThid)
231     CALL TIMEAVE_NORMALIZ(QSWtave ,SEAICE_timeave, 1,
232     & bi,bj,myThid)
233     CALL TIMEAVE_NORMALIZ(UICEtave ,SEAICE_timeave, 1,
234     & bi,bj,myThid)
235     CALL TIMEAVE_NORMALIZ(VICEtave ,SEAICE_timeave, 1,
236     & bi,bj,myThid)
237     CALL TIMEAVE_NORMALIZ(HEFFtave ,SEAICE_timeave, 1,
238     & bi,bj,myThid)
239     CALL TIMEAVE_NORMALIZ(AREAtave ,SEAICE_timeave, 1,
240     & bi,bj,myThid)
241     ENDDO
242     ENDDO
243    
244     WRITE(suff,'(I10.10)') myIter
245 dimitri 1.5 _BARRIER
246     _BEGIN_MASTER( myThid )
247 heimbach 1.2 CALL WRITE_FLD_XY_RL('FUtave.' ,suff,FUtave ,myIter,myThid)
248     CALL WRITE_FLD_XY_RL('FVtave.' ,suff,FVtave ,myIter,myThid)
249     CALL WRITE_FLD_XY_RL('EmPmRtave.',suff,EmPmRtave,myIter,myThid)
250     CALL WRITE_FLD_XY_RL('QNETtave.' ,suff,QNETtave ,myIter,myThid)
251     CALL WRITE_FLD_XY_RL('QSWtave.' ,suff,QSWtave ,myIter,myThid)
252     CALL WRITE_FLD_XY_RL('UICEtave.' ,suff,UICEtave ,myIter,myThid)
253     CALL WRITE_FLD_XY_RL('VICEtave.' ,suff,VICEtave ,myIter,myThid)
254     CALL WRITE_FLD_XY_RL('HEFFtave.' ,suff,HEFFtave ,myIter,myThid)
255     CALL WRITE_FLD_XY_RL('AREAtave.' ,suff,AREAtave ,myIter,myThid)
256 dimitri 1.5 _END_MASTER( myThid )
257     _BARRIER
258 heimbach 1.2
259     C Reset averages to zero
260     DO bj = myByLo(myThid), myByHi(myThid)
261     DO bi = myBxLo(myThid), myBxHi(myThid)
262     CALL TIMEAVE_RESET(FUtave ,1,bi,bj,myThid)
263     CALL TIMEAVE_RESET(FVtave ,1,bi,bj,myThid)
264     CALL TIMEAVE_RESET(EmPmRtave,1,bi,bj,myThid)
265     CALL TIMEAVE_RESET(QNETtave ,1,bi,bj,myThid)
266     CALL TIMEAVE_RESET(QSWtave ,1,bi,bj,myThid)
267     CALL TIMEAVE_RESET(UICEtave ,1,bi,bj,myThid)
268     CALL TIMEAVE_RESET(VICEtave ,1,bi,bj,myThid)
269     CALL TIMEAVE_RESET(HEFFtave ,1,bi,bj,myThid)
270     CALL TIMEAVE_RESET(AREAtave ,1,bi,bj,myThid)
271     DO k=1,Nr
272 dimitri 1.3 SEAICE_TimeAve(k,bi,bj)=ZERO
273 heimbach 1.2 ENDDO
274     ENDDO
275     ENDDO
276    
277     ENDIF
278    
279     #endif /* ALLOW_TIMEAVE */
280    
281     RETURN
282     END

  ViewVC Help
Powered by ViewVC 1.1.22