diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 906367a962..88780a8a88 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -79,8 +79,7 @@ jobs: - name: Test IDEAS.Fluid.Movers run: make test-dymola PACKAGE=\"IDEAS.Fluid.Movers\" INTERACTIVE=false - name: Test IDEAS.Fluid.PVTCollectors - run: make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors.BaseClasses.Examples\" INTERACTIVE=false - && make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors.Examples\" INTERACTIVE=false + run: make test-dymola PACKAGE=\"IDEAS.Fluid.PVTCollectors\" INTERACTIVE=false - name: Test IDEAS.Fluid.Sensors run: make test-dymola PACKAGE=\"IDEAS.Fluid.Sensors\" INTERACTIVE=false - name: Test IDEAS.Fluid.SolarCollectors diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo index 09f9e9e4ac..e2bc4f1faa 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ElectricalPVT.mo @@ -1,23 +1,23 @@ within IDEAS.Fluid.PVTCollectors.BaseClasses; model ElectricalPVT - "Calculate the electrical power output of a PVT using the PVWatts v5 approach" + "Calculate the electrical power output of a PVT collector" extends Modelica.Blocks.Icons.Block; extends IDEAS.Fluid.SolarCollectors.BaseClasses.PartialParameters; // Parameters parameter Modelica.Units.SI.Irradiance HGloHorNom = 1000 "global horizontal irradiances"; - parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "PV loss factor"; + parameter Modelica.Units.SI.Efficiency eleLosFac = 0.09 "Electrical system loss factor"; parameter Modelica.Units.SI.Temperature TpvtRef = 298.15 "Reference cell temperature"; - parameter Real gamma "Temperature coefficient [1/K]"; + parameter Real beta "Temperature coefficient [1/K]"; parameter Modelica.Units.SI.Power P_nominal "Nominal PV power"; parameter Modelica.Units.SI.Area A "PV area"; parameter Modelica.Units.SI.Efficiency eta0 "Zero-loss efficiency"; parameter Modelica.Units.SI.DimensionlessRatio tauAlpEff "Effective transmittance–absorptance product"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1 "First-order heat loss coefficient"; + parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1 "First-order heat loss coefficient"; parameter Modelica.Units.SI.Efficiency etaEl "Electrical efficiency"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer UAbsFluid = - ((tauAlpEff - etaEl) * (c1 + abs(gamma)*HGloHorNom)) / ((tauAlpEff - etaEl) - eta0) + ((tauAlpEff - etaEl) * a1) / ((tauAlpEff - etaEl) - eta0) "Heat transfer coefficient between the fluid and the PV cells, calculated from datasheet parameters"; // Inputs @@ -25,7 +25,7 @@ model ElectricalPVT "Fluid temperatures per segment [K]" annotation (Placement(transformation(extent={{-140,40},{-100,80}}), iconTransformation(extent={{-140,40},{-100,80}}))); - Modelica.Blocks.Interfaces.RealInput Qth[nSeg] + Modelica.Blocks.Interfaces.RealInput qth[nSeg] "Thermal power density per segment [W/m2]" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), iconTransformation(extent={{-140,-20},{-100,20}}))); @@ -34,7 +34,7 @@ model ElectricalPVT annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), iconTransformation(extent={{-140,-80},{-100,-40}}))); - // Outputs (user-facing) + // Outputs Modelica.Blocks.Interfaces.RealOutput Pel "Total electrical power output [W]" annotation (Placement(transformation(extent={{100,40},{140,80}}), @@ -58,10 +58,10 @@ protected equation for i in 1:nSeg loop - TCel[i] = Tflu[i] +Qth[i] / UAbsFluid; + TCel[i] = Tflu[i] + qth[i] / UAbsFluid; TDif[i] = TCel[i] - TpvtRef; Pel_int[i] = (A_c/nSeg) * (P_nominal/A) * (HGloTil/HGloHorNom) * - (1 + gamma * TDif[i]) * (1 - eleLosFac); + (1 + beta * TDif[i]) * (1 - eleLosFac); end for; Pel = sum(Pel_int); @@ -75,14 +75,14 @@ annotation ( Documentation(info="

This component computes the electrical power output of a photovoltaic-thermal (PVT) collector using the PVWatts v5 methodology (Dobos, 2014), adapted for PVT systems. -It is part of a validated, open-source Modelica implementation that relies solely on manufacturer datasheet parameters, as described in Meertens et al. (2025). +It is part of a validated, open-source Modelica implementation that relies solely on manufacturer datasheet parameters, as described in Meertens et al. (2026).

The model calculates the electrical output for each segment i ∈ {1, ..., nseg} as:

Pel,i = (Ac / nseg) · (Pnom / A) -· (Gtilt / Gnom) · (1 + γ · ΔTi) · (1 - eleLosFac) +· (Gtilt / Gnom) · (1 + β · ΔTi) · (1 - eleLosFac)

where: @@ -106,7 +106,7 @@ where: Gnom: nominal irradiance (typically 1000 W/m²)

  • -γ: temperature coefficient of power [%/K] +β: temperature coefficient of power [%/K]
  • eleLosFac: lumped system loss factor @@ -172,7 +172,7 @@ PVWatts reports a total electrical power loss of 14%, resulting from the followi

    -For well-maintained, unshaded modules, experimental validation (Meertens et al., 2025) +For well-maintained, unshaded modules, experimental validation (Meertens et al., 2026) found that using eleLosFac = 9% gives excellent agreement with measured electrical output. For PVT collectors with a high positive tolerance on the electrical output, this system loss factor can even be lower. @@ -182,7 +182,7 @@ Users may adjust eleLosFac to account for site-specific soiling or

    Implementation Notes

    This model is designed for (unglazed) PVT collectors and supports discretization into multiple segments to capture temperature gradients along the flow path. -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. +It is compatible with the thermal model based on ISO 9806:2017 and is suitable for dynamic simulations where irradiance and fluid temperatures vary over time.

    References

    @@ -191,20 +191,28 @@ It is compatible with the thermal model based on ISO 9806:2013 and is suitable f Dobos, A. P. (2014). PVWatts Version 5 Manual. NREL/TP-6A20-62641
  • -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. +Meertens, L.; Jansen, J.; Helsen, L. (2026). +Development and Experimental Validation of an Open-Source +Photovoltaic‑Thermal Collector Modelica Model that Only Needs +Datasheet Parameters. Submitted to +Mathematical and Computer Modelling of Dynamical Systems, +Special Issue on Modelica, FMI, and Open Standards.
  • ", revisions=" ")); - end ElectricalPVT; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo index 09db9db2c4..14f715d117 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mo @@ -1,10 +1,9 @@ within IDEAS.Fluid.PVTCollectors.BaseClasses.Examples; -model ISO9806HeatLoss - "Example showing the use of ISO9806QuasiDynamicHeatLoss" +model ISO9806HeatLoss "Example showing the use of ISO9806HeatLoss" extends Modelica.Icons.Example; replaceable package Medium = IDEAS.Media.Water "Medium in the system"; - parameter IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic per= + parameter IDEAS.Fluid.PVTCollectors.Data.Generic per= IDEAS.Fluid.PVTCollectors.Data.Uncovered.UI_Validation() "Performance data" annotation (choicesAllMatching=true); Modelica.Blocks.Sources.Sine T1( @@ -22,22 +21,24 @@ model ISO9806HeatLoss amplitude=15, offset=273.15 + 20) "Temperature of the third segment" annotation (Placement(transformation(extent={{-90,-52},{-70,-32}}))); - ISO9806QuasiDynamicHeatLoss heaLosQuaDyn( + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806HeatLoss heaLosQuaDyn( nSeg=3, redeclare package Medium = Medium, - c1=per.c1, - c2=per.c2, - c3=per.c3, - c4=per.c4, - c6=per.c6, + a1=per.a1, + a2=per.a2, + a3=per.a3, + a4=per.a4, + a6=per.a6, + a7=per.a7, + a8=per.a8, A_c=per.A) annotation (Placement(transformation(extent={{18,-2},{38,18}}))); IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss heaLosSteSta( A_c=per.A, nSeg=3, redeclare package Medium = Medium, - a1=per.c1, - a2=per.c2) + a1=per.a1, + a2=per.a2) annotation (Placement(transformation(extent={{18,-68},{38,-48}}))); Modelica.Blocks.Sources.Sine TEnv( f=0.01, @@ -48,18 +49,18 @@ model ISO9806HeatLoss f=1/(24*3600), phase=0, offset=3, - amplitude=5) "wind speed in the collector plane" + amplitude=2) "wind speed in the collector plane" annotation (Placement(transformation(extent={{60,58},{80,78}}))); Modelica.Blocks.Sources.RealExpression HHorIR(y=400) "long wave irradiance" annotation (Placement(transformation(extent={{-1.5,58},{17.5,74}}))); + Modelica.Blocks.Sources.RealExpression HGloTil(y=800) "Global irradiance on the tilted surface" + annotation (Placement(transformation(extent={{26.5,58},{45.5,74}}))); Modelica.Blocks.Interfaces.RealOutput QLos_flow_QuaDyn[3] "Heat loss rate at current conditions" annotation (Placement(transformation(extent={{60,-2},{80,18}}))); Modelica.Blocks.Interfaces.RealOutput QLos_flow_SteSta[3] "Heat loss rate at current conditions" annotation (Placement(transformation(extent={{62,-68},{82,-48}}))); - Modelica.Blocks.Sources.RealExpression HGloTil(y=800) "Global irradiance on the tilted surface" - annotation (Placement(transformation(extent={{26.5,58},{45.5,74}}))); equation connect(winSpePla.y, heaLosQuaDyn.winSpePla); connect(HHorIR.y, heaLosQuaDyn.HHorIR); @@ -91,13 +92,13 @@ equation Documentation(info="

    This example demonstrates the implementation of - + IDEAS.Fluid.PVTCollectors.BaseClasses.ISO9806QuasiDynamicHeatLoss, which calculates the quasi-dynamic heat loss of a PVT or solar thermal collector -according to the ISO 9806:2013 standard. +according to the ISO 9806:2017 standard.

    -In addition to showcasing the ISO 9806-based model, this example also compares its behavior +In addition to showcasing the ISO 9806:2017-based model, this example also compares its behavior to the steady-state heat loss model IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss, @@ -117,7 +118,7 @@ First implementation of ISO 9806 quasi-dynamic heat loss example. This is for 1436. -"), +"), __Dymola_Commands(file="modelica://IDEAS/Resources/Scripts/Dymola/Fluid/PVTCollectors/BaseClasses/Examples/ISO9806HeatLoss.mos" "Simulate and plot"), experiment( diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo new file mode 100644 index 0000000000..4a2506b2da --- /dev/null +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806HeatLoss.mo @@ -0,0 +1,173 @@ +within IDEAS.Fluid.PVTCollectors.BaseClasses; +model ISO9806HeatLoss + "Calculate the heat loss of a PVT collector using ISO9806:2017" + + extends IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss( + // Override the internal heat-loss expression to include a3-a7 terms + final QLos_internal=A_c/nSeg*{dT[i]*(a1 - a2*dT[i] + a3*(winSpePla-3)) + a4*(HHorIR + - Modelica.Constants.sigma*TEnv^4) - a6*(winSpePla-3)*HGloTil + - a7*(winSpePla-3)*(HHorIR - Modelica.Constants.sigma*TEnv^4) - a8*(dT[i])^4 for i in 1:nSeg}); + + parameter Modelica.Units.SI.CoefficientOfHeatTransfer a1(final min=0) + "Linear heat loss coefficient"; + parameter Real a2(final unit="W/(m2.K2)", final min=0) + "Quadratic heat loss coefficient"; + parameter Real a3(final unit="J/(m3.K)", final min=0) + "Wind speed dependence of heat loss"; + parameter Modelica.Units.SI.DimensionlessRatio a4(final min=0) + "Sky long-wave irradiance dependence"; + parameter Real a6(final unit="s/m", final min=0) + "Wind speed dependence of thermal zero-loss efficiency"; + parameter Real a7(final unit="W/(m2.K4)", final min=0) + "Wind speed dependence of IR radiation exchange"; + parameter Real a8(final unit="W/(m2.K4)", final min=0) + "Radiation losses"; + + Modelica.Blocks.Interfaces.RealInput winSpePla( + unit="m/s") + "Wind speed parallel to collector plane"; + Modelica.Blocks.Interfaces.RealInput HGloTil( + unit="W/m2") + "Global irradiance on the tilted plane"; + Modelica.Blocks.Interfaces.RealInput HHorIR( + unit="W/m2") + "Long-wave (sky) irradiance [W/m2]" annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,0}), iconTransformation(extent={{-140,-20},{-100,20}}))); + +annotation ( +defaultComponentName="heaLosStc", +Documentation(info=" +

    +This component computes the heat loss from a solar thermal or PVT collector +according to ISO 9806:2017. It builds on the structure of the + +IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss model, but extends +it with the wind‑ and long‑wave irradiance‑dependent loss mechanisms defined in +ISO 9806:2017. +

    +

    +The base EN12975HeatLoss model includes only the linear (a1) +and quadratic (a2) temperature‑difference heat‑loss terms from +EN 12975. These describe the main convective and radiative losses of glazed +collectors, but they do not account for wind‑driven or long‑wave radiation +effects. +

    +

    +The ISO 9806:2017 quasi‑dynamic formulation adds the additional coefficients +used here to represent wind‑dependent heat loss and long‑wave irradiance +exchange. These effects are essential for accurately modeling unglazed +collectors, where wind and sky radiation strongly influence thermal losses. +

    +

    +The thermal losses in the extended model are calculated for each segment i ∈ {1, ..., nseg} as: +

    +

    +Qlos,i = +Ac / nseg · [ +a1 · ΔTi ++ a2 · (ΔTi)2 ++ a3 · ur · ΔTi ++ a4 · (EL − σ · Ta4) ++ a6 · ur · G ++ a7 · ur · (EL − σ · Ta4) ++ a8 · (ΔTi)4 +] +

    +

    +where: +

    +

    +

    +This model captures additional wind- and long‑wave irradiance‑dependent heat‑loss +mechanisms defined in ISO 9806:2017, allowing the collector performance to +be represented more realistically under varying outdoor conditions than when using +only the EN 12975 a1 and a2 terms. +

    +

    Implementation Notes

    +

    +The heat-loss block inherits from + +IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss to reuse its interface +and segment-wise structure. Only the heat‑loss equations and parameters are replaced +to match the ISO 9806:2017 +formulation. +

    +

    References

    +

    +

  • +ISO 9806:2017. Solar thermal collectors — Test methods. ISO. +
  • +

    +", +revisions=" + +")); +end ISO9806HeatLoss; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo b/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo deleted file mode 100644 index 8351e0465d..0000000000 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/ISO9806QuasiDynamicHeatLoss.mo +++ /dev/null @@ -1,129 +0,0 @@ -within IDEAS.Fluid.PVTCollectors.BaseClasses; -model ISO9806QuasiDynamicHeatLoss - "Calculate the heat loss of a PVT/solar collector using ISO9806:2013" - - extends IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss( - // Override the internal heat-loss expression to include c3, c4 and c6 terms - final QLos_internal=A_c/nSeg*{dT[i]*(c1 - c2*dT[i] + c3*winSpePla) + c4*(HHorIR - - Modelica.Constants.sigma*TEnv^4) - c6*winSpePla*HGloTil for i in 1:nSeg}, - final a1=c1, - final a2=c2); - - parameter Modelica.Units.SI.CoefficientOfHeatTransfer c1(final min=0) - "Linear heat loss coefficient (a1)"; - parameter Real c2(final unit="W/(m2.K2)", final min=0) - "Quadratic heat loss coefficient (a2)"; - - // —— Additional quasi-dynamic coefficients —— - parameter Modelica.Units.SI.SpecificHeatCapacity c3(final min=0) - "Wind speed dependence of heat loss"; - parameter Modelica.Units.SI.DimensionlessRatio c4(final min=0) - "Sky long-wave irradiance dependence"; - parameter Real c6(final unit="s/m", final min=0) - "Wind speed dependence of thermal zero-loss efficiency"; - - // Quasi-dynamic inputs - Modelica.Blocks.Interfaces.RealInput winSpePla( - quantity="Windspeed", - unit="m/s", - displayUnit="m/s") - "Wind speed normal to collector plane"; - Modelica.Blocks.Interfaces.RealInput HGloTil( - quantity="Global solar irradiance", - unit="W/m2") - "Global irradiance on the tilted plane"; - Modelica.Blocks.Interfaces.RealInput HHorIR( - quantity="Long-wave solar irradiance", - unit="W/m2") - "Long-wave (sky) irradiance [W/m2]" annotation ( - Placement(transformation( - extent={{-20,-20},{20,20}}, - rotation=0, - origin={-120,0}), iconTransformation(extent={{-140,-20},{-100,20}}))); - -annotation ( -defaultComponentName="heaLosStc", -Documentation(info=" -

    -This component computes the quasi-dynamic heat loss from a solar thermal or PVT collector -to the environment, following the methodology described in the international standard ISO 9806:2013. -It extends the original -IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss model for code reuse, -but implements the more comprehensive quasi-dynamic formulation. -

    -

    -The heat loss is calculated for each segment i ∈ {1, ..., nseg} as: -

    -

    -Qlos,i = Ac / nseg · [ΔTi · -(c1 - c2 · ΔTi + c3 · u) - + c4 · (EL - σ · Tenv4) - c6 · u · G] -

    -

    -where: -

    -

    -

    -This model provides a more accurate representation of collector heat loss under dynamic environmental conditions, -as required by ISO 9806:2013. It is suitable for use in simulations where wind speed, sky radiation, and irradiance -vary over time. -

    - -

    Implementation Notes

    -

    -The model inherits from - -IDEAS.Fluid.SolarCollectors.BaseClasses.EN12975HeatLoss for structural consistency and reuse of base functionality, -but the naming and equations have been overwritten to reflect the ISO 9806 standard. Parameters a1 and a2 -are overwritten to c1 and c2 for clarity. -

    - -

    References

    -

    -

  • -ISO 9806:2013. Solar thermal collectors — Test methods. ISO. -
  • -

    -", -revisions=" - -")); -end ISO9806QuasiDynamicHeatLoss; diff --git a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order index 841c049367..45a8703789 100644 --- a/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order +++ b/IDEAS/Fluid/PVTCollectors/BaseClasses/package.order @@ -1,3 +1,3 @@ ElectricalPVT -ISO9806QuasiDynamicHeatLoss +ISO9806HeatLoss Examples diff --git a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo index c5555c4dd9..17fe80a505 100644 --- a/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo +++ b/IDEAS/Fluid/PVTCollectors/Data/Covered/CI_Jonas2018.mo @@ -1,6 +1,6 @@ within IDEAS.Fluid.PVTCollectors.Data.Covered; record CI_Jonas2018 = - IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic( + IDEAS.Fluid.PVTCollectors.Data.Generic( final A=1.79, final CTyp=IDEAS.Fluid.SolarCollectors.Types.HeatCapacity.TotalCapacity, final C=16631*1.79, @@ -11,31 +11,36 @@ record CI_Jonas2018 = final incAngDat=Modelica.Units.Conversions.from_deg({0,10,20,30,40,50,60,70,90}), final incAngModDat={1,1,0.99,0.98,0.97,0.95,0.92,0.88,0.00}, final colTyp=IDEAS.Fluid.PVTCollectors.Types.CollectorType.Covered, - final IAMDiff=0.94, - final eta0=0.573, - final c1=5.008, - final c2=0.059, - final c3=0.011, - final c4=0.039, - final c6=0.003, + final IAMDiff=(0.573*0.94-3*0.003)/(0.573-3*0.003), + final eta0=0.573-3*0.003, + final a1=5.008 + 3*0.011, + final a2=0.059, + final a3=0.011, + final a4=0.039, + final a6=0.003, + final a7=0.0, + final a8=0.0, final P_nominal=280, - final gamma=-0.00370, + final beta=-0.00370, final etaEl=0.1390) "Parameter set for a covered, insulated PVT collector based on Jonas et al. (2018)" annotation( defaultComponentPrefixes = "parameter", defaultComponentName = "datPVTCol", - Documentation(info = " + Documentation(info="

    This record contains thermal and electrical parameters for a covered and insulated PVT collector, based on experimental identification results from Jonas et al. (2018). -These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 quasi-dynamic conditions. +These parameters were used in the validation of a TRNSYS PVT collector model under ISO 9806:2013 and converted +to the ISO 9806:2017 quasi‑dynamic formulation used by +IDEAS.Fluid.PVTCollectors.PVTCollector using the Excel +file located in IDEAS/Resources/Data/Fluid/PVTCollectors.

    This record can be used as a generic representation of a covered, insulated PVT collector. However, if you know the brand and model of the PVT collector you plan to simulate or install, it is recommended to use the actual datasheet parameters in a custom - + IDEAS.Fluid.PVTCollectors.Data.GenericQuasiDynamic record.

    References

    @@ -50,6 +55,11 @@ EuroSun 2018. DOI: 10.18086/eurosun2018.02.16 revisions="