C $Header: /u/gcmpack/MITgcm/pkg/rbcs/rbcs_readparms.F,v 1.7 2010/11/10 00:34:21 jahn Exp $ C $Name: $ #include "RBCS_OPTIONS.h" CBOP C !ROUTINE: RBCS_READPARMS C !INTERFACE: ========================================================== SUBROUTINE RBCS_READPARMS( myThid ) C !DESCRIPTION: C Initialize RBCS parameters, read in data.rbcs C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #ifdef ALLOW_PTRACERS #include "PTRACERS_SIZE.h" #endif #include "RBCS.h" C !INPUT PARAMETERS: =================================================== C myThid :: thread number INTEGER myThid C !OUTPUT PARAMETERS: ================================================== C none #ifdef ALLOW_RBCS C === Local variables === C msgBuf :: Informational/error message buffer C iUnit :: Work variable for IO unit number CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER iUnit INTEGER irbc #ifdef ALLOW_PTRACERS INTEGER iTracer #endif C-- useRBCptracers is no longer used LOGICAL useRBCptracers CEOP C-- RBCS parameter NAMELIST //RBCS_PARM01 & tauRelaxT, & tauRelaxS, & relaxMaskFile, & relaxTFile, & relaxSFile, & useRBCtemp, & useRBCsalt, & useRBCptracers, & rbcsIniter, & rbcsForcingPeriod, & rbcsForcingCycle, & rbcsForcingOffset, & rbcsSingleTimeFiles, & deltaTrbcs, & rbcsIter0 #ifdef ALLOW_PTRACERS NAMELIST //RBCS_PARM02 & useRBCptrnum, tauRelaxPTR, & relaxPtracerFile #endif C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| _BEGIN_MASTER(myThid) C-- Default values useRBCtemp =.FALSE. useRBCsalt =.FALSE. tauRelaxT = 0. tauRelaxS = 0. DO irbc=1,maskLEN relaxMaskFile(irbc) = ' ' ENDDO relaxTFile = ' ' relaxSFile = ' ' rbcsIniter = 0 rbcsForcingPeriod = 0. _d 0 rbcsForcingCycle = 0. _d 0 rbcsForcingOffset = 0. _d 0 rbcsSingleTimeFiles = .FALSE. deltaTrbcs = deltaTclock rbcsIter0 = 0 #ifdef ALLOW_PTRACERS DO iTracer=1,PTRACERS_num useRBCptrnum(iTracer)=.FALSE. tauRelaxPTR(iTracer) = 0. relaxPtracerFile(iTracer) = ' ' ENDDO #endif useRBCptracers=.FALSE. C Open and read the data.rbcs file WRITE(msgBuf,'(A)') ' RBCS_READPARMS: opening data.rbcs' CALL PRINT_MESSAGE(msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) CALL OPEN_COPY_DATA_FILE( I 'data.rbcs', 'RBCS_READPARMS', O iUnit, I myThid ) READ(UNIT=iUnit,NML=RBCS_PARM01) #ifdef ALLOW_PTRACERS READ(UNIT=iUnit,NML=RBCS_PARM02) #endif WRITE(msgBuf,'(A)') & ' RBCS_READPARMS: finished reading data.rbcs' CALL PRINT_MESSAGE(msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) C Close the open data file CLOSE(iUnit) IF (rbcsIniter.NE.0) THEN WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'rbcsIniter has been replaced by rbcsForcingOffset ' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'which is in seconds. Please change your data.rbcs' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARAMS' ENDIF IF (startTime.LT.rbcsForcingOffset+0.5*rbcsForcingPeriod .AND. & .NOT. rbcsSingleTimeFiles) THEN IF (rbcsForcingCycle.GT.0) THEN WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'startTime before rbcsForcingOffset+0.5*rbcsForcingPeriod ' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'will use last record' CALL PRINT_ERROR( msgBuf, myThid ) ELSE WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'startTime before rbcsForcingOffset+0.5*rbcsForcingPeriod ' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)')' RBCS_READPARAMS: ', & 'not allowed with rbcsForcingCycle=0 unless rbcsSingleTimeFiles' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARAMS' ENDIF ENDIF IF ( useRBCtemp .AND. tauRelaxT.LE.0. ) THEN WRITE(msgBuf,'(2A)') 'RBCS_READPARMS: ', & 'tauRelaxT cannot be zero with useRBCtemp' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARMS' ENDIF IF ( useRBCsalt .AND. tauRelaxS.LE.0. ) THEN WRITE(msgBuf,'(2A)') 'RBCS_READPARMS: ', & 'tauRelaxS cannot be zero with useRBCsalt' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARMS' ENDIF #ifdef ALLOW_PTRACERS DO iTracer=1,PTRACERS_num IF ( useRBCptrnum(iTracer) ) THEN IF ( .NOT.usePTRACERS ) THEN WRITE(msgBuf,'(2A,I6,A)') 'RBCS_READPARMS: ', & 'usePTRACERS=F => cannot use RBCS for tracer:', iTracer CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARMS' ENDIF c IF ( iTracer.GT.PTRACERS_numInUse ) THEN c STOP 'ABNORMAL END: S/R RBCS_READPARMS' c ENDIF IF ( tauRelaxPTR(iTracer).LE.0. ) THEN WRITE(msgBuf,'(2A,I6,A)') 'RBCS_READPARMS: ', & 'tauRelaxPTR(itr=', iTracer, ' ) = 0. is' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A,I6,A)') 'RBCS_READPARMS: ', & 'not allowed with useRBCptr(itr)=T' CALL PRINT_ERROR( msgBuf, myThid ) STOP 'ABNORMAL END: S/R RBCS_READPARMS' ENDIF ENDIF ENDDO #endif _END_MASTER(myThid) C Everyone else must wait for the parameters to be loaded _BARRIER #endif /* ALLOW_RBCS */ RETURN END