C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_check.F,v 1.10 2015/11/06 22:32:52 jmc Exp $ C $Name: $ #include "THSICE_OPTIONS.h" CBOP C !ROUTINE: THSICE_CHECK C !INTERFACE: SUBROUTINE THSICE_CHECK( myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R THSICE_CHECK C | o Check parameters and other package dependences C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "THSICE_SIZE.h" #include "THSICE_PARAMS.h" C !INPUT/OUTPUT PARAMETERS: C myThid :: my Thread Id number INTEGER myThid C !LOCAL VARIABLES: C msgBuf :: Informational/error message buffer CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER errCount CEOP _BEGIN_MASTER(myThid) errCount = 0 WRITE(msgBuf,'(A)') 'THSICE_CHECK: #define THSICE' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Check parameter consistency: IF ( .NOT.( thSIce_skipThermo .OR. useBulkForce .OR. useEXF & .OR. useAIM .OR. useCheapAML .OR. useATM2d ) ) THEN C- need some form of ATM-surface pkg to provide Air-Ice surf fluxes WRITE(msgBuf,'(2A)') & 'THSICE_CHECK: needs some PKG (EXF,Bulk-Force,AIM,CheapAML)' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'THSICE_CHECK: to provide Air-Ice surface fluxes for THSICE' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( thSIceAdvScheme.EQ.0 .AND. thSIce_diffK.NE.0. ) THEN WRITE(msgBuf,'(2A)') & 'THSICE_CHECK: to use thSIce_diffK, needs to select', & ' one advection scheme (thSIceAdvScheme<>0)' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #ifndef ALLOW_GENERIC_ADVDIFF IF ( thSIceAdvScheme.NE.0 ) THEN WRITE(msgBuf,'(2A)') 'THSICE_CHECK: Need to compile ', & '"generic_advdiff" pkg in order to use thSIceAdvScheme' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif /* ndef ALLOW_GENERIC_ADVDIFF */ IF ( thSIceBalanceAtmFW.NE.0 ) THEN #ifndef ALLOW_BALANCE_FLUXES WRITE(msgBuf,'(2A)') 'THSICE_CHECK: needs to have ', & 'ALLOW_BALANCE_FLUXES defined to use thSIceBalanceAtmFW' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 #endif IF ( balanceEmPmR ) THEN WRITE(msgBuf,'(2A)') 'THSICE_CHECK: cannot use', & ' both balanceEmPmR and thSIceBalanceAtmFW' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF ENDIF #ifdef ALLOW_AUTODIFF IF ( nitMaxTsf .GT. MaxTsf ) THEN WRITE(msgBuf,'(2A)') & 'THSICE_CHECK: Need to set MaxTsf >= nitMaxTsf for TAF' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF # ifdef ALLOW_DBUG_THSICE WRITE(msgBuf,'(2A)') & 'THSICE_CHECK: cannot compile AD-code with ALLOW_DBUG_THSICE' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 # endif #endif /* ALLOW_AUTODIFF */ #ifdef OLD_THSICE_CALL_SEQUENCE WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', & 'OLD_THSICE_CALL_SEQUENCE code no longer maintained' CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, & SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', & 'option and related code will be removed after chkpt-64e' CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, & SQUEEZE_RIGHT, myThid ) #endif /* OLD_THSICE_CALL_SEQUENCE */ IF ( useAIM .AND. .NOT.( stepFwd_oceMxL .OR. useCoupler ) & .AND. tauRelax_MxL.NE. -1. _d 0 ) THEN C- with pkg/aim, usual way to use pkg/thsice is to step-forward Mixed-Layer C (stepFwd_oceMxL=T); otherwise, need to be sure SST are set, e.g. by AIM C when setting tauRelax_MxL=-1 ; add a warning if this is not the case WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', & 'SST are not stepped forward (stepFwd_oceMx=F)' CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, & SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', & 'nor set (from files) by pkg/aim (tauRelax_MxL<>-1)' c & 'nor copied from pkg/aim SST (tauRelax_MxL<>-1.)' CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, & SQUEEZE_RIGHT, myThid ) ENDIF IF ( errCount.GE.1 ) THEN WRITE(msgBuf,'(A,I3,A)') & 'THSICE_CHECK: detected', errCount,' fatal error(s)' CALL PRINT_ERROR( msgBuf, myThid ) CALL ALL_PROC_DIE( 0 ) STOP 'ABNORMAL END: S/R THSICE_CHECK' ENDIF _END_MASTER(myThid) RETURN END