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) | :: | Item | |||
real(kind=r64), | intent(in) | :: | Temperature | |||
real(kind=r64), | intent(in) | :: | AirMassFlow | |||
real(kind=r64), | intent(in) | :: | FlowFraction | |||
real(kind=r64), | intent(in) | :: | CoreLength | |||
real(kind=r64), | intent(in) | :: | CoreDiameter | |||
real(kind=r64), | intent(in) | :: | CoreNumbers |
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.
REAL(r64) FUNCTION CalcVentSlabHXEffectTerm(Item,Temperature,AirMassFlow,FlowFraction,CoreLength,CoreDiameter,CoreNumbers)
! SUBROUTINE INFORMATION:
! AUTHOR Rick Strand
! DATE WRITTEN December 2000
! MODIFIED June 2008 (air properties)
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine calculates the radiant system "heat exchanger"
! effectiveness term. This is equal to the mass flow rate of water
! times the specific heat of water times the effectiveness of
! the heat exchanger (radiant system "coil").
! METHODOLOGY EMPLOYED:
! Assumes that the only real heat transfer term that we have to
! deal with is the convection from the water to the tube. The
! other assumptions are that the tube inside surface temperature
! is equal to the "source location temperature" and that it is
! a CONSTANT throughout the radiant system. This is to make
! the problem more tractable and to fit with other system assumptions
! that were made elsewhere in the radiant system model.
! REFERENCES:
! Property data for air shown below as parameters taken from
! Mills, Heat Transfer, Table A.7.
! Heat exchanger information also from Incropera and DeWitt.
! Code based loosely on code from IBLAST program (research version)
! USE STATEMENTS:
USE DataGlobals, ONLY : PI
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: Item ! Index number of radiant system under consideration
REAL(r64), INTENT(IN) :: Temperature ! Temperature of air entering the radiant system, in C
REAL(r64), INTENT(IN) :: AirMassFlow ! Mass flow rate of water in the radiant system, in kg/s
REAL(r64), INTENT(IN) :: FlowFraction ! Mass flow rate fraction for this surface in the radiant system
REAL(r64), INTENT(IN) :: CoreLength ! Length of tubing in the radiant system, in m
REAL(r64), INTENT(IN) :: CoreDiameter ! Inside diameter of the tubing in the radiant system, in m
REAL(r64), INTENT(IN) :: CoreNumbers !
! SUBROUTINE PARAMETER DEFINITIONS:
REAL(r64), PARAMETER :: MaxLaminarRe = 2300.d0 ! Maximum Reynolds number for laminar flow
INTEGER, PARAMETER :: NumOfPropDivisions = 13
REAL(r64), PARAMETER :: MaxExpPower = 50.d0 ! Maximum power after which EXP argument would be zero for DP variables
REAL(r64), PARAMETER, DIMENSION(NumOfPropDivisions) :: Temps= & ! Temperature, in C
(/1.85d0,6.85d0,11.85d0,16.85d0,21.85d0,26.85d0,31.85d0,36.85d0,41.85d0,46.85d0,51.85d0,56.85d0,61.85d0/)
REAL(r64), PARAMETER, DIMENSION(NumOfPropDivisions) :: Mu= & ! Viscosity, in Ns/m2
(/0.0000088d0,0.0000176d0,0.00001781d0,0.00001802d0,0.000018225d0,0.00001843d0,0.00001865d0,0.00001887d0, &
0.00001908d0,0.00001929d0,0.0000195d0,0.00001971d0,0.00001992d0/)
REAL(r64), PARAMETER, DIMENSION(NumOfPropDivisions) :: Conductivity= & ! Conductivity, in W/mK
(/0.01275d0,0.0255d0,0.0258d0,0.0261d0,0.0264d0,0.0267d0,0.02705d0,0.0274d0,0.02775d0,0.0281d0, &
0.0284d0,0.0287d0,0.01435d0/)
REAL(r64), PARAMETER, DIMENSION(NumOfPropDivisions) :: Pr= & ! Prandtl number (dimensionless)
(/0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0,0.69d0/)
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: Index
REAL(r64) :: InterpFrac
REAL(r64) :: NuD
REAL(r64) :: ReD
REAL(r64) :: NTU
REAL(r64) :: CpAppAir
REAL(r64) :: Kactual
REAL(r64) :: MUactual
REAL(r64) :: PRactual
REAL(r64) :: SysAirMassFlow ! Specific heat of air
! FLOW:
! First find out where we are in the range of temperatures
Index = 1
DO WHILE (Index <= NumOfPropDivisions)
IF (Temperature < Temps(Index)) EXIT ! DO loop
Index = Index + 1
END DO
! Initialize thermal properties of Air
IF (Index == 1) THEN
MUactual = Mu(Index)
Kactual = Conductivity(Index)
PRactual = Pr(Index)
ELSE IF (Index > NumOfPropDivisions) THEN
Index = NumOfPropDivisions
MUactual = Mu(Index)
Kactual = Conductivity(Index)
PRactual = Pr(Index)
ELSE
InterpFrac = (Temperature-Temps(Index-1))/(Temps(Index)-Temps(Index-1))
MUactual = Mu(Index-1) + InterpFrac*(Mu(Index)-Mu(Index-1))
Kactual = Conductivity(Index-1) + InterpFrac*(Conductivity(Index)-Conductivity(Index-1))
PRactual = Pr(Index-1) + InterpFrac*(Pr(Index)-Pr(Index-1))
END IF
! arguments are glycol name, temperature, and concentration
CpAppAir = PsyCpAirFnWTdb(Node(VentSlab(Item)%RadInNode)%HumRat, Node(VentSlab(Item)%RadInNode)%Temp)
SysAirMassFlow = AirMassFlow/CoreNumbers
! Calculate the Reynold's number from RE=(4*Mdot)/(Pi*Mu*Diameter)
ReD = 4.0d0 * SysAirMassFlow * FlowFraction / ( PI * MUactual * CoreDiameter )
! Calculate the Nusselt number based on what flow regime one is in
IF (ReD >= MaxLaminarRe) THEN ! Turbulent flow --> use Colburn equation
NuD = 0.023d0*(ReD**(0.8d0))*(PRactual**(1.d0/3.d0))
ELSE ! Laminar flow --> use constant surface temperature relation
NuD = 3.66d0
END IF
! Calculate the NTU parameter
! NTU = UA/[(Mdot*Cp)min]
! where: U = h (convection coefficient) and h = (k)(Nu)/D
! A = Pi*D*TubeLength
NTU = PI * Kactual * NuD * CoreLength / (SysAirMassFlow * CpAppAir) ! FlowFraction cancels out here
! Calculate Epsilon*MassFlowRate*Cp
IF (NTU > MaxExpPower) THEN
CalcVentSlabHXEffectTerm = FlowFraction*SysAirMassFlow*CpAppAir
ELSE
CalcVentSlabHXEffectTerm = (1.d0-EXP(-NTU))*FlowFraction*SysAirMassFlow*CpAppAir
END IF
RETURN
END FUNCTION CalcVentSlabHXEffectTerm