c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c RCS version control information: c $Header: /srv/svn/cvs/cvsroot/arts/3rdparty/disort1.2/ErrPack.f,v 1.1 2006/02/21 16:23:28 olemke Exp $ c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBROUTINE ErrMsg( MESSAG, FATAL ) c Print out a warning or error message; abort if error LOGICAL FATAL, MsgLim CHARACTER*(*) MESSAG INTEGER MaxMsg, NumMsg SAVE MaxMsg, NumMsg, MsgLim DATA NumMsg / 0 /, MaxMsg / 100 /, MsgLim / .FALSE. / IF ( FATAL ) THEN WRITE ( *, '(/,2A,/)' ) ' ******* ERROR >>>>>> ', MESSAG STOP END IF NumMsg = NumMsg + 1 IF( MsgLim ) RETURN IF ( NumMsg.LE.MaxMsg ) THEN WRITE ( *, '(/,2A,/)' ) ' ******* WARNING >>>>>> ', MESSAG ELSE WRITE ( *,99 ) MsgLim = .True. ENDIF RETURN 99 FORMAT( //,' >>>>>> TOO MANY WARNING MESSAGES -- ', & 'They will no longer be printed <<<<<<<', // ) END LOGICAL FUNCTION WrtBad ( VarNam ) c Write names of erroneous variables and return 'TRUE' c INPUT : VarNam = Name of erroneous variable to be written c ( CHARACTER, any length ) CHARACTER*(*) VarNam INTEGER MaxMsg, NumMsg SAVE NumMsg, MaxMsg DATA NumMsg / 0 /, MaxMsg / 50 / WrtBad = .TRUE. NumMsg = NumMsg + 1 WRITE ( *, '(3A)' ) ' **** Input variable ', VarNam, & ' in error ****' IF ( NumMsg.EQ.MaxMsg ) & CALL ErrMsg ( 'Too many input errors. Aborting...', .TRUE. ) RETURN END LOGICAL FUNCTION WrtDim ( DimNam, MinVal ) c Write name of too-small symbolic dimension and c the value it should be increased to; return 'TRUE' c INPUT : DimNam = Name of symbolic dimension which is too small c ( CHARACTER, any length ) c Minval = Value to which that dimension should be c increased (at least) CHARACTER*(*) DimNam INTEGER MinVal WRITE ( *, '(/,3A,I7)' ) ' **** Symbolic dimension ', DimNam, & ' should be increased to at least ', MinVal WrtDim = .TRUE. RETURN END LOGICAL FUNCTION TstBad( VarNam, RelErr ) c Write name (VarNam) of variable failing self-test and its c percent error from the correct value; return 'FALSE'. CHARACTER*(*) VarNam REAL RelErr TstBad = .FALSE. WRITE( *, '(/,3A,1P,E11.2,A)' ) & ' Output variable ', VarNam,' differed by ', 100.*RelErr, & ' per cent from correct value. Self-test failed.' RETURN END