modelASHRAE93

Model of a solar thermal collector according to the ASHRAE Standard 93

Extends from Buildings.Fluid.SolarCollectors.BaseClasses.PartialSolarCollector (Partial model for solar collectors).

Information

This component models a solar thermal collector according to the ASHRAE93 test standard.

References

ASHRAE 93-2010 -- Methods of Testing to Determine the Thermal Performance of Solar Collectors (ANSI approved).

EnergyPlus 23.2.0 Engineering Reference.

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitialization (from PartialSolarCollector)true= true, use homotopy method
IntegernSeg (from PartialSolarCollector)3Number of segments used to discretize the collector model
Modelica.Units.SI.Angleazi (from PartialSolarCollector)Surface azimuth (0 for south-facing; -90 degree for east-facing; +90 degree for west facing
Modelica.Units.SI.Angletil (from PartialSolarCollector)Surface tilt (0 for horizontally mounted collector)
Realrho (from PartialSolarCollector)Ground reflectance
Modelica.Units.SI.HeatCapacityCTot (from PartialSolarCollector)if per.CTyp == Buildings.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity then per.C elseif per.CTyp == Buildings.Fluid.SolarCollectors.Types.HeatCapacity.DryCapacity then per.C + rho_default*per.V*cp_default else 385*per.mDry + rho_default*per.V*cp_defaultHeat capacity of solar collector with fluid
Buildings.Fluid.SolarCollectors.Data.GenericASHRAE93per (from PartialSolarCollector)
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamics (from LumpedVolumeDeclarations)Modelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Modelica.Fluid.Types.DynamicssubstanceDynamics (from LumpedVolumeDeclarations)energyDynamicsType of independent mass fraction balance: dynamic (3 initialization options) or steady state
Modelica.Fluid.Types.DynamicstraceDynamics (from LumpedVolumeDeclarations)energyDynamicsType of trace substance balance: dynamic (3 initialization options) or steady state
Advanced › Dynamics
Modelica.Fluid.Types.DynamicsmassDynamics (from LumpedVolumeDeclarations)energyDynamicsType of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state
Initialization
Medium.AbsolutePressurep_start (from LumpedVolumeDeclarations)Medium.p_defaultStart value of pressure
Medium.TemperatureT_start (from LumpedVolumeDeclarations)Medium.T_defaultStart value of temperature
Medium.MassFraction[Medium.nX]X_start (from LumpedVolumeDeclarations)Medium.X_defaultStart value of mass fractions m_i/m
Medium.ExtraProperty[Medium.nC]C_start (from LumpedVolumeDeclarations)fill(0, Medium.nC)Start value of trace substances
Medium.ExtraProperty[Medium.nC]C_nominal (from LumpedVolumeDeclarations)fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Dynamics
RealmSenFac (from LumpedVolumeDeclarations)1Factor for scaling the sensible thermal mass of the volume
Flow resistance
BooleancomputeFlowResistance (from TwoPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp (from TwoPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn (from TwoPortFlowResistanceParameters)2Flow exponent, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistance (from TwoPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM (from TwoPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Nominal condition
Modelica.Units.SI.PressureDifferencedp_nominal (from TwoPortFlowResistanceParameters)Pressure difference
Modelica.Units.SI.MassFlowRatem_flow_nominal (from PartialTwoPortInterface)Nominal mass flow rate
Assumptions
BooleanallowFlowReversal (from PartialTwoPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
Modelica.Units.SI.MassFlowRatem_flow_small (from PartialTwoPortInterface)1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow
Advanced › Diagnostics
Booleanshow_T (from PartialTwoPortInterface)false= true, if actual temperature at port is computed
Shading
Booleanuse_shaCoe_in (from PartialSolarCollector)falseEnables an input connector for shaCoe
RealshaCoe (from PartialSolarCollector)0Shading coefficient. 0.0: no shading, 1.0: full shading
Area declarations
Buildings.Fluid.SolarCollectors.Types.NumberSelectionnColType (from PartialSolarCollector)Buildings.Fluid.SolarCollectors.Types.NumberSelection.NumberSelection of area specification format
IntegernPanels (from PartialSolarCollector)0Desired number of panels in the simulation
Modelica.Units.SI.AreatotalArea (from PartialSolarCollector)0Total area of panels in the simulation
Configuration declarations
Buildings.Fluid.SolarCollectors.Types.SystemConfigurationsysConfig (from PartialSolarCollector)Buildings.Fluid.SolarCollectors.Types.SystemConfiguration.SeriesSelection of system configuration
IntegernPanelsPar (from PartialSolarCollector)0Number of array panels in parallel

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a (from PartialTwoPort)Fluid connector a (positive design flow direction is from port_a to port_b)
Modelica.Fluid.Interfaces.FluidPort_bport_b (from PartialTwoPort)Fluid connector b (positive design flow direction is from port_a to port_b)
Modelica.Blocks.Interfaces.RealInputshaCoe_in (from PartialSolarCollector)Shading coefficient
Buildings.BoundaryConditions.WeatherData.BusweaBus (from PartialSolarCollector)Weather data bus

Components

TypeNameDefaultDescription
Modelica.Units.SI.MassFlowRatem_flow (from PartialTwoPortInterface)port_a.m_flowMass flow rate from port_a to port_b (m_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp (from PartialTwoPortInterface)port_a.p - port_b.pPressure difference between port_a and port_b
Medium.ThermodynamicStatesta_a (from PartialTwoPortInterface)if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow)))Medium properties in port_a
Medium.ThermodynamicStatesta_b (from PartialTwoPortInterface)if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow))Medium properties in port_b
Buildings.BoundaryConditions.SolarIrradiation.DiffusePerezHDifTilIso (from PartialSolarCollector)Diffuse solar irradiation on a tilted surface
Buildings.BoundaryConditions.SolarIrradiation.DirectTiltedSurfaceHDirTil (from PartialSolarCollector)Direct solar irradiation on a tilted surface
Buildings.Fluid.Sensors.MassFlowRatesenMasFlo (from PartialSolarCollector)Mass flow rate sensor
Buildings.Fluid.FixedResistances.PressureDropres (from PartialSolarCollector)Flow resistance
Buildings.Fluid.MixingVolumes.MixingVolume[nSeg]vol (from PartialSolarCollector)Volume of fluid in one segment of the solar collector
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[nSeg]temSen (from PartialSolarCollector)Temperature sensor
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg]QGai (from PartialSolarCollector)Rate of solar heat gain
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg]QLos (from PartialSolarCollector)Rate of heat loss
BaseClasses.ASHRAESolarGainsolGaiIdentifies heat gained from the sun using the ASHRAE Standard 93 calculations
BaseClasses.ASHRAEHeatLossheaLosCalculates the heat lost to the surroundings using the ASHRAE Standard 93 calculations

Revisions

  • February 28, 2024, by Jelger Jansen:
    Refactor model.
    This is for Buildings, #3604.
  • December 11, 2023, by Michael Wetter:
    Corrected implementation of pressure drop calculation for the situation where the collectors are in parallel, e.g., if sysConfig == Buildings.Fluid.SolarCollectors.Types.SystemConfiguration.Parallel.
    Changed assignment of computeFlowResistance to final based on dp_nominal.
    This is for Buildings, #3597.
  • September 16, 2021, by Michael Wetter:
    Changed lat from being a parameter to an input from weather bus.
    This is for IBPSA, #1477.
  • December 17, 2017, by Michael Wetter:
    Revised computation of heat loss.
    This is for issue 1100.
  • November 21, 2017, by Michael Wetter:
    Corrected error in heat loss calculations that did not scale correctly with nPanels.
    This is for issue 1073.
  • October 18, 2013, by Michael Wetter:
    Removed duplicate connection.
  • January 4, 2013, by Peter Grant:
    First implementation.