File indexing completed on 2018-03-02 18:43:44 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
809c36b928 Patr*0001 #include "SEAICE_OPTIONS.h"
610bf19d8b Jean*0002 #ifdef ALLOW_EXF
0003 # include "EXF_OPTIONS.h"
0004 #endif
809c36b928 Patr*0005
eb9c144150 Jean*0006
01b88d49f4 Jean*0007
eb9c144150 Jean*0008
0009
0010 SUBROUTINE SEAICE_OUTPUT( myTime, myIter, myThid )
0011
0012
0013
0014
0015
0016
0017
0018
809c36b928 Patr*0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "FFIELDS.h"
ccaa3c61f4 Patr*0026 #include "SEAICE_SIZE.h"
809c36b928 Patr*0027 #include "SEAICE_PARAMS.h"
0028 #include "SEAICE.h"
ccaa3c61f4 Patr*0029 #include "SEAICE_TRACER.h"
8c50aa8796 Jean*0030 #include "SEAICE_TAVE.h"
ae1fb66b64 Dimi*0031 #ifdef ALLOW_EXF
0032 # include "EXF_FIELDS.h"
0033 #endif
809c36b928 Patr*0034
eb9c144150 Jean*0035
809c36b928 Patr*0036
eb9c144150 Jean*0037
0038
0039
809c36b928 Patr*0040 _RL myTime
0041 INTEGER myIter
0042 INTEGER myThid
0043
8c50aa8796 Jean*0044
0045 LOGICAL DIFFERENT_MULTIPLE
0046 EXTERNAL DIFFERENT_MULTIPLE
0047
eb9c144150 Jean*0048
94516c7625 Jean*0049
0050
809c36b928 Patr*0051
eb9c144150 Jean*0052 CHARACTER*(10) suff
e54fe3e1f9 Gael*0053 #ifdef ALLOW_SITRACER
ccaa3c61f4 Patr*0054 CHARACTER*(13) pref
01b88d49f4 Jean*0055 INTEGER iTracer
eb9c144150 Jean*0056 #endif
0057 #ifdef ALLOW_TIMEAVE
8c50aa8796 Jean*0058 INTEGER i, j, bi, bj
86b84a92fc Patr*0059 #ifdef SEAICE_ITD
0060 INTEGER k
0061 #endif
fc64655a31 Dimi*0062 LOGICAL dumpFiles
eb9c144150 Jean*0063 #endif /* ALLOW_TIMEAVE */
0064 #ifdef ALLOW_MNC
b22b541fe9 Ed H*0065 CHARACTER*(1) pf
eb9c144150 Jean*0066 #endif /* ALLOW_MNC */
0067
b22b541fe9 Ed H*0068
809c36b928 Patr*0069 IF (SEAICEwriteState) THEN
0070
ec1f837e9d Ed H*0071 IF ( DIFFERENT_MULTIPLE(SEAICE_dumpFreq,myTime,deltaTClock)
bef2403f36 Jean*0072 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
0073 & myTime.EQ.startTime )
ec1f837e9d Ed H*0074 & ) THEN
8a685a2f38 Jean*0075
de859229b1 Ed H*0076 #ifdef ALLOW_MNC
ec1f837e9d Ed H*0077 IF ( useMNC .AND. SEAICE_dump_mnc ) THEN
8c50aa8796 Jean*0078 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
0079 pf(1:1) = 'D'
0080 ELSE
0081 pf(1:1) = 'R'
0082 ENDIF
ec1f837e9d Ed H*0083 CALL MNC_CW_SET_UDIM('sice', -1, myThid)
0084 CALL MNC_CW_RL_W_S('D','sice',0,0,'T', myTime, myThid)
0085 CALL MNC_CW_SET_UDIM('sice', 0, myThid)
0086 CALL MNC_CW_I_W_S('I','sice',0,0,'iter', myIter, myThid)
0087 CALL MNC_CW_RL_W_S('D','sice',0,0,'model_time',
0088 & myTime,myThid)
6e2f4e58fa Mart*0089 #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
0090 IF ( SEAICEuseEVP ) THEN
dfc84e52b6 Mart*0091 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma1',
6e2f4e58fa Mart*0092 & seaice_sigma1,myThid)
dfc84e52b6 Mart*0093 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma2',
6e2f4e58fa Mart*0094 & seaice_sigma2,myThid)
dfc84e52b6 Mart*0095 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_sigma12',
6e2f4e58fa Mart*0096 & seaice_sigma12,myThid)
0097 ENDIF
0098 #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
772590b63c Mart*0099 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_UICE',uIce,myThid)
0100 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_VICE',vIce,myThid)
b5d9cb1403 Jean*0101 IF ( .NOT.useThSIce ) THEN
0102 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_HEFF',hEff,myThid)
0103 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_AREA',area,myThid)
86b84a92fc Patr*0104 #ifdef SEAICE_ITD
610bf19d8b Jean*0105
0106
86b84a92fc Patr*0107 #endif
b5d9cb1403 Jean*0108 ENDIF
2a4b53eed1 Jean*0109 #ifdef ALLOW_EXF
99586206be Jean*0110 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_UWIND',uwind,myThid)
0111 CALL MNC_CW_RL_W(pf,'sice',0,0,'si_VWIND',vwind,myThid)
2a4b53eed1 Jean*0112 #endif
b22b541fe9 Ed H*0113 CALL MNC_CW_RS_W(pf,'sice',0,0,'fu',fu,myThid)
0114 CALL MNC_CW_RS_W(pf,'sice',0,0,'fv',fv,myThid)
0115 CALL MNC_CW_RS_W(pf,'sice',0,0,'EmPmR',EmPmR,myThid)
0116 CALL MNC_CW_RS_W(pf,'sice',0,0,'Qnet',Qnet,myThid)
0117 CALL MNC_CW_RS_W(pf,'sice',0,0,'Qsw',Qsw,myThid)
ec1f837e9d Ed H*0118 ENDIF
eb9c144150 Jean*0119 #endif /* ALLOW_MNC */
ec1f837e9d Ed H*0120 IF (SEAICE_dump_mdsio) THEN
af20bc5e19 Jean*0121 IF ( rwSuffixType.EQ.0 ) THEN
0122 WRITE(suff,'(I10.10)') myIter
0123 ELSE
0124 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
0125 ENDIF
bef2403f36 Jean*0126 IF ( myIter.NE.nIter0 ) THEN
2a4b53eed1 Jean*0127 #ifdef ALLOW_EXF
99586206be Jean*0128 CALL WRITE_FLD_XY_RL('UWIND.',suff,uwind,myIter,myThid)
0129 CALL WRITE_FLD_XY_RL('VWIND.',suff,vwind,myIter,myThid)
2a4b53eed1 Jean*0130 #endif
eb9c144150 Jean*0131 CALL WRITE_FLD_XY_RS('FU.',suff,fu,myIter,myThid)
0132 CALL WRITE_FLD_XY_RS('FV.',suff,fv,myIter,myThid)
0133 CALL WRITE_FLD_XY_RS('EmPmR.',suff,EmPmR,myIter,myThid)
0134 CALL WRITE_FLD_XY_RS('Qnet.',suff,Qnet,myIter,myThid)
0135 CALL WRITE_FLD_XY_RS('Qsw.',suff,Qsw,myIter,myThid)
bef2403f36 Jean*0136 ENDIF
772590b63c Mart*0137 CALL WRITE_FLD_XY_RL( 'UICE.',suff,uIce,myIter,myThid)
0138 CALL WRITE_FLD_XY_RL( 'VICE.',suff,vIce,myIter,myThid)
b5d9cb1403 Jean*0139 IF ( .NOT.useThSIce ) THEN
0140 CALL WRITE_FLD_XY_RL( 'HEFF.',suff,hEff,myIter,myThid)
0141 CALL WRITE_FLD_XY_RL( 'AREA.',suff,area,myIter,myThid)
0142 CALL WRITE_FLD_XY_RL( 'HSNOW.',suff,HSNOW,myIter,myThid)
86b84a92fc Patr*0143 #ifdef SEAICE_ITD
b5d9cb1403 Jean*0144 CALL WRITE_FLD_3D_RL( 'HEFFITD.', suff, nITD, HEFFITD,
0145 & myIter, myThid )
0146 CALL WRITE_FLD_3D_RL( 'AREAITD.', suff, nITD, AREAITD,
0147 & myIter, myThid )
0148 CALL WRITE_FLD_3D_RL('HSNOWITD.', suff, nITD, HSNOWITD,
0149 & myIter, myThid )
86b84a92fc Patr*0150 #endif
a98c4b8072 Ian *0151 #ifdef SEAICE_VARIABLE_SALINITY
b5d9cb1403 Jean*0152 CALL WRITE_FLD_XY_RL( 'HSALT.',suff,HSALT,myIter,myThid)
fdfa8e151f Dimi*0153 #endif
e54fe3e1f9 Gael*0154 #ifdef ALLOW_SITRACER
b5d9cb1403 Jean*0155 DO iTracer = 1, SItrNumInUse
0156 WRITE(pref,'(A8,I2.2,A1)') 'SITRACER', iTracer, '.'
0157 CALL WRITE_FLD_XY_RL(
0158 & pref,suff,
0159 & SItracer(1-OLx,1-OLy,1,1,iTracer),
0160 & myIter, myThid )
0161 ENDDO
f681b7f5d4 Dimi*0162 #endif
b5d9cb1403 Jean*0163 ENDIF
6e2f4e58fa Mart*0164 #if ( defined(SEAICE_CGRID) && defined(SEAICE_ALLOW_EVP) )
0165 IF ( SEAICEuseEVP ) THEN
dfc84e52b6 Mart*0166 CALL WRITE_FLD_XY_RL('SIGMA1.',suff,seaice_sigma1,
6e2f4e58fa Mart*0167 & myIter,myThid)
dfc84e52b6 Mart*0168 CALL WRITE_FLD_XY_RL('SIGMA2.',suff,seaice_sigma2,
6e2f4e58fa Mart*0169 & myIter,myThid)
dfc84e52b6 Mart*0170 CALL WRITE_FLD_XY_RL('SIGMA12.',suff,seaice_sigma12,
6e2f4e58fa Mart*0171 & myIter,myThid)
0172 ENDIF
0173 #endif /* SEAICE_CGRID and SEAICE_ALLOW_EVP */
eb9c144150 Jean*0174
ec1f837e9d Ed H*0175 ENDIF
8a685a2f38 Jean*0176
eb9c144150 Jean*0177 ENDIF
809c36b928 Patr*0178 ENDIF
0179
0180
0181
0182
0183
0184 #ifdef ALLOW_TIMEAVE
8c50aa8796 Jean*0185 IF ( SEAICE_taveFreq.GT.0. _d 0 ) THEN
809c36b928 Patr*0186
0187
8c50aa8796 Jean*0188 DO bj = myByLo(myThid), myByHi(myThid)
0189 DO bi = myBxLo(myThid), myBxHi(myThid)
0190 DO j=1,sNy
0191 DO i=1,sNx
0192
0193 FUtave(i,j,bi,bj) =
af20bc5e19 Jean*0194 & FUtave(i,j,bi,bj) +FU(i,j,bi,bj) *deltaTClock
8c50aa8796 Jean*0195 FVtave(i,j,bi,bj) =
af20bc5e19 Jean*0196 & FVtave(i,j,bi,bj) +FV(i,j,bi,bj) *deltaTClock
8c50aa8796 Jean*0197 EmPmRtave(i,j,bi,bj)=
af20bc5e19 Jean*0198 & EmPmRtave(i,j,bi,bj)+EmPmR(i,j,bi,bj) *deltaTClock
8c50aa8796 Jean*0199 QNETtave(i,j,bi,bj) =
af20bc5e19 Jean*0200 & QNETtave(i,j,bi,bj) +QNET(i,j,bi,bj) *deltaTClock
8c50aa8796 Jean*0201 QSWtave(i,j,bi,bj) =
af20bc5e19 Jean*0202 & QSWtave(i,j,bi,bj) +QSW(i,j,bi,bj) *deltaTClock
8c50aa8796 Jean*0203 UICEtave(i,j,bi,bj) =
af20bc5e19 Jean*0204 & UICEtave(i,j,bi,bj) +UICE(i,j,bi,bj)*deltaTClock
8c50aa8796 Jean*0205 VICEtave(i,j,bi,bj) =
af20bc5e19 Jean*0206 & VICEtave(i,j,bi,bj) +VICE(i,j,bi,bj)*deltaTClock
8c50aa8796 Jean*0207 HEFFtave(i,j,bi,bj) =
af20bc5e19 Jean*0208 & HEFFtave(i,j,bi,bj) +HEFF(i,j,bi,bj)*deltaTClock
8c50aa8796 Jean*0209 AREAtave(i,j,bi,bj) =
af20bc5e19 Jean*0210 & AREAtave(i,j,bi,bj) +AREA(i,j,bi,bj)*deltaTClock
8c50aa8796 Jean*0211 ENDDO
809c36b928 Patr*0212 ENDDO
86b84a92fc Patr*0213 #ifdef SEAICE_ITD
346a7f9e71 Jean*0214 DO k=1,nITD
86b84a92fc Patr*0215 DO j=1,sNy
0216 DO i=1,sNx
0217 HEFFITDtave(i,j,k,bi,bj) =
af20bc5e19 Jean*0218 & HEFFITDtave(i,j,k,bi,bj) +HEFFITD(i,j,k,bi,bj)*deltaTClock
86b84a92fc Patr*0219 AREAITDtave(i,j,k,bi,bj) =
af20bc5e19 Jean*0220 & AREAITDtave(i,j,k,bi,bj) +AREAITD(i,j,k,bi,bj)*deltaTClock
86b84a92fc Patr*0221 ENDDO
0222 ENDDO
0223 ENDDO
0224 #endif
af20bc5e19 Jean*0225 SEAICE_timeAve(bi,bj) = SEAICE_timeAve(bi,bj)+deltaTClock
809c36b928 Patr*0226 ENDDO
0227 ENDDO
0228
0229
8c50aa8796 Jean*0230 dumpFiles = .FALSE.
0231 IF ( myIter .NE. nIter0 ) THEN
742cf4499c Jean*0232 dumpFiles =
0233 & DIFFERENT_MULTIPLE(SEAICE_taveFreq,myTime,deltaTClock)
fc64655a31 Dimi*0234 #ifdef ALLOW_CAL
742cf4499c Jean*0235 IF ( useCAL ) THEN
7a31080eb8 Jean*0236 CALL CAL_TIME2DUMP( ZERO, SEAICE_taveFreq, deltaTClock,
742cf4499c Jean*0237 U dumpFiles,
0238 I myTime, myIter, myThid )
0239 ENDIF
fc64655a31 Dimi*0240 #endif
8c50aa8796 Jean*0241 ENDIF
fc64655a31 Dimi*0242
8c50aa8796 Jean*0243 IF (dumpFiles) THEN
809c36b928 Patr*0244
8c50aa8796 Jean*0245 DO bj = myByLo(myThid), myByHi(myThid)
0246 DO bi = myBxLo(myThid), myBxHi(myThid)
0247 CALL TIMEAVE_NORMALIZE( FUtave,
0248 & SEAICE_timeAve, 1, bi, bj, myThid )
0249 CALL TIMEAVE_NORMALIZE( FVtave,
0250 & SEAICE_timeAve, 1, bi, bj, myThid )
0251 CALL TIMEAVE_NORMALIZE( EmPmRtave,
0252 & SEAICE_timeAve, 1, bi, bj, myThid )
0253 CALL TIMEAVE_NORMALIZE( QNETtave,
0254 & SEAICE_timeAve, 1, bi, bj, myThid )
0255 CALL TIMEAVE_NORMALIZE( QSWtave,
0256 & SEAICE_timeAve, 1, bi, bj, myThid )
0257 CALL TIMEAVE_NORMALIZE( UICEtave,
0258 & SEAICE_timeAve, 1, bi, bj, myThid )
0259 CALL TIMEAVE_NORMALIZE( VICEtave,
0260 & SEAICE_timeAve, 1, bi, bj, myThid )
0261 CALL TIMEAVE_NORMALIZE( HEFFtave,
0262 & SEAICE_timeAve, 1, bi, bj, myThid )
0263 CALL TIMEAVE_NORMALIZE( AREAtave,
0264 & SEAICE_timeAve, 1, bi, bj, myThid )
86b84a92fc Patr*0265 #ifdef SEAICE_ITD
0266 CALL TIMEAVE_NORMALIZE( HEFFITDtave,
0267 & SEAICE_timeAve, nITD, bi, bj, myThid )
0268 CALL TIMEAVE_NORMALIZE( AREAITDtave,
0269 & SEAICE_timeAve, nITD, bi, bj, myThid )
0270 #endif
8c50aa8796 Jean*0271 ENDDO
809c36b928 Patr*0272 ENDDO
8c50aa8796 Jean*0273
809c36b928 Patr*0274
de859229b1 Ed H*0275 #ifdef ALLOW_MNC
8c50aa8796 Jean*0276 IF (useMNC .AND. SEAICE_tave_mnc) THEN
0277 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
0278 pf(1:1) = 'D'
0279 ELSE
0280 pf(1:1) = 'R'
0281 ENDIF
de859229b1 Ed H*0282 CALL MNC_CW_SET_UDIM('sice_tave', -1, myThid)
987ff12cb6 Ed H*0283 CALL MNC_CW_RL_W_S('D','sice_tave',0,0,'T', myTime, myThid)
de859229b1 Ed H*0284 CALL MNC_CW_SET_UDIM('sice_tave', 0, myThid)
987ff12cb6 Ed H*0285 CALL MNC_CW_I_W_S('I','sice_tave',0,0,'iter', myIter, myThid)
b22b541fe9 Ed H*0286
0287
0288 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0289 & 'si_UICEtave',UICEtave,myThid)
b22b541fe9 Ed H*0290 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0291 & 'si_VICEtave',VICEtave,myThid)
b22b541fe9 Ed H*0292 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0293 & 'si_FUtave',FUtave,myThid)
b22b541fe9 Ed H*0294 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0295 & 'si_FVtave',FVtave,myThid)
b22b541fe9 Ed H*0296 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0297 & 'si_EmPmRtave',EmPmRtave,myThid)
b22b541fe9 Ed H*0298 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0299 & 'si_QNETtave',QNETtave,myThid)
b22b541fe9 Ed H*0300 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0301 & 'si_QSWtave',QSWtave,myThid)
b22b541fe9 Ed H*0302 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0303 & 'si_HEFFtave',HEFFtave,myThid)
b22b541fe9 Ed H*0304 CALL MNC_CW_RL_W(pf,'sice_tave',0,0,
b726014783 Ed H*0305 & 'si_AREAtave',AREAtave,myThid)
8c50aa8796 Jean*0306 ENDIF
de859229b1 Ed H*0307 #endif
8c50aa8796 Jean*0308 IF (SEAICE_tave_mdsio) THEN
af20bc5e19 Jean*0309 IF ( rwSuffixType.EQ.0 ) THEN
0310 WRITE(suff,'(I10.10)') myIter
0311 ELSE
0312 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
0313 ENDIF
de859229b1 Ed H*0314 CALL WRITE_FLD_XY_RL('FUtave.' ,suff,FUtave ,myIter,myThid)
0315 CALL WRITE_FLD_XY_RL('FVtave.' ,suff,FVtave ,myIter,myThid)
0316 CALL WRITE_FLD_XY_RL('EmPmRtave.',suff,EmPmRtave,myIter,myThid)
0317 CALL WRITE_FLD_XY_RL('QNETtave.' ,suff,QNETtave ,myIter,myThid)
0318 CALL WRITE_FLD_XY_RL('QSWtave.' ,suff,QSWtave ,myIter,myThid)
0319 CALL WRITE_FLD_XY_RL('UICEtave.' ,suff,UICEtave ,myIter,myThid)
0320 CALL WRITE_FLD_XY_RL('VICEtave.' ,suff,VICEtave ,myIter,myThid)
0321 CALL WRITE_FLD_XY_RL('HEFFtave.' ,suff,HEFFtave ,myIter,myThid)
0322 CALL WRITE_FLD_XY_RL('AREAtave.' ,suff,AREAtave ,myIter,myThid)
8c50aa8796 Jean*0323 ENDIF
8a685a2f38 Jean*0324
809c36b928 Patr*0325
8c50aa8796 Jean*0326 DO bj = myByLo(myThid), myByHi(myThid)
0327 DO bi = myBxLo(myThid), myBxHi(myThid)
0328 CALL TIMEAVE_RESET( FUtave , 1, bi, bj, myThid )
0329 CALL TIMEAVE_RESET( FVtave , 1, bi, bj, myThid )
0330 CALL TIMEAVE_RESET( EmPmRtave, 1, bi, bj, myThid )
0331 CALL TIMEAVE_RESET( QNETtave , 1, bi, bj, myThid )
0332 CALL TIMEAVE_RESET( QSWtave , 1, bi, bj, myThid )
0333 CALL TIMEAVE_RESET( UICEtave , 1, bi, bj, myThid )
0334 CALL TIMEAVE_RESET( VICEtave , 1, bi, bj, myThid )
0335 CALL TIMEAVE_RESET( HEFFtave , 1, bi, bj, myThid )
0336 CALL TIMEAVE_RESET( AREAtave , 1, bi, bj, myThid )
0337 SEAICE_timeAve(bi,bj) = ZERO
809c36b928 Patr*0338 ENDDO
0339 ENDDO
8a685a2f38 Jean*0340
eb9c144150 Jean*0341
8c50aa8796 Jean*0342 ENDIF
8a685a2f38 Jean*0343
8c50aa8796 Jean*0344
0345 ENDIF
809c36b928 Patr*0346 #endif /* ALLOW_TIMEAVE */
0347
9baf699ab7 Jean*0348
0349 CALL SEAICE_MONITOR( myTime, myIter, myThid )
0350
1ffb1fabff Jean*0351
0352 IF ( useOBCS ) CALL SEAICE_OBCS_OUTPUT( myTime, myIter, myThid )
0353
809c36b928 Patr*0354 RETURN
0355 END