|
| 1 | +within IDEAS.Fluid.PVTCollectors.BaseClasses; |
| 2 | +model ElectricalPVT |
| 3 | + "Calculate the electrical power output of a PVT using the PVWatts v5 approach" |
| 4 | + extends Modelica.Blocks.Icons.Block; |
| 5 | + extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialParameters; |
| 6 | + |
| 7 | + // Parameters |
| 8 | + parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; |
| 9 | + parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; |
| 10 | + parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; |
| 11 | + parameter Real gamma "Temperature coefficient [1/K]"; |
| 12 | + parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; |
| 13 | + parameter Modelica.Units.SI.Area A "PV area"; |
| 14 | + parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; |
| 15 | + parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff "Effective transmittance–absorptance product"; |
| 16 | + parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1 "First-order heat loss coefficient"; |
| 17 | + parameter Modelica.Units.SI.Efficiency etaEl "Electrical efficiency"; |
| 18 | + |
| 19 | + parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid = |
| 20 | + ((tauAlpEff - etaEl) * (c1 + abs(gamma)*HGloHorNom)) / ((tauAlpEff - etaEl) - eta0) |
| 21 | + "Heat transfer coefficient between the fluid and the PV cells, calculated from datasheet parameters"; |
| 22 | + |
| 23 | + // Inputs |
| 24 | + Modelica.Blocks.Interfaces.RealInput Tflu[nSeg] |
| 25 | + "Fluid temperatures per segment [K]" |
| 26 | + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), |
| 27 | + iconTransformation(extent={{-140,40},{-100,80}}))); |
| 28 | + Modelica.Blocks.Interfaces.RealInput Qth[nSeg] |
| 29 | + "Thermal power density per segment [W/m2]" |
| 30 | + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), |
| 31 | + iconTransformation(extent={{-140,-20},{-100,20}}))); |
| 32 | + Modelica.Blocks.Interfaces.RealInput HGloTil |
| 33 | + "Global tilted irradiance [W/m2]" |
| 34 | + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), |
| 35 | + iconTransformation(extent={{-140,-80},{-100,-40}}))); |
| 36 | + |
| 37 | + // Outputs (user-facing) |
| 38 | + Modelica.Blocks.Interfaces.RealOutput Pel |
| 39 | + "Total electrical power output [W]" |
| 40 | + annotation (Placement(transformation(extent={{100,40},{140,80}}), |
| 41 | + iconTransformation(extent={{100,40},{140,80}}))); |
| 42 | + Modelica.Blocks.Interfaces.RealOutput TavgCel |
| 43 | + "Average PV module temperature [K]" |
| 44 | + annotation (Placement(transformation(extent={{100,-20},{140,20}}), |
| 45 | + iconTransformation(extent={{100,-20},{140,20}}))); |
| 46 | + Modelica.Blocks.Interfaces.RealOutput TavgFlu |
| 47 | + "Average fluid temperature [K]" |
| 48 | + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), |
| 49 | + iconTransformation(extent={{100,-80},{140,-40}}))); |
| 50 | + |
| 51 | +protected |
| 52 | + // internal variables (not exposed as connectors) |
| 53 | + Modelica.Units.SI.Temperature temMod "Average cell/module temperature "; |
| 54 | + Modelica.Units.SI.Temperature temMea "Average fluid temperature"; |
| 55 | + Modelica.Units.SI.Temperature TCel[nSeg]; |
| 56 | + Modelica.Units.SI.Temperature TDif[nSeg]; |
| 57 | + Modelica.Units.SI.Power Pel_int[nSeg]; |
| 58 | + |
| 59 | +equation |
| 60 | + for i in 1:nSeg loop |
| 61 | + TCel[i] = Tflu[i] +Qth[i] / UAbsFluid; |
| 62 | + TDif[i] = TCel[i] - TpvtRef; |
| 63 | + Pel_int[i] = (A_c/nSeg) * (P_nominal/A) * (HGloTil/HGloHorNom) * |
| 64 | + (1 + gamma * TDif[i]) * (1 - eleLosFac); |
| 65 | + end for; |
| 66 | + |
| 67 | + Pel = sum(Pel_int); |
| 68 | + temMod = sum(TCel) / nSeg; |
| 69 | + temMea = sum(Tflu) / nSeg; |
| 70 | + TavgCel = temMod; |
| 71 | + TavgFlu = temMea; |
| 72 | + |
| 73 | +annotation ( |
| 74 | + defaultComponentName="eleGen", |
| 75 | + Documentation(info="<html> |
| 76 | +<p> |
| 77 | +This component computes the electrical power output of a photovoltaic-thermal (PVT) collector using the PVWatts v5 methodology (Dobos, 2014), adapted for PVT systems. |
| 78 | +It is part of a validated, open-source Modelica implementation that relies solely on manufacturer datasheet parameters, as described in Meertens et al. (2025). |
| 79 | +</p> |
| 80 | +<p> |
| 81 | +The model calculates the electrical output for each segment <i>i ∈ {1, ..., n<sub>seg</sub>}</i> as: |
| 82 | +</p> |
| 83 | +<p align=\"center\" style=\"font-style:italic;\"> |
| 84 | +P<sub>el,i</sub> = (A<sub>c</sub> / n<sub>seg</sub>) · (P<sub>nom</sub> / A) |
| 85 | +· (G<sub>tilt</sub> / G<sub>nom</sub>) · (1 + γ · ΔT<sub>i</sub>) · (1 - eleLosFac) |
| 86 | +</p> |
| 87 | +<p> |
| 88 | +where: |
| 89 | +<ul> |
| 90 | +<li> |
| 91 | +<i>ΔT<sub>i</sub> = T<sub>cell,i</sub> - T<sub>ref</sub></i>: temperature difference between PV cell and reference temperature |
| 92 | +</li> |
| 93 | +<li> |
| 94 | +<i>P<sub>nom</sub></i>: nominal PV power under STC [W] |
| 95 | +</li> |
| 96 | +<li> |
| 97 | +<i>A</i>: gross collector area [m²] |
| 98 | +</li> |
| 99 | +<li> |
| 100 | +<i>A<sub>c</sub></i>: effective collector area (equal to A if not otherwise specified) |
| 101 | +</li> |
| 102 | +<li> |
| 103 | +<i>G<sub>tilt</sub></i>: global irradiance on the tilted collector plane [W/m²] |
| 104 | +</li> |
| 105 | +<li> |
| 106 | +<i>G<sub>nom</sub></i>: nominal irradiance (typically 1000 W/m²) |
| 107 | +</li> |
| 108 | +<li> |
| 109 | +<i>γ</i>: temperature coefficient of power [%/K] |
| 110 | +</li> |
| 111 | +<li> |
| 112 | +<i>eleLosFac</i>: lumped system loss factor |
| 113 | +</li> |
| 114 | +</ul> |
| 115 | +</p> |
| 116 | +<p> |
| 117 | +The PV cell temperature is estimated from the fluid temperature and thermal power density using: |
| 118 | +</p> |
| 119 | +<p align=\"center\" style=\"font-style:italic;\"> |
| 120 | +T<sub>cell,i</sub> = T<sub>m,i</sub> + q<sub>th,i</sub> / U<sub>AbsFluid</sub> |
| 121 | +</p> |
| 122 | +<p> |
| 123 | +The internal heat transfer coefficient <i>UAbsFluid</i> is approximately calculated from datasheet parameters. |
| 124 | +For the mathematical description and visualisation, see <a href='modelica://IDEAS.Fluid.PVTCollectors.UsersGuide'>IDEAS.Fluid.PVTCollectors.UsersGuide</a>. |
| 125 | +</p> |
| 126 | +
|
| 127 | +<h5>Electrical performance and losses</h5> |
| 128 | +<p> |
| 129 | +The electrical submodel includes an overall system loss factor <code>eleLosFac</code>. |
| 130 | +PVWatts reports a total electrical power loss of 14%, resulting from the following mechanisms: |
| 131 | +</p> |
| 132 | +<table border=\"1\" cellpadding=\"4\"> |
| 133 | +<tr> |
| 134 | +<th style=\"text-align:left;\">Electrical power loss mechanism</th> |
| 135 | +<th style=\"text-align:center;\">Default value</th> |
| 136 | +</tr> |
| 137 | +<tr> |
| 138 | +<td style=\"text-align:left;\">Soiling</td> |
| 139 | +<td style=\"text-align:center;\">2 %</td> |
| 140 | +</tr> |
| 141 | +<tr> |
| 142 | +<td style=\"text-align:left;\">Shading</td> |
| 143 | +<td style=\"text-align:center;\">3 %</td> |
| 144 | +</tr> |
| 145 | +<tr> |
| 146 | +<td style=\"text-align:left;\">Mismatch</td> |
| 147 | +<td style=\"text-align:center;\">2 %</td> |
| 148 | +</tr> |
| 149 | +<tr> |
| 150 | +<td style=\"text-align:left;\">Wiring</td> |
| 151 | +<td style=\"text-align:center;\">2 %</td> |
| 152 | +</tr> |
| 153 | +<tr> |
| 154 | +<td style=\"text-align:left;\">Connections</td> |
| 155 | +<td style=\"text-align:center;\">0.5 %</td> |
| 156 | +</tr> |
| 157 | +<tr> |
| 158 | +<td style=\"text-align:left;\">Light‑induced degradation</td> |
| 159 | +<td style=\"text-align:center;\">1.5 %</td> |
| 160 | +</tr> |
| 161 | +<tr> |
| 162 | +<td style=\"text-align:left;\">Nameplate rating</td> |
| 163 | +<td style=\"text-align:center;\">1 %</td> |
| 164 | +</tr> |
| 165 | +<tr> |
| 166 | +<td style=\"text-align:left;\">Availability</td> |
| 167 | +<td style=\"text-align:center;\">3 %</td> |
| 168 | +</tr> |
| 169 | +<tr> |
| 170 | +<th style=\"text-align:left;\">Total</th> |
| 171 | +<th style=\"text-align:center;\">14 %</th> |
| 172 | +</tr> |
| 173 | +</table> |
| 174 | +<p> |
| 175 | +For well-maintained, unshaded modules, experimental validation (Meertens et al., 2025) |
| 176 | +found that using <code>eleLosFac = 9%</code> gives excellent agreement with |
| 177 | +measured electrical output. For PVT collectors with a high positive tolerance on the |
| 178 | +electrical output, this system loss factor can even be lower. |
| 179 | +Users may adjust <code>eleLosFac</code> to account for site-specific soiling or shading effects. |
| 180 | +</p> |
| 181 | +
|
| 182 | +<h4>Implementation Notes</h4> |
| 183 | +<p> |
| 184 | +This model is designed for (unglazed) PVT collectors and supports discretization into multiple segments to capture temperature gradients along the flow path. |
| 185 | +It is compatible with the thermal model based on ISO 9806:2013 and is suitable for dynamic simulations where irradiance and fluid temperatures vary over time. |
| 186 | +</p> |
| 187 | +
|
| 188 | +<h4>References</h4> |
| 189 | +<ul> |
| 190 | +<li> |
| 191 | +Dobos, A. P. (2014). <i><a href='https://docs.nrel.gov/docs/fy14osti/62641.pdf'>PVWatts Version 5 Manual</a></i>. NREL/TP-6A20-62641 |
| 192 | +</li> |
| 193 | +<li> |
| 194 | +Meertens, L., Jansen, J., Helsen, L. (2025). |
| 195 | +<i>Development and Experimental Validation of an Unglazed Photovoltaic-Thermal Collector Modelica Model that only needs Datasheet Parameters</i>, |
| 196 | +submitted to the 16th International Modelica & FMI Conference, Lucerne, Switzerland, Sep 8–10, 2025. |
| 197 | +</li> |
| 198 | +</ul> |
| 199 | +</html>", |
| 200 | +revisions="<html> |
| 201 | +<ul> |
| 202 | +<li> |
| 203 | +July 7, 2025, by Lone Meertens:<br/> |
| 204 | +First implementation PVT model. |
| 205 | +This is for <a href=\"https://github.com/open-ideas/IDEAS/issues/1436\">#1436</a>. |
| 206 | +</li> |
| 207 | +</ul> |
| 208 | +</html>")); |
| 209 | + |
| 210 | +end ElectricalPVT; |
0 commit comments