Runtime

ORANGE runtime execution will be described here in greater detail in the future.

Acceleration structures

Celeritas uses a bounding interval hierarchy to accelerate volume intersections.

Tracking

There are three slightly different algorithms in ORANGE for finding the distance to the next point on a surface on an outer boundary of the volume.

  1. The “simple” algorithm is for volumes that are the intersection of a number of infinite surfaces. All convex volumes are simple, but because quadric surfaces are allowed all simple surfaces do not have to be convex. Intersecting any surface by definition causes the volume to be exited. (A single “blade” of the ATLAS EMEC accordion, a “twisted trapezoid”, has hyperbolic paraboloids on its axial faces. It is simple but not convex. The same is true for a “ring” formed by subtracting two cylinders of the same height.)

  2. The “internal surfaces” algorithm has to track through and discard any surfaces that do not result in the CSG volume changing. Crossing an internal surface is changing from one node inside the CSG tree to another.

  3. Each universe may have a single “background” volume that is selected if a point is not inside any interior volume.

Interface

ORANGE runtime routines are always invoked via the track view, which encapsulates geometry navigation for a single particle track.

class OrangeTrackView

Navigate through an ORANGE geometry on a single thread.

The direction of normal is set to always point out of the volume the track is currently in. On the boundary this is determined by the sense of the track rather than its direction.

Todo:

move_internal with a position should depend on the safety distance, but that check is not yet implemented.