C $Header: /u/gcmpack/MITgcm/pkg/atm_compon_interf/atm_check_cplconfig.F,v 1.2 2017/04/04 23:31:27 jmc Exp $ C $Name: $ c#include "PACKAGES_CONFIG.h" #include "ATM_CPL_OPTIONS.h" CBOP 0 C !ROUTINE: ATM_CHECK_CPLCONFIG C !INTERFACE: SUBROUTINE ATM_CHECK_CPLCONFIG( U errFlag, errMsg, I landMask, myThid ) C !DESCRIPTION: C *==========================================================* C | SUBROUTINE ATM_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" c#include "GRID.h" #include "CPL_PARAMS.h" #include "ATMCPL.h" C !INPUT/OUTPUT PARAMETERS: C errFlag :: logical flag to report an error C errMsg :: error message to print to clog file C landMask :: land / sea mask (=1 : full land; =0 : full ocean grid cell) C myThid :: Thread number for this instance of the routine LOGICAL errFlag CHARACTER*(*) errMsg _RL landMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) INTEGER myThid C !LOCAL VARIABLES: INTEGER i, j, bi, bj CHARACTER*(MAX_LEN_MBUF) msgBuf _RL atm_waterOnly, atm_landOnly, mxlD_noWater CEOP C-- Summarise fields that were imported. C o Plot ocean depths IF ( debugLevel.GE.debLevB ) THEN CALL WRITE_FLD_XY_RL( 'Ocn_MxlD', ' ', ocMxlD, 0, myThid ) ENDIF IF ( plotLevel.GE.debLevC ) THEN CALL PLOT_FIELD_XYRL( ocMxlD, & 'Ocean mixed-layer depth on atmos grid', & 1, myThid ) ENDIF C-- Report previously found errors _BEGIN_MASTER( myThid ) IF ( cplErrorCount.NE.0 ) THEN errFlag = .TRUE. WRITE(msgBuf,'(2A,I4,A)') 'ATM_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 mxlD_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. ocMxlD(i,j,bi,bj) .EQ. mxlD_noWater ) & .OR. ( landMask(i,j,bi,bj) .EQ. atm_landOnly & .AND. ocMxlD(i,j,bi,bj) .NE. mxlD_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)') & 'Mxl-Depth (ocean) ==', ocMxlD(i,j,bi,bj) CALL PRINT_ERROR( msgBuf, myThid ) ENDIF ENDDO ENDDO ENDDO ENDDO IF ( errFlag ) WRITE(errMsg,'(A)') & 'ATM_CHECK_CPLCONFIG: inconsistent ATM/CPL/OCN config' _END_MASTER( myThid ) RETURN END