25#include "libmesh/mesh.h"
26#include "libmesh/elem_side_builder.h"
55 friend class Parallel::Packing<
std::shared_ptr<Ray>>;
56 friend void
dataLoad(std::istream & stream, std::shared_ptr<Ray> & ray, void * context);
86 virtual void execute()
override;
106 const Elem * elem,
const Point & start,
const Point & end,
const Real length,
THREAD_ID tid);
195 return std::chrono::duration<Real, std::nano>(
_execution_time).count();
238 std::vector<RayDataIndex>
registerRayData(
const std::vector<std::string> & names);
254 std::vector<RayDataIndex>
getRayDataIndices(
const std::vector<std::string> & names,
255 const bool graceful =
false)
const;
267 std::vector<std::string>
getRayDataNames(
const std::vector<RayDataIndex> & indices)
const;
316 const bool graceful =
false)
const;
353 template <
typename T>
359 .condition<AttribSystem>(
"RayKernel")
375 template <
typename T>
381 .condition<AttribSystem>(
"RayBoundaryCondition")
383 .condition<AttribThread>(tid)
389 template <
typename T>
395 .condition<AttribSystem>(
"RayBoundaryCondition")
406 virtual void getRayBCs(std::vector<RayBoundaryConditionBase *> & result,
407 const std::vector<TraceRayBndElement> & bnd_elems,
488 const AcquireMoveDuringTraceKey &);
490 const std::size_t data_size,
491 const std::size_t aux_data_size,
509 const AcquireMoveDuringTraceKey &);
525 virtual const Point &
533 mooseError(
"Unimplemented element normal caching in ",
type(),
"::getElemNormals()");
607 virtual void onCompleteRay(
const std::shared_ptr<Ray> & ray);
617 void verifyUniqueRayIDs(
const std::vector<std::shared_ptr<Ray>>::const_iterator begin,
618 const std::vector<std::shared_ptr<Ray>>::const_iterator end,
620 const std::string & error_suffix)
const;
630 void verifyUniqueRays(
const std::vector<std::shared_ptr<Ray>>::const_iterator begin,
631 const std::vector<std::shared_ptr<Ray>>::const_iterator end,
632 const std::string & error_suffix);
666 const unsigned short side,
667 const Point & direction,
751 std::vector<Point> & points,
752 std::vector<Real> & weights)
const;
761 const std::vector<std::shared_ptr<Ray>> &
rayBank()
const;
863 const Parallel::Communicator &
_comm;
995 const bool graceful)
const;
1090 std::vector<std::unordered_map<std::pair<const Elem *, unsigned short>, Point>>
boundary_id_type BoundaryID
unsigned int RayDataIndex
Type for the index into the data and aux data on a Ray.
unsigned long int RayID
Type for a Ray's ID.
float RayData
Type for a Ray's data.
Attribute for the RayTracingStudy a RayTracingObject is associated with.
Helper for setting up a contiguous index for a given range of elements that are known by this process...
libMesh::dof_id_type getIndex(const libMesh::Elem *elem) const
Get the index associated with the element elem.
TheWarehouse & theWarehouse() const
const InputParameters & parameters() const
const std::string & type() const
const std::string & name() const
void mooseError(Args &&... args) const
Base class for the RayBC syntax.
Base object for the RayKernel syntax.
Base class for a MooseObject used in ray tracing.
Key that is used for restricting access to moveRayToBufferDuringTrace() and acquireRayDuringTrace().
AcquireMoveDuringTraceKey()
AcquireMoveDuringTraceKey(const AcquireMoveDuringTraceKey &)
Key that is used for restricting access to acquireRayInternal().
AcquireRayInternalKey(const AcquireRayInternalKey &)
friend void dataLoad(std::istream &stream, std::shared_ptr< Ray > &ray, void *context)
Base class for Ray tracing studies that will generate Rays and then propagate all of them to terminat...
unsigned int _ending_max_intersections
Max number of intersections for Rays that finished on this processor.
bool _has_same_level_active_elems
Whether or not the mesh has active elements of the same level.
void moveRayToBufferDuringTrace(std::shared_ptr< Ray > &ray, const THREAD_ID tid, const AcquireMoveDuringTraceKey &)
INTERNAL method for moving a Ray into the buffer during tracing.
MeshBase & meshBase() const
Access to the libMesh MeshBase.
const bool _data_on_cache_traces
Whether or not to store the Ray data on the cache traces.
virtual void finalize() override
bool sideIsNonPlanar(const Elem *elem, const unsigned short s) const
Whether or not the side \s on elem elem is non-planar.
void traceableMeshChecks()
Check for if all of the element types in the mesh are supported by ray tracing.
std::vector< TheWarehouse::QueryCache< AttribSubdomains > > _threaded_cache_ray_kernel
Threaded cached subdomain query for RayKernelBase objects pertaining to this study.
std::shared_ptr< Ray > acquireCopiedRay(const Ray &ray)
Acquires a Ray that that is copied from another Ray within generateRays().
std::vector< TheWarehouse::QueryCache< AttribBoundaries > > _threaded_cache_ray_bc
Threaded cached boundary query for RayBC objects pertaining to this study.
const bool _verify_rays
Whether or not to verify if Rays have valid information before being traced.
void verifyDependenciesExist(const std::vector< RayTracingObject * > &rtos)
Verifies that the dependencies exist for a set of RayTracingObjects.
const bool _use_internal_sidesets
Whether or not to use the internal sidesets in ray tracing.
const bool _ray_dependent_subdomain_setup
Whether or not subdomain setup is dependent on the Ray.
const Real _ray_max_distance
Max distance a Ray can travel before being killed (can change)
std::vector< RayTracingObject * > getRayTracingObjects()
Gets all of the currently active RayTracingObjects.
std::unordered_map< std::string, RayDataIndex > _ray_aux_data_map
The map from Ray aux data names to index.
RayDataIndex registerRayAuxData(const std::string &name)
Register a value to be filled in the aux data on a Ray with a given name.
bool warnNonPlanar() const
Whether or not to produce a warning when interacting with a non-planar mesh.
unsigned int endingMaxIntersections() const
Max number of intersections for Rays that finished on this processor.
const std::vector< RayKernelBase * > & currentRayKernels(THREAD_ID tid) const
Gets the current RayKernels for a thread, which are set in segmentSubdomainSetup()
std::vector< unsigned long long int > _local_trace_ray_results
Cumulative results on this processor from the threaded TraceRay objects.
bool sideIsIncoming(const Elem *const elem, const unsigned short side, const Point &direction, const THREAD_ID tid)
Whether or not side is incoming on element elem in direction direction.
void resetUniqueRayIDs()
Resets the generation of unique RayIDs via generateUniqueRayID() to the beginning of the range.
Real _ending_distance
Total distance traveled by Rays that end on this processor.
std::shared_ptr< Ray > acquireRegisteredRay(const std::string &name)
Acquires a Ray with a given name within generateRays().
const bool _tolerate_failure
Whether or not to tolerate a Ray Tracing failure.
std::chrono::steady_clock::duration _generation_time
Threads::spin_mutex _spin_mutex
Spin mutex object for locks.
std::vector< std::string > _ray_aux_data_names
The names for each Ray aux data entry.
void getRayKernels(std::vector< RayKernelBase * > &result, SubdomainID id, THREAD_ID tid)
Fills the active RayKernels associated with this study and a block into result.
void verifyUniqueRays(const std::vector< std::shared_ptr< Ray > >::const_iterator begin, const std::vector< std::shared_ptr< Ray > >::const_iterator end, const std::string &error_suffix)
Verifies that the Rays in the given range are unique.
std::size_t rayDataSize() const
The registered size of values in the Ray data.
RayDataIndex registerRayData(const std::string &name)
Register a value to be filled in the data on a Ray with a given name.
TraceData & initThreadedCachedTrace(const std::shared_ptr< Ray > &ray, THREAD_ID tid)
Initialize a Ray in the threaded cached trace map to be filled with segments.
void getRayBCs(std::vector< T * > &result, THREAD_ID tid)
Fills the active RayBCs associated with this study into result.
Real executionTimeNano()
Duration for execute() in nanoseconds.
std::vector< std::vector< std::vector< BoundaryID > > > _internal_sidesets_map
Internal sideset data, if internal sidesets exist (indexed with getLocalElemIndex())
std::vector< std::shared_ptr< Ray > > _ray_bank
Cumulative Ray bank - stored only when _bank_rays_on_completion.
void nonPlanarSideSetup()
Sets up the caching of whether or not each element side is non-planar, which is stored in _non_planar...
std::chrono::steady_clock::duration _propagation_time
Real generationTime() const
Duration for creation of all Rays in seconds.
unsigned long long int totalProcessorCrossings() const
Total number of processor crossings.
virtual void initialSetup() override
bool sameLevelActiveElems() const
Determine whether or not the mesh currently has active elements that are all the same level.
virtual const Point * getElemNormals(const Elem *, const THREAD_ID)
Gets the outward normals for a given element.
const std::vector< TraceData > & getCachedTraces() const
Get the cached trace data structure.
const libMesh::Elem & elemSide(const libMesh::Elem &elem, const unsigned int s, const THREAD_ID tid=0)
Get an element's side pointer without excessive memory allocation.
virtual void initialize() override
std::set< BoundaryID > _internal_sidesets
The BoundaryIDs on the local mesh that have internal RayBCs.
bool _has_non_planar_sides
Whether or not the local mesh has elements with non-planar sides.
unsigned int _ending_max_processor_crossings
Max number of total processor crossings for Rays that finished on this processor.
std::vector< std::unique_ptr< libMesh::QBase > > _threaded_q_face
Face quadrature used for computing face normals for each thread.
unsigned int maxTrajectoryChanges() const
Max number of trajectory changes for a Ray.
const bool _use_ray_registration
Whether or not to use Ray registration.
const bool _segments_on_cache_traces
Whether or not to cache individual element segments when caching.
const std::vector< std::string > & rayAuxDataNames() const
The Ray aux data names.
static InputParameters validParams()
bool currentlyGenerating() const
Whether or not the study is generating.
MooseMesh & _mesh
The Mesh.
std::shared_ptr< Ray > getBankedRay(const RayID ray_id) const
Gets the Ray with the ID ray_id from the Ray bank.
const std::vector< std::string > & rayDataNames() const
The Ray data names.
void subdomainHMaxSetup()
Caches the hmax for all elements in each subdomain.
void localElemIndexSetup()
Sets up the _elem_index_helper, which is used for obtaining a contiguous index for all elements that ...
RayID registerRay(const std::string &name)
Registers a Ray with a given name.
std::vector< std::string > _ray_data_names
The names for each Ray data entry.
unsigned long long int _total_intersections
Total number of Ray/element intersections.
void getRayBCs(std::vector< T * > &result, const std::vector< BoundaryID > &ids, THREAD_ID tid)
Fills the active RayBCs associated with this study and boundaries result.
std::shared_ptr< Ray > acquireRayDuringTrace(const THREAD_ID tid, const AcquireMoveDuringTraceKey &)
INTERNAL methods for acquiring a Ray during a trace in RayKernels and RayBCs.
Real _total_distance
Total distance traveled by all Rays.
unsigned int endingMaxProcessorCrossings() const
Max number of total processor crossings for Rays that finished on this processor.
unsigned long long int _ending_processor_crossings
Total number of processor crossings for Rays that finished on this processor.
std::vector< std::unordered_map< std::pair< const Elem *, unsigned short >, Point > > _threaded_cached_normals
Threaded cache for side normals that have been computed already during tracing.
RayID _replicated_next_ray_id
Storage for the next available replicated RayID, obtained via generateReplicatedRayID()
void resetReplicatedRayIDs()
Resets the generation of unique replicated RayIDs accessed via generateReplicatedRayID().
const std::string & getRayAuxDataName(const RayDataIndex index) const
Gets the name associated with a registered value in the Ray aux data.
const std::string & getRayDataNameInternal(const RayDataIndex index, const bool aux) const
Internal method for getting the name of Ray data or Ray aux data.
virtual void segmentSubdomainSetup(const SubdomainID subdomain, const THREAD_ID tid, const RayID ray_id)
Setup for on subdomain change or subdomain AND ray change during ray tracing.
virtual void preExecuteStudy()
Entry point before study execution.
RayData getBankedRayData(const RayID ray_id, const RayDataIndex index) const
Gets the data value for a banked ray with a given ID.
const bool _verify_trace_intersections
Whether or not to verify the trace intersections in devel and dbg modes.
Real totalDistance() const
Total distance traveled by all Rays.
const ParallelRayStudy & parallelRayStudy() const
virtual void residualSetup() override
std::vector< TraceData > _cached_traces
Storage for the cached traces.
unsigned int _max_trajectory_changes
Max number of trajectory changes for a single Ray.
virtual void reinitSegment(const Elem *elem, const Point &start, const Point &end, const Real length, THREAD_ID tid)
Reinitialize objects for a Ray segment for ray tracing.
virtual void generateRays()=0
Subclasses should override this to determine how to generate Rays.
std::vector< RayDataIndex > getRayAuxDataIndices(const std::vector< std::string > &names, const bool graceful=false) const
Gets the indices associated with registered values in the Ray aux data.
const bool _bank_rays_on_completion
Whether or not to bank rays on completion.
std::vector< std::vector< RayKernelBase * > > _threaded_current_ray_kernels
The current RayKernel objects for each thread.
unsigned long long int endingProcessorCrossings() const
Total number of processor crossings for Rays that finished on this processor.
std::vector< RayID > _threaded_next_ray_id
Storage for the next available unique RayID, obtained via generateUniqueRayID()
const std::unique_ptr< ParallelRayStudy > _parallel_ray_study
The study that used is to actually execute (trace) the Rays.
Real executionTime()
Duration for execute() in seconds.
Real computeTotalVolume()
Helper function for computing the total domain volume.
std::unordered_map< std::string, RayID > & _registered_ray_map
Map from registered Ray name to ID.
Real _domain_max_length
An inflated max distance for the domain.
RayDataIndex registerRayDataInternal(const std::string &name, const bool aux)
Internal method for registering Ray data or Ray aux data with a name.
virtual void postOnSegment(const THREAD_ID tid, const std::shared_ptr< Ray > &ray)
Called at the end of a Ray segment.
libMesh::BoundingBox _loose_b_box
Loose nodal bounding box for the domain.
void internalSidesetSetup()
Does the setup for internal sidesets.
virtual void buildSegmentQuadrature(const Point &start, const Point &end, const Real length, std::vector< Point > &points, std::vector< Real > &weights) const
Builds quadrature points for a given segment using the _segment_qrule.
unsigned long long int _ending_intersections
Total number of Ray/element intersections for Rays that finished on this processor.
bool _always_cache_traces
Whether or not to cache traces on every trace execution.
std::shared_ptr< Ray > acquireReplicatedRay()
Acquire a Ray from the pool of Rays within generateRays() in a replicated fashion.
virtual void execute() override
Executes the study (generates and propagates Rays)
Real endingDistance() const
Total amount of distance traveled by the rays that end on this processor.
virtual void postExecuteStudy()
Entry point after study execution.
unsigned int _max_intersections
Max number of intersections for a single Ray.
bool useRayRegistration() const
Whether or not ray registration is being used.
bool isRectangularDomain() const
Whether or not the domain is rectangular (if it is prefectly encompassed by its bounding box)
const bool _aux_data_on_cache_traces
Whether or not to store the Ray aux data on the cache traces.
std::shared_ptr< Ray > acquireUnsizedRay()
Acquire a Ray from the pool of Rays within generateRays(), without resizing the data (sizes the data ...
bool segmentsOnCacheTraces() const
Whether or not to cache individual element segments when _cache_traces = true.
void registeredRaySetup()
Sets up the maps from Ray to associated RayTracingObjects if _use_ray_registration.
RayDataIndex getRayDataIndex(const std::string &name, const bool graceful=false) const
Gets the index associated with a registered value in the Ray data.
bool bankRaysOnCompletion() const
Whether or not to bank Rays on completion.
const bool _ray_kernel_coverage_check
Whether or not to perform coverage checks on RayKernels.
Real domainMaxLength() const
Get the inflated maximum length across the domain.
const BoundingBox & looseBoundingBox() const
Get the loose nodal bounding box for the domain.
Real propagationTime() const
Duration for creation of all Rays in seconds.
std::unique_ptr< libMesh::QBase > _segment_qrule
Quadrature rule for laying points across a 1D ray segment.
virtual void jacobianSetup() override
TraceRay & traceRay(const THREAD_ID tid)
Gets the threaded TraceRay object for tid.
std::vector< std::string > getRayAuxDataNames(const std::vector< RayDataIndex > &indices) const
Gets the names associated with registered values in the Ray aux data.
void moveRayToBuffer(std::shared_ptr< Ray > &ray)
Moves a ray to the buffer to be traced during generateRays().
const std::string & registeredRayName(const RayID ray_id) const
Gets the name of a registered ray.
std::vector< RayKernelBase * > & currentRayKernelsWrite(THREAD_ID tid)
Gets the writeable current RayKernels for a thread.
void reserveRayBuffer(const std::size_t size)
Reserve size entires in the Ray buffer.
void verifyUniqueRayIDs(const std::vector< std::shared_ptr< Ray > >::const_iterator begin, const std::vector< std::shared_ptr< Ray > >::const_iterator end, const bool global, const std::string &error_suffix) const
Verifies that the Rays in the given range have unique Ray IDs.
bool hasRayAuxData() const
Whether or not any Ray aux data are registered.
std::unordered_map< SubdomainID, Real > _subdomain_hmax
The cached hmax for all elements in a subdomain.
bool verifyRays() const
Whether or not to verify if Rays have valid information before being traced.
RayID registeredRayID(const std::string &name, const bool graceful=false) const
Gets the ID of a registered ray.
virtual const Point & getSideNormal(const Elem *elem, const unsigned short side, const THREAD_ID tid)
Get the outward normal for a given element side.
virtual void meshChanged() override
Real _total_volume
The total volume of the domain.
unsigned long long int _total_processor_crossings
Total number of processor crossings.
Real rayMaxDistance() const
Max distance any Ray can travel.
std::vector< std::vector< TraceData > > _threaded_cached_traces
The threaded storage for cached traces.
bool rayDependentSubdomainSetup() const
Whether or not to use Ray dependent subdomain setup.
std::vector< std::shared_ptr< TraceRay > > _threaded_trace_ray
The TraceRay objects for each thread (they do the physical tracing)
RayID generateReplicatedRayID()
Generates a Ray ID that is replicated across all processors.
bool auxDataOnCacheTraces() const
Whether or not to store the Ray aux data on the cached Ray traces.
bool hasRayData() const
Whether or not any Ray data are registered.
bool hasSameLevelActiveElems() const
Whether or not the mesh has active elements of the same level.
ElemIndexHelper _elem_index_helper
Helper for defining a local contiguous index for each element.
unsigned long long int endingIntersections() const
Total number of Ray/element intersections for Rays that finished on this processor.
std::shared_ptr< Ray > acquireRay()
User APIs for constructing Rays within the RayTracingStudy.
Real totalVolume() const
Get the current total volume of the domain.
unsigned int maxIntersections() const
Max number of intersections for a Ray.
const std::string & getRayDataName(const RayDataIndex index) const
Gets the name associated with a registered value in the Ray data.
std::chrono::steady_clock::duration _execution_time
unsigned int maxProcessorCrossings() const
Max number of processor crossings for all Rays.
std::size_t rayAuxDataSize() const
The registered size of values in the Ray aux data.
virtual void timestepSetup() override
ParallelStudy< std::shared_ptr< Ray >, Ray > * parallelStudy()
The underlying parallel study: used for the context for calling the packed range routines.
RayData getBankedRayAuxData(const RayID ray_id, const RayDataIndex index) const
Gets the data value for a banked ray with a given ID.
virtual void preTrace(const THREAD_ID, const std::shared_ptr< Ray > &)
Called at the beginning of a trace for a ray.
std::unordered_map< std::string, RayDataIndex > _ray_data_map
The map from Ray data names to index.
const std::vector< std::shared_ptr< Ray > > & rayBank() const
Get the Ray bank.
std::vector< std::vector< std::set< const RayTracingObject * > > > _threaded_ray_object_registration
Threaded storage for all of the RayTracingObjects associated with a single Ray.
virtual RayID generateUniqueRayID(const THREAD_ID tid)
Generates a unique RayID to be used for a Ray.
std::vector< std::vector< unsigned short > > _non_planar_sides
Non planar side data, which is for quick checking if an elem side is non-planar We use unsigned short...
void coverageChecks()
Perform coverage checks (coverage of RayMaterials and RayKernels, if enabled)
const std::set< BoundaryID > & getInternalSidesets() const
Gets the internal sidesets (that have RayBCs) within the local domain.
virtual bool shouldCacheTrace(const std::shared_ptr< Ray > &) const
Virtual that allows for selection in if a Ray should be cached or not (only used when _cache_traces).
Real subdomainHmax(const SubdomainID subdomain_id) const
Get the cached hmax for all elements in a subdomain.
unsigned int _ending_max_trajectory_changes
Max number of trajectory changes for Rays that finished on this processor.
void getRayKernels(std::vector< T * > &result, THREAD_ID tid)
Fills the active RayKernels associated with this study into result.
RayDataIndex getRayDataIndexInternal(const std::string &name, const bool aux, const bool graceful) const
Internal method for getting the index of Ray data or Ray aux data.
bool hasInternalSidesets() const
Whether or not the local mesh has internal sidesets that have RayBCs on them.
RayDataIndex getRayAuxDataIndex(const std::string &name, const bool graceful=false) const
Gets the index associated with a registered value in the Ray aux data.
std::shared_ptr< Ray > acquireRayInternal(const RayID id, const std::size_t data_size, const std::size_t aux_data_size, const bool reset, const AcquireRayInternalKey &)
bool verifyTraceIntersections() const
Whether or not trace verification is enabled in devel/dbg modes.
libMesh::BoundingBox _b_box
Nodal bounding box for the domain.
unsigned long long int localTraceRayResult(const int result) const
unsigned long long int totalIntersections() const
Total number of Ray/element intersections.
void getRayBCs(std::vector< RayBoundaryConditionBase * > &result, BoundaryID id, THREAD_ID tid)
Fills the active RayBCs associated with this study and a boundary into result.
std::vector< libMesh::ElemSideBuilder > _threaded_elem_side_builders
Threaded helpers for building element sides without extraneous allocation.
std::vector< RayDataIndex > getRayDataIndices(const std::vector< std::string > &names, const bool graceful=false) const
Gets the indices associated with registered values in the Ray data.
std::vector< RayDataIndex > getRayDataIndicesInternal(const std::vector< std::string > &names, const bool aux, const bool graceful) const
Internal method for getting the indicies of Ray data or Ray aux data.
void moveRaysToBuffer(std::vector< std::shared_ptr< Ray > > &rays)
Moves rays to the buffer to be traced during generateRays().
void dependencyChecks()
Perform checks to see if the listed dependencies in the RayTracingObjects exist.
const processor_id_type _pid
The rank of this processor (this actually takes time to lookup - so just do it once)
const TraceRay & traceRay(const THREAD_ID tid) const
virtual void onCompleteRay(const std::shared_ptr< Ray > &ray)
Entry point for acting on a ray when it is completed (shouldContinue() == false)
std::vector< std::string > getRayDataNames(const std::vector< RayDataIndex > &indices) const
Gets the names associated with registered values in the Ray data.
std::vector< std::unique_ptr< libMesh::FEBase > > _threaded_fe_face
Face FE used for computing face normals for each thread.
const BoundingBox & boundingBox() const
Get the nodal bounding box for the domain.
bool _called_initial_setup
Whether or not we've called initial setup - used to stop from late registration.
const Parallel::Communicator & _comm
The Communicator.
RayData getBankedRayDataInternal(const RayID ray_id, const RayDataIndex index, const bool aux) const
Internal method for getting the value (replicated across all processors) in a Ray's data or aux data ...
std::vector< std::string > & _reverse_registered_ray_map
Map from registered Ray ID to name.
void periodicBoundaryChecks()
Check for overlapping PeriodicRayBC boundaries and check for cases in which ghosting may not be suffi...
bool tolerateFailure() const
Whether or not to tolerate failure.
bool hasRayKernels(const THREAD_ID tid)
Whether or not there are currently any active RayKernel objects.
void executeStudy()
Method for executing the study so that it can be called out of the standard UO execute()
unsigned int _max_processor_crossings
Max number of processor crossings for all Rays.
std::chrono::steady_clock::time_point _execution_start_time
Timing.
std::vector< std::size_t > _num_cached
Number of currently cached objects for Jacobian/residual for each thread.
bool currentlyPropagating() const
Whether or not the study is propagating (tracing Rays)
void zeroAuxVariables()
Zero the AuxVariables that the registered AuxRayKernels contribute to.
const bool _warn_non_planar
Whether not to warn if non-planar faces are found.
bool dataOnCacheTraces() const
Whether or not to store the Ray data on the cached Ray traces.
Class that is used as a parameter to the public constructors/reset methods.
Basic datastructure for a ray that will traverse the mesh.
Traces Rays through the mesh on a single processor.
FEProblemBase & _fe_problem
Data structure that stores information for output of a partial trace of a Ray on a processor.