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