From Horizontal to Tilted: The Transposition Model Behind IST PVSolar Simulator
Transposition is the first physical calculation in the chain — before any loss is applied, before temperature, before the diode model. This post documents, with how our engine takes horizontal irradiance components (GHI, DNI, DHI) at a given time step and produces plane-of-array (POA) irradiance: beam, sky-diffuse, and ground-reflected, each computed separately.
Everything below runs per time step (hourly or 15-minute), using the actual sun position for that step — not a fixed mid-month-noon geometry, which is the shortcut older monthly-average tools rely on.
Step 1: Solar position (exact, per time step)
Given latitude, day-of-year, and local solar hour, the engine computes solar declination using the standard Spencer Fourier series. This solar-position calculation is evaluated fresh at every time step, which is what allows sub-hourly resolution to matter — a monthly-average engine instead freezes geometry at a single representative noon per month.
Step 2: GHI availability
Case 1: Monthly resolution — only GHI available (no DNI/DHI): This is deliberately crude — it doesn't know your site's actual cloudiness, so it assumes the same 15% diffuse split for every month regardless of whether that month is clear or overcast.
Case 2: Hourly/Sub-hourly resolution — only GHI available (no DHI in the monthly table): If DHI is missing, it computes each day's own clearness index, then runs it through the Erbs (1982) correlation to get a diffuse fraction that actually responds to how clear or hazy that day's sun-earth geometry implies the sky is — a clear, high-kt day gets a low diffuse fraction; a hazy/low-kt one gets a high one.
Case 3: GHI itself is not available - If a month's row is missing the ghi, defaults it to a flat placeholder of 5.0 kWh/m²/day, a generic guess with no connection to your actual site. If GHI is present but literally 0, there's no fallback for that. That month gets zero GHI for every hour, and effectively zero PV output for that whole month, silently.
Step 3: Angle of incidence on the tilted surface
Diffuse and ground-reflected irradiance, which arrive from a full hemisphere rather than a single direction, use an effective constant IAM computed by integrating the same Martin-Ruiz curve over a hemisphere — this is the standard approximation for diffuse IAM used across the industry.
Beam and diffuse/ground IAM are tracked and reported as separate loss lines so the effective irradiance can be reconciled against the raw POA value at every stage.
Step 4: Perez anisotropic sky-diffuse transposition
This is the default transposition model chosen over a isotropic or Hay-Davies model because it resolves the diffuse sky into three physically distinct components (isotropic background, circumsolar brightening, horizon brightening), each weighted by empirically-fitted coefficients.
Step 5: Sky-diffuse masking for row-to-row geometry
When array row-spacing geometry is configured (row pitch and collector slant length, giving ground coverage ratio, adjacent rows physically obstruct part of the lower sky dome as seen from a given row. The engine applies a sky-diffuse mask factor — derived from tilt and GCR via the same infinite-sheds geometric reasoning used for beam self-shading — to the sky-diffuse term specifically. Ground-reflected irradiance is left unmasked at this stage (a standard second-order simplification, since the ground term is already small relative to sky diffuse in most tilt/GCR combinations).
Step 6: Tracking systems — full re-evaluation, not a scaling factor
For single-axis tracker configurations, every step above — solar position, AOI, Perez transposition, sky-diffuse masking — is re-evaluated against the tracker's actual instantaneous rotation angle for that time step (computed via Loutzenhiser backtracking logic to avoid inter-row shading at low sun angles), not approximated by scaling a fixed-tilt result by a monthly gain factor. This is the same approach as PVsyst's per-timestep "SAT hourly" tracking mode, and it's what makes seasonal POA shape (and downstream inverter clipping timing) come out physically correct rather than smoothed.
What happens after transposition
Once G_poa (beam, sky-diffuse, ground) is computed, the engine applies the Martin-Ruiz incidence angle modifier (separately to the beam and diffuse/ground terms) and the First Solar/Lee-Panchula spectral correction before this becomes "effective irradiance" for the DC power calculation. Those two steps, along with cell temperature and the diode model, are documented in our companion post on the array conversion model — this post covers strictly the horizontal-to-tilted transposition stage.