Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:37:36 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
1eb66a0215 Jean*0001 #include "CPP_OPTIONS.h"
                0002 
                0003 CBOP 0
                0004 C !ROUTINE: CPL_CHECK_CPLCONFIG
                0005 
                0006 C !INTERFACE:
                0007       SUBROUTINE CPL_CHECK_CPLCONFIG(
                0008      I                     msgUnit,
                0009      U                     errFlag, errMsg )
                0010 
                0011 C !DESCRIPTION:
                0012 C     *==========================================================*
                0013 C     | SUBROUTINE CPL_CHECK_CPLCONFIG
                0014 C     | o Routine to check Coupler config
                0015 C     *==========================================================*
                0016 C     | This routine also set the number of coupler time-step
                0017 C     |  to run
                0018 C     *==========================================================*
                0019 
                0020 C !USES:
                0021       IMPLICIT NONE
                0022 C     == Global variables ==
                0023 #include "ATMSIZE.h"
                0024 #include "OCNSIZE.h"
                0025 #include "ATMVARS.h"
                0026 #include "OCNVARS.h"
                0027 #include "CPL_PARAMS.h"
                0028 #include "CPL_MAP2GRIDS.h"
                0029 
                0030 C !INPUT/OUTPUT PARAMETERS:
                0031 C     msgUnit  :: log-file I/O unit
                0032 C     errFlag  :: logical flag to report an error
6502611145 Jean*0033 C     errMsg   :: error message to print to clog file
1eb66a0215 Jean*0034       INTEGER msgUnit
                0035       LOGICAL errFlag
                0036       CHARACTER*(*) errMsg
                0037 
                0038 C !LOCAL VARIABLES:
                0039       INTEGER i, j, n
                0040       INTEGER ijo, ija
                0041       LOGICAL tmpVar(Nx_atm,Ny_atm)
                0042 CEOP
                0043 
6502611145 Jean*0044 C--   Report previously found errors
                0045       IF ( cplErrorCount.NE.0 ) THEN
                0046         errFlag = .TRUE.
                0047         WRITE(msgUnit,'(2A,I4,A)')
                0048      &    ' *** ERROR *** CPL_CHECK_CPLCONFIG: ',
                0049      &    ' cplErrorCount=', cplErrorCount, ' (from previous error)'
                0050       ENDIF
                0051 
1eb66a0215 Jean*0052 C--   Define length of the run (number of coupler time-step)
                0053       WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ',
                0054      &    'Nb of time-steps to run (ATM) =', nSteps_atm
                0055       WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ',
                0056      &    'Nb of time-steps to run (OCN) =', nSteps_ocn
                0057       IF ( nSteps_atm .EQ. nSteps_ocn ) THEN
                0058         nCouplingSteps = nSteps_ocn
                0059         WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ',
                0060      &    'Nb of time-steps to run (CPL) =', nCouplingSteps
                0061       ELSE
                0062         errFlag = .TRUE.
                0063         nCouplingSteps = 0
                0064         WRITE(msgUnit,'(2A)') ' *** ERROR *** CPL_CHECK_CPLCONFIG: ',
                0065      &    ' wrong Nb of time-steps to run'
                0066       ENDIF
                0067 
                0068 C--   Check for consistent RunOff mapping regarding Land/Sea mask:
                0069       DO j=1,Ny_atm
                0070        DO i=1,Nx_atm
                0071         tmpVar(i,j) = landMask_atm(i,j) .EQ. 1. _d 0
                0072        ENDDO
                0073       ENDDO
                0074       DO n=1,nROmap
                0075 C     a) check that RunOff drain a land point
                0076         ija = ijROatm(n) - 1
                0077         i = 1 + MOD(ija,Nx_atm)
                0078         j = 1 + ija/Nx_atm
                0079         IF ( landMask_atm(i,j).EQ.0. ) THEN
                0080           errFlag = .TRUE.
                0081           WRITE(msgUnit,'(A,2I8,A)')
                0082      &    ' *** ERROR *** RunOff Mapp: i,j=', i, j, ' not Land point'
                0083         ENDIF
                0084         tmpVar(i,j) = .FALSE.
                0085 C     b) and supply an ocean point
                0086         ijo = ijROocn(n) - 1
                0087         i = 1 + MOD(ijo,Nx_ocn)
                0088         j = 1 + ijo/Nx_ocn
                0089         IF ( OcMxlD_ocn(i,j).EQ.0. ) THEN
                0090           errFlag = .TRUE.
                0091           WRITE(msgUnit,'(A,2I8,A)')
                0092      &    ' *** ERROR *** RunOff Mapp: i,j=', i, j, ' not Oce point'
                0093         ENDIF
                0094       ENDDO
                0095 C     c) check that all land-points are drained,
                0096 C  note: would need to know ATM grid-cell area to check that
                0097 C        RunOff Mapping conserve water.
6502611145 Jean*0098       IF ( cplErrorCount.EQ.0 ) THEN
                0099        DO j=1,Ny_atm
                0100         DO i=1,Nx_atm
                0101          IF ( tmpVar(i,j) ) THEN
                0102           WRITE(msgUnit,'(A,2I8,A)')
1eb66a0215 Jean*0103      &    ' ** WARNING ** Land point: i,j=', i, j, ' not drained'
6502611145 Jean*0104          ENDIF
                0105         ENDDO
1eb66a0215 Jean*0106        ENDDO
6502611145 Jean*0107       ENDIF
1eb66a0215 Jean*0108 
                0109       IF ( errFlag ) THEN
6502611145 Jean*0110         errMsg = 'CPL_CHECK_CPLCONFIG: inconsistent CPL/ATM/OCN config'
1eb66a0215 Jean*0111       ELSE
                0112         WRITE(msgUnit,'(2A)') ' CPL_CHECK_CPLCONFIG: ','done'
                0113       ENDIF
                0114 
                0115       RETURN
                0116       END