C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/shelfice/shelfice_output.F,v 1.1 2009/06/17 14:48:04 jmc Exp $ C $Name: $ #include "SHELFICE_OPTIONS.h" SUBROUTINE SHELFICE_OUTPUT( myTime, myIter, myThid ) C *==========================================================* C | SUBROUTINE SHELFICE_OUTPUT C | o Do SHELFICE diagnostic output. C *==========================================================* IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "SHELFICE.h" #include "SHELFICE_TAVE.h" C == Routine arguments == C myTime :: my time in simulation ( s ) C myIter :: my Iteration number C myThid :: my Thread Id number _RL myTime INTEGER myIter INTEGER myThid C == Local variables == CHARACTER*(MAX_LEN_MBUF) suff LOGICAL DIFFERENT_MULTIPLE EXTERNAL DIFFERENT_MULTIPLE INTEGER i, j, k, bi, bj LOGICAL dumpFiles CHARACTER*(1) pf IF ( writeBinaryPrec .EQ. precFloat64 ) THEN pf(1:1) = 'D' ELSE pf(1:1) = 'R' ENDIF IF (SHELFICEwriteState) THEN IF ( DIFFERENT_MULTIPLE(SHELFICE_dumpFreq,myTime,deltaTClock) & ) THEN #ifdef ALLOW_MNC IF ( useMNC .AND. SHELFICE_dump_mnc ) THEN CALL MNC_CW_SET_UDIM('shelfice', -1, myThid) CALL MNC_CW_RL_W_S('D','shelfice',0,0,'T', myTime, myThid) CALL MNC_CW_SET_UDIM('shelfice', 0, myThid) CALL MNC_CW_I_W_S('I','shelfice',0,0,'iter', myIter, myThid) CALL MNC_CW_RL_W_S('D','shelfice',0,0,'model_time', & myTime,myThid) CALL MNC_CW_RS_W(pf,'shelfice',0,0,'fwFlux', & shelfIceFreshWaterFlux,myThid) CALL MNC_CW_RS_W(pf,'shelfice',0,0,'heatFlux', & shelfIceHeatFlux,myThid) ENDIF #endif IF (SHELFICE_dump_mdsio) THEN WRITE(suff,'(I10.10)') myIter _BARRIER CALL WRITE_FLD_XY_RS( 'SHICE_fwFlux.',suff, & shelficeFreshWaterFlux,myIter,myThid) CALL WRITE_FLD_XY_RS( 'SHICE_heatFlux.',suff, & shelficeHeatFlux,myIter,myThid) _BARRIER ENDIF ENDIF ENDIF C---------------------------------------------------------------- C Do SHELFICE time averaging. C---------------------------------------------------------------- #ifdef ALLOW_TIMEAVE IF ( SHELFICE_taveFreq .GT. 0 ) THEN C-- Time-cumulations DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j=1,sNy DO i=1,sNx shelfice_FrshFluxtave(i,j,1,bi,bj)= & shelfice_frshFluxtave(i,j,1,bi,bj) & + shelficeFreshWaterFlux(i,j,bi,bj) *deltaTclock shelfice_heatFluxtave(i,j,1,bi,bj) = & shelfice_heatFluxtave(i,j,1,bi,bj) & + shelficeHeatFlux(i,j,bi,bj) *deltaTclock ENDDO ENDDO SHELFICE_TimeAve(1,bi,bj)=SHELFICE_TimeAve(1,bi,bj)+deltaTclock ENDDO ENDDO C Dump files and restart average computation if needed dumpFiles = .FALSE. IF ( myIter .NE. nIter0 ) THEN dumpFiles = & DIFFERENT_MULTIPLE(SHELFICE_taveFreq,myTime,deltaTClock) #ifdef ALLOW_CAL IF ( useCAL ) THEN CALL CAL_TIME2DUMP( SHELFICE_taveFreq, deltaTClock, U dumpFiles, I myTime, myIter, myThid ) ENDIF #endif ENDIF IF (dumpFiles) THEN C Normalize by integrated time DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) CALL TIMEAVE_NORMALIZ(shelfice_frshFluxtave,SHELFICE_timeave, & 1,bi,bj,myThid) CALL TIMEAVE_NORMALIZ(shelfice_heatFluxtave,SHELFICE_timeave, & 1,bi,bj,myThid) ENDDO ENDDO #ifdef ALLOW_MNC IF (useMNC .AND. SHELFICE_tave_mnc) THEN CALL MNC_CW_SET_UDIM('shelfice_tave', -1, myThid) CALL MNC_CW_RL_W_S('D','shelfice_tave',0,0,'T', myTime, myThid) CALL MNC_CW_SET_UDIM('shelfice_tave', 0, myThid) CALL MNC_CW_I_W_S('I','shelfice_tave',0,0,'iter', myIter, & myThid) C CALL MNC_CW_RL_W_S('D','shelfice_tave',0,0,'model_time', C & myTime,myThid) CALL MNC_CW_RL_W(pf,'shelfice_tave',0,0, & 'fwFluxtave',Shelfice_FrshFluxtave,myThid) CALL MNC_CW_RL_W(pf,'shelfice_tave',0,0, & 'heatFluxtave',Shelfice_HeatFluxtave,myThid) ENDIF #endif IF (SHELFICE_tave_mdsio) THEN WRITE(suff,'(I10.10)') myIter _BARRIER CALL WRITE_FLD_XY_RL('SHICE_fwFluxtave.',suff, & shelfice_frshFluxtave,myIter,myThid) CALL WRITE_FLD_XY_RL('SHICE_heatFluxtave.',suff, & shelfice_heatFluxtave ,myIter,myThid) _BARRIER ENDIF C Reset averages to zero DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) CALL TIMEAVE_RESET(shelfice_frshFluxtave,1,bi,bj,myThid) CALL TIMEAVE_RESET(shelfice_heatFluxtave ,1,bi,bj,myThid) SHELFICE_TimeAve(1,bi,bj) = 0. _d 0 ENDDO ENDDO ENDIF C ( SHELFICE_taveFreq .GT. 0 ) ENDIF #endif /* ALLOW_TIMEAVE */ RETURN END