Solar Radiation
Per-sensor direct, diffuse, and total solar irradiance in W/m² at one sun position.
Written, not verified, not released. The study, its Rhino command and its tests all exist in the source tree, and none of them has been compiled or run yet — the work was authored in an environment with no .NET SDK. Treat this page as a description of intended behaviour, not as a report on measured behaviour. There is no downloadable build.
Solar Radiation reports how much solar power reaches your geometry at a single instant. For each sensor it computes direct, diffuse, and total irradiance in W/m², and paints the total across your geometry as a colored sensor field.
Every number here is power at one sun position, never a total collected over a day, a season, or a year. Read it as a comparison between sensors and between design options — not as an energy budget. That qualifier travels with the numbers into every export.
What it Computes
From each sensor, the study casts one ray at the sun and a cosine-weighted set of rays over the sky hemisphere, keeping only the energy that arrives unobstructed.
| Component | Meaning |
|---|---|
| Direct | Beam irradiance from the sun — DNI · cos θ, zeroed when context occludes the sun ray or the sun is below the horizon. |
| Diffuse | Sky irradiance over the hemisphere the sensor can actually see. |
| Total | Direct + diffuse — the instantaneous solar load, in W/m². |
Sensor orientation is meant to be handled by excluding hemisphere samples that point below the horizon — those look at ground, not sky. The closed form is Liu–Jordan's sky-view factor (1 + cos β)/2: a roof should read DHI, a vertical facade DHI / 2.
Do not read tilted or vertical diffuse values at face value yet. The horizon cull is written
into all three ray backends and there is a test asserting the DHI / 2 vertical case, but nothing
has been executed and the GPU shader has not been rebuilt — so CPU-vs-GPU agreement for irradiance
is currently unknown. Horizontal sensors are the case that was always correct. This qualifier goes
away when the study is verified and released.
The Sky Model
The sky is isotropic: the diffuse-horizontal irradiance you enter becomes one uniform sky radiance (L₀ = DHI / π), integrated over each sensor's unobstructed view. Fast, robust, and a faithful baseline for comparative work.
There is no clear-sky model and no weather file — sky radiance comes only from the DHI you type in. Anisotropic (Perez-style) skies are future work. Treat diffuse values as a relative baseline, never as a calibrated absolute.
Assumptions
Fixed by the v1 physics. They decide what a number means, so they travel inside every export — a #-prefixed header block in CSV, an assumptions object in JSON — rather than living only on this page.
| Assumption | Value |
|---|---|
| Sky model | isotropic |
| Ground reflection | not modelled |
| Ground albedo | 0 — the ground is black |
| Accumulation | instantaneous — never summed over a period |
| Units | W/m2 |
| Sun azimuth reference | deg from model +Y, cw — model space, not geographic north |
Each export also carries that run's own inputs: DNI, DHI, sun altitude, sun azimuth, and the hemisphere sample count. Two consequences worth stating plainly:
- No reflected component appears in the results. Ground reflection isn't modelled, so the term is left out rather than shipped as a column of zeros that reads like a measurement.
- A value that couldn't be computed is not zero. It serializes as
nulland displays as an em-dash — missing data and a fully shaded sensor are different facts.
Use Cases
- Facade studies — see where solar load concentrates, to inform shading, glazing ratios, and materials.
- PV siting — rank roof and facade areas by instantaneous total. A ranking at the one sun position you chose; sizing a real array is separate work for a tool that simulates a whole period.
- Energy-aware massing — compare options early, balancing solar gain against overheating risk.
How to Run
Type WrenglerRadiation in the Rhino command line and answer the prompts in order; each is pre-filled, so Enter accepts the shown value.
- Shading / obstacle geometry — the context that shades your sensors. Enter to skip for open sky.
- Sensor surface(s) — the surfaces the sensor grid is built on. At least one required.
- Sun position — altitude in degrees above the horizon, then azimuth in degrees from the model's +Y axis, clockwise. This is a model-space angle; the document north angle is deliberately not applied.
- Sky inputs — DNI and DHI, both in W/m².
- Grid spacing — in model units. Finer spacing means more sensors and a longer run.
The command reports the sensor count, the backend used, and min / mean / max total to the command line, and paints the total as a blue→red ramp. Direct and diffuse are computed per sensor and exported, but not separately displayed in the viewport today.
Radiation costs roughly 10× sunlight per sensor — one sun ray plus the full hemisphere sample budget. Start with a wide grid spacing and refine once the pattern looks right.
Related
- Geometry Grouping — reusable named scopes.
- Services overview — how every service shares one engine.