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