Skip to main content

Solar simulation

Background​

Our simulations need to predict the future solar generation of an asset. These assets do not exist yet, so there is no past data to train a machine learning model on. Instead, we use a physical solar simulation model that takes the asset characteristics and the weather data as input and simulates the asset's generation.

The asset characteristics include location and altitude, DC capacity, inverter capacity and efficiency, panel tilt and azimuth, the module temperature coefficient, and the loss settings. The plant is modeled as a single array with one tilt and azimuth, feeding a single inverter. Weather data from our weather model then determines how much the panels produce.

Methodology​

We use technology originally developed at the US Sandia National Laboratories. Our technology has been extensively tested and validated with real data.

The simulation is built on the open-source pvlib library, which grew out of that work. It combines the following models:

  • DC output: the PVWatts DC model, which scales the DC capacity by the irradiance on the panels and corrects it with the module temperature coefficient
  • Transposition: the Hay-Davies model, which converts horizontal irradiance to irradiance on the tilted panels
  • Reflection: a physical angle-of-incidence model; no spectral correction is applied
  • Cell temperature: the Sandia (SAPM) model for open-rack glass-glass modules, used for every asset regardless of its actual mounting

Weather variables​

We use the following weather variables for the physical simulation:

VariableUnitTime resolution
Air temperature at 2 m°C1 hour
Wind speedm/s1 hour
Global horizontal irradiance (GHI)W/m21 hour
Diffuse horizontal irradiance (DHI)W/m21 hour
Direct normal irradiance (DNI)W/m21 hour

Far-shading effects​

Solar simulations account for shading by distant terrain such as hills and mountains. When an asset is created or its location changes, Tensor Cloud retrieves the horizon profile for that location from PVGIS. Whenever the sun is below this horizon line, direct irradiance is set to zero, while diffuse irradiance is kept.

If no horizon profile could be retrieved, for example because PVGIS treats the location as being at sea, the asset is simulated without far shading. Shading by nearby objects is covered by the shading loss setting.

Losses and degradation​

The loss settings of the asset reduce the DC output: soiling, shading, snow, mismatch, DC cable, connections, light-induced degradation, nameplate rating, availability, and degradation. The losses are multiplied together, so the total is compounded rather than added.

The degradation loss is the annual degradation rate multiplied by the age of the plant. The age rises evenly over the simulated period, from zero at COD to the number of calendar years between the first and the last simulated year. The degradation start month and change frequency then delay the start of degradation and set whether it changes continuously, monthly, or annually.

Inverter efficiency​

An inverter is not equally efficient at every power level. It reaches its rated efficiency near full load and becomes less efficient as the DC input falls: at dawn, at dusk, and under heavy cloud. Below a startup threshold it produces no AC output at all.

We model this with the NREL PVWatts inverter model, which expresses efficiency η\eta as a function of the load factor ζ\zeta, the ratio of DC input power to the inverter's DC input limit:

η=ηnomηref(−0.0162 ζ−0.0059ζ+0.9858),ζ=PdcPdc0\eta = \frac{\eta_{nom}}{\eta_{ref}}\left(-0.0162\,\zeta - \frac{0.0059}{\zeta} + 0.9858\right), \qquad \zeta = \frac{P_{dc}}{P_{dc0}}

ηnom\eta_{nom} is the solar inverter efficiency you configure on the asset. ηref=0.9637\eta_{ref} = 0.9637 is a fixed reference constant, and the AC output is capped at the inverter's AC capacity.

Why the AC/DC conversion loss never reaches zero​

The efficiency you configure scales this curve but does not change its shape, so the relative droop at partial load is the same whatever value you enter:

Load factor ζEfficiency relative to your configured value
100%100.0%
60%100.3%
30%99.7%
10%96.0%
5%90.0%
2%71.6%
1%41.1%
0.6%0.2%
below 0.6%0%

Setting the efficiency to 100 percent therefore gives an inverter that is 100 percent efficient at rated load and follows the same droop everywhere else, not a lossless one. Sunny hours contribute almost no loss, the dim edges of each day contribute a little, and the AC/DC conversion entry in the solar losses chart stays slightly above zero.

The size of that residual depends on how much time the system spends at partial load, which is driven by the DC/AC ratio. For a system with 100 percent configured efficiency it typically falls between 0.1 and 0.5 percent of DC energy, and is smallest for a heavily oversized array, which spends more of its generating hours near full load.

note

The realized annual conversion efficiency of an asset is therefore always slightly below the value configured on it.

Hourly simulation and 30-minute output​

Each hour of weather is simulated at its midpoint, so the sun position matches the period the irradiance describes. Air temperature and wind speed are point readings, so their value at the midpoint is the average of the readings on either side.

The hourly result is then split into two half-hours by following the running total of energy across the hour boundaries. The inverter model is applied again to each half-hour, so clipping is decided at 30-minute resolution. In the hours that contain sunrise or sunset, generation is placed only in the half-hour in which the sun is up.

Custom generation​

If an asset uses a custom generation profile, the simulated output is rescaled to match the monthly totals you entered, adjusted for degradation in later years. The simulation still sets the 30-minute shape of generation within each month. Exceedance scenarios are not calculated for these assets.

Exceedance scenarios​

Every simulation produces a P50 result: the central estimate, which actual generation is as likely to exceed as to fall short of. For solar assets that use the simulated generation profile, Tensor Cloud also produces P85, P90, and P99 results, the generation levels expected to be exceeded with 85, 90, and 99 percent probability. You can switch between them with the probability band toggle in the simulation results.

Interannual variability​

To measure how much annual output varies with the weather, the plant is simulated over the last 20 full calendar years of actual weather at its location, with degradation set to zero. The interannual variability σIAV\sigma_{IAV} is the standard deviation of these 20 annual AC yields divided by their mean.

The 20-year window moves forward at the start of each calendar year, so the exceedance levels can change slightly when a simulation is re-run in a new year.

Combined uncertainty​

The interannual variability is combined with fixed allowances for model and simulation uncertainty, each specified as a P90 deviation (3.5 and 5 percent) and converted to one standard deviation:

σtotal=σIAV2+(3.5%1.282)2+(5%1.282)2\sigma_{total} = \sqrt{\sigma_{IAV}^2 + \left(\frac{3.5\%}{1.282}\right)^2 + \left(\frac{5\%}{1.282}\right)^2}

Scaling the P50 result​

Each exceedance level scales the P50 AC and DC generation of every 30-minute slot by the same factor:

kxx=1−zxx σtotalk_{xx} = 1 - z_{xx} \, \sigma_{total}
Scenariozxxz_{xx}
P851.036
P901.282
P992.326

Curtailment, market trading, battery operation, and costs are then simulated again on the scaled generation, so each exceedance scenario has its own financial results. The solar losses breakdown is calculated for P50 only.

Further reading​