/[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.6 - (show annotations) (download)
Fri May 23 20:19:16 2003 UTC (20 years, 11 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint51j_post, branchpoint-genmake2, checkpoint50h_post, checkpoint51a_post, checkpoint51e_post, checkpoint51b_post, checkpoint51c_post, checkpoint51f_pre, checkpoint50i_post, checkpoint51, checkpoint51b_pre, checkpoint51h_pre, checkpoint50g_post, checkpoint51g_post, checkpoint51f_post, checkpoint51d_post, checkpoint51i_pre
Branch point for: branch-genmake2
Changes since 1.5: +36 -12 lines
checkpoint50g_post
o merged with release1_p17 (pkg/seaice and verification/lab_sea)
  - added SEAICE_MULTILEVEL for 8-category sea-ice thermodynamics
  - LSR sea-ice dynamic solver moved to SouthWest B-grid location and
    made the default because of faster convergence than ADI

1 C $Header:
2
3 #include "SEAICE_OPTIONS.h"
4
5 SUBROUTINE SEAICE_DO_DIAGS( myTime, myIter, myThid )
6 C /==========================================================\
7 C | SUBROUTINE SEAICE_DO_DIAGS |
8 C | o Do SEAICE diagnostic output. |
9 C \==========================================================/
10 IMPLICIT NONE
11
12 C === Global variables ===
13 #include "SIZE.h"
14 #include "EEPARAMS.h"
15 #include "PARAMS.h"
16 #include "FFIELDS.h"
17 #include "SEAICE_DIAGS.h"
18 #include "SEAICE_PARAMS.h"
19 #include "SEAICE_FFIELDS.h"
20 #include "SEAICE.h"
21
22 C == Routine arguments ==
23 C myTime - Current time of simulation ( s )
24 C myIter - Iteration number
25 C myThid - Number of this instance of SEAICE_DO_DIAGS
26 _RL myTime
27 INTEGER myIter
28 INTEGER myThid
29
30 #ifdef ALLOW_SEAICE
31
32 C == Local variables ==
33 CHARACTER*(MAX_LEN_MBUF) suff
34 LOGICAL DIFFERENT_MULTIPLE
35 EXTERNAL DIFFERENT_MULTIPLE
36 INTEGER i, j, k, bi, bj
37 _RS arr(1-oLx:sNx+oLx,1-oLy:sNy+oLy,nSx,nSy)
38
39 IF (SEAICEwriteState) THEN
40
41 IF ( DIFFERENT_MULTIPLE(SEAICE_dumpFreq,myTime,
42 & myTime-deltaTClock) ) THEN
43
44 WRITE(suff,'(I10.10)') myIter
45 _BARRIER
46 _BEGIN_MASTER( myThid )
47 CALL WRITE_FLD_XY_RS( 'UWIND.',suff,uwind,myIter,myThid)
48 CALL WRITE_FLD_XY_RS( 'VWIND.',suff,vwind,myIter,myThid)
49 CALL WRITE_FLD_XY_RS( 'FU.',suff,fu,myIter,myThid)
50 CALL WRITE_FLD_XY_RS( 'FV.',suff,fv,myIter,myThid)
51 CALL WRITE_FLD_XY_RS( 'EmPmR.',suff,EmPmR,myIter,myThid)
52 CALL WRITE_FLD_XY_RS( 'Qnet.',suff,Qnet,myIter,myThid)
53 CALL WRITE_FLD_XY_RS( 'Qsw.',suff,Qsw,myIter,myThid)
54 _END_MASTER( myThid )
55 _BARRIER
56
57 #ifdef SEAICE_DEBUG
58 CALL PLOT_FIELD_XYRS( uwind , 'Current uwind ', myIter, myThid )
59 CALL PLOT_FIELD_XYRS( vwind , 'Current vwind ', myIter, myThid )
60 CALL PLOT_FIELD_XYRS( atemp , 'Current atemp ', myIter, myThid )
61 CALL PLOT_FIELD_XYRS( aqh , 'Current aqh ', myIter, myThid )
62 CALL PLOT_FIELD_XYRS( lwdown, 'Current lwdown', myIter, myThid )
63 CALL PLOT_FIELD_XYRS( swdown, 'Current swdown', myIter, myThid )
64 CALL PLOT_FIELD_XYRS( precip, 'Current precip', myIter, myThid )
65 CALL PLOT_FIELD_XYRL( evap , 'Current evap ', myIter, myThid )
66 CALL PLOT_FIELD_XYRS( runoff, 'Current runoff', myIter, myThid )
67 CALL PLOT_FIELD_XYRS( SSS , 'Current SSS ', myIter, myThid )
68 CALL PLOT_FIELD_XYRS( SST , 'Current SST ', myIter, myThid )
69 CALL PLOT_FIELD_XYRL( fu , 'Current fu ', myIter, myThid )
70 CALL PLOT_FIELD_XYRL( fv , 'Current fv ', myIter, myThid )
71 CALL PLOT_FIELD_XYRL( EmPmR , 'Current EmPmR ', myIter, myThid )
72 CALL PLOT_FIELD_XYRL( Qnet , 'Current Qnet ', myIter, myThid )
73 CALL PLOT_FIELD_XYRL( Qsw , 'Current Qsw ', myIter, myThid )
74 #endif
75
76 DO bj=myByLo(myThid),myByHi(myThid)
77 DO bi=myBxLo(myThid),myBxHi(myThid)
78 DO j=1,sNy
79 DO i=1,sNx
80 arr(i,j,bi,bj)=UICE(i,j,1,bi,bj)
81 ENDDO
82 ENDDO
83 ENDDO
84 ENDDO
85 _BARRIER
86 _BEGIN_MASTER( myThid )
87 CALL WRITE_FLD_XY_RS( 'UICE.',suff,arr,myIter,myThid)
88 _END_MASTER( myThid )
89 _BARRIER
90 #ifdef SEAICE_DEBUG
91 _EXCH_XY_R4( arr, myThid )
92 CALL PLOT_FIELD_XYRS( arr , 'Current uice ', myIter, myThid )
93 #endif
94
95 DO bj=myByLo(myThid),myByHi(myThid)
96 DO bi=myBxLo(myThid),myBxHi(myThid)
97 DO j=1,sNy
98 DO i=1,sNx
99 arr(i,j,bi,bj)=VICE(i,j,1,bi,bj)
100 ENDDO
101 ENDDO
102 ENDDO
103 ENDDO
104 _BARRIER
105 _BEGIN_MASTER( myThid )
106 CALL WRITE_FLD_XY_RS( 'VICE.',suff,arr,myIter,myThid)
107 _END_MASTER( myThid )
108 _BARRIER
109 #ifdef SEAICE_DEBUG
110 _EXCH_XY_R4( arr, myThid )
111 CALL PLOT_FIELD_XYRS( arr , 'Current vice ', myIter, myThid )
112 #endif
113
114 DO bj=myByLo(myThid),myByHi(myThid)
115 DO bi=myBxLo(myThid),myBxHi(myThid)
116 DO j=1,sNy
117 DO i=1,sNx
118 arr(i,j,bi,bj)=HEFF(i,j,1,bi,bj)
119 ENDDO
120 ENDDO
121 ENDDO
122 ENDDO
123 _BARRIER
124 _BEGIN_MASTER( myThid )
125 CALL WRITE_FLD_XY_RS( 'HEFF.',suff,arr,myIter,myThid)
126 _END_MASTER( myThid )
127 _BARRIER
128 #ifdef SEAICE_DEBUG
129 _EXCH_XY_R4( arr, myThid )
130 CALL PLOT_FIELD_XYRS( arr , 'Current heff ', myIter, myThid )
131 #endif
132
133 DO bj=myByLo(myThid),myByHi(myThid)
134 DO bi=myBxLo(myThid),myBxHi(myThid)
135 DO j=1,sNy
136 DO i=1,sNx
137 arr(i,j,bi,bj)=AREA(i,j,1,bi,bj)
138 ENDDO
139 ENDDO
140 ENDDO
141 ENDDO
142 _BARRIER
143 _BEGIN_MASTER( myThid )
144 CALL WRITE_FLD_XY_RS( 'AREA.',suff,arr,myIter,myThid)
145 _END_MASTER( myThid )
146 _BARRIER
147 #ifdef SEAICE_DEBUG
148 _EXCH_XY_R4( arr, myThid )
149 CALL PLOT_FIELD_XYRS( arr , 'Current area ', myIter, myThid )
150 #endif
151
152 ENDIF
153 ENDIF
154
155 C----------------------------------------------------------------
156 C Do SEAICE time averaging.
157 C----------------------------------------------------------------
158
159 #ifdef ALLOW_TIMEAVE
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 FUtave(i,j,1,bi,bj) =
167 & FUtave(i,j,1,bi,bj) +FU(i,j,bi,bj) *deltaTclock
168 FVtave(i,j,1,bi,bj) =
169 & FVtave(i,j,1,bi,bj) +FV(i,j,bi,bj) *deltaTclock
170 EmPmRtave(i,j,1,bi,bj)=
171 & EmPmRtave(i,j,1,bi,bj)+EmPmR(i,j,bi,bj) *deltaTclock
172 QNETtave(i,j,1,bi,bj) =
173 & QNETtave(i,j,1,bi,bj) +QNET(i,j,bi,bj) *deltaTclock
174 QSWtave(i,j,1,bi,bj) =
175 & QSWtave(i,j,1,bi,bj) +QSW(i,j,bi,bj) *deltaTclock
176 UICEtave(i,j,1,bi,bj) =
177 & UICEtave(i,j,1,bi,bj) +UICE(i,j,1,bi,bj)*deltaTclock
178 VICEtave(i,j,1,bi,bj) =
179 & VICEtave(i,j,1,bi,bj) +VICE(i,j,1,bi,bj)*deltaTclock
180 HEFFtave(i,j,1,bi,bj) =
181 & HEFFtave(i,j,1,bi,bj) +HEFF(i,j,1,bi,bj)*deltaTclock
182 AREAtave(i,j,1,bi,bj) =
183 & AREAtave(i,j,1,bi,bj) +AREA(i,j,1,bi,bj)*deltaTclock
184 ENDDO
185 ENDDO
186 DO k=1,Nr
187 SEAICE_TimeAve(k,bi,bj)=SEAICE_TimeAve(k,bi,bj)+deltaTclock
188 ENDDO
189 ENDDO
190 ENDDO
191
192 C Dump files and restart average computation if needed
193 IF ( myIter.NE.nIter0 .AND.
194 & DIFFERENT_MULTIPLE(SEAICE_taveFreq,myTime,myTime-deltaTClock)
195 & ) THEN
196
197 C Normalize by integrated time
198 DO bj = myByLo(myThid), myByHi(myThid)
199 DO bi = myBxLo(myThid), myBxHi(myThid)
200 CALL TIMEAVE_NORMALIZ(FUtave ,SEAICE_timeave, 1,
201 & bi,bj,myThid)
202 CALL TIMEAVE_NORMALIZ(FVtave ,SEAICE_timeave, 1,
203 & bi,bj,myThid)
204 CALL TIMEAVE_NORMALIZ(EmPmRtave,SEAICE_timeave, 1,
205 & bi,bj,myThid)
206 CALL TIMEAVE_NORMALIZ(QNETtave ,SEAICE_timeave, 1,
207 & bi,bj,myThid)
208 CALL TIMEAVE_NORMALIZ(QSWtave ,SEAICE_timeave, 1,
209 & bi,bj,myThid)
210 CALL TIMEAVE_NORMALIZ(UICEtave ,SEAICE_timeave, 1,
211 & bi,bj,myThid)
212 CALL TIMEAVE_NORMALIZ(VICEtave ,SEAICE_timeave, 1,
213 & bi,bj,myThid)
214 CALL TIMEAVE_NORMALIZ(HEFFtave ,SEAICE_timeave, 1,
215 & bi,bj,myThid)
216 CALL TIMEAVE_NORMALIZ(AREAtave ,SEAICE_timeave, 1,
217 & bi,bj,myThid)
218 ENDDO
219 ENDDO
220
221 WRITE(suff,'(I10.10)') myIter
222 _BARRIER
223 _BEGIN_MASTER( myThid )
224 CALL WRITE_FLD_XY_RL('FUtave.' ,suff,FUtave ,myIter,myThid)
225 CALL WRITE_FLD_XY_RL('FVtave.' ,suff,FVtave ,myIter,myThid)
226 CALL WRITE_FLD_XY_RL('EmPmRtave.',suff,EmPmRtave,myIter,myThid)
227 CALL WRITE_FLD_XY_RL('QNETtave.' ,suff,QNETtave ,myIter,myThid)
228 CALL WRITE_FLD_XY_RL('QSWtave.' ,suff,QSWtave ,myIter,myThid)
229 CALL WRITE_FLD_XY_RL('UICEtave.' ,suff,UICEtave ,myIter,myThid)
230 CALL WRITE_FLD_XY_RL('VICEtave.' ,suff,VICEtave ,myIter,myThid)
231 CALL WRITE_FLD_XY_RL('HEFFtave.' ,suff,HEFFtave ,myIter,myThid)
232 CALL WRITE_FLD_XY_RL('AREAtave.' ,suff,AREAtave ,myIter,myThid)
233 _END_MASTER( myThid )
234 _BARRIER
235
236 C Reset averages to zero
237 DO bj = myByLo(myThid), myByHi(myThid)
238 DO bi = myBxLo(myThid), myBxHi(myThid)
239 CALL TIMEAVE_RESET(FUtave ,1,bi,bj,myThid)
240 CALL TIMEAVE_RESET(FVtave ,1,bi,bj,myThid)
241 CALL TIMEAVE_RESET(EmPmRtave,1,bi,bj,myThid)
242 CALL TIMEAVE_RESET(QNETtave ,1,bi,bj,myThid)
243 CALL TIMEAVE_RESET(QSWtave ,1,bi,bj,myThid)
244 CALL TIMEAVE_RESET(UICEtave ,1,bi,bj,myThid)
245 CALL TIMEAVE_RESET(VICEtave ,1,bi,bj,myThid)
246 CALL TIMEAVE_RESET(HEFFtave ,1,bi,bj,myThid)
247 CALL TIMEAVE_RESET(AREAtave ,1,bi,bj,myThid)
248 DO k=1,Nr
249 SEAICE_TimeAve(k,bi,bj)=ZERO
250 ENDDO
251 ENDDO
252 ENDDO
253
254 ENDIF
255
256 #endif /* ALLOW_TIMEAVE */
257
258 #endif /* ALLOW_SEAICE */
259
260 RETURN
261 END

  ViewVC Help
Powered by ViewVC 1.1.22