> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plantpredict.com/llms.txt
> Use this file to discover all available pages before exploring further.

# POAI Diffuse-Direct Decomposition

export const Isotropic = () => <Tooltip tip="Uniform in all directions; describes diffuse irradiance distributed evenly across the sky dome.">
    isotropic
  </Tooltip>;

export const AirMass = () => <Tooltip tip="Ratio of atmospheric path length to path length at zenith; equals 1 when sun is overhead.">
    air mass
  </Tooltip>;

export const Transposition = () => <Tooltip tip="Converting horizontal irradiance components to plane-of-array (tilted surface) irradiance.">
    transposition
  </Tooltip>;

export const AngleOfIncidence = () => <Tooltip tip="Angle between the sun's rays and the perpendicular to a surface; 0° when sun is directly facing the surface.">
    angle of incidence
  </Tooltip>;

export const PlaneOfArrayIrradiance = () => <Tooltip tip="Solar irradiance on the tilted module surface (beam + diffuse + reflected); drives PV power generation.">
    plane-of-array irradiance
  </Tooltip>;

export const ClosureEquation = () => <Tooltip tip="GHI = DNI × cos(θz) + DHI; relates the three horizontal irradiance components.">
    closure equation
  </Tooltip>;

export const ClearnessIndex = () => <Tooltip tip="Ratio of measured GHI to extraterrestrial irradiance; quantifies atmospheric transmittance.">
    clearness index
  </Tooltip>;

export const ZenithAngle = () => <Tooltip tip="Angle between the local vertical and the sun (0° = overhead, 90° = horizon).">
    zenith angle
  </Tooltip>;

export const DHI = () => <Tooltip tip="Diffuse Horizontal Irradiance: solar radiation from the sky dome (excluding direct beam) on a horizontal surface.">
    DHI
  </Tooltip>;

export const DNI = () => <Tooltip tip="Direct Normal Irradiance: solar radiation received perpendicular to the sun's rays (direct beam only).">
    DNI
  </Tooltip>;

export const GHI = () => <Tooltip tip="Global Horizontal Irradiance: total solar radiation on a horizontal surface (direct + diffuse).">
    GHI
  </Tooltip>;

## Summary

When <PlaneOfArrayIrradiance /> (POAI) is provided in the weather file, PlantPredict can reverse-decompose it into horizontal irradiance components (<GHI />, <DNI />, <DHI />) using the GTI-DIRINT algorithm. This is activated by the **Frontside POAI** toggle in [Simulation Settings](/user-guide/ui/simulation-settings). When enabled, the standard [GHI decomposition models](/models/horizontal-irradiance/ghi_diffuse_direct_decomposition) (Erbs, Reindl, DIRINT) are bypassed—the horizontal components derived from the GTI-DIRINT algorithm feed into the normal <Transposition /> pipeline for each DC field.

## Inputs

| Name                                          | Symbol                | Units   | Description                                                                                             |
| --------------------------------------------- | --------------------- | ------- | ------------------------------------------------------------------------------------------------------- |
| **Plane-of-Array Irradiance**                 | $G_{POA}$             | W/m²    | Measured total irradiance on tilted module surface from weather file                                    |
| **Extraterrestrial Direct Normal Irradiance** | $DNI_{extra}$         | W/m²    | Solar irradiance at top of atmosphere                                                                   |
| **Solar Zenith Angle**                        | $\theta_z$            | degrees | Angle between sun and local vertical                                                                    |
| **Solar Azimuth Angle**                       | $\gamma_s$            | degrees | Horizontal angle of sun, clockwise from North                                                           |
| **Atmospheric Pressure**                      | $P$                   | hPa     | Local atmospheric pressure                                                                              |
| **Albedo**                                    | $\rho$                | —       | Average ground reflectance (0–1)                                                                        |
| **Module Tilt Angle**                         | $\beta_m$             | degrees | Angle of module surface from horizontal (fixed-tilt only, 0° = horizontal, 90° = vertical)              |
| **Module Azimuth Angle**                      | $\gamma_m$            | degrees | Direction the module faces, clockwise from North (fixed-tilt only, 0° = N, 90° = E, 180° = S, 270° = W) |
| **Tracker Axis Azimuth**                      | $\gamma_{axis}$       | degrees | Azimuth orientation of tracker rotation axis from North (tracking only)                                 |
| **Tracker Axis Tilt**                         | $\beta_{axis}$        | degrees | Tilt of tracker rotation axis from horizontal (tracking only)                                           |
| **Minimum Rotation Limit**                    | $\alpha_{min}$        | degrees | Mechanical limit for negative rotation (tracking only)                                                  |
| **Maximum Rotation Limit**                    | $\alpha_{max}$        | degrees | Mechanical limit for positive rotation (tracking only)                                                  |
| **Nighttime Stow Angle**                      | $\alpha_{stow,night}$ | degrees | Rotation angle when sun is below horizon (tracking only)                                                |
| **Ground Coverage Ratio**                     | $GCR$                 | —       | Ratio of collector width to row pitch (backtracking only)                                               |

***

## Outputs

| Name                              | Symbol | Units | Description                                |
| --------------------------------- | ------ | ----- | ------------------------------------------ |
| **Global Horizontal Irradiance**  | $GHI$  | W/m²  | Total irradiance on horizontal surface     |
| **Direct Normal Irradiance**      | $DNI$  | W/m²  | Beam component perpendicular to sun's rays |
| **Diffuse Horizontal Irradiance** | $DHI$  | W/m²  | Diffuse component on horizontal surface    |

***

## Detailed Description

PlantPredict POAI Diffuse-Direct Decomposition model is based on the GTI-DIRINT algorithm described by Marion (2015), which derives horizontal irradiance components from measured POAI. The algorithm iteratively applies a tilted variation of the DISC-DIRINT decomposition model and checks its results by transposing back to the tilted plane, adjusting the estimated clearness index $K_{t,est}$ until the modeled POAI matches the measurement.

Because POAI is typically measured by a sensor at a specific location in the power plant, its mounting configuration (tilt, azimuth, GCR, etc.) may not match any particular DC field—for example, DC fields can have different GCR or tracker settings.

The algorithm therefore uses the mounting and tracking parameters defined at the weather-file level, which describe the sensor's own configuration, rather than any DC field's parameters. The derived GHI, DNI, and DHI are then re-transposed downstream for each DC field using that field's actual parameters and the standard transposition models.

### Algorithm Rationale

The DISC-DIRINT decomposition model was calibrated on horizontal irradiance data. Its central input is the clearness index:

$$
K_t = \frac{GHI}{DNI_{extra} \cdot \cos\theta_z}
$$

which characterizes atmospheric transmittance through empirical relationships. Substituting the global tilted irradiance (GTI) for GHI and the angle of incidence (AOI) $\theta_{AOI}$ for $\theta_z$ produces an estimated "tilted" clearness index $K_{t,est}$ that does not map cleanly to these relationships. A tilted surface sees a reduced fraction of the sky dome, receives ground-reflected irradiance that has no horizontal equivalent, and the beam projects through $\cos\theta_{AOI}$ rather than $\cos\theta_z$. The mismatch grows with tilt angle.

The iterative procedure compensates for this mismatch. For a given timestep, the other inputs to the DISC-DIRINT model—pressure-corrected <AirMass />, extraterrestrial irradiance, and zenith angle—are independent of the surface orientation. $K_{t,est}$ is the input that carries the orientation error.

The iteration therefore aims to incrementally correct $K_{t,est}$, starting with an initial guess:

$$
K_{t,est} = \frac{GTI_0}{DNI_{extra} \cdot \cos\theta_{AOI}}
$$

where $GTI_0 = G_{POA}$. The algorithm runs the DISC-DIRINT decomposition with this $K_{t,est}$ to estimate DNI and DHI, transposes those components back to the tilted plane using the Perez model, and compares the modeled POAI with the measurement. At each subsequent step $i$, a new proxy $GTI_i$ is computed from $GTI_{i-1}$ and the residual between the input POAI and the re-transposed value from the previous iteration, yielding an updated $K_{t,est}$. $GTI_i$ has no physical meaning of its own—it is simply the value fed into the $K_{t,est}$ equation to drive convergence. The loop converges when the modeled POAI reproduces the measurement to within 1 W/m².

At each iteration, a relaxation factor $C$ scales the adjustment to $GTI_i$, controlling how aggressively $K_{t,est}$ is corrected. $C$ decreases with iteration count because DISC and DIRINT select coefficients from discrete lookup-table bins rather than continuous functions. A full-step correction ($C = 1$) works well when far from the solution, but near convergence it can overshoot and oscillate across bin boundaries. Progressively damping the step size maximizes the chance of stable convergence.

### Mounting Angle Calculation

Before decomposition, the algorithm computes the <AngleOfIncidence /> (AOI) $\theta_{AOI}$ and surface tilt $\beta_m$ for each timestep using the weather file's mounting configuration.

For fixed-tilt systems, $\beta_m$ and $\gamma_m$ are used as-is and $\theta_{AOI}$ is calculated from the tilt and azimuth combined with the solar position $\theta_z$, $\gamma_s$ (see [Incidence Angle](/models/tracking/incidence_angle)).

For single-axis trackers, the tracking angle is calculated from the axis geometry ($\gamma_{axis}$, $\beta_{axis}$), rotation limits ($\alpha_{min}$, $\alpha_{max}$), stow angle ($\alpha_{stow,night}$), and optionally the ground coverage ratio ($GCR$) for backtracking, using [true tracking](/models/tracking/true_tracking) or [backtracking](/models/tracking/backtracking/standard_backtracking) (selected during weather file import), assuming horizontal ground. The resulting tilt and azimuth are used to compute $\theta_{AOI}$.

### Timestep Classification

The algorithm handles two cases separately based on the angle of incidence $\theta_{AOI}$:

* **$\theta_{AOI} < 90°$**: The beam component can reach the front surface. The standard iterative procedure mentioned above solves for DNI and DHI.
* **$\theta_{AOI} ≥ 90°$**: The sun is behind the modules and the beam cannot reach the front surface directly (rare occurrence). A simplified non-iterative procedure is used.

Timesteps where $G_{POA} \leq 0$ are zeroed out: $GHI = DNI = DHI = 0$.

### Case 1: AOI \< 90° (Iterative)

In the standard case where the sun is facing the front of the module, the algorithm follows the iterative approach described above. If convergence—defined as obtaining a residual between $G_{POA}$ and the re-transposed value \< 1 W/m²—is not achieved within 30 iterations, the result with the smallest residual is used. Starting with $GTI_0 = G_{POA}$, the algorithm performs the following steps at each iteration $i$:

**Step 1: Compute tilted clearness index**

A tilted equivalent of the standard clearness index is calculated, replacing $GHI$ with $GTI_i$ and the zenith angle $\theta_z$ with the angle of incidence $\theta_{AOI}$. A floor of 0.065 on the cosine of the AOI (corresponding to $\theta_{AOI} \approx 86.3°$) prevents division by near-zero values at grazing incidence:

$$
K_{t,est} = \frac{GTI_i}{DNI_{extra} \cdot \max\!\left(0.065,\, \cos\theta_{AOI}\right)}
$$

**Step 2: Estimate DNI using DISC + DIRINT algorithm**

The DISC model computes an initial DNI estimate from $K_{t,est}$ using atmospheric transmittance factors. The DIRINT correction coefficient $C_{DIRINT}$ is then looked up from a four-dimensional table using the modified <ClearnessIndex /> $K'_t$, temporal stability $\Delta K'_t$, and solar <ZenithAngle />. As with the standard [GHI decomposition](/models/horizontal-irradiance/ghi_diffuse_direct_decomposition#dirint-model), precipitable water is not used. The temporal stability $\Delta K'_t$ is calculated from the original $K_{t,est}$ values (derived from $G_{POA}$) of the previous and following timesteps, not from the iteratively updated $GTI_i$:

$$
DNI = DNI_{DISC} \times C_{DIRINT}
$$

**Step 3: Derive GHI and DHI**

GHI is recovered from the $K_{t,est}$ definition (the floor carries over from Step 1):

$$
GHI = K_{t,est} \cdot DNI_{extra} \cdot \max(0.065,\, \cos\theta_z)
$$

DHI is then obtained from the closure equation:

$$
DHI = GHI - DNI \cdot \max(0.065,\, \cos\theta_z)
$$

In Marion's original paper, the DHI calculation leaves the DNI projection unfloored (no clamping of $\cos\theta_z$). The difference only affects timesteps where $\theta_z > 86.3°$ and is negligible in practice.

**Step 4: Transpose back to the tilted plane and compare**

The derived horizontal components are transposed to the tilted plane using the [Perez model](/models/transposition/perez), producing $G_{beam}$, $G_{sky}$, and $G_{ground}$:

$$
G_{POA,model} = G_{beam} + G_{sky} + G_{ground}
$$

**Step 5: Update and converge**

The residual $G_{POA,model} - G_{POA}$ is computed. Convergence is considered achieved when $|G_{POA,model} - G_{POA}| \leq 1$ W/m², in which case the algorithm stops and the DNI, GHI, and DHI values are returned. Otherwise, the intermediate proxy variable $GTI_{i+1}$ is updated with a damped [fixed-point iteration](https://en.wikipedia.org/wiki/Fixed-point_iteration), clamped at zero:

$$
GTI_{i+1} = \max\!\left(0,\, GTI_i - C \cdot (G_{POA,model} - G_{POA})\right)
$$

where $C$ is a relaxation factor that decreases with iteration count to improve stability:

| Iteration Range | Relaxation Factor $C$ |
| --------------- | --------------------- |
| 1–2             | 1.0                   |
| 3–9             | 0.5                   |
| 10–19           | 0.25                  |
| 20–30           | 0.125                 |

If convergence is not reached within 30 iterations, the result with the smallest residual is used.

### Case 2: AOI ≥ 90° (Non-Iterative)

In the rare case when the beam cannot reach the front surface—that is, when the sun is behind the modules—the measured POAI consists entirely of diffuse irradiance (sky and ground-reflected). The algorithm then uses a simplified non-iterative approach:

**Step 1: Estimate DNI from a single-pass DISC + DIRINT**

$K_{t,est}$ is calculated once from $G_{POA}$ using the same tilted clearness index formula as Case 1, without iterative correction. DNI is then estimated using the DISC + DIRINT procedure. Temporal stability $\Delta K'_t$ is computed from the neighboring timesteps' original $G_{POA}$-derived $K'_t$ values, as in Case 1.

**Step 2: Derive DHI from an isotropic diffuse model**

Since the beam does not reach the front surface, $G_{POA}$ consists entirely of sky diffuse and ground-reflected irradiance. Assuming an <Isotropic /> sky model:

$$
G_{POA} = DHI \cdot \frac{1 + \cos\beta_m}{2} + GHI \cdot \rho \cdot \frac{1 - \cos\beta_m}{2}
$$

where GHI follows the closure equation: $GHI = DHI + DNI \cdot \cos\theta_z$. Substituting and solving for DHI:

$$
DHI = \frac{2 \cdot G_{POA} - DNI \cdot \cos\theta_z \cdot \rho \cdot (1 - \cos\beta_m)}{1 + \cos\beta_m + \rho \cdot (1 - \cos\beta_m)}
$$

DHI is floored at zero. GHI is then computed from the <ClosureEquation />.

### Downstream Processing

The derived GHI, DNI, and DHI are written back to the weather data and processed through the standard transposition pipeline. Each DC field may have different mounting parameters than the weather file, so the horizontal components are re-transposed per DC field using the selected transposition model (Hay-Davies or Perez).

***

## References

* Marion, B. (2015). *A model for deriving the direct normal and diffuse horizontal irradiance from the global tilted irradiance.* Solar Energy, 122, 1037–1046. DOI: [10.1016/j.solener.2015.10.017](https://doi.org/10.1016/j.solener.2015.10.017)
* Perez, R., Ineichen, P., Maxwell, E., Seals, R., & Zelenka, A. (1992). *Dynamic global-to-direct irradiance conversion models.* ASHRAE Transactions, 98(1), 354–369.
* Perez, R., Ineichen, P., Seals, R., Michalsky, J., & Stewart, R. (1990). *Modeling daylight availability and irradiance components from direct and global irradiance.* Solar Energy, 44(5), 271–289. DOI: [10.1016/0038-092X(90)90055-H](https://doi.org/10.1016/0038-092X\(90\)90055-H)
