modelPVTQuasiDynamicCollectorValidation

Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling

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

Information

Validation model of a photovoltaic–thermal (PVT) collector using the ISO 9806:2013 quasi-dynamic thermal method with integrated electrical coupling. Discretizes the collector into segments, computes heat loss and gain per ISO 9806, and calculates electrical output via the PVWatts-based submodel, relying solely on datasheet parameters.

Extends

Submodel References

Implementation Notes

This model is designed for (unglazed) PVT collectors and discretizes the flow path into nSeg segments to capture temperature gradients. It is compatible with dynamic simulations in which irradiance, ambient and fluid temperatures, and wind speed vary over time.

References

  • Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641
  • ISO 9806:2013. Solar thermal collectors — Test methods. ISO.
  • Meertens, L., Jansen, J., Helsen, L. (2025). Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters, submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025.

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 == IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity then per.C elseif per.CTyp == IDEAS.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
IDEAS.Fluid.SolarCollectors.Data.GenericASHRAE93per (from PartialSolarCollector)
IDEAS.Fluid.PVTCollectors.Types.CollectorTypecollectorTypeper.colTypType of collector used to select a proper default value for the effective transmittance-absorptance product (tauAlpEff)
RealtauAlpEffif collectorType == IDEAS.Fluid.PVTCollectors.Types.CollectorType.Uncovered then 0.901 else 0.84Effective transmittance–absorptance product
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)
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
IDEAS.Fluid.SolarCollectors.Types.NumberSelectionnColType (from PartialSolarCollector)IDEAS.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
IDEAS.Fluid.SolarCollectors.Types.SystemConfigurationsysConfig (from PartialSolarCollector)IDEAS.Fluid.SolarCollectors.Types.SystemConfiguration.SeriesSelection of system configuration
IntegernPanelsPar (from PartialSolarCollector)0Number of array panels in parallel
Electrical parameters
Modelica.Units.SI.EfficiencyeleLosFac0.07Loss factor of the PV panel(s)

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
IDEAS.BoundaryConditions.WeatherData.BusweaBus (from PartialSolarCollector)Weather data bus
Modelica.Blocks.Interfaces.RealOutputPelTotal electrical power output [W]
Modelica.Blocks.Interfaces.RealOutputQthTotal thermal power output [W]

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
IDEAS.BoundaryConditions.SolarIrradiation.DiffusePerezHDifTilIso (from PartialSolarCollector)Diffuse solar irradiation on a tilted surface
IDEAS.BoundaryConditions.SolarIrradiation.DirectTiltedSurfaceHDirTil (from PartialSolarCollector)Direct solar irradiation on a tilted surface
IDEAS.Fluid.Sensors.MassFlowRatesenMasFlo (from PartialSolarCollector)Mass flow rate sensor
IDEAS.Fluid.FixedResistances.PressureDropres (from PartialSolarCollector)Flow resistance
IDEAS.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
Modelica.Units.SI.HeatFlux[nSeg]qThSegThermal power per segment
Modelica.Blocks.Sources.CombiTimeTablemeaDat
IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806QuasiDynamicHeatLossValidationheaLosStcCalculates the heat lost to the surroundings using the ISO 9806:2013 quasi-dynamic standard calculations
IDEAS.Fluid.PVTCollectors.Validation.BaseClasses.ISO9806SolarGainHGloTilsolGaiStcCalculates the heat from the sun using the ISO 9806:2013 quasi-dynamic standard calculations
IDEAS.Fluid.PVTCollectors.BaseClasses.ElectricalPVTeleGenCalculates the electrical power output of the PVT model
Modelica.Blocks.Sources.RealExpressionGglob[W/m2]
Modelica.Blocks.Sources.RealExpressionglobIrrTil[W/m2]
Modelica.Blocks.Sources.RealExpressionwinSpe[W/m2]
Modelica.Blocks.Sources.RealExpressionHHorIr[W/m2]
Modelica.Thermal.HeatTransfer.Celsius.ToKelvinTFluKel
Modelica.Blocks.Sources.RealExpressionqThSegExp

Revisions

  • July 7, 2025, by Lone Meertens:
    First implementation PVT model. This is for #1436.