Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. 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.
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 GetOAMixerInputs
! SUBROUTINE INFORMATION:
! AUTHOR Fred Buhl
! DATE WRITTEN Oct 1998
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE
! Input the OAMixer data and store it in the OAMixer array.
! METHODOLOGY EMPLOYED:
! Use the Get routines from the InputProcessor module.
! REFERENCES:
! na
! USE STATEMENTS:
USE InputProcessor
USE NodeInputManager, ONLY: GetOnlySingleNode
USE BranchNodeConnections, ONLY: TestCompSet
IMPLICIT NONE
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER(len=*), PARAMETER :: RoutineName='GetOAMixerInputs: ' ! include trailing blank space
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: NumNums ! Number of REAL(r64) numbers returned by GetObjectItem
INTEGER :: NumAlphas ! Number of alphanumerics returned by GetObjectItem
INTEGER :: NumArg ! Number of arguments from GetObjectDefMaxArgs call
INTEGER :: OutAirNum
INTEGER :: IOSTAT
REAL(r64), ALLOCATABLE, DIMENSION(:) :: NumArray ! array that holds numeric input values
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: AlphArray ! array that holds alpha input values
CHARACTER(len=MaxNameLength) :: CurrentModuleObject ! Object type for getting and messages
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cAlphaFields ! Alpha field names
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cNumericFields ! Numeric field names
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaBlanks ! Logical array, alpha field input BLANK = .true.
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericBlanks ! Logical array, numeric field input BLANK = .true.
LOGICAL :: ErrorsFound=.false.
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
IF (.not. GetOAMixerInputFlag) RETURN
CALL GetObjectDefMaxArgs(CurrentModuleObjects(CMO_OAMixer),NumArg,NumAlphas,NumNums)
ALLOCATE(AlphArray(NumAlphas))
AlphArray=' '
ALLOCATE(NumArray(NumNums))
NumArray=0.0d0
ALLOCATE(lNumericBlanks(NumNums))
lNumericBlanks=.true.
ALLOCATE(lAlphaBlanks(NumAlphas))
lAlphaBlanks=.true.
ALLOCATE(cAlphaFields(NumAlphas))
cAlphaFields = ' '
ALLOCATE(cNumericFields(NumNums))
cNumericFields = ' '
CurrentModuleObject = CurrentModuleObjects(CMO_OAMixer)
NumOAMixers = GetNumObjectsFound(CurrentModuleObject)
IF (NumOAMixers.GT.0) THEN
ALLOCATE(OAMixer(NumOAMixers))
DO OutAirNum=1,NumOAMixers
CALL GetObjectItem(CurrentModuleObject,OutAirNum,AlphArray,NumAlphas,&
NumArray,NumNums,IOSTAT,NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.false.
IsBlank=.false.
CALL VerifyName(AlphArray(1),OAMixer%Name,OutAirNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) AlphArray(1)='xxxxx'
ENDIF
OAMixer(OutAirNum)%Name = AlphArray(1)
OAMixer(OutAirNum)%MixNode = &
GetOnlySingleNode(AlphArray(2),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
OAMixer(OutAirNum)%InletNode = &
! Set connection type to 'Inlet', because this is not necessarily directly from
! outside air. Outside Air Inlet Node List will set the connection to outside air
GetOnlySingleNode(AlphArray(3),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
OAMixer(OutAirNum)%RelNode = &
GetOnlySingleNode(AlphArray(4),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_ReliefAir,1,ObjectIsNotParent)
OAMixer(OutAirNum)%RetNode = &
GetOnlySingleNode(AlphArray(5),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
! Check for dupes in the four nodes.
IF (OAMixer(OutAirNum)%MixNode == OAMixer(OutAirNum)%InletNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(3))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%InletNode))// &
' duplicates the '//TRIM(cAlphaFields(2))//'.')
ErrorsFound=.true.
ELSEIF (OAMixer(OutAirNum)%MixNode == OAMixer(OutAirNum)%RelNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(4))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%RelNode))// &
' duplicates the '//TRIM(cAlphaFields(2))//'.')
ErrorsFound=.true.
ELSEIF (OAMixer(OutAirNum)%MixNode == OAMixer(OutAirNum)%RetNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(5))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%RetNode))// &
' duplicates the '//TRIM(cAlphaFields(2))//'.')
ErrorsFound=.true.
ENDIF
IF (OAMixer(OutAirNum)%InletNode == OAMixer(OutAirNum)%RelNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(4))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%RelNode))// &
' duplicates the '//TRIM(cAlphaFields(3))//'.')
ErrorsFound=.true.
ELSEIF (OAMixer(OutAirNum)%InletNode == OAMixer(OutAirNum)%RetNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(5))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%RetNode))// &
' duplicates the '//TRIM(cAlphaFields(3))//'.')
ErrorsFound=.true.
ENDIF
IF (OAMixer(OutAirNum)%RelNode == OAMixer(OutAirNum)%RetNode) THEN
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(OAMixer(OutAirNum)%Name)// &
' '//TRIM(cAlphaFields(5))//' = '//TRIM(NodeID(OAMixer(OutAirNum)%RetNode))// &
' duplicates the '//TRIM(cAlphaFields(4))//'.')
ErrorsFound=.true.
ENDIF
CALL TestCompSet(TRIM(CurrentModuleObject),OAMixer(OutAirNum)%Name,AlphArray(3), &
AlphArray(2),'Air Nodes')
END DO
END IF
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting '//TRIM(CurrentModuleObject))
ENDIF
GetOAMixerInputFlag = .FALSE.
DEALLOCATE(AlphArray)
DEALLOCATE(NumArray)
DEALLOCATE(lNumericBlanks)
DEALLOCATE(lAlphaBlanks)
DEALLOCATE(cAlphaFields)
DEALLOCATE(cNumericFields)
RETURN
END SUBROUTINE GetOAMixerInputs