C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_check.F,v 1.10 2014/08/18 14:29:29 jmc Exp $
C $Name: $
#include "GAD_OPTIONS.h"
CBOP
C !ROUTINE: GAD_CHECK
C !INTERFACE:
SUBROUTINE GAD_CHECK( myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE GAD_CHECK
C | o Check consistency with model configuration
C *==========================================================*
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GAD.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myThid :: my Thread Id number
INTEGER myThid
#ifdef ALLOW_GENERIC_ADVDIFF
C !LOCAL VARIABLES:
C === Local variables ===
C msgBuf :: Informational/error message buffer
CHARACTER*(MAX_LEN_MBUF) msgBuf
INTEGER minOlSize, n
CEOP
_BEGIN_MASTER(myThid)
WRITE(msgBuf,'(A)') 'GAD_CHECK: #define ALLOW_GENERIC_ADVDIFF'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , myThid )
C-- Print out some kee parameters :
C (better chance to know why it is stopping if print first & check after)
C-- Check Options:
#ifdef DISABLE_MULTIDIM_ADVECTION
c IF ( useMultiDimAdvec ) THEN
IF ( useMultiDimAdvec .OR.
& tempSOM_Advection .OR. saltSOM_Advection
& ) THEN
WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
& 'trying to use Multi-Dim. Advection code that is not compiled'
CALL PRINT_ERROR( msgBuf , myThid )
WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
& 'Re-compile with: #undef DISABLE_MULTIDIM_ADVECTION'
CALL PRINT_ERROR( msgBuf , myThid)
STOP 'ABNORMAL END: S/R GAD_CHECK'
ENDIF
#endif /* DISABLE_MULTIDIM_ADVECTION */
#ifndef GAD_ALLOW_TS_SOM_ADV
IF ( tempAdvScheme.EQ.ENUM_SOM_PRATHER
& .OR.saltAdvScheme.EQ.ENUM_SOM_PRATHER
& .OR.tempAdvScheme.EQ.ENUM_SOM_LIMITER
& .OR.saltAdvScheme.EQ.ENUM_SOM_LIMITER ) THEN
WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
& 'trying to use 2nd.Order-Moment Advection that is not compiled'
WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
& 'Re-compile with: #define GAD_ALLOW_TS_SOM_ADV'
CALL PRINT_ERROR( msgBuf , myThid)
STOP 'ABNORMAL END: S/R GAD_CHECK'
ENDIF
#endif /* ndef GAD_ALLOW_TS_SOM_ADV */
C-- Check parameters:
C-- Check internal wave dynamics stability regarding active tracer time-stepping
IF ( .NOT.(staggerTimeStep.OR.implicitIntGravWave) ) THEN
IF ( ( tempIsActiveTr .AND. .NOT.AdamsBashforthGt )
& .OR. ( saltIsActiveTr .AND. .NOT.AdamsBashforthGs ) ) THEN
C- issue a warning in Error msg file:
WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
& 'potentially unstable time-stepping (Internal Wave)'
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , myThid)
WRITE(msgBuf,'(2A)') '** WARNING ** GAD_CHECK: ',
& 'need "staggerTimeStep=.TRUE." in "data", nml PARM01'
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , myThid)
ENDIF
ENDIF
C-- Check size of overlap region
C-- Note: checking minimum size of overlap due to tracer limitations moved here;
C previously done in GAD_INIT_FIXED, PTRACERS_INIT_FIXED and GMREDI_CHECK;
C for mom limitations, done in CONFIG_CHECK, but can move to MOM_INIT_FIXED
minOlSize = MAX( GAD_OlMinSize(1)+GAD_OlMinSize(2),
& GAD_OlMinSize(2)+GAD_OlMinSize(3),
& GAD_OlMinSize(1)*GAD_OlMinSize(3) )
IF ( OLx.LT.minOlSize .OR. OLy.LT.minOlSize ) THEN
WRITE(msgBuf,'(A,2I3,A)') 'GAD_CHECK: Overlap Size OLx,OLy=',
& OLx, OLy,' too small'
CALL PRINT_ERROR( msgBuf, myThid )
WRITE(msgBuf,'(2A)') 'GAD_CHECK: ',
& 'One tracer (T,S,pTrac, ...) advection scheme'
CALL PRINT_ERROR( msgBuf, myThid )
WRITE(msgBuf,'(2A,I3,A,3I2,A)') 'GAD_CHECK: ',
& 'needs at least OLx,OLy=', minOlSize,
& ' (OlMinSize=', (GAD_OlMinSize(n),n=1,3), ')'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R GAD_CHECK'
ENDIF
C Check compatibility with adjoint
#ifdef ALLOW_AUTODIFF
IF ( tempAdvScheme.EQ.ENUM_OS7MP .OR.
& saltAdvScheme.EQ.ENUM_OS7MP ) THEN
WRITE(msgBuf,'(A,I3,A)') 'GAD_CHECK: advection scheme OS7MP ',
& ENUM_OS7MP,
& ' not yet implemented for adjoint'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R GAD_CHECK'
ENDIF
#endif /* ALLOW_AUTODIFF */
_END_MASTER(myThid)
#endif /* ALLOW_GENERIC_ADVDIFF */
RETURN
END