C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/ocn_check_cplconfig.F,v 1.2 2017/04/04 23:31:27 jmc Exp $ C $Name: $ #include "OCN_CPL_OPTIONS.h" CBOP 0 C !ROUTINE: OCN_CHECK_CPLCONFIG C !INTERFACE: SUBROUTINE OCN_CHECK_CPLCONFIG( U errFlag, errMsg, I myThid ) C !DESCRIPTION: C *==========================================================* C | SUBROUTINE OCN_CHECK_CPLCONFIG C | o Check for inconsistency in coupling set-up config C *==========================================================* C | The routine checks on consistent coupler-exchange config C | and performs some basic checking on consistency between C | components (e.g., land-sea mask); C | Also summarises coupling set-up config and output fields C | that were imported C *==========================================================* C !USES: IMPLICIT NONE C == Global variables == #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "CPL_PARAMS.h" #include "OCNCPL.h" C !INPUT/OUTPUT PARAMETERS: C errFlag :: logical flag to report an error C errMsg :: error message to print to clog file C myThid :: Thread number for this instance of the routine LOGICAL errFlag CHARACTER*(*) errMsg INTEGER myThid C !LOCAL VARIABLES: INTEGER i, j, bi, bj CHARACTER*(MAX_LEN_MBUF) msgBuf _RL atm_waterOnly, atm_landOnly, depth_noWater CEOP C-- Summarise fields that were imported. C o Plot atmosphere land-mask IF ( debugLevel.GE.debLevB ) THEN CALL WRITE_FLD_XY_RL( 'Atm_Land', ' ', landMask, 0, myThid ) ENDIF IF ( plotLevel.GE.debLevC ) THEN CALL PLOT_FIELD_XYRL( landMask, & 'Atmosphere land/sea mask on ocean grid', & 1, myThid ) ENDIF C-- Report previously found errors _BEGIN_MASTER( myThid ) IF ( cplErrorCount.NE.0 ) THEN errFlag = .TRUE. WRITE(msgBuf,'(2A,I4,A)') 'OCN_CHECK_CPLCONFIG: ', & ' cplErrorCount=', cplErrorCount, ' (from previous error)' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF C-- Do consistency checks on imported fields. C o Check that: C a) where land/sea mask is "water-only", this should be a wet ocean pts C b) where land/sea mask has "no water", this should be a dry ocean pts atm_waterOnly = 0. _d 0 atm_landOnly = 1. _d 0 depth_noWater = 0. _d 0 DO bj=1,nSy DO bi=1,nSx DO j=1,sNy DO i=1,sNx IF ( ( landMask(i,j,bi,bj) .EQ. atm_waterOnly & .AND. R_low(i,j,bi,bj) .EQ. depth_noWater ) & .OR. ( landMask(i,j,bi,bj) .EQ. atm_landOnly & .AND. R_low(i,j,bi,bj) .NE. depth_noWater ) ) THEN errFlag = .TRUE. WRITE(msgBuf,'(2(A,I6),2(A,I4),A)') & 'Inconsistent land/sea mask @ (i=', i, ',j=', j, & ',bi=', bi, ',bj=', bj, ')' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(A,E30.15)') & 'Land (atmosphere) ==', landMask(i,j,bi,bj) CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(A,E30.15)') & 'Depth (ocean) ==', R_low(i,j,bi,bj) CALL PRINT_ERROR( msgBuf, myThid ) ENDIF ENDDO ENDDO ENDDO ENDDO IF ( errFlag ) WRITE(errMsg,'(A)') & 'OCN_CHECK_CPLCONFIG: inconsistent OCN/CPL/ATM config' _END_MASTER( myThid ) RETURN END