modelPartialSolarCollector

Partial model for solar collectors

Extends from Buildings.Fluid.Interfaces.LumpedVolumeDeclarations (Declarations for lumped volumes), Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters (Parameters for flow resistance for models with two ports), Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model with two ports and declaration of quantities that are used by many models).

Information

This component is a partial model of a solar thermal collector. It can be expanded to create solar collector models based on either ASHRAE93 or EN12975 ratings data.

References

EnergyPlus 23.2.0 Engineering Reference

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitializationtrue= true, use homotopy method
IntegernSeg3Number of segments used to discretize the collector model
Modelica.Units.SI.AngleaziSurface azimuth (0 for south-facing; -90 degree for east-facing; +90 degree for west facing
Modelica.Units.SI.AngletilSurface tilt (0 for horizontally mounted collector)
RealrhoGround reflectance
Modelica.Units.SI.HeatCapacityCTotif 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
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_infalseEnables an input connector for shaCoe
RealshaCoe0Shading coefficient. 0.0: no shading, 1.0: full shading
Area declarations
Buildings.Fluid.SolarCollectors.Types.NumberSelectionnColTypeBuildings.Fluid.SolarCollectors.Types.NumberSelection.NumberSelection of area specification format
IntegernPanels0Desired number of panels in the simulation
Modelica.Units.SI.AreatotalArea0Total area of panels in the simulation
Configuration declarations
Buildings.Fluid.SolarCollectors.Types.SystemConfigurationsysConfigBuildings.Fluid.SolarCollectors.Types.SystemConfiguration.SeriesSelection of system configuration
IntegernPanelsPar0Number 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_inShading coefficient
Buildings.BoundaryConditions.WeatherData.BusweaBusWeather 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.DiffusePerezHDifTilIsoDiffuse solar irradiation on a tilted surface
Buildings.BoundaryConditions.SolarIrradiation.DirectTiltedSurfaceHDirTilDirect solar irradiation on a tilted surface
Buildings.Fluid.Sensors.MassFlowRatesenMasFloMass flow rate sensor
Buildings.Fluid.FixedResistances.PressureDropresFlow resistance
Buildings.Fluid.MixingVolumes.MixingVolume[nSeg]volVolume of fluid in one segment of the solar collector
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[nSeg]temSenTemperature sensor
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg]QGaiRate of solar heat gain
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg]QLosRate of heat loss

Revisions

  • June 17, 2026, by Michael Wetter:
    Updated implementation to allow a flow coefficient n that is different from 2. This allows use of the model for not fully turbulent flow.
    This is for Buildings, #4620.
  • February 4, 2025, by Jelger Jansen:
    Use nPanels_internal when calculating nPanelsPar_internal and nPanelsSer_internal. Only request nPanelsPar as an input for an array of collectors and add assert to check if the total collector area is an exact multitude of a single collector's area. This is for IBPSA, #1956.
  • February 27, 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.
  • April 14, 2020, by Michael Wetter:
    Changed homotopyInitialization to a constant.
    This is for IBPSA, #1341.
  • November 12, 2019, by Filip Jorissen:
    Set prescribedHeatFlowRate=false to avoid a division by zero at zero flow when using SteadyState dynamics.
    This is for Buildings, issue 1636.
  • April 27, 2018, by Michael Wetter:
    Corrected displayUnit.
    This is for Buildings, issue 912.
  • January 22, 2016, by Michael Wetter:
    Corrected type declaration of pressure difference. This is for #404.
  • February 8, 2015, by Filip Jorissen:
    Propagated multiple parameters from LumpedVolumeDeclarations, set prescribedHeatFlowRate = true in vol.
  • September 18, 2014, by Michael Wetter:
    Removed the separate instance of Modelica.Thermal.HeatTransfer.Components.HeatCapacitor and added this capacity to the volume. This is in response to https://github.com/lbl-srg/modelica-buildings/issues/276.
  • June 25, 2014, by Michael Wetter:
    Improved comments for tilt to address https://github.com/lbl-srg/modelica-buildings/issues/246.
  • October 8, 2013, by Michael Wetter:
    Removed parameter show_V_flow in declaration of instance res.
  • January 4, 2013, by Peter Grant:
    First implementation.