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 GetSplitterInput
! SUBROUTINE INFORMATION:
! AUTHOR Richard J. Liesen
! DATE WRITTEN March 2000
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine is the main routine to call other input routines and
! Get routines. The Splitter only gets node connection data and not mass
! flow rates.
! METHODOLOGY EMPLOYED:
! Uses the status flags to trigger events.
! REFERENCES:
! na
! USE STATEMENTS:
USE InputProcessor, ONLY: GetNumObjectsFound, GetObjectItem, VerifyName, GetObjectDefMaxArgs
USE NodeInputManager, ONLY: GetOnlySingleNode
USE General, ONLY: TrimSigDigits
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER (len=*), PARAMETER :: RoutineName='GetSplitterInput: ' ! include trailing blank space
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: SplitterNum ! The Splitter that you are currently loading input into
INTEGER :: NumAlphas
INTEGER :: NumNums
INTEGER :: NodeNum
INTEGER :: IOSTAT
LOGICAL :: ErrorsFound=.false.
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
INTEGER :: NumParams
INTEGER :: OutNodeNum1
INTEGER :: OutNodeNum2
CHARACTER (len=MaxNameLength) :: CurrentModuleObject ! for ease in getting objects
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: AlphArray ! Alpha input items for object
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cAlphaFields ! Alpha field names
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: cNumericFields ! Numeric field names
REAL(r64), ALLOCATABLE, DIMENSION(:) :: NumArray ! Numeric input items for object
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lAlphaBlanks ! Logical array, alpha field input BLANK = .true.
LOGICAL, ALLOCATABLE, DIMENSION(:) :: lNumericBlanks ! Logical array, numeric field input BLANK = .true.
! RESET THE GETINPUT FLAG
GetSplitterInputFlag = .FALSE.
! Flow
CurrentModuleObject = 'AirLoopHVAC:ZoneSplitter'
NumSplitters = GetNumObjectsFound(CurrentModuleObject)
IF (NumSplitters.GT.0) ALLOCATE(SplitterCond(NumSplitters))
ALLOCATE(CheckEquipName(NumSplitters))
CheckEquipName=.true.
CALL GetObjectDefMaxArgs(CurrentModuleObject,NumParams,NumAlphas,NumNums)
ALLOCATE(AlphArray(NumAlphas))
AlphArray=' '
ALLOCATE(cAlphaFields(NumAlphas))
cAlphaFields=' '
ALLOCATE(lAlphaBlanks(NumAlphas))
lAlphaBlanks=.TRUE.
ALLOCATE(cNumericFields(NumNums))
cNumericFields=' '
ALLOCATE(lNumericBlanks(NumNums))
lNumericBlanks=.TRUE.
ALLOCATE(NumArray(NumNums))
NumArray=0.0d0
DO SplitterNum = 1, NumSplitters
CALL GetObjectItem(CurrentModuleObject,SplitterNum,AlphArray,NumAlphas, &
NumArray,NumNums,IOSTAT, &
NumBlank=lNumericBlanks,AlphaBlank=lAlphaBlanks, &
AlphaFieldNames=cAlphaFields,NumericFieldNames=cNumericFields)
IsNotOK=.false.
IsBlank=.false.
CALL VerifyName(AlphArray(1),SplitterCond%SplitterName,SplitterNum-1,IsNotOK,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) AlphArray(1)='xxxxx'
ENDIF
SplitterCond(SplitterNum)%SplitterName = AlphArray(1)
SplitterCond(SplitterNum)%InletNode = &
GetOnlySingleNode(AlphArray(2),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_Inlet,1,ObjectIsNotParent)
SplitterCond(SplitterNum)%NumOutletNodes = NumAlphas - 2
ALLOCATE(SplitterCond(SplitterNum)%OutletNode(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletMassFlowRate(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletMassFlowRateMaxAvail(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletMassFlowRateMinAvail(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletTemp(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletHumRat(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletEnthalpy(SplitterCond(SplitterNum)%NumOutletNodes))
ALLOCATE(SplitterCond(SplitterNum)%OutletPressure(SplitterCond(SplitterNum)%NumOutletNodes))
SplitterCond(SplitterNum)%InletMassFlowRate = 0.0d0
SplitterCond(SplitterNum)%InletMassFlowRateMaxAvail = 0.0d0
SplitterCond(SplitterNum)%InletMassFlowRateMinAvail = 0.0d0
DO NodeNum = 1, SplitterCond(SplitterNum)%NumOutletNodes
SplitterCond(SplitterNum)%OutletNode(NodeNum) = &
GetOnlySingleNode(AlphArray(2+NodeNum),ErrorsFound,TRIM(CurrentModuleObject),AlphArray(1), &
NodeType_Air,NodeConnectionType_Outlet,1,ObjectIsNotParent)
IF (lAlphaBlanks(2+NodeNum)) THEN
CALL ShowSevereError(TRIM(cAlphaFields(2+NodeNum))//' is Blank, '//TRIM(CurrentModuleObject)//' = '//TRIM(AlphArray(1)))
ErrorsFound=.true.
ENDIF
END DO
END DO ! end Number of Splitter Loop
! Check for duplicate names specified in Zone Splitter
DO SplitterNum=1,NumSplitters
NodeNum=SplitterCond(SplitterNum)%InletNode
DO OutNodeNum1=1,SplitterCond(SplitterNum)%NumOutletNodes
IF (NodeNum /= SplitterCond(SplitterNum)%OutletNode(OutNodeNum1)) CYCLE
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(SplitterCond(SplitterNum)%SplitterName)// &
' specifies an outlet node name the same as the inlet node.')
CALL ShowContinueError('..'//TRIM(cAlphaFields(2))//'='//TRIM(NodeID(NodeNum)))
CALL ShowContinueError('..Outlet Node #'//TRIM(TrimSigDigits(OutNodeNum1))// &
' is duplicate.')
ErrorsFound=.true.
ENDDO
DO OutNodeNum1=1,SplitterCond(SplitterNum)%NumOutletNodes
DO OutNodeNum2=OutNodeNum1+1,SplitterCond(SplitterNum)%NumOutletNodes
IF (SplitterCond(SplitterNum)%OutletNode(OutNodeNum1) /= SplitterCond(SplitterNum)%OutletNode(OutNodeNum2)) CYCLE
CALL ShowSevereError(TRIM(CurrentModuleObject)//' = '//TRIM(SplitterCond(SplitterNum)%SplitterName)// &
' specifies duplicate outlet nodes in its outlet node list.')
CALL ShowContinueError('..Outlet Node #'//TRIM(TrimSigDigits(OutNodeNum1))// &
' Name='//TRIM(NodeID(OutNodeNum1)))
CALL ShowContinueError('..Outlet Node #'//TRIM(TrimSigDigits(OutNodeNum2))// &
' is duplicate.')
ErrorsFound=.true.
ENDDO
ENDDO
ENDDO
DEALLOCATE(AlphArray)
DEALLOCATE(NumArray)
DEALLOCATE(cAlphaFields)
DEALLOCATE(lAlphaBlanks)
DEALLOCATE(cNumericFields)
DEALLOCATE(lNumericBlanks)
IF (ErrorsFound) THEN
CALL ShowFatalError(RoutineName//'Errors found in getting input.')
ENDIF
RETURN
END SUBROUTINE GetSplitterInput