modelEN12975Curves
Extends from AixLib.Fluid.SolarCollectors.EN12975 (Model of a solar thermal collector according to the ASHRAE Standard 93).
Information
Overview
Simplified model of a photovoltaic thermal collector, which builds upon the solar thermal model. Inputs are outdoor air temperature and solar irradiation. Based on these values and the collector properties from database, this model creates a heat flow to the fluid circuit and an electrical power output.
Concept
The model maps solar collector efficiency based on the equation
and similar for the electrical efficiency a linear approximation is used:
eta=etaEle_zero - mEle * dT/G
Values for the linear and quadratic coefficients for the thermal efficiency as well as the coefficients for the linear approximation are derived from this thesis by Markus Lämmle, p.43 Figure 3.12. The underlying data was validated with the following assumptions:
- solar irradiation G=1000 W/m^2
- windspeed Uwind=3 m/s
- ambient temperature Ta=25 °C
Known Limitations
- No empirical validation has been carried out with the model, only with the parameters in the recrods from the PhD thesis for a single operating point. So, always questions results outside of the operating conditions stated above.
- The parameters for pressure losses and capacities inside the records are based on the solar thermal model, not on the PhD thesis.
- With the standard BaseParameters, this model uses water as working fluid
Parameters
This model is an extension of AixLib.Fluid.Solar.Thermal.SolarThermal. Therefore the parameters can be found in the base model.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | homotopyInitialization (from PartialSolarCollector) | true | = true, use homotopy method |
| Integer | nSeg (from PartialSolarCollector) | 3 | Number of segments used to discretize the collector model |
| Modelica.Units.SI.Angle | azi (from PartialSolarCollector) | Surface azimuth (0 for south-facing; -90 degree for east-facing; +90 degree for west facing | |
| Modelica.Units.SI.Angle | til (from PartialSolarCollector) | Surface tilt (0 for horizontally mounted collector) | |
| Real | rho (from PartialSolarCollector) | Ground reflectance | |
| Modelica.Units.SI.HeatCapacity | CTot (from PartialSolarCollector) | if per.CTyp == AixLib.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity then per.C elseif per.CTyp == AixLib.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 |
| AixLib.Fluid.SolarCollectors.Data.GenericASHRAE93 | per (from PartialSolarCollector) | ||
| AixLib.Fluid.SolarCollectors.PhotovoltaicThermal.Data.PhotovoltaicThermalBaseDataDefinition | perPVT | ||
| 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) |
| 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 (from PartialSolarCollector) | false | Enables an input connector for shaCoe |
| Real | shaCoe (from PartialSolarCollector) | 0 | Shading coefficient. 0.0: no shading, 1.0: full shading |
| Area declarations | |||
| AixLib.Fluid.SolarCollectors.Types.NumberSelection | nColType (from PartialSolarCollector) | AixLib.Fluid.SolarCollectors.Types.NumberSelection.Number | Selection of area specification format |
| Integer | nPanels (from PartialSolarCollector) | 0 | Desired number of panels in the simulation |
| Modelica.Units.SI.Area | totalArea (from PartialSolarCollector) | 0 | Total area of panels in the simulation |
| Configuration declarations | |||
| AixLib.Fluid.SolarCollectors.Types.SystemConfiguration | sysConfig (from PartialSolarCollector) | AixLib.Fluid.SolarCollectors.Types.SystemConfiguration.Series | Selection of system configuration |
| Integer | nPanelsPar (from PartialSolarCollector) | 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 (from PartialSolarCollector) | Shading coefficient | |
| AixLib.BoundaryConditions.WeatherData.Bus | weaBus (from PartialSolarCollector) | Weather data bus | |
| Modelica.Blocks.Interfaces.RealOutput | PEle |
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 |
| AixLib.BoundaryConditions.SolarIrradiation.DiffusePerez | HDifTilIso (from PartialSolarCollector) | Diffuse solar irradiation on a tilted surface | |
| AixLib.BoundaryConditions.SolarIrradiation.DirectTiltedSurface | HDirTil (from PartialSolarCollector) | Direct solar irradiation on a tilted surface | |
| AixLib.Fluid.Sensors.MassFlowRate | senMasFlo (from PartialSolarCollector) | Mass flow rate sensor | |
| AixLib.Fluid.FixedResistances.PressureDrop | res (from PartialSolarCollector) | Flow resistance | |
| AixLib.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 | |
| AixLib.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain | solGai (from EN12975) | Identifies heat gained from the sun using the EN12975 standard calculations | |
| AixLib.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss | heaLos (from EN12975) | Calculates the heat lost to the surroundings using the EN12975 standard calculations | |
| AixLib.Fluid.SolarCollectors.BaseClasses.EN12975SolarGain | eleGai | Identifies electrical energy prodcued | |
| AixLib.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss | eleLos | Identifies electrical energy losses due to temperature dependence | |
| Modelica.Blocks.Math.MultiSum | multiSumLos | Sum of all electrical losses | |
| Modelica.Blocks.Math.MultiSum | multiSumGai | Sum of all electrical gains | |
| Modelica.Blocks.Math.Add | add | Sum of all electrical gains and losses | |
| Modelica.Blocks.Nonlinear.Limiter | limiter | Electrical power generation can't be lower than zero |
Revisions
-
January 23, 2024 by Philipp Schmitz and Fabian Wuellhorst:
First implementation. This is for issue 1451.