Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE SetupPossibleOperators
! SUBROUTINE INFORMATION:
! AUTHOR Brent Griffith
! DATE WRITTEN May 2009
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! setup hard coded list of possible operands
! METHODOLOGY EMPLOYED:
! Allocate structure and fill basic info on opertors and operands
! operators include built-in functions where operands are function arguments
! REFERENCES:
! na
! USE STATEMENTS:
! na
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
LOGICAL , SAVE :: AlreadyDidOnce = .FALSE.
IF (AlreadyDidOnce) RETURN
ALLOCATE (PossibleOperators(NumPossibleOperators))
! Build operator table
! Order in this table is the order of precedence
PossibleOperators(OperatorLiteral)%NumOperands = 1
PossibleOperators(OperatorLiteral)%Code = OperatorLiteral
! not sure how to distinguish from subtract in parsing of tokens, not yet available
! PossibleOperators(OperatorNegative)%NumOperands = 1
! PossibleOperators(OperatorNegative)%Code = OperatorNegative
! PossibleOperators(OperatorNegative)%Symbol = '-'
PossibleOperators(OperatorDivide)%Symbol = '/'
PossibleOperators(OperatorDivide)%NumOperands = 2
PossibleOperators(OperatorDivide)%Code = OperatorDivide
PossibleOperators(OperatorMultiply)%Symbol = '*'
PossibleOperators(OperatorMultiply)%NumOperands = 2
PossibleOperators(OperatorMultiply)%Code = OperatorMultiply
PossibleOperators(OperatorSubtract)%Symbol = '-'
PossibleOperators(OperatorSubtract)%NumOperands = 2
PossibleOperators(OperatorSubtract)%Code = OperatorSubtract
PossibleOperators(OperatorAdd)%Symbol = '+'
PossibleOperators(OperatorAdd)%NumOperands = 2
PossibleOperators(OperatorAdd)%Code = OperatorAdd
PossibleOperators(OperatorEqual)%Symbol = '=='
PossibleOperators(OperatorEqual)%NumOperands = 2
PossibleOperators(OperatorEqual)%Code = OperatorEqual
PossibleOperators(OperatorNotEqual)%Symbol = '<>'
PossibleOperators(OperatorNotEqual)%NumOperands = 2
PossibleOperators(OperatorNotEqual)%Code = OperatorNotEqual
PossibleOperators(OperatorLessOrEqual)%Symbol = '<='
PossibleOperators(OperatorLessOrEqual)%NumOperands = 2
PossibleOperators(OperatorLessOrEqual)%Code = OperatorLessOrEqual
PossibleOperators(OperatorGreaterOrEqual)%Symbol = '>='
PossibleOperators(OperatorGreaterOrEqual)%NumOperands = 2
PossibleOperators(OperatorGreaterOrEqual)%Code = OperatorGreaterOrEqual
PossibleOperators(OperatorLessThan)%Symbol = '<'
PossibleOperators(OperatorLessThan)%NumOperands = 2
PossibleOperators(OperatorLessThan)%Code = OperatorLessThan
PossibleOperators(OperatorGreaterThan)%Symbol = '>'
PossibleOperators(OperatorGreaterThan)%NumOperands = 2
PossibleOperators(OperatorGreaterThan)%Code = OperatorGreaterThan
PossibleOperators(OperatorRaiseToPower)%Symbol = '^'
PossibleOperators(OperatorRaiseToPower)%NumOperands = 2
PossibleOperators(OperatorRaiseToPower)%Code = OperatorRaiseToPower
PossibleOperators(OperatorLogicalAND)%Symbol = '&&'
PossibleOperators(OperatorLogicalAND)%NumOperands = 2
PossibleOperators(OperatorLogicalAND)%Code = OperatorLogicalAND
PossibleOperators(OperatiorLogicalOR)%Symbol = '||'
PossibleOperators(OperatiorLogicalOR)%NumOperands = 2
PossibleOperators(OperatiorLogicalOR)%Code = OperatiorLogicalOR
PossibleOperators(FuncRound)%Symbol = '@ROUND'
PossibleOperators(FuncRound)%NumOperands = 1
PossibleOperators(FuncRound)%Code = FuncRound
PossibleOperators(FuncMod)%Symbol = '@MOD'
PossibleOperators(FuncMod)%NumOperands = 2
PossibleOperators(FuncMod)%Code = FuncMod
PossibleOperators(FuncSin)%Symbol = '@SIN'
PossibleOperators(FuncSin)%NumOperands = 1
PossibleOperators(FuncSin)%Code = FuncSin
PossibleOperators(FuncCos)%Symbol = '@COS'
PossibleOperators(FuncCos)%NumOperands = 1
PossibleOperators(FuncCos)%Code = FuncCos
PossibleOperators(FuncArcSin)%Symbol = '@ARCSIN'
PossibleOperators(FuncArcSin)%NumOperands = 1
PossibleOperators(FuncArcSin)%Code = FuncArcSin
PossibleOperators(FuncArcCos)%Symbol = '@ARCCOS'
PossibleOperators(FuncArcCos)%NumOperands = 1
PossibleOperators(FuncArcCos)%Code = FuncArcCos
PossibleOperators(FuncDegToRad)%Symbol = '@DEGTORAD'
PossibleOperators(FuncDegToRad)%NumOperands = 1
PossibleOperators(FuncDegToRad)%Code = FuncDegToRad
PossibleOperators(FuncRadToDeg)%Symbol = '@RADTODEG'
PossibleOperators(FuncRadToDeg)%NumOperands = 1
PossibleOperators(FuncRadToDeg)%Code = FuncRadToDeg
PossibleOperators(FuncExp)%Symbol = '@EXP'
PossibleOperators(FuncExp)%NumOperands = 1
PossibleOperators(FuncExp)%Code = FuncExp
PossibleOperators(FuncLn)%Symbol = '@LN'
PossibleOperators(FuncLn)%NumOperands = 1
PossibleOperators(FuncLn)%Code = FuncLn
PossibleOperators(FuncMax)%Symbol = '@MAX'
PossibleOperators(FuncMax)%NumOperands = 2
PossibleOperators(FuncMax)%Code = FuncMax
PossibleOperators(FuncMin)%Symbol = '@MIN'
PossibleOperators(FuncMin)%NumOperands = 2
PossibleOperators(FuncMin)%Code = FuncMin
PossibleOperators(FuncABS)%Symbol = '@ABS'
PossibleOperators(FuncABS)%NumOperands = 1
PossibleOperators(FuncABS)%Code = FuncABS
PossibleOperators(FuncRandU)%Symbol = '@RANDOMUNIFORM'
PossibleOperators(FuncRandU)%NumOperands = 2
PossibleOperators(FuncRandU)%Code = FuncRandU
PossibleOperators(FuncRandG)%Symbol = '@RANDOMNORMAL'
PossibleOperators(FuncRandG)%NumOperands = 4
PossibleOperators(FuncRandG)%Code = FuncRandG
PossibleOperators(FuncRandSeed)%Symbol = '@SEEDRANDOM'
PossibleOperators(FuncRandSeed)%NumOperands = 1
PossibleOperators(FuncRandSeed)%Code = FuncRandSeed
PossibleOperators(FuncRhoAirFnPbTdbW)%Symbol = '@RHOAIRFNPBTDBW'
PossibleOperators(FuncRhoAirFnPbTdbW)%NumOperands = 3
PossibleOperators(FuncRhoAirFnPbTdbW)%Code = FuncRhoAirFnPbTdbW
PossibleOperators(FuncCpAirFnWTdb)%Symbol = '@CPAIRFNWTDB'
PossibleOperators(FuncCpAirFnWTdb)%NumOperands = 2
PossibleOperators(FuncCpAirFnWTdb)%Code = FuncCpAirFnWTdb
PossibleOperators(FuncHfgAirFnWTdb)%Symbol = '@HFGAIRFNWTDB'
PossibleOperators(FuncHfgAirFnWTdb)%NumOperands = 2
PossibleOperators(FuncHfgAirFnWTdb)%Code = FuncHfgAirFnWTdb
PossibleOperators(FuncHgAirFnWTdb)%Symbol = '@HGAIRFNWTDB'
PossibleOperators(FuncHgAirFnWTdb)%NumOperands = 2
PossibleOperators(FuncHgAirFnWTdb)%Code = FuncHgAirFnWTdb
PossibleOperators(FuncTdpFnTdbTwbPb)%Symbol = '@TDPFNTDBTWBPB'
PossibleOperators(FuncTdpFnTdbTwbPb)%NumOperands = 3
PossibleOperators(FuncTdpFnTdbTwbPb)%Code = FuncTdpFnTdbTwbPb
PossibleOperators(FuncTdpFnWPb)%Symbol = '@TDPFNWPB'
PossibleOperators(FuncTdpFnWPb)%NumOperands = 2
PossibleOperators(FuncTdpFnWPb)%Code = FuncTdpFnWPb
PossibleOperators(FuncHFnTdbW)%Symbol = '@HFNTDBW'
PossibleOperators(FuncHFnTdbW)%NumOperands = 2
PossibleOperators(FuncHFnTdbW)%Code = FuncHFnTdbW
PossibleOperators(FuncHFnTdbRhPb)%Symbol = '@HFNTDBRHPB'
PossibleOperators(FuncHFnTdbRhPb)%NumOperands = 3
PossibleOperators(FuncHFnTdbRhPb)%Code = FuncHFnTdbRhPb
PossibleOperators(FuncTdbFnHW)%Symbol = '@TDBFNHW'
PossibleOperators(FuncTdbFnHW)%NumOperands = 2
PossibleOperators(FuncTdbFnHW)%Code = FuncTdbFnHW
PossibleOperators(FuncRhovFnTdbRh)%Symbol = '@RHOVFNTDBR'
PossibleOperators(FuncRhovFnTdbRh)%NumOperands = 2
PossibleOperators(FuncRhovFnTdbRh)%Code = FuncRhovFnTdbRh
PossibleOperators(FuncRhovFnTdbRhLBnd0C)%Symbol = '@RhovFnTdbRhLBnd0C'
PossibleOperators(FuncRhovFnTdbRhLBnd0C)%NumOperands = 2
PossibleOperators(FuncRhovFnTdbRhLBnd0C)%Code = FuncRhovFnTdbRhLBnd0C
PossibleOperators(FuncRhovFnTdbWPb)%Symbol = '@RHOVFNTDBWPB'
PossibleOperators(FuncRhovFnTdbWPb)%NumOperands = 3
PossibleOperators(FuncRhovFnTdbWPb)%Code = FuncRhovFnTdbWPb
PossibleOperators(FuncRhFnTdbRhov)%Symbol = '@RHFNTDBRHOV'
PossibleOperators(FuncRhFnTdbRhov)%NumOperands = 2
PossibleOperators(FuncRhFnTdbRhov)%Code = FuncRhFnTdbRhov
PossibleOperators(FuncRhFnTdbRhovLBnd0C)%Symbol = '@RHFNTDBRHOVLBND0C'
PossibleOperators(FuncRhFnTdbRhovLBnd0C)%NumOperands = 2
PossibleOperators(FuncRhFnTdbRhovLBnd0C)%Code = FuncRhFnTdbRhovLBnd0C
PossibleOperators(FuncRhFnTdbWPb)%Symbol = '@RHFNTDBWPB'
PossibleOperators(FuncRhFnTdbWPb)%NumOperands = 3
PossibleOperators(FuncRhFnTdbWPb)%Code = FuncRhFnTdbWPb
PossibleOperators(FuncTwbFnTdbWPb)%Symbol = '@TWBFNTDBWPB'
PossibleOperators(FuncTwbFnTdbWPb)%NumOperands = 3
PossibleOperators(FuncTwbFnTdbWPb)%Code = FuncTwbFnTdbWPb
PossibleOperators(FuncVFnTdbWPb)%Symbol = '@VFNTDBWPB'
PossibleOperators(FuncVFnTdbWPb)%NumOperands = 3
PossibleOperators(FuncVFnTdbWPb)%Code = FuncVFnTdbWPb
PossibleOperators(FuncWFnTdpPb)%Symbol = '@WFNTDPPB'
PossibleOperators(FuncWFnTdpPb)%NumOperands = 2
PossibleOperators(FuncWFnTdpPb)%Code = FuncWFnTdpPb
PossibleOperators(FuncWFnTdbH)%Symbol = '@WFNTDBH'
PossibleOperators(FuncWFnTdbH)%NumOperands = 2
PossibleOperators(FuncWFnTdbH)%Code = FuncWFnTdbH
PossibleOperators(FuncWFnTdbTwbPb)%Symbol = '@WFNTDBTWBPB'
PossibleOperators(FuncWFnTdbTwbPb)%NumOperands = 3
PossibleOperators(FuncWFnTdbTwbPb)%Code = FuncWFnTdbTwbPb
PossibleOperators(FuncWFnTdbRhPb)%Symbol = '@WFNTDBRHPB'
PossibleOperators(FuncWFnTdbRhPb)%NumOperands = 4
PossibleOperators(FuncWFnTdbRhPb)%Code = FuncWFnTdbRhPb
PossibleOperators(FuncPsatFnTemp)%Symbol = '@PSATFNTEMP'
PossibleOperators(FuncPsatFnTemp)%NumOperands = 1
PossibleOperators(FuncPsatFnTemp)%Code = FuncPsatFnTemp
PossibleOperators(FuncTsatFnHPb)%Symbol = '@TSATFNHPB'
PossibleOperators(FuncTsatFnHPb)%NumOperands = 2
PossibleOperators(FuncTsatFnHPb)%Code = FuncTsatFnHPb
PossibleOperators(FuncTsatFnPb)%Symbol = '@TSATFNPB'
PossibleOperators(FuncTsatFnPb)%NumOperands = 1
PossibleOperators(FuncTsatFnPb)%Code = FuncTsatFnPb
PossibleOperators(FuncCpCW)%Symbol = '@CPCW'
PossibleOperators(FuncCpCW)%NumOperands = 1
PossibleOperators(FuncCpCW)%Code = FuncCpCW
PossibleOperators(FuncCpHW)%Symbol = '@CPHW'
PossibleOperators(FuncCpHW)%NumOperands = 1
PossibleOperators(FuncCpHW)%Code = FuncCpHW
PossibleOperators(FuncRhoH2O)%Symbol = '@RHOH2O'
PossibleOperators(FuncRhoH2O)%NumOperands = 1
PossibleOperators(FuncRhoH2O)%Code = FuncRhoH2O
PossibleOperators(FuncFatalHaltEp)%Symbol = '@FATALHALTEP'
PossibleOperators(FuncFatalHaltEp)%NumOperands = 1
PossibleOperators(FuncFatalHaltEp)%Code = FuncFatalHaltEp
PossibleOperators(FuncSevereWarnEp)%Symbol = '@SEVEREWARNEP'
PossibleOperators(FuncSevereWarnEp)%NumOperands = 1
PossibleOperators(FuncSevereWarnEp)%Code = FuncSevereWarnEp
PossibleOperators(FuncWarnEp)%Symbol = '@WARNEP'
PossibleOperators(FuncWarnEp)%NumOperands = 1
PossibleOperators(FuncWarnEp)%Code = FuncWarnEp
PossibleOperators(FuncTrendValue)%Symbol = '@TRENDVALUE'
PossibleOperators(FuncTrendValue)%NumOperands = 2
PossibleOperators(FuncTrendValue)%Code = FuncTrendValue
PossibleOperators(FuncTrendAverage)%Symbol = '@TRENDAVERAGE'
PossibleOperators(FuncTrendAverage)%NumOperands = 2
PossibleOperators(FuncTrendAverage)%Code = FuncTrendAverage
PossibleOperators(FuncTrendMax)%Symbol = '@TRENDMAX'
PossibleOperators(FuncTrendMax)%NumOperands = 2
PossibleOperators(FuncTrendMax)%Code = FuncTrendMax
PossibleOperators(FuncTrendMin)%Symbol = '@TRENDMIN'
PossibleOperators(FuncTrendMin)%NumOperands = 2
PossibleOperators(FuncTrendMin)%Code = FuncTrendMin
PossibleOperators(FuncTrendDirection)%Symbol = '@TRENDDIRECTION'
PossibleOperators(FuncTrendDirection)%NumOperands = 2
PossibleOperators(FuncTrendDirection)%Code = FuncTrendDirection
PossibleOperators(FuncTrendSum)%Symbol = '@TRENDSUM'
PossibleOperators(FuncTrendSum)%NumOperands = 2
PossibleOperators(FuncTrendSum)%Code = FuncTrendSum
PossibleOperators(FuncCurveValue)%Symbol = '@CURVEVALUE'
PossibleOperators(FuncCurveValue)%NumOperands = 6
PossibleOperators(FuncCurveValue)%Code = FuncCurveValue
AlreadyDidOnce = .TRUE.
RETURN
END SUBROUTINE SetupPossibleOperators