https://mooseframework.inl.gov
TraceData.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // Local includes
13 #include "Ray.h"
14 
15 // MOOSE includes
16 #include "MooseError.h"
17 
18 // libMesh includes
19 #include "libmesh/point.h"
20 
25 {
26  TracePointData(const libMesh::Point & point) : _point(point)
27  {
28  mooseAssert(_point != RayTracingCommon::invalid_point, "Invalid point");
29  }
30 
34  std::vector<RayData> _data;
36  std::vector<RayData> _aux_data;
37 };
38 
42 struct TraceData
43 {
44  TraceData(const std::shared_ptr<Ray> & ray)
45  : _ray_id(ray->id()),
46  _intersections(ray->intersections()),
47  _processor_crossings(ray->processorCrossings()),
48  _trajectory_changes(ray->trajectoryChanges()),
49  _last(false)
50  {
51  mooseAssert(_ray_id != Ray::INVALID_RAY_ID, "Invalid Ray ID");
52  addPoint(ray->currentPoint());
53  }
54 
55  void addPoint(const libMesh::Point & point) { _point_data.emplace_back(point); }
56 
57  TracePointData & lastPoint() { return _point_data.back(); }
58 
59  bool stationary() const { return _last && _intersections == 0 && _point_data.size() == 1; }
60 
61  unsigned int numSegments() const
62  {
63  mooseAssert(!_point_data.empty(), "Should not be empty");
64  return _point_data.size() - 1;
65  }
66 
68  const RayID _ray_id;
70  const unsigned long int _intersections;
72  const unsigned int _processor_crossings;
74  const unsigned int _trajectory_changes;
76  bool _last;
78  std::vector<TracePointData> _point_data;
79 };
bool stationary() const
Definition: TraceData.h:59
TracePointData & lastPoint()
Definition: TraceData.h:57
TracePointData(const libMesh::Point &point)
Definition: TraceData.h:26
unsigned long int RayID
Type for a Ray&#39;s ID.
Definition: Ray.h:43
unsigned int numSegments() const
Definition: TraceData.h:61
Data structure that stores information for output of a partial trace of a Ray on a processor...
Definition: TraceData.h:42
const unsigned long int _intersections
The number of intersections thus far.
Definition: TraceData.h:70
std::vector< RayData > _aux_data
The aux data on the Ray after this segment is traced (optional)
Definition: TraceData.h:36
const unsigned int _processor_crossings
Number of processor crossings thus far.
Definition: TraceData.h:72
void addPoint(const libMesh::Point &point)
Definition: TraceData.h:55
const unsigned int _trajectory_changes
Number of trajectory changes thus far.
Definition: TraceData.h:74
std::vector< RayData > _data
The data on the Ray after this segment is traced (optional)
Definition: TraceData.h:34
const RayID _ray_id
The Ray ID.
Definition: TraceData.h:68
Data structure that stores the necessary information for outputting a Ray at a point.
Definition: TraceData.h:24
static const libMesh::Point invalid_point(invalid_distance, invalid_distance, invalid_distance)
Identifier for an invalid point.
bool _last
Whether or not this was the last set of segments for this Ray.
Definition: TraceData.h:76
std::vector< TracePointData > _point_data
The data for each point along the track.
Definition: TraceData.h:78
libMesh::Point _point
The point on _elem this segment leaves from.
Definition: TraceData.h:32
TraceData(const std::shared_ptr< Ray > &ray)
Definition: TraceData.h:44
static const RayID INVALID_RAY_ID
Invalid Ray ID.
Definition: Ray.h:202