Key takeaways
- Elevation is 90° minus zenith, as Sandia’s PVPMC says.
- Beam light on a plane is DNI × cos AOI. The cosine is 0.500 at 60°, 0.174 at 80° and negative past 90°, where the sun is behind the plane.
- At example 52°N on 21 December noon (zenith 75.4°), a south plane tilted 35° has AOI 40.4° and cos AOI 0.761, against 0.251 flat. That is 3.0 times the beam multiplier.
- Time stamps matter. Using the start of an hour, not its middle, changed cos AOI by -14.5% to +23.0% on 21 June. PVWatts v5, SAM and PVsyst use the middle.
- Azimuth zero differs by tool. PVsyst and PV*SOL measure the sun’s azimuth from south in the northern hemisphere. pvlib and Sandia count clockwise from north.
To find tools that print hourly zenith and AOI and state their azimuth zero, see the best solar simulation software. For sun-path charts, see the best solar shading analysis software.
Solar zenith and incidence angle at a glance
Two things fix the beam light on a module: where the sun is, and how the module faces it. Zenith and azimuth place the sun. AOI links it to the plane.
| Item | Detail |
|---|---|
| Formula | cos AOI = cos z × cos β + sin z × sin β × cos(γs − γp) (Sandia PVPMC). Beam on the plane = DNI × cos AOI (PVWatts manual). |
| Terms | z is zenith, β is plane tilt, γs is sun azimuth and γp is plane azimuth. |
| Unit and range | Degrees. Zenith 0° to 90° with the sun up. AOI 0° to 90° with the sun in front of the plane. Above 90° the sun is behind it. |
| Where it matters | Beam light, IAM, shading checks, sun-path charts and tracker control. |
| Standard or rule | No single rule. Tools differ in azimuth zero and time stamp. pvlib’s default solar position method is the NREL SPA. |
| In software | Computed from site, time and plane. Shown as hourly variables, sun-path charts or loss lines. |
Why zenith and incidence angle matter for installers
They explain why tilt, direction and season change yield. A wrong azimuth zero or time stamp moves every hour of the year.
The cosine is the geometric share of beam light. The incidence angle modifier is a separate reflection loss on what remains. The DNI, GHI and plane-of-array pages use this geometry. See also the sun path diagram.
How are zenith, elevation and azimuth defined?
Zenith is the angle from straight up. Elevation is the angle above the horizon, so elevation = 90° − zenith. Azimuth is the sun’s compass direction. A 60° zenith is a 30° elevation.
- Zenith and elevation. PVEducation says the zenith angle is the angle between the sun and the vertical. Elevation is the angular height above the horizontal, also called altitude. PVsyst’s glossary calls the sun’s height on a plane the complement to 90° of the incidence angle.
- Azimuth zero. Sandia counts degrees east of north: north 0, east 90, west 270. PVsyst gives the sun’s azimuth relative to south in the northern hemisphere and north in the southern. PV*SOL says 0° is south in the northern hemisphere. Convert before you compare. The azimuth page shows how.
- True and apparent zenith. pvlib returns both. The apparent zenith includes refraction, so the sun looks higher. In our run (pvlib defaults) the gap was 0.42° at 0.5° elevation, 0.16° at 5.0° and 0.03° at 30.0°.
- Solar time. Solar noon is when the sun is highest. At 0°E it fell at 12:08 UTC on 20 March, 12:02 on 21 June and 11:58 on 21 December in our run. Each degree of longitude moves it by 4 minutes. HelioScope says its simulations use solar time.
- Accuracy. NREL’s SPA page states uncertainties of ±0.0003° for solar zenith and azimuth, for the years −2000 to 6000.
How is the angle of incidence calculated?
AOI is the angle between the sun’s rays and the line at right angles to the plane. Find the sun’s zenith and azimuth, then apply the cosine formula in the table above.
- Get the sun’s zenith and azimuth for the instant and site.
- Take the plane’s tilt from horizontal and its azimuth, with the same azimuth zero as the sun.
- Compute cos AOI. The PVWatts manual writes the same equation with its terms in a different order.
- If cos AOI is negative, the sun is behind the plane. Use 0. Also use 0 when the sun is below the horizon.
- Beam on the plane = DNI × cos AOI. Add sky and ground light separately.
pvlib’s aoi function returns the angle. Its aoi_projection function returns the cosine. Its notes say the value is negative when the sun is behind the surface. We checked the two published equations against our own unit-vector form on 20,000 random inputs. They agreed to 1e-15.
Three shortcuts help. A flat plane has AOI equal to the zenith. A sun at the zenith gives AOI equal to the tilt. At solar noon, a plane facing the sun’s side has AOI = |tilt − zenith|. If the sun is on the opposite side of overhead from the way the plane faces, AOI = tilt + zenith.
Table 1. The cosine alone, before any reflection loss.
| AOI | cos AOI |
|---|---|
| 0° | 1.000 |
| 30° | 0.866 |
| 45° | 0.707 |
| 60° | 0.500 |
| 70° | 0.342 |
| 80° | 0.174 |
| 85° | 0.087 |
The noon rule matched pvlib within 0.01° in 192 cases. These covered six latitudes from −52° to 52°, four dates, four tilts and two plane directions.

Figure 1. On 21 December at solar noon a 35° south-facing plane takes 76% of the beam light. A flat plane takes 25% (example site 52°N).
Worked example: noon through the year, then four planes on 21 June
At example 52°N the noon sun swings from 14.6° to 61.4° elevation through the year. A tilted south plane follows it. Inputs: 0°E, solar time, true zenith, pvlib SPA, example tilts.
Table 2. Solar noon on three dates.
| Day (solar noon) | Sun zenith | Sun elevation | AOI, south plane, tilt 35° | cos AOI, tilted / flat |
|---|---|---|---|---|
| 20 March | 52.05° | 37.95° | 17.05° | 0.956 / 0.615 |
| 21 June | 28.56° | 61.44° | 6.44° | 0.994 / 0.878 |
| 21 December | 75.44° | 14.56° | 40.44° | 0.761 / 0.251 |
On 20 March the zenith is 52.05°, so a 35° plane has AOI |35 − 52.05| = 17.05°. A flat plane sees the low winter sun at a shallow angle.
Table 3. AOI and cos AOI (in brackets) on 21 June.
| Plane | 08:00 | 12:00 | 16:00 |
|---|---|---|---|
| Sun zenith, azimuth | 53.4°, 98.3° | 28.6°, 180.0° | 53.4°, 261.6° |
| Flat (tilt 0°) | 53.4° (0.596) | 28.6° (0.878) | 53.4° (0.596) |
| South-facing, tilt 35 | 56.3° (0.555) | 6.4° (0.994) | 56.3° (0.555) |
| East-facing, tilt 35 | 19.3° (0.944) | 44.0° (0.719) | 88.1° (0.032) |
| West-facing, tilt 35 | 88.1° (0.032) | 44.0° (0.719) | 19.3° (0.944) |
The east plane faces the morning sun, with AOI 19.3° at 08:00. The west plane mirrors it at 16:00. The south plane is best at noon. At 16:00 the east plane has cos AOI of 0.032, so it gets almost no beam light.
A plane can also face away. A north-facing 35° plane at noon on 21 December has zenith 75.4° and AOI 110.4°. Its raw cosine is -0.349, so beam light is 0. Diffuse and ground light still arrive.
Which instant does an hourly weather value describe?
Use the middle of the hour. The PVWatts Version 5 manual (September 2014) computes sun position at the midpoint of each hour. So 14:00 to 15:00 uses 14:30. SAM uses it for hourly data without a Minute column. PVsyst uses the middle of each interval.
Using the start or end of the hour can be far off. Here the plane faces south at 35° on 21 June, with DNI held constant across the hour (an assumption).
Table 4. cos AOI by time choice, against the mean over the hour.
| Hour (solar time) | cos at start / middle / end | Mean over hour | Error at start / middle / end |
|---|---|---|---|
| 08:00 to 09:00 | 0.555 / 0.650 / 0.737 | 0.649 | -14.5% / +0.2% / +13.5% |
| 12:00 to 13:00 | 0.994 / 0.986 / 0.964 | 0.984 | +1.0% / +0.3% / -2.0% |
| 16:00 to 17:00 | 0.555 / 0.452 / 0.343 | 0.451 | +23.0% / +0.2% / -23.9% |
The middle of the hour was within 0.3% of the mean in all three hours. The start or end missed by up to 23.9%. Check the rule in each weather file or TMY file.
Calculator: sun angles and AOI
Part A finds the sun angles and AOI from latitude, day and solar time. Part B gives AOI from sun angles you hold. Defaults are example.
Part A uses the Cooper declination formula, so its zenith is approximate and ignores refraction. For design work, use a full sun-position method such as the NREL SPA.
How solar software handles zenith and incidence angle
Pages differ on three points that change every hour of a run: the sun-position method, the azimuth zero and the time-stamp rule. Only some state all three. Ratings reflect the page read, not model quality.
| Software | Documents sun angles and AOI? | Page read |
|---|---|---|
| pvlib python | Yes | pvlib 0.16.1 docs and installed docstrings, October 2026 |
| NREL PVWatts | Yes | PVWatts Version 5 Manual, September 2014, archived copy. The current web tool is not covered. |
| PVsyst | Yes | PVsyst help, glossary and "Simulation variables: geometry", no date shown, October 2026 |
| PV*SOL premium | Partly | PV*SOL help, two pages, no date shown, October 2026 |
| SAM | Partly | SAM help, "Weather time convention", no date shown, October 2026 |
| HelioScope | Partly | HelioScope help, Daylight Saving Time (no date shown) and Shade Modeling (8 July 2025), October 2026 |
What each page says:
- pvlib python: get_solarposition returns apparent_zenith, zenith, apparent_elevation, elevation and azimuth. aoi is "the angle between the solar vector and the surface normal".
- NREL PVWatts: Version 5 manual (September 2014): sun position by the Michalsky algorithm at the hour midpoint, an AOI equation (Eqn. 1) and beam as "the beam normal input multiplied by the cosine of the angle of incidence".
- PVsyst: The glossary defines the incidence angle against the plane normal. The geometry variables list HSol (sun height), AzSol (azimuth relative to south in the northern hemisphere) and AngInc. Each is calculated at the middle of the measurement interval.
- PV*SOL premium: The sun-position page names DIN 5034-2 or NREL SPA. It gives azimuth 0° as south in the northern hemisphere and elevation 0° at the horizon. The irradiation page lists an angle-of-irradiation step but no formula.
- SAM: The weather time convention page says air mass uses the zenith for each time step. It says sun position uses the hour midpoint for hourly data without a Minute column. It does not mention azimuth or AOI.
- HelioScope: Simulations and weather files use solar time. The Shade Modeling page mentions sun angle but not zenith, azimuth or AOI.
For scored company comparisons, see the best solar simulation software list and the best solar shading analysis software list. Library users can read our pvlib page.
Common mistakes with zenith and incidence angle
FAQs
Is a smaller solar zenith angle better?
Yes for beam light on a flat plane. A smaller zenith gives a larger cos zenith and a shorter path through the air. AM 1.5, the standard test spectrum, corresponds to a zenith of about 48.2° (1 ÷ cos 48.2° = 1.50). See standard test conditions.
Can the angle of incidence be above 90°?
Yes, when the sun is behind the plane. Our north-facing example reached 110.4° at December noon. The raw cosine is then negative, so beam light is 0. Diffuse and ground light still arrive.
Is the angle of incidence the same as the tilt angle?
No. Tilt is the plane’s angle from horizontal. AOI is the angle between the sun and the plane’s normal. They are equal when the sun is at the zenith. See tilt angle.
Should I use the apparent or true zenith?
Keep one choice for the whole model, and check which one your tool feeds into the AOI step. The apparent zenith includes refraction, so the sun looks higher. The gap matters mainly near sunrise and sunset.
What is the solar zenith angle at solar noon?
It equals the gap between your latitude and the latitude where the sun is overhead that day (the sun’s declination). At example 52°N on 21 December that gives 75.44°, the Table 2 value. At the example site it is smallest in June and largest in December.
Related terms
- IAM: the reflection loss applied after the cosine.
- Azimuth: the compass direction and its zero in each tool.
- Sun path diagram: a chart of the sun’s azimuth and height through the year.
Next step: check your tool’s azimuth zero and time-stamp rule against the pages above, then read the best solar simulation software and best solar shading analysis software lists.
Sources
- Sandia PVPMC, Angle of Incidence (page metadata 9 June 2025) and Sun Position (metadata 21 November 2022). Checked October 2026. Quotes re-checked 30 October 2026.
- pvlib 0.16.1 documentation: aoi and get_solarposition. The spa_python, aoi_projection and declination_cooper69 docstrings come from the installed package.
- NREL, Solar Position Algorithm (page shows June 2003 and revisions to 2018, the algorithm is Reda and Andreas, as cited in the pvlib docstring).
- Dobos, PVWatts Version 5 Manual, NREL/TP-6A20-62641, September 2014 (archived copy).
- PVEducation: elevation angle and air mass (no date shown).
- PVsyst help: Incidence angle and Simulation variables: geometry (no date shown).
- PV*SOL help: sun position and irradiation (no date shown).
- SAM help: Weather time convention (no date shown).
- HelioScope help: Daylight Saving Time (no date shown) and Shade Modeling (shown 8 July 2025).
Last updated 30 October 2026. Next scheduled review: 30 January 2027.