C $Header: /u/gcmpack/MITgcm/pkg/gchem/gchem_check.F,v 1.8 2017/12/29 19:44:15 jmc Exp $ C $Name: $ #include "GCHEM_OPTIONS.h" CBOP C !ROUTINE: GCHEM_CHECK C !INTERFACE: SUBROUTINE GCHEM_CHECK( myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE GCHEM_CHECK C | o Validate basic package setup and inter-package C | dependencies. C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GCHEM.h" #ifdef ALLOW_CFC # include "CFC_SIZE.h" #endif #ifdef ALLOW_SPOIL # include "SPOIL_SIZE.h" #endif #include "GCHEM_SIZE.h" #ifdef ALLOW_PTRACERS # include "PTRACERS_SIZE.h" # include "PTRACERS_PARAMS.h" #endif C !INPUT/OUTPUT PARAMETERS: C myThid :: My Thread Id number INTEGER myThid #ifdef ALLOW_GCHEM C !LOCAL VARIABLES: C msgBuf :: Informational/error message buffer CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER errCount INTEGER nb_tendTr CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| _BEGIN_MASTER(myThid) errCount = 0 WRITE(msgBuf,'(2A)') 'GCHEM_CHECK ', & ' --> Starts to check GCHEM set-up' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Check GCHEM Options and Parameters: #ifndef GCHEM_ADD2TR_TENDENCY IF ( useCFC ) THEN WRITE(msgBuf,'(A)') 'GCHEM_ADD2TR_TENDENCY needed to use CFC' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif /* ndef GCHEM_ADD2TR_TENDENCY */ #ifndef GCHEM_SEPARATE_FORCING IF ( useDIC ) THEN WRITE(msgBuf,'(A)') 'GCHEM_SEPARATE_FORCING needed to use DIC' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( useBLING ) THEN WRITE(msgBuf,'(A)') & 'GCHEM_SEPARATE_FORCING needed to use BLING' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( useDARWIN ) THEN WRITE(msgBuf,'(A)') & 'GCHEM_SEPARATE_FORCING needed to use DARWIN' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif /* ndef GCHEM_SEPARATE_FORCING */ C GCHEM needs passive tracer package IF ( .NOT.usePTRACERS) THEN WRITE(msgBuf,'(A)') 'usePTRACERS has to be .TRUE. for GCHEM' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF C GCHEM cannot run BLING and DIC together IF ( useBLING .AND. useDIC ) THEN WRITE(msgBuf,'(A)') & 'useBLING and useDIC cannot both be .TRUE.' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF C GCHEM cannot run BLING and DARWIN together IF ( useBLING .AND. useDARWIN ) THEN WRITE(msgBuf,'(A)') & 'useBLING and useDARWIN cannot both be .TRUE.' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF C GCHEM cannot run DARWIN and DIC together IF ( useDARWIN .AND. useDIC ) THEN WRITE(msgBuf,'(A)') & 'useDARWIN and useDIC cannot both be .TRUE.' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF nb_tendTr = gchem_Tracer_num - gchem_sepFTr_num IF ( nb_tendTr.GT.GCHEM_tendTr_num ) THEN WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ', & 'Number of tendency-tracers: nb_tendTr=', nb_tendTr CALL PRINT_ERROR( msgBuf , myThid ) WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ', & 'Exceeds GCHEM_tendTr_num=', GCHEM_tendTr_num, & ' (from GCHEM_SIZE.h)' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( gchem_Tracer_num.GT.PTRACERS_numInUse ) THEN WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ', & 'Number of GCHEM tracers: gchem_Tracer_num =', gchem_Tracer_num CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A,I5,A)') 'GCHEM_CHECK: ', & ' exceeds number of pTr: PTRACERS_numInUse =',PTRACERS_numInUse c & ' exceeds number of PTRACERS(_numInUse)=', PTRACERS_numInUse CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( errCount.GE.1 ) THEN WRITE(msgBuf,'(A,I3,A)') & 'GCEHM_CHECK: detected', errCount,' fatal error(s)' CALL PRINT_ERROR( msgBuf, myThid ) CALL ALL_PROC_DIE( 0 ) STOP 'ABNORMAL END: S/R GCHEM_CHECK' ENDIF _END_MASTER(myThid) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- Check other GCHEM pkgs: #ifdef ALLOW_CFC C- run checks specific to CFC IF ( useCFC ) THEN CALL CFC_CHECK( myThid ) ENDIF #endif #ifdef ALLOW_DARWIN C- run checks specific to darwin IF ( useDARWIN ) THEN CALL DARWIN_CHECK( myThid ) ENDIF #endif _BEGIN_MASTER(myThid) WRITE(msgBuf,'(2A)') 'GCHEM_CHECK ', & ' <-- Ends Normally' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') ' ' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) _END_MASTER(myThid) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| #endif /* ALLOW_GCHEM */ RETURN END