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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | RadSysNum | |||
real(kind=r64), | intent(out) | :: | LoadMet |
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 UpdateHighTempRadiantSystem(RadSysNum,LoadMet)
! SUBROUTINE INFORMATION:
! AUTHOR Rick Strand
! DATE WRITTEN February 2001
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine does any updating that needs to be done for high
! temperature radiant heating systems. This routine has two functions.
! First, it needs to keep track of the average high temperature
! radiant source. The method for doing this is similar to low
! temperature systems except that heat input is kept locally on
! a system basis rather than a surface basis. This is because a high
! temperature system affects many surfaces while a low temperature
! system directly affects only one surface. This leads to the second
! function of this subroutine which is to account for the affect of
! all high temperature radiant systems on each surface. This
! distribution must be "redone" every time to be sure that we have
! properly accounted for all of the systems.
! METHODOLOGY EMPLOYED:
! For the source average update, if the system time step elapsed is
! still what it used to be, then either we are still iterating or we
! had to go back and shorten the time step. As a result, we have to
! subtract out the previous value that we added. If the system time
! step elapsed is different, then we just need to add the new values
! to the running average.
! REFERENCES:
! na
! USE STATEMENTS:
USE DataGlobals, ONLY : TimeStepZone,BeginEnvrnFlag
USE DataHeatBalFanSys, ONLY : SumConvHTRadSys
USE DataHVACGlobals, ONLY : TimeStepSys, SysTimeElapsed
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: RadSysNum ! Index for the low temperature radiant system under consideration within the derived types
REAL(r64), INTENT(OUT) :: LoadMet ! load met by the radiant system, in Watts
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ZoneNum ! Zone index number for the current radiant system
logical,save :: myenvrnflag=.true.
! FLOW:
if (beginenvrnflag .and. myenvrnflag) then
myenvrnflag=.false.
endif
if (.not. beginenvrnflag) then
myenvrnflag=.true.
endif
! First, update the running average if necessary...
IF (LastSysTimeElapsed(RadSysNum) == SysTimeElapsed) THEN
! Still iterating or reducing system time step, so subtract old values which were
! not valid
QHTRadSrcAvg(RadSysNum) = QHTRadSrcAvg(RadSysNum) &
-LastQHTRadSrc(RadSysNum)*LastTimeStepSys(RadSysNum)/TimeStepZone
END IF
! Update the running average and the "last" values with the current values of the appropriate variables
QHTRadSrcAvg(RadSysNum) = QHTRadSrcAvg(RadSysNum) &
+QHTRadSource(RadSysNum)*TimeStepSys/TimeStepZone
LastQHTRadSrc(RadSysNum) = QHTRadSource(RadSysNum)
LastSysTimeElapsed(RadSysNum) = SysTimeElapsed
LastTimeStepSys(RadSysNum) = TimeStepSys
SELECT CASE (HighTempRadSys(RadSysNum)%ControlType)
CASE (MATControl,MRTControl,OperativeControl)
! Only need to do this for the non-SP controls (SP has already done this enough)
! Now, distribute the radiant energy of all systems to the appropriate
! surfaces, to people, and the air; determine the latent portion
CALL DistributeHTRadGains
! Now "simulate" the system by recalculating the heat balances
ZoneNum = HighTempRadSys(RadSysNum)%ZonePtr
CALL CalcHeatBalanceOutsideSurf(ZoneNum)
CALL CalcHeatBalanceInsideSurf(ZoneNum)
END SELECT
IF (QHTRadSource(RadSysNum) <= 0.0d0) THEN
LoadMet = 0.0d0 ! System wasn't running so it can't meet a load
ELSE
ZoneNum = HighTempRadSys(RadSysNum)%ZonePtr
LoadMet = (SumHATsurf(ZoneNum) - ZeroSourceSumHATsurf(ZoneNum)) + SumConvHTRadSys(ZoneNum)
END IF
RETURN
END SUBROUTINE UpdateHighTempRadiantSystem