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(inout) | :: | ConstrNum | |||
logical, | intent(inout) | :: | ErrorsFound |
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 CreateFCfactorConstructions(ConstrNum,ErrorsFound)
! SUBROUTINE INFORMATION:
! AUTHOR Tianzhen Hong
! DATE WRITTEN July 2009
! MODIFIED
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine goes through each construction defined with Ffactor or Cfactor method,
! and creates a construction (concrete + insulation) used in the heat transfer calculation.
! This subroutine only gets called once in the GetConstructionData subroutine
! METHODOLOGY EMPLOYED:
! na
! REFERENCES:
! na
! USE STATEMENTS:
USE DataStringGlobals
USE General, ONLY: RoundSigDigits
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(INOUT) :: ConstrNum ! Counter for Constructions
LOGICAL, INTENT(INOUT) :: ErrorsFound ! If errors found in input
! SUBROUTINE PARAMETER DEFINITIONS:
! ASHRAE Handbook Fundamental 2005
!Thermal resistance of the inside air film, m2.K/W. Average of 0.14 (heat flow up) and 0.11 (heat flow down)
REAL(r64),PARAMETER :: Rfilm_in = 0.125d0
!Thermal resistance of the outside air film used in calculating the Ffactor, m2.K/W. 0.17/5.678
REAL(r64),PARAMETER :: Rfilm_out = 0.03d0
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ConstructNumAlpha ! Number of construction alpha names being passed
INTEGER :: DummyNumProp ! dummy variable for properties being passed
INTEGER :: IOStat ! IO Status when calling get input subroutine
CHARACTER(len=MaxNameLength),DIMENSION(1) :: ConstructAlphas ! Construction Alpha names defined
REAL(r64), DIMENSION(4) :: DummyProps !Temporary array to transfer construction properties
LOGICAL :: ErrorInName
LOGICAL :: IsBlank
INTEGER :: Loop
INTEGER :: TotFfactorConstructs ! Number of slabs-on-grade or underground floor constructions defined with F factors
INTEGER :: TotCfactorConstructs ! Number of underground wall constructions defined with C factors
REAL(r64) :: Ffactor !Ffactor in W/m-K, applies to deltaT of outside - indoor air temperature
REAL(r64) :: Cfactor !Cfactor in W/m2-K, does not include soil or air films
REAL(r64) :: Area !floor area in m2
REAL(r64) :: PerimeterExposed !perimeter exposed in m
REAL(r64) :: Height !Height of the underground wall in m
REAL(r64) :: Reff !Effective thermal resistance, m2.K/W
REAL(r64) :: Rcon !Concrete layer thermal resistance, m2.K/W
REAL(r64) :: Rfic !Thermal resistance of the fictitious material, m2.K/W
INTEGER :: MaterNum !Material index
REAL(r64) :: Rsoilequ !Effective R-value of soil for underground walls
INTEGER :: iFCConcreteLayer !Layer pointer to the materials array
! First get the concrete layer
iFCConcreteLayer = FindIteminList('~FC_Concrete',Material%Name,TotMaterials)
Rcon = Material(iFCConcreteLayer)%Resistance
! Count number of constructions defined with Ffactor or Cfactor method
TotFfactorConstructs = GetNumObjectsFound('Construction:FfactorGroundFloor')
TotCfactorConstructs = GetNumObjectsFound('Construction:CfactorUndergroundWall')
! First create ground floor constructions defined with F factor method if any
CurrentModuleObject='Construction:FfactorGroundFloor'
! Loop through all constructs defined with Ffactor method
DO Loop = 1, TotFfactorConstructs
!Get the object names for each construction from the input processor
CALL GetObjectItem(CurrentModuleObject,Loop,ConstructAlphas,ConstructNumAlpha,DummyProps,DummyNumProp,IOSTAT, &
AlphaBlank=lAlphaFieldBlanks,NumBlank=lNumericFieldBlanks, &
AlphaFieldnames=cAlphaFieldNames,NumericFieldNames=cNumericFieldNames)
ErrorInName=.false.
IsBlank=.false.
CALL VerifyName(ConstructAlphas(1),Construct%Name,ConstrNum,ErrorInName,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (ErrorInName) THEN
ErrorsFound=.true.
CYCLE
ENDIF
ConstrNum = ConstrNum+1
Construct(ConstrNum)%Name = ConstructAlphas(1)
Construct(ConstrNum)%TypeIsFfactorFloor = .true.
Ffactor = DummyProps(1)
Area = DummyProps(2)
PerimeterExposed = DummyProps(3)
Construct(ConstrNum)%Area = Area
Construct(ConstrNum)%PerimeterExposed = PerimeterExposed
Construct(ConstrNum)%Ffactor = Ffactor
IF (Ffactor <= 0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // '="' //Trim(ConstructAlphas(1))// &
'" has '//trim(cNumericFieldNames(1))//' <= 0.0, must be > 0.0.')
CALL ShowContinueError('Entered value=['//trim(RoundSigDigits(Ffactor,2))//']')
ErrorsFound=.true.
ENDIF
IF (Area <= 0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // '="' //Trim(ConstructAlphas(1))// &
'" has '//trim(cNumericFieldNames(2))//' <= 0.0, must be > 0.0.')
CALL ShowContinueError('Entered value=['//trim(RoundSigDigits(Area,2))//']')
ErrorsFound=.true.
ENDIF
IF (PerimeterExposed < 0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // '="' //Trim(ConstructAlphas(1))// &
'" has '//trim(cNumericFieldNames(3))//' <= 0.0, must be > 0.0.')
CALL ShowContinueError('Entered value=['//trim(RoundSigDigits(PerimeterExposed,2))//']')
ErrorsFound=.true.
ENDIF
! The construction has two layers which have been created in GetMaterialData
Construct(ConstrNum)%TotLayers = 2
! The concrete is the inside layer
Construct(ConstrNum)%LayerPoint(2) = iFCConcreteLayer
! The fictitious insulation is the outside layer
MaterNum = FindIteminList('~FC_Insulation_' // RoundSigDigits(Loop),Material%Name,TotMaterials)
Construct(ConstrNum)%LayerPoint(1) = MaterNum
! Calculate the thermal resistance of the fictitious insulation layer
! effective thermal resistance excludes inside and outside air films
IF (PerimeterExposed > 0.0d0) THEN
Reff = Area / (PerimeterExposed * Ffactor) - Rfilm_in - Rfilm_out
ELSE ! PerimeterExposed = 0 for underground floor, assume R-1000 (IP)
Reff = 177.0d0
ENDIF
Rfic = Reff - Rcon
IF (Rfic <=0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // '="' //Trim(ConstructAlphas(1))// &
'" has calculated R value <= 0.0, must be > 0.0.')
CALL ShowContinueError('Calculated value=['//trim(RoundSigDigits(Rfic,2))//'] Check definition.')
ErrorsFound=.true.
ENDIF
Material(MaterNum)%Resistance = Rfic
NominalR(MaterNum) = Rfic
!excluding thermal resistance of inside or outside air film
! 1/Reff gets reported as the "U-Factor no Film" in the summary report Envelope Summary | Opaque Exterior
NominalRforNominalUCalculation(ConstrNum) = Reff
END DO
! Then create underground wall constructions defined with C factor method if any
CurrentModuleObject = 'Construction:CfactorUndergroundWall'
DO Loop = 1, TotCfactorConstructs ! Loop through all constructs defined with Ffactor method
!Get the object names for each construction from the input processor
CALL GetObjectItem(CurrentModuleObject,Loop,ConstructAlphas,ConstructNumAlpha,DummyProps,DummyNumProp,IOSTAT, &
AlphaBlank=lAlphaFieldBlanks,NumBlank=lNumericFieldBlanks, &
AlphaFieldnames=cAlphaFieldNames,NumericFieldNames=cNumericFieldNames)
ErrorInName=.false.
IsBlank=.false.
CALL VerifyName(ConstructAlphas(1),Construct%Name,ConstrNum,ErrorInName,IsBlank,TRIM(CurrentModuleObject)//' Name')
IF (ErrorInName) THEN
ErrorsFound=.true.
CYCLE
ENDIF
ConstrNum = ConstrNum+1
Construct(ConstrNum)%Name = ConstructAlphas(1)
Construct(ConstrNum)%TypeIsCfactorWall = .true.
Cfactor = DummyProps(1)
Height = DummyProps(2)
Construct(ConstrNum)%Height = Height
Construct(ConstrNum)%Cfactor = Cfactor
IF (Cfactor <= 0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // ' ' //Trim(ConstructAlphas(1))// &
' has '//trim(cNumericFieldNames(1))//' <= 0.0, must be > 0.0.')
CALL ShowContinueError('Entered value=['//trim(RoundSigDigits(Cfactor,2))//']')
ErrorsFound=.true.
ENDIF
IF (Height <= 0.0d0 ) THEN
CALL ShowSevereError(CurrentModuleObject // ' ' //Trim(ConstructAlphas(1))// &
' has '//trim(cNumericFieldNames(2))//' <= 0.0, must be > 0.0.')
CALL ShowContinueError('Entered value=['//trim(RoundSigDigits(Height,2))//']')
ErrorsFound=.true.
ENDIF
! The construction has two layers which have been created in GetMaterialData
Construct(ConstrNum)%TotLayers = 2
! The concrete is the inside layer
Construct(ConstrNum)%LayerPoint(2) = iFCConcreteLayer
! The fictitious insulation is the outside layer
MaterNum = FindIteminList('~FC_Insulation_' // RoundSigDigits(Loop+TotFfactorConstructs,0),Material%Name,TotMaterials)
Construct(ConstrNum)%LayerPoint(1) = MaterNum
! CR 8886 Rsoil should be in SI unit. From ASHRAE 90.1-2010 SI
IF (Height <= 0.25d0) THEN
Rsoilequ = 0.12d0 !m2K/W
ELSEIF (Height >= 2.5d0) THEN
Rsoilequ = 0.92d0
ELSE ! regression from ASHRAE 90.1-2010 SI TABLE C6.10.1 Effective R-Value of Soil, R2 = 0.9967
Rsoilequ = 0.0607d0 + 0.3479d0*Height
ENDIF
! effective thermal resistance excludes inside and outside air films
Reff = 1.0d0/Cfactor + Rsoilequ ! Cfactor does not include air films
Rfic = Reff - Rcon
IF (Rfic <=0 ) THEN
CALL ShowSevereError(CurrentModuleObject // '="' //Trim(ConstructAlphas(1))// &
'" has calculated R value <= 0.0, must be > 0.0.')
CALL ShowContinueError('Calculated value=['//trim(RoundSigDigits(Rfic,2))//'] Check definition.')
ErrorsFound = .true.
ENDIF
Material(MaterNum)%Resistance = Rfic
NominalR(MaterNum) = Rfic
!Reff includes the wall itself and soil, but excluding thermal resistance of inside or outside air film
! 1/Reff gets reported as the "U-Factor no Film" in the summary report Envelope Summary | Opaque Exterior
NominalRforNominalUCalculation(ConstrNum) = Reff
END DO
RETURN
END SUBROUTINE CreateFCfactorConstructions