C $Header: /u/gcmpack/MITgcm/pkg/sbo/sbo_output.F,v 1.5 2017/03/24 23:51:14 jmc Exp $ C $Name: $ #include "SBO_OPTIONS.h" CBOP C !ROUTINE: SBO_OUTPUT C !INTERFACE: SUBROUTINE SBO_OUTPUT( myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE SBO_OUTPUT C | o Do SBO diagnostic output. C *==========================================================* C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "SBO.h" C !INPUT PARAMETERS: C myTime :: my time in simulation ( s ) C myIter :: my Iteration number C myThid :: my Thread Id number _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_SBO C !FUNCTIONS: LOGICAL DIFFERENT_MULTIPLE EXTERNAL C !LOCAL VARIABLES: C sbo_diag :: vector of SBO diagnostics contains: C model time (s), xoamc, yoamc, zoamc, C xoamp, yoamp, zoamp, mass, xcom, ycom, zcom C fName :: output file name C msgBuf :: Informational/error message buffer CHARACTER*(10) suff CHARACTER*(MAX_LEN_FNAM) fName CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER narr PARAMETER( narr = 24 ) INTEGER irecord INTEGER ioUnit _RL sbo_diag(narr) _RS dummyRS(1) C----------------------------------------------------------------- C Save angular momentum and mass variables at every time step C----------------------------------------------------------------- sbo_diag(1) = myTime sbo_diag(2) = xoamc sbo_diag(3) = yoamc sbo_diag(4) = zoamc sbo_diag(5) = xoamp sbo_diag(6) = yoamp sbo_diag(7) = zoamp sbo_diag(8) = mass sbo_diag(9) = xcom sbo_diag(10) = ycom sbo_diag(11) = zcom sbo_diag(12) = sboarea sbo_diag(13) = xoamc_si sbo_diag(14) = yoamc_si sbo_diag(15) = zoamc_si sbo_diag(16) = mass_si sbo_diag(17) = xoamp_fw sbo_diag(18) = yoamp_fw sbo_diag(19) = zoamp_fw sbo_diag(20) = mass_fw sbo_diag(21) = xcom_fw sbo_diag(22) = ycom_fw sbo_diag(23) = zcom_fw sbo_diag(24) = mass_gc irecord = myIter - nIter0 + 1 #ifdef ALLOW_MDSIO _BEGIN_MASTER(myThid) C- multi-threaded: only write it once (by master thread) IF ( rwSuffixType.EQ.0 ) THEN WRITE(fName,'(A,I10.10)') 'SBO_global.', nIter0 ELSE CALL RW_GET_SUFFIX( suff, startTime, nIter0, myThid ) WRITE(fName,'(A,A)') 'SBO_global.', suff ENDIF ioUnit = 0 CALL MDS_WRITEVEC_LOC( I fName, precFloat64, ioUnit, I 'RL', narr, sbo_diag, dummyRS, I 0, 0, irecord, myIter, myThid ) _END_MASTER(myThid) #endif /* ALLOW_MDSIO */ #ifdef ALLOW_TIMEAVE C----------------------------------------------------------------- C NOT doing this anymore: C Save time-averaged bottom pressure at sbo_taveFreq intervals C----------------------------------------------------------------- #endif /* ALLOW_TIMEAVE */ IF ( myIter .EQ. nIter0 .OR. & DIFFERENT_MULTIPLE(sbo_monFreq,myTime,deltaTClock) & ) THEN _BEGIN_MASTER(myThid) ioUnit = standardMessageUnit WRITE(msgBuf,'(A,1PE21.13)') & '%SBO sbo_mass = ', mass CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A,1PE21.13)') & '%SBO sbo_mass_fw = ', mass_fw CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A,1PE21.13)') & '%SBO sbo_zoamc = ', zoamc CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A,1PE21.13)') & '%SBO sbo_zoamp = ', zoamp CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) _END_MASTER(myThid) ENDIF #endif /* ALLOW_SBO */ RETURN END