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) | :: | SurfNum | |||
real(kind=R64), | intent(in) | :: | CheckTemperature |
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 CheckFDSurfaceTempLimits(SurfNum,CheckTemperature)
! SUBROUTINE INFORMATION:
! AUTHOR Linda Lawrie
! DATE WRITTEN August 2012
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Provides a single entry point for checking surface temperature limits as well as
! setting up for recurring errors if too low or too high.
! METHODOLOGY EMPLOYED:
! Use methodology similar to HBSurfaceManager
! REFERENCES:
! na
! USE STATEMENTS:
USE General, ONLY: RoundSigDigits
USE DataAirFlowNetwork, ONLY: SimulateAirFlowNetwork,AirflowNetworkControlSimple
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: SurfNum ! surface number
REAL(R64), INTENT(IN) :: CheckTemperature ! calculated temperature, not reset
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ZoneNum
ZoneNum=Surface(SurfNum)%Zone
! IF ((TH(SurfNum,1,2) > MaxSurfaceTempLimit) .OR. &
! (TH(SurfNum,1,2) < MinSurfaceTempLimit) ) THEN
IF (WarmupFlag) WarmupSurfTemp=WarmupSurfTemp+1
IF (.not. WarmupFlag .or. (WarmupFlag .and. WarmupSurfTemp > 10) .or. DisplayExtraWarnings) THEN
IF (CheckTemperature < MinSurfaceTempLimit) THEN
IF (Surface(SurfNum)%LowTempErrCount == 0) THEN
CALL ShowSevereMessage('Temperature (low) out of bounds ['//TRIM(RoundSigDigits(CheckTemperature,2))// &
'] for zone="'//trim(Zone(ZoneNum)%Name)//'", for surface="'//TRIM(Surface(SurfNum)%Name)//'"')
CALL ShowContinueErrorTimeStamp(' ')
IF (.not. Zone(ZoneNum)%TempOutOfBoundsReported) THEN
CALL ShowContinueError('Zone="'//trim(Zone(ZoneNum)%Name)//'", Diagnostic Details:')
IF (Zone(ZoneNum)%FloorArea > 0.0d0) THEN
CALL ShowContinueError('...Internal Heat Gain ['// &
trim(RoundSigDigits(Zone(ZoneNum)%InternalHeatGains/Zone(ZoneNum)%FloorArea,3))//'] W/m2')
ELSE
CALL ShowContinueError('...Internal Heat Gain (no floor) ['// &
trim(RoundSigDigits(Zone(ZoneNum)%InternalHeatGains,3))//'] W')
ENDIF
IF (SimulateAirflowNetwork <= AirflowNetworkControlSimple) THEN
CALL ShowContinueError('...Infiltration/Ventilation ['// &
trim(RoundSigDigits(Zone(ZoneNum)%NominalInfilVent,3))//'] m3/s')
CALL ShowContinueError('...Mixing/Cross Mixing ['// &
trim(RoundSigDigits(Zone(ZoneNum)%NominalMixing,3))//'] m3/s')
ELSE
CALL ShowContinueError('...Airflow Network Simulation: Nominal Infiltration/Ventilation/Mixing not available.')
ENDIF
IF (Zone(ZoneNum)%isControlled) THEN
CALL ShowContinueError('...Zone is part of HVAC controlled system.')
ELSE
CALL ShowContinueError('...Zone is not part of HVAC controlled system.')
ENDIF
Zone(ZoneNum)%TempOutOfBoundsReported=.true.
ENDIF
CALL ShowRecurringSevereErrorAtEnd('Temperature (low) out of bounds for zone='//trim(Zone(ZoneNum)%Name)// &
' for surface='//TRIM(Surface(SurfNum)%Name), &
Surface(SurfNum)%LowTempErrCount,ReportMaxOf=CheckTemperature,ReportMaxUnits='C', &
ReportMinOf=CheckTemperature,ReportMinUnits='C')
ELSE
CALL ShowRecurringSevereErrorAtEnd('Temperature (low) out of bounds for zone='//trim(Zone(ZoneNum)%Name)// &
' for surface='//TRIM(Surface(SurfNum)%Name), &
Surface(SurfNum)%LowTempErrCount,ReportMaxOf=CheckTemperature,ReportMaxUnits='C', &
ReportMinOf=CheckTemperature,ReportMinUnits='C')
ENDIF
ELSE
IF (Surface(SurfNum)%HighTempErrCount == 0) THEN
CALL ShowSevereMessage('Temperature (high) out of bounds ('//TRIM(RoundSigDigits(CheckTemperature,2))// &
'] for zone="'//trim(Zone(ZoneNum)%Name)//'", for surface="'//TRIM(Surface(SurfNum)%Name)//'"')
CALL ShowContinueErrorTimeStamp(' ')
IF (.not. Zone(ZoneNum)%TempOutOfBoundsReported) THEN
CALL ShowContinueError('Zone="'//trim(Zone(ZoneNum)%Name)//'", Diagnostic Details:')
IF (Zone(ZoneNum)%FloorArea > 0.0d0) THEN
CALL ShowContinueError('...Internal Heat Gain ['// &
trim(RoundSigDigits(Zone(ZoneNum)%InternalHeatGains/Zone(ZoneNum)%FloorArea,3))//'] W/m2')
ELSE
CALL ShowContinueError('...Internal Heat Gain (no floor) ['// &
trim(RoundSigDigits(Zone(ZoneNum)%InternalHeatGains,3))//'] W')
ENDIF
IF (SimulateAirflowNetwork <= AirflowNetworkControlSimple) THEN
CALL ShowContinueError('...Infiltration/Ventilation ['// &
trim(RoundSigDigits(Zone(ZoneNum)%NominalInfilVent,3))//'] m3/s')
CALL ShowContinueError('...Mixing/Cross Mixing ['// &
trim(RoundSigDigits(Zone(ZoneNum)%NominalMixing,3))//'] m3/s')
ELSE
CALL ShowContinueError('...Airflow Network Simulation: Nominal Infiltration/Ventilation/Mixing not available.')
ENDIF
IF (Zone(ZoneNum)%isControlled) THEN
CALL ShowContinueError('...Zone is part of HVAC controlled system.')
ELSE
CALL ShowContinueError('...Zone is not part of HVAC controlled system.')
ENDIF
Zone(ZoneNum)%TempOutOfBoundsReported=.true.
ENDIF
CALL ShowRecurringSevereErrorAtEnd('Temperature (high) out of bounds for zone='//trim(Zone(ZoneNum)%Name)// &
' for surface='//TRIM(Surface(SurfNum)%Name), &
Surface(SurfNum)%HighTempErrCount,ReportMaxOf=CheckTemperature,ReportMaxUnits='C', &
ReportMinOf=CheckTemperature,ReportMinUnits='C')
ELSE
CALL ShowRecurringSevereErrorAtEnd('Temperature (high) out of bounds for zone='//trim(Zone(ZoneNum)%Name)// &
' for surface='//TRIM(Surface(SurfNum)%Name), &
Surface(SurfNum)%HighTempErrCount,ReportMaxOf=CheckTemperature,ReportMaxUnits='C', &
ReportMinOf=CheckTemperature,ReportMinUnits='C')
ENDIF
ENDIF
ENDIF
RETURN
END SUBROUTINE CheckFDSurfaceTempLimits