C $Header: /u/gcmpack/MITgcm/pkg/bulk_force/bulkf_output.F,v 1.4 2017/03/24 23:34:13 jmc Exp $ C $Name: $ #include "BULK_FORCE_OPTIONS.h" CBOP C !ROUTINE: BULKF_OUTPUT C !INTERFACE: SUBROUTINE BULKF_OUTPUT( myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE BULKF_OUTPUT C | o Do BULKF time-average output C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "BULKF.h" #include "BULKF_PARAMS.h" #include "BULKF_TAVE.h" C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myTime :: Current time of simulation ( s ) C myIter :: Iteration number C myThid :: Number of this instance _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_BULK_FORCE #ifdef ALLOW_TIMEAVE C == Function LOGICAL DIFFERENT_MULTIPLE EXTERNAL C == Local variables == INTEGER bi, bj CHARACTER*(10) suff C Dump files and restart average computation if needed IF ( DIFFERENT_MULTIPLE(blk_taveFreq,myTime,deltaTClock) & ) THEN C Normalize by integrated time DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) CALL TIMEAVE_NORMALIZE( BULK_Qnet_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_EmPmR_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_fu_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_fv_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_latent_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_sensible_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_evap_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_flwup_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_flwupnet_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_solar_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) CALL TIMEAVE_NORMALIZE( BULK_ssq_Ave, & BULK_timeAve, 1 , bi, bj, myThid ) ENDDO ENDDO IF ( rwSuffixType.EQ.0 ) THEN WRITE(suff,'(I10.10)') myIter ELSE CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid ) ENDIF CALL WRITE_FLD_XY_RL( 'BULK_Qnet.', suff, & BULK_Qnet_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_EmPmR.', suff, & BULK_EmPmR_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_fu.', suff, & BULK_fu_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_fv.', suff, & BULK_fv_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_latent.', suff, & BULK_latent_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_sensible.', suff, & BULK_sensible_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_evap.', suff, & BULK_evap_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_flwup.', suff, & BULK_flwup_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_flwupnet.', suff, & BULK_flwupnet_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_solar.', suff, & BULK_solar_Ave, myIter, myThid ) CALL WRITE_FLD_XY_RL( 'BULK_ssq.', suff, & BULK_ssq_Ave, myIter, myThid ) C Reset averages to zero DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) CALL TIMEAVE_RESET( BULK_Qnet_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_EmPmR_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_fu_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_fv_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_latent_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_sensible_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_evap_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_flwup_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_flwupnet_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_solar_Ave, 1, bi, bj, myThid ) CALL TIMEAVE_RESET( BULK_ssq_Ave, 1, bi, bj, myThid ) BULK_timeAve(bi,bj) = 0. ENDDO ENDDO ENDIF #endif /* ALLOW_TIMEAVE */ #endif /* ALLOW_BULKF */ RETURN END