A solar tower plant is a field of movable mirrors, each tracking the sun and reflecting it onto a receiver. How much energy actually lands on that receiver depends on where every mirror sits, how it is aimed, and how much light is lost on the way. Answering that question is what an optical ray tracer does.
The difficulty is that the answer is never needed once. Designing a field means asking it thousands of times, for thousands of candidate layouts, across a full year of sun positions. A ray tracer that is accurate but slow makes layout optimisation impossible. One that is fast but crude optimises the wrong field. Getting both at once is what this page is about. What we then do with that speed is the optimizer.
For a patch of mirror surface, the power reaching the receiver is the incoming solar irradiance reduced by a chain of efficiency factors:
The first four are geometry and bookkeeping. The last, ηint, is where the hard part lives, and where ray tracers differ from one another.
A reflected ray never goes exactly where geometry says it should, for three independent reasons:
Each is modelled as a Gaussian distribution. Combined, they give a single convoluted error cone around the ideal reflected ray. The width of that cone decides how much of the beam lands on the receiver instead of spilling past it.

Resolving that error cone is the whole game, and there are three ways to do it. They differ enormously in cost.

Draw one random ray from the error distribution and trace it. Accuracy improves with the square root of the ray count, so halving the noise costs four times the work.

Stop sampling. Describe the error as a bivariate Gaussian and integrate it over the receiver directly. One evaluation replaces a cloud of random rays.

Integrate across a whole mirror cell at once rather than a single point on it. This is the method introduced in our 2023 paper, and it is what makes the ray counts collapse.


Speeding up a single simulation is only half the saving. The other half is simulating fewer moments. Nobody runs all 8 760 hours of a year for every candidate layout, so annual simulation picks a few dozen representative ones. The common choice is every hour of the 21st of each month, which needs around 72 points.
We pick them somewhere else entirely. Rather than working in time, the plant efficiency is transformed into a celestial coordinate system. Seen in azimuth and elevation, a year traces an awkward dome that is hard to cover evenly. Seen in declination and hour angle, the same year fills a clean trapezoid, a shape you can map onto a unit square and cover with a small interpolation grid.


Around 40 simulation points then reach 99.9% accuracy on both PS10 and Gemasolar. That is roughly three times faster than the standard approach, before the ray tracer itself has done anything clever.
Before a ray is traced, you have to know which mirrors could get in its way. Candidates are narrowed with a bounding sphere test, then each heliostat facet is projected towards the sun and tested against the axis-aligned bounding boxes of the survivors. Those boxes live in an AABB tree, so search cost grows far more slowly than the field does. That is what keeps an 8 600-heliostat field tractable.

Heliostats support on-axis and off-axis canting using a parabolic function, and triangular facets. Three receiver types are modelled, each with its own geometry and aperture behaviour.

SunFlower writes any project out as a SolTrace or Tonatiuh project, so you can reproduce our results in an independent Monte Carlo ray tracer on your own geometry. Output is an hourly efficiency breakdown: cosine, shading, blocking, soiling, reflectivity, atmospheric attenuation, spillage and total.
The equation, the error diagram, the method illustrations and the results figures are taken from the first paper. The annual sun path figures come from the second.