Celeritas
0.5.0-86+4a8eea4
|
Type definitions for ORANGE geometry. More...
#include <cstddef>
#include <functional>
#include <type_traits>
#include <utility>
#include "corecel/Macros.hh"
#include "corecel/OpaqueId.hh"
#include "corecel/Types.hh"
#include "corecel/cont/Array.hh"
#include "corecel/math/NumericLimits.hh"
#include "geocel/Types.hh"
Classes | |
struct | celeritas::Daughter |
Data specifying a daughter universe embedded in a volume. More... | |
struct | celeritas::Tolerance< T > |
Tolerance for construction and runtime bumping. More... | |
Namespaces | |
celeritas::logic | |
Volume logic encoding. | |
Typedefs | |
using | celeritas::fast_real_type = float |
Real type used for acceleration. | |
using | celeritas::logic_int = size_type |
Integer type for volume CSG tree representation. | |
template<Axis T> | |
using | celeritas::AxisTag = std::integral_constant< Axis, T > |
Helper class for some template dispatch functions. | |
using | celeritas::BIHNodeId = OpaqueId< struct BIHNode_ > |
Identifier for a BIHNode objects. | |
using | celeritas::DaughterId = OpaqueId< struct Daughter > |
Identifier for a daughter universe. | |
using | celeritas::FaceId = OpaqueId< struct Face_, logic_int > |
Identifier for a face within a volume. | |
using | celeritas::FastBBox = BoundingBox< fast_real_type > |
Bounding box used for acceleration. | |
using | celeritas::FastBBoxId = OpaqueId< FastBBox > |
Identifier for a bounding box used for acceleration. | |
using | celeritas::FastReal3 = Array< float, 3 > |
Identifier for an array of length three of floating point values. | |
using | celeritas::LocalSurfaceId = OpaqueId< struct LocalSurface_ > |
Local identifier for a surface within a universe. | |
using | celeritas::LocalVolumeId = OpaqueId< struct LocalVolume_ > |
Local identifier for a geometry volume within a universe. | |
using | celeritas::OrientedBoundingZoneId = OpaqueId< struct OrientedBoundingZoneRecord > |
Identifier for an OrientedBoundingZone. | |
using | celeritas::SimpleUnitId = OpaqueId< struct SimpleUnitRecord > |
Opaque index for "simple unit" data. | |
using | celeritas::RectArrayId = OpaqueId< struct RectArrayRecord > |
Opaque index for rectilinear array data. | |
using | celeritas::TransformId = OpaqueId< struct TransformRecord > |
Identifier for a translation of a single embedded universe. | |
using | celeritas::UniverseId = OpaqueId< struct Universe_ > |
Identifier for a relocatable set of volumes. | |
Enumerations | |
enum class | celeritas::Sense : bool { inside , outside } |
Whether a position is logically "inside" or "outside" a surface. More... | |
enum class | celeritas::SurfaceType : unsigned char { px , py , pz , cxc , cyc , czc , sc , cx , cy , cz , p , s , kx , ky , kz , sq , gq , inv , size_ } |
Enumeration for mapping surface classes to integers. More... | |
enum class | celeritas::TransformType : unsigned char { no_transformation , translation , transformation , size_ } |
Enumeration for mapping transform implementations to integers. More... | |
enum class | celeritas::UniverseType : unsigned char { simple , rect_array , size_ } |
Enumeration for type-deleted universe storage. More... | |
enum class | celeritas::SignedSense { inside = -1 , on = 0 , outside = 1 } |
Evaluated quadric expression allowing for distinct 'on surface' state. More... | |
enum class | celeritas::SurfaceState : bool { off = false , on = true } |
When evaluating an intersection, whether the point is on the surface. More... | |
enum class | celeritas::BoundaryResult : bool { reentrant = false , exiting = true } |
When crossing a boundary, whether the track exits the current volume. More... | |
enum class | celeritas::Chirality : bool { left , right } |
Chirality of a twirly object (currently only Involute). More... | |
enum | celeritas::logic::OperatorToken : logic_int { lbegin = logic_int(~logic_int(6)) , celeritas::logic::lopen = lbegin , celeritas::logic::lclose , celeritas::logic::ltrue , celeritas::logic::lor , celeritas::logic::land , celeritas::logic::lnot , lend } |
Special logical Evaluator tokens. More... | |
enum class | celeritas::ZOrder : size_type { invalid = 0 , background , media , array , hole , implicit_exterior = size_type(-2) , exterior = size_type(-1) } |
Masking priority. More... | |
Functions | |
CELER_CONSTEXPR_FUNCTION Sense | celeritas::to_sense (bool s) |
Convert a boolean value to a Sense enum. | |
CELER_CONSTEXPR_FUNCTION Sense | celeritas::flip_sense (Sense orig) |
Change the sense across a surface. | |
CELER_CONSTEXPR_FUNCTION SignedSense | celeritas::flip_sense (SignedSense orig) |
Change the sense across a surface. | |
CELER_CONSTEXPR_FUNCTION BoundaryResult | celeritas::flip_boundary (BoundaryResult orig) |
Change whether a boundary crossing is reentrant or exiting. | |
CELER_CONSTEXPR_FUNCTION SignedSense | celeritas::real_to_sense (real_type quadric) |
Evaluate the sense based on the LHS expression of the quadric equation. More... | |
CELER_CONSTEXPR_FUNCTION Sense | celeritas::to_sense (SignedSense s) |
Convert a signed sense to a Sense enum. | |
CELER_CONSTEXPR_FUNCTION SurfaceState | celeritas::to_surface_state (SignedSense s) |
Convert a signed sense to a surface state. | |
CELER_CONSTEXPR_FUNCTION real_type | celeritas::no_intersection () |
Sentinel value indicating "no intersection". More... | |
CELER_CONSTEXPR_FUNCTION UniverseId | celeritas::top_universe_id () |
Return the UniverseId of the highest-level (i.e., root) universe. | |
CELER_CONSTEXPR_FUNCTION bool | celeritas::logic::is_operator_token (logic_int lv) |
Whether an integer is a special logic token. | |
constexpr char | celeritas::to_char (Sense s) |
Get a printable character corresponding to a sense. | |
char const * | celeritas::to_cstring (SurfaceType value) |
Get a string corresponding to a surface type. | |
char const * | celeritas::to_cstring (TransformType value) |
Get a string corresponding to a transform type. | |
char const * | celeritas::to_cstring (SignedSense s) |
Get a string corresponding to a signed sense. | |
char const * | celeritas::to_cstring (SurfaceState s) |
constexpr char | celeritas::logic::to_char (OperatorToken tok) |
char const * | celeritas::to_cstring (ZOrder zo) |
Get a string corresponding to a transform type. | |
char | celeritas::to_char (ZOrder zo) |
Get a printable character corresponding to a z ordering. | |
ZOrder | celeritas::to_zorder (char c) |
Convert a printable character to a z ordering. | |
Type definitions for ORANGE geometry.
|
strong |
When crossing a boundary, whether the track exits the current volume.
This is necessary due to changes in direction on the boundary due to magnetic field and/or multiple scattering. We could extend this later to a flag set of "volume changed" (internal non-reflective crossing), "direction changed" (reflecting/periodic), "position changed" (bump/periodic).
|
strong |
|
strong |
Whether a position is logically "inside" or "outside" a surface.
For a plane, "outside" (true) is the "positive" sense and equivalent to
\[ \vec x \cdot \vec n >= 0 \]
and "inside" is to the left of the plane's normal. Likewise, for a sphere, "inside" is where the dot product of the position and outward normal is negative.
Enumerator | |
---|---|
inside | Quadric expression is less than zero. |
outside | Expression is greater than zero. |
|
strong |
Evaluated quadric expression allowing for distinct 'on surface' state.
For a plane, "outside" is equivalent to
\[ \vec x \cdot \vec n > 0 \]
and "inside" is to the left of the plane's normal (a negative dot product). The exact equality to zero is literally an "edge case" but it can happen with inter-universe coincident surfaces as well as carefully placed particle sources and ray tracing.
As an implementataion detail, the "on" case is currently exact, but future changes might increase the width of "on" to a finite but small range ("fuzziness").
|
strong |
When evaluating an intersection, whether the point is on the surface.
This helps eliminate roundoff errors and other arithmetic issues.
|
strong |
Enumeration for mapping surface classes to integers.
These are ordered roughly by complexity. The storage requirement for corresponding surfaces are:
p.|sc|c.c
,c.
,[ps]|k.
,sq
, andgq
.See orange/surf/SurfaceTypeTraits.hh
for how these map to classes.
Enumerator | |
---|---|
px | Plane aligned with X axis. |
py | Plane aligned with Y axis. |
pz | Plane aligned with Z axis. |
cxc | Cylinder centered on X axis. |
cyc | Cylinder centered on Y axis. |
czc | Cylinder centered on Z axis. |
sc | Sphere centered at the origin. |
cx | Cylinder parallel to X axis. |
cy | Cylinder parallel to Y axis. |
cz | Cylinder parallel to Z axis. |
p | General plane. |
s | |
kx | Cone parallel to X axis. |
ky | Cone parallel to Y axis. |
kz | Cone parallel to Z axis. |
sq | Simple quadric. |
gq | General quadric. |
inv | |
size_ | Sentinel value for number of surface types. |
|
strong |
Enumeration for mapping transform implementations to integers.
Enumerator | |
---|---|
no_transformation | Identity transform. |
translation | Translation only. |
transformation | Translation plus rotation. |
|
strong |
Enumeration for type-deleted universe storage.
See orange/univ/UniverseTypeTraits.hh
for how these map to data and classes.
Enumerator | |
---|---|
size_ | Sentinel value for number of universe types. |
|
strong |
Masking priority.
This is currently not implemented in GPU ORANGE except for the special "background" cell and "exterior".
CELER_CONSTEXPR_FUNCTION real_type celeritas::no_intersection | ( | ) |
Sentinel value indicating "no intersection".
There is probably a better place to put this since it's not a "type".
A value of zero might also work since zero-length steps are prohibited. But we'll need custom min
and min_element
in that case.
CELER_CONSTEXPR_FUNCTION SignedSense celeritas::real_to_sense | ( | real_type | quadric | ) |
Evaluate the sense based on the LHS expression of the quadric equation.
This is an optimized jump-free version of:
as
and compressed into a single line.
NaN values are treated as "outside".