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
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | homotopyInitialization | true | = true, use homotopy method |
| Integer | nSeg | 3 | Number of segments used to discretize the collector model |
| Modelica.Units.SI.Angle | azi | Surface azimuth (0 for south-facing; -90 degree for east-facing; +90 degree for west facing | |
| Modelica.Units.SI.Angle | til | Surface tilt (0 for horizontally mounted collector) | |
| Real | rho | Ground reflectance | |
| Modelica.Units.SI.HeatCapacity | CTot | 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_default | Heat capacity of solar collector with fluid |
| Buildings.Fluid.SolarCollectors.Data.GenericASHRAE93 | per | ||
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from LumpedVolumeDeclarations) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | substanceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of independent mass fraction balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | traceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of trace substance balance: dynamic (3 initialization options) or steady state |
| Advanced › Dynamics | |||
| Modelica.Fluid.Types.Dynamics | massDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start (from LumpedVolumeDeclarations) | Medium.p_default | Start value of pressure |
| Medium.Temperature | T_start (from LumpedVolumeDeclarations) | Medium.T_default | Start value of temperature |
| Medium.MassFraction[Medium.nX] | X_start (from LumpedVolumeDeclarations) | Medium.X_default | Start 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 | |||
| Real | mSenFac (from LumpedVolumeDeclarations) | 1 | Factor for scaling the sensible thermal mass of the volume |
| Flow resistance | |||
| Boolean | computeFlowResistance (from TwoPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp (from TwoPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n (from TwoPortFlowResistanceParameters) | 2 | Flow exponent, n=1 for laminar, n=2 for turbulent |
| Boolean | linearizeFlowResistance (from TwoPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM (from TwoPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Nominal condition | |||
| Modelica.Units.SI.PressureDifference | dp_nominal (from TwoPortFlowResistanceParameters) | Pressure difference | |
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Advanced | |||
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Shading | |||
| Boolean | use_shaCoe_in | false | Enables an input connector for shaCoe |
| Real | shaCoe | 0 | Shading coefficient. 0.0: no shading, 1.0: full shading |
| Area declarations | |||
| Buildings.Fluid.SolarCollectors.Types.NumberSelection | nColType | Buildings.Fluid.SolarCollectors.Types.NumberSelection.Number | Selection of area specification format |
| Integer | nPanels | 0 | Desired number of panels in the simulation |
| Modelica.Units.SI.Area | totalArea | 0 | Total area of panels in the simulation |
| Configuration declarations | |||
| Buildings.Fluid.SolarCollectors.Types.SystemConfiguration | sysConfig | Buildings.Fluid.SolarCollectors.Types.SystemConfiguration.Series | Selection of system configuration |
| Integer | nPanelsPar | 0 | Number of array panels in parallel |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPort) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPort) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Modelica.Blocks.Interfaces.RealInput | shaCoe_in | Shading coefficient | |
| Buildings.BoundaryConditions.WeatherData.Bus | weaBus | Weather data bus |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortInterface) | port_a.m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp (from PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_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.ThermodynamicState | sta_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.DiffusePerez | HDifTilIso | Diffuse solar irradiation on a tilted surface | |
| Buildings.BoundaryConditions.SolarIrradiation.DirectTiltedSurface | HDirTil | Direct solar irradiation on a tilted surface | |
| Buildings.Fluid.Sensors.MassFlowRate | senMasFlo | Mass flow rate sensor | |
| Buildings.Fluid.FixedResistances.PressureDrop | res | Flow resistance | |
| Buildings.Fluid.MixingVolumes.MixingVolume[nSeg] | vol | Volume of fluid in one segment of the solar collector | |
| Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[nSeg] | temSen | Temperature sensor | |
| Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg] | QGai | Rate of solar heat gain | |
| Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow[nSeg] | QLos | Rate of heat loss |
Revisions
-
June 17, 2026, by Michael Wetter:
Updated implementation to allow a flow coefficientnthat is different from2. This allows use of the model for not fully turbulent flow.
This is for Buildings, #4620. -
February 4, 2025, by Jelger Jansen:
UsenPanels_internalwhen calculatingnPanelsPar_internalandnPanelsSer_internal. Only requestnPanelsParas 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., ifsysConfig == Buildings.Fluid.SolarCollectors.Types.SystemConfiguration.Parallel.
Changed assignment ofcomputeFlowResistancetofinalbased ondp_nominal.
This is for Buildings, #3597. -
September 16, 2021, by Michael Wetter:
Changedlatfrom being a parameter to an input from weather bus.
This is for IBPSA, #1477. -
April 14, 2020, by Michael Wetter:
ChangedhomotopyInitializationto a constant.
This is for IBPSA, #1341. -
November 12, 2019, by Filip Jorissen:
SetprescribedHeatFlowRate=falseto avoid a division by zero at zero flow when using SteadyState dynamics.
This is for Buildings, issue 1636. -
April 27, 2018, by Michael Wetter:
CorrecteddisplayUnit.
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 fromLumpedVolumeDeclarations, setprescribedHeatFlowRate = trueinvol. -
September 18, 2014, by Michael Wetter:
Removed the separate instance ofModelica.Thermal.HeatTransfer.Components.HeatCapacitorand 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 parametershow_V_flowin declaration of instanceres. -
January 4, 2013, by Peter Grant:
First implementation.