Viskores  1.0
Particle.h
Go to the documentation of this file.
1 //============================================================================
2 // The contents of this file are covered by the Viskores license. See
3 // LICENSE.txt for details.
4 //
5 // By contributing to this file, all contributors agree to the Developer
6 // Certificate of Origin Version 1.1 (DCO 1.1) as stated in DCO.txt.
7 //============================================================================
8 
9 //============================================================================
10 // Copyright (c) Kitware, Inc.
11 // All rights reserved.
12 // See LICENSE.txt for details.
13 //
14 // This software is distributed WITHOUT ANY WARRANTY; without even
15 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 // PURPOSE. See the above copyright notice for more information.
17 //============================================================================
18 #ifndef viskores_Particle_h
19 #define viskores_Particle_h
20 
21 #include <ostream>
22 #include <viskores/Bitset.h>
23 #include <viskores/VecVariable.h>
26 
27 namespace viskores
28 {
29 
30 //Bit field describing the status:
31 class ParticleStatus : public viskores::Bitset<viskores::UInt8>
32 {
33 public:
35  {
36  this->SetOk();
37  this->ClearTerminate();
38  }
39 
40  VISKORES_EXEC_CONT void SetOk() { this->set(this->SUCCESS_BIT); }
41  VISKORES_EXEC_CONT bool CheckOk() const { return this->test(this->SUCCESS_BIT); }
42 
43  VISKORES_EXEC_CONT void SetFail() { this->reset(this->SUCCESS_BIT); }
44  VISKORES_EXEC_CONT bool CheckFail() const { return !this->test(this->SUCCESS_BIT); }
45 
48  VISKORES_EXEC_CONT bool CheckTerminate() const { return this->test(this->TERMINATE_BIT); }
49 
53  {
54  return this->test(this->SPATIAL_BOUNDS_BIT);
55  }
56 
60  {
61  return this->test(this->TEMPORAL_BOUNDS_BIT);
62  }
63 
66  VISKORES_EXEC_CONT bool CheckTookAnySteps() const { return this->test(this->TOOK_ANY_STEPS_BIT); }
67 
70  VISKORES_EXEC_CONT bool CheckInGhostCell() const { return this->test(this->IN_GHOST_CELL_BIT); }
71 
74  VISKORES_EXEC_CONT bool CheckZeroVelocity() const { return this->test(this->ZERO_VELOCITY); }
75 
77  {
78  return this->CheckOk() && !this->CheckTerminate() && !this->CheckSpatialBounds() &&
79  !this->CheckTemporalBounds() && !this->CheckInGhostCell() && !this->CheckZeroVelocity();
80  }
81 
82 private:
83  static constexpr viskores::Id SUCCESS_BIT = 0;
84  static constexpr viskores::Id TERMINATE_BIT = 1;
85  static constexpr viskores::Id SPATIAL_BOUNDS_BIT = 2;
86  static constexpr viskores::Id TEMPORAL_BOUNDS_BIT = 3;
87  static constexpr viskores::Id TOOK_ANY_STEPS_BIT = 4;
88  static constexpr viskores::Id IN_GHOST_CELL_BIT = 5;
89  static constexpr viskores::Id ZERO_VELOCITY = 6;
90 };
91 
92 inline VISKORES_CONT std::ostream& operator<<(std::ostream& s,
93  const viskores::ParticleStatus& status)
94 {
95  s << "[ok= " << status.CheckOk();
96  s << " term= " << status.CheckTerminate();
97  s << " spat= " << status.CheckSpatialBounds();
98  s << " temp= " << status.CheckTemporalBounds();
99  s << " ghst= " << status.CheckInGhostCell();
100  s << " zvel= " << status.CheckZeroVelocity();
101  s << "]";
102  return s;
103 }
104 
105 class Particle
106 {
107 public:
109  Particle() {}
110 
113  const viskores::Id& id,
114  const viskores::Id& numSteps = 0,
116  const viskores::FloatDefault& time = 0)
117  : Position(p)
118  , ID(id)
119  , NumSteps(numSteps)
120  , Status(status)
121  , Time(time)
122  {
123  }
124 
127  : Position(p.Position)
128  , ID(p.ID)
129  , NumSteps(p.NumSteps)
130  , Status(p.Status)
131  , Time(p.Time)
132  {
133  }
134 
136 
138  {
139  // This must not be defaulted, since defaulted virtual destructors are
140  // troublesome with CUDA __host__ __device__ markup.
141  }
142 
143  VISKORES_EXEC_CONT const viskores::Vec3f& GetPosition() const { return this->Position; }
145  {
146  this->Position = position;
147  }
148 
149  VISKORES_EXEC_CONT viskores::Id GetID() const { return this->ID; }
150  VISKORES_EXEC_CONT void SetID(viskores::Id id) { this->ID = id; }
151 
153  VISKORES_EXEC_CONT void SetNumberOfSteps(viskores::Id numSteps) { this->NumSteps = numSteps; }
154 
158 
161 
164  const viskores::FloatDefault& viskoresNotUsed(length)) const
165  {
166  // Velocity is evaluated from the Velocity field
167  // and is not influenced by the particle
168  VISKORES_ASSERT(vectors.GetNumberOfComponents() > 0);
169  return vectors[0];
170  }
171 
174  {
175  (void)deltaT; // unused for a general particle advection case
176  return this->Position;
177  }
178 
179  inline VISKORES_CONT friend std::ostream& operator<<(std::ostream& out,
180  const viskores::Particle& p)
181  {
182  out << "v(" << p.Time << ") = " << p.Position << ", ID: " << p.ID
183  << ", NumSteps: " << p.NumSteps << ", Status: " << p.Status;
184  return out;
185  }
186 
187 private:
193 
194 public:
195  static size_t Sizeof()
196  {
197  constexpr std::size_t sz = sizeof(viskores::Vec3f) // Pos
198  + sizeof(viskores::Id) // ID
199  + sizeof(viskores::Id) // NumSteps
200  + sizeof(viskores::UInt8) // Status
201  + sizeof(viskores::FloatDefault); // Time
202 
203  return sz;
204  }
205 };
206 
208 {
209 public:
212 
215  const viskores::Id& id,
216  const viskores::Float64& mass,
217  const viskores::Float64& charge,
218  const viskores::Float64& weighting,
219  const viskores::Vec3f& momentum,
220  const viskores::Id& numSteps = 0,
222  const viskores::FloatDefault& time = 0)
223  : Position(position)
224  , ID(id)
225  , NumSteps(numSteps)
226  , Status(status)
227  , Time(time)
228  , Mass(mass)
229  , Charge(charge)
230  , Weighting(weighting)
231  , Momentum(momentum)
232  {
233  }
234 
237  : Position(other.Position)
238  , ID(other.ID)
239  , NumSteps(other.NumSteps)
240  , Status(other.Status)
241  , Time(other.Time)
242  , Mass(other.Mass)
243  , Charge(other.Charge)
244  , Weighting(other.Weighting)
245  , Momentum(other.Momentum)
246  {
247  }
248 
250 
252  ~ChargedParticle() noexcept
253  {
254  // This must not be defaulted, since defaulted virtual destructors are
255  // troublesome with CUDA __host__ __device__ markup.
256  }
257 
258  VISKORES_EXEC_CONT const viskores::Vec3f& GetPosition() const { return this->Position; }
260  {
261  this->Position = position;
262  }
263 
264  VISKORES_EXEC_CONT viskores::Id GetID() const { return this->ID; }
265  VISKORES_EXEC_CONT void SetID(viskores::Id id) { this->ID = id; }
266 
268  VISKORES_EXEC_CONT void SetNumberOfSteps(viskores::Id numSteps) { this->NumSteps = numSteps; }
269 
273 
276 
278  viskores::Float64 Gamma(const viskores::Vec3f& momentum, bool reciprocal = false) const
279  {
281  const viskores::Float64 fMom2 = viskores::MagnitudeSquared(momentum);
282  const viskores::Float64 m2 = this->Mass * this->Mass;
283  const viskores::Float64 m2_c2_reci = 1.0 / (m2 * c2);
284  if (reciprocal)
285  return viskores::RSqrt(1.0 + fMom2 * m2_c2_reci);
286  else
287  return viskores::Sqrt(1.0 + fMom2 * m2_c2_reci);
288  }
289 
292  const viskores::FloatDefault& length) const
293  {
294  VISKORES_ASSERT(vectors.GetNumberOfComponents() == 2);
295 
296  // Suppress unused warning
297  (void)this->Weighting;
298 
299  viskores::Vec3f eField = vectors[0];
300  viskores::Vec3f bField = vectors[1];
301 
302  const viskores::Float64 QoM = this->Charge / this->Mass;
303  const viskores::Vec3f mom_minus = this->Momentum + (0.5 * this->Charge * eField * length);
304 
305  // Get reciprocal of Gamma
306  viskores::Vec3f gamma_reci = static_cast<viskores::FloatDefault>(this->Gamma(mom_minus, true));
307  const viskores::Vec3f t = 0.5 * QoM * length * bField * gamma_reci;
308  const viskores::Vec3f s = 2.0f * t * (1.0 / (1.0 + viskores::Magnitude(t)));
309  const viskores::Vec3f mom_prime = mom_minus + viskores::Cross(mom_minus, t);
310  const viskores::Vec3f mom_plus = mom_minus + viskores::Cross(mom_prime, s);
311 
312  const viskores::Vec3f mom_new = mom_plus + 0.5 * this->Charge * eField * length;
313  this->Momentum = mom_new;
314 
315  // momentum = velocity * mass * gamma;
316  // --> velocity = momentum / (mass * gamma)
317  // --> velocity = ( momentum / mass ) * gamma_reci
318  viskores::Vec3f velocity = (mom_new / this->Mass) * this->Gamma(mom_new, true);
319  return velocity;
320  }
321 
324  {
325  // Translation is in -ve Z direction,
326  // this needs to be a parameter.
327  auto translation = this->NumSteps * deltaT * SPEED_OF_LIGHT * viskores::Vec3f{ 0., 0., -1.0 };
328  return this->Position + translation;
329  }
330 
331  inline VISKORES_CONT friend std::ostream& operator<<(std::ostream& out,
332  const viskores::ChargedParticle& p)
333  {
334  out << "v(" << p.Time << ") = " << p.Position << ", ID: " << p.ID
335  << ", NumSteps: " << p.NumSteps << ", Status: " << p.Status;
336  return out;
337  }
338 
339 private:
350  static_cast<viskores::FloatDefault>(2.99792458e8);
351 
352  friend struct mangled_diy_namespace::Serialization<viskores::ChargedParticle>;
353 
354 public:
355  static size_t Sizeof()
356  {
357  constexpr std::size_t sz = sizeof(viskores::Vec3f) // Pos
358  + sizeof(viskores::Id) // ID
359  + sizeof(viskores::Id) // NumSteps
360  + sizeof(viskores::UInt8) // Status
361  + sizeof(viskores::FloatDefault) // Time
362  + sizeof(viskores::Float64) //Mass
363  + sizeof(viskores::Float64) //Charge
364  + sizeof(viskores::Float64) //Weighting
365  + sizeof(viskores::Vec3f); //Momentum
366 
367  return sz;
368  }
369 };
370 
371 } //namespace viskores
372 
374 {
375 template <>
376 struct Serialization<viskores::Particle>
377 {
378 public:
379  static VISKORES_CONT void save(BinaryBuffer& bb, const viskores::Particle& p)
380  {
381  viskoresdiy::save(bb, p.GetPosition());
382  viskoresdiy::save(bb, p.GetID());
383  viskoresdiy::save(bb, p.GetNumberOfSteps());
384  viskoresdiy::save(bb, p.GetStatus());
385  viskoresdiy::save(bb, p.GetTime());
386  }
387 
388  static VISKORES_CONT void load(BinaryBuffer& bb, viskores::Particle& p)
389  {
390  viskores::Vec3f pos;
391  viskoresdiy::load(bb, pos);
392  p.SetPosition(pos);
393 
394  viskores::Id id;
395  viskoresdiy::load(bb, id);
396  p.SetID(id);
397 
398  viskores::Id numSteps;
399  viskoresdiy::load(bb, numSteps);
400  p.SetNumberOfSteps(numSteps);
401 
403  viskoresdiy::load(bb, status);
404  p.SetStatus(status);
405 
407  viskoresdiy::load(bb, time);
408  p.SetTime(time);
409  }
410 };
411 
412 template <>
413 struct Serialization<viskores::ChargedParticle>
414 {
415 public:
416  static VISKORES_CONT void save(BinaryBuffer& bb, const viskores::ChargedParticle& e)
417  {
418  viskoresdiy::save(bb, e.Position);
419  viskoresdiy::save(bb, e.ID);
420  viskoresdiy::save(bb, e.NumSteps);
421  viskoresdiy::save(bb, e.Status);
422  viskoresdiy::save(bb, e.Time);
423  viskoresdiy::save(bb, e.Mass);
424  viskoresdiy::save(bb, e.Charge);
425  viskoresdiy::save(bb, e.Weighting);
426  viskoresdiy::save(bb, e.Momentum);
427  }
428 
429  static VISKORES_CONT void load(BinaryBuffer& bb, viskores::ChargedParticle& e)
430  {
432  viskoresdiy::load(bb, e.ID);
434  viskoresdiy::load(bb, e.Status);
435  viskoresdiy::load(bb, e.Time);
436  viskoresdiy::load(bb, e.Mass);
437  viskoresdiy::load(bb, e.Charge);
440  }
441 };
442 }
443 
444 #endif // viskores_Particle_h
viskores::Particle::Particle
Particle()
Definition: Particle.h:109
mangled_diy_namespace::Serialization< viskores::ChargedParticle >::save
static void save(BinaryBuffer &bb, const viskores::ChargedParticle &e)
Definition: Particle.h:416
viskores::ParticleStatus::SetOk
void SetOk()
Definition: Particle.h:40
viskores::ParticleStatus::IN_GHOST_CELL_BIT
static constexpr viskores::Id IN_GHOST_CELL_BIT
Definition: Particle.h:88
viskores::exec::arg::load
T load(const U &u, viskores::Id v)
Definition: FetchTagArrayDirectIn.h:44
Bitset.h
viskores::ChargedParticle::operator=
viskores::ChargedParticle & operator=(const viskores::ChargedParticle &)=default
mangled_diy_namespace::Serialization< viskores::ChargedParticle >::load
static void load(BinaryBuffer &bb, viskores::ChargedParticle &e)
Definition: Particle.h:429
viskores::Particle::GetPosition
const viskores::Vec3f & GetPosition() const
Definition: Particle.h:143
viskores::Particle::Sizeof
static size_t Sizeof()
Definition: Particle.h:195
viskores::ParticleStatus::SetTemporalBounds
void SetTemporalBounds()
Definition: Particle.h:57
viskores::Particle::Particle
Particle(const viskores::Particle &p)
Definition: Particle.h:126
viskores::ChargedParticle::Velocity
viskores::Vec3f Velocity(const viskores::VecVariable< viskores::Vec3f, 2 > &vectors, const viskores::FloatDefault &length) const
Definition: Particle.h:291
viskores::Particle::~Particle
~Particle() noexcept
Definition: Particle.h:137
viskores::VecVariable
A short variable-length array with maximum length.
Definition: VecVariable.h:38
viskores::ParticleStatus::SPATIAL_BOUNDS_BIT
static constexpr viskores::Id SPATIAL_BOUNDS_BIT
Definition: Particle.h:85
viskores::ChargedParticle::Sizeof
static size_t Sizeof()
Definition: Particle.h:355
viskoresNotUsed
#define viskoresNotUsed(parameter_name)
Simple macro to identify a parameter as unused.
Definition: ExportMacros.h:136
viskores::ChargedParticle::ChargedParticle
ChargedParticle(const viskores::Vec3f &position, const viskores::Id &id, const viskores::Float64 &mass, const viskores::Float64 &charge, const viskores::Float64 &weighting, const viskores::Vec3f &momentum, const viskores::Id &numSteps=0, const viskores::ParticleStatus &status=viskores::ParticleStatus(), const viskores::FloatDefault &time=0)
Definition: Particle.h:214
viskores::Particle::SetTime
void SetTime(viskores::FloatDefault time)
Definition: Particle.h:160
viskores::Particle::Position
viskores::Vec3f Position
Definition: Particle.h:188
viskores::ChargedParticle::SetPosition
void SetPosition(const viskores::Vec3f &position)
Definition: Particle.h:259
viskores::ChargedParticle::GetStatus
viskores::ParticleStatus GetStatus() const
Definition: Particle.h:270
mangled_diy_namespace::Serialization< viskores::Particle >::save
static void save(BinaryBuffer &bb, const viskores::Particle &p)
Definition: Particle.h:379
viskores::ParticleStatus::ZERO_VELOCITY
static constexpr viskores::Id ZERO_VELOCITY
Definition: Particle.h:89
viskores::ParticleStatus::CheckSpatialBounds
bool CheckSpatialBounds() const
Definition: Particle.h:52
viskores::ParticleStatus::ClearTerminate
void ClearTerminate()
Definition: Particle.h:47
viskores::Particle::Particle
Particle(const viskores::Vec3f &p, const viskores::Id &id, const viskores::Id &numSteps=0, const viskores::ParticleStatus &status=viskores::ParticleStatus(), const viskores::FloatDefault &time=0)
Definition: Particle.h:112
viskores::ChargedParticle::~ChargedParticle
~ChargedParticle() noexcept
Definition: Particle.h:252
VISKORES_EXEC_CONT
#define VISKORES_EXEC_CONT
Definition: ExportMacros.h:60
viskores::Particle::SetPosition
void SetPosition(const viskores::Vec3f &position)
Definition: Particle.h:144
viskores::ParticleStatus::TOOK_ANY_STEPS_BIT
static constexpr viskores::Id TOOK_ANY_STEPS_BIT
Definition: Particle.h:87
viskores::Sqrt
viskores::Float32 Sqrt(viskores::Float32 x)
Definition: Math.h:951
viskores::ParticleStatus::SetSpatialBounds
void SetSpatialBounds()
Definition: Particle.h:50
mangled_diy_namespace
Definition: Particle.h:373
viskores::ParticleStatus::SetTerminate
void SetTerminate()
Definition: Particle.h:46
viskores::ChargedParticle::ChargedParticle
ChargedParticle(const viskores::ChargedParticle &other)
Definition: Particle.h:236
viskores::ChargedParticle::ChargedParticle
ChargedParticle()
Definition: Particle.h:211
viskores::VecVariable::GetNumberOfComponents
viskores::IdComponent GetNumberOfComponents() const
Definition: VecVariable.h:61
viskores::Cross
viskores::Vec< typename detail::FloatingPointReturnType< T >::Type, 3 > Cross(const viskores::Vec< T, 3 > &x, const viskores::Vec< T, 3 > &y)
Find the cross product of two vectors.
Definition: VectorAnalysis.h:188
viskores::ChargedParticle::SetID
void SetID(viskores::Id id)
Definition: Particle.h:265
VectorAnalysis.h
viskores::Bitset< viskores::UInt8 >::test
bool test(viskores::Id bitIndex) const
Definition: Bitset.h:61
viskores::Particle::NumSteps
viskores::Id NumSteps
Definition: Particle.h:190
viskores::ParticleStatus::CheckOk
bool CheckOk() const
Definition: Particle.h:41
viskores::ParticleStatus::CheckTerminate
bool CheckTerminate() const
Definition: Particle.h:48
viskores::Particle::SetStatus
void SetStatus(viskores::ParticleStatus status)
Definition: Particle.h:157
viskores::ChargedParticle::operator<<
friend std::ostream & operator<<(std::ostream &out, const viskores::ChargedParticle &p)
Definition: Particle.h:331
viskores::ChargedParticle::GetTime
viskores::FloatDefault GetTime() const
Definition: Particle.h:274
viskores::Id
viskores::Int64 Id
Base type to use to index arrays.
Definition: Types.h:235
viskores::Particle::GetStatus
viskores::ParticleStatus & GetStatus()
Definition: Particle.h:156
viskores::ChargedParticle::GetID
viskores::Id GetID() const
Definition: Particle.h:264
VISKORES_CONT
#define VISKORES_CONT
Definition: ExportMacros.h:65
viskores::operator<<
std::ostream & operator<<(std::ostream &stream, const viskores::Bounds &bounds)
Helper function for printing bounds during testing.
Definition: Bounds.h:268
viskores
Groups connected points that have the same field value.
Definition: Atomic.h:27
mangled_diy_namespace::Serialization< viskores::Particle >::load
static void load(BinaryBuffer &bb, viskores::Particle &p)
Definition: Particle.h:388
viskores::ChargedParticle::Position
viskores::Vec3f Position
Definition: Particle.h:340
viskores::Particle
Definition: Particle.h:105
viskores::ParticleStatus::TEMPORAL_BOUNDS_BIT
static constexpr viskores::Id TEMPORAL_BOUNDS_BIT
Definition: Particle.h:86
viskores::ChargedParticle::Gamma
viskores::Float64 Gamma(const viskores::Vec3f &momentum, bool reciprocal=false) const
Definition: Particle.h:278
viskores::Particle::GetEvaluationPosition
viskores::Vec3f GetEvaluationPosition(const viskores::FloatDefault &deltaT) const
Definition: Particle.h:173
viskores::ParticleStatus::SetTookAnySteps
void SetTookAnySteps()
Definition: Particle.h:64
viskores::Particle::GetNumberOfSteps
viskores::Id GetNumberOfSteps() const
Definition: Particle.h:152
viskores::ParticleStatus::SetZeroVelocity
void SetZeroVelocity()
Definition: Particle.h:72
viskores::ParticleStatus::ClearInGhostCell
void ClearInGhostCell()
Definition: Particle.h:69
viskores::Bitset< viskores::UInt8 >::set
void set(viskores::Id bitIndex)
Definition: Bitset.h:38
viskores::Particle::GetID
viskores::Id GetID() const
Definition: Particle.h:149
viskores::ParticleStatus
Definition: Particle.h:31
Serialization.h
viskores::ParticleStatus::ParticleStatus
ParticleStatus()
Definition: Particle.h:34
viskores::ChargedParticle::Momentum
viskores::Vec3f Momentum
Definition: Particle.h:348
viskores::Bitset< viskores::UInt8 >::reset
void reset(viskores::Id bitIndex)
Definition: Bitset.h:51
viskores::ChargedParticle::Charge
viskores::Float64 Charge
Definition: Particle.h:346
viskores::ChargedParticle::SetTime
void SetTime(viskores::FloatDefault time)
Definition: Particle.h:275
viskores::Bitset
A bitmap to serve different needs.
Definition: Bitset.h:36
VISKORES_ASSERT
#define VISKORES_ASSERT(condition)
Definition: Assert.h:51
viskores::Particle::ID
viskores::Id ID
Definition: Particle.h:189
viskores::ParticleStatus::ClearZeroVelocity
void ClearZeroVelocity()
Definition: Particle.h:73
viskores::ChargedParticle::Mass
viskores::Float64 Mass
Definition: Particle.h:345
viskores::Particle::Status
viskores::ParticleStatus Status
Definition: Particle.h:191
viskores::ParticleStatus::ClearSpatialBounds
void ClearSpatialBounds()
Definition: Particle.h:51
viskores::Particle::SetNumberOfSteps
void SetNumberOfSteps(viskores::Id numSteps)
Definition: Particle.h:153
viskores::Particle::GetStatus
viskores::ParticleStatus GetStatus() const
Definition: Particle.h:155
viskores::ChargedParticle::Time
viskores::FloatDefault Time
Definition: Particle.h:344
viskores::ChargedParticle::GetPosition
const viskores::Vec3f & GetPosition() const
Definition: Particle.h:258
viskores::ChargedParticle::SetStatus
void SetStatus(viskores::ParticleStatus status)
Definition: Particle.h:272
viskores::ChargedParticle::NumSteps
viskores::Id NumSteps
Definition: Particle.h:342
viskores::ChargedParticle::Weighting
viskores::Float64 Weighting
Definition: Particle.h:347
viskores::ChargedParticle
Definition: Particle.h:207
viskores::UInt8
uint8_t UInt8
Base type to use for 8-bit unsigned integer numbers.
Definition: Types.h:177
viskores::ParticleStatus::SetInGhostCell
void SetInGhostCell()
Definition: Particle.h:68
viskores::Particle::Time
viskores::FloatDefault Time
Definition: Particle.h:192
viskores::ParticleStatus::SUCCESS_BIT
static constexpr viskores::Id SUCCESS_BIT
Definition: Particle.h:83
viskores::ChargedParticle::GetEvaluationPosition
viskores::Vec3f GetEvaluationPosition(const viskores::FloatDefault &deltaT) const
Definition: Particle.h:323
VecVariable.h
viskores::ParticleStatus::ClearTemporalBounds
void ClearTemporalBounds()
Definition: Particle.h:58
viskores::Particle::SetID
void SetID(viskores::Id id)
Definition: Particle.h:150
viskores::ParticleStatus::CheckInGhostCell
bool CheckInGhostCell() const
Definition: Particle.h:70
viskores::FloatDefault
viskores::Float32 FloatDefault
The floating point type to use when no other precision is specified.
Definition: Types.h:244
viskores::Particle::operator<<
friend std::ostream & operator<<(std::ostream &out, const viskores::Particle &p)
Definition: Particle.h:179
viskores::ParticleStatus::CheckZeroVelocity
bool CheckZeroVelocity() const
Definition: Particle.h:74
viskores::Magnitude
detail::FloatingPointReturnType< T >::Type Magnitude(const T &x)
Returns the magnitude of a vector.
Definition: VectorAnalysis.h:108
viskores::ChargedParticle::Status
viskores::ParticleStatus Status
Definition: Particle.h:343
viskores::ChargedParticle::SetNumberOfSteps
void SetNumberOfSteps(viskores::Id numSteps)
Definition: Particle.h:268
viskores::MagnitudeSquared
detail::FloatingPointReturnType< T >::Type MagnitudeSquared(const T &x)
Returns the square of the magnitude of a vector.
Definition: VectorAnalysis.h:72
viskores::ChargedParticle::SPEED_OF_LIGHT
constexpr static viskores::FloatDefault SPEED_OF_LIGHT
Definition: Particle.h:349
viskores::Particle::operator=
viskores::Particle & operator=(const viskores::Particle &)=default
viskores::ParticleStatus::CanContinue
bool CanContinue() const
Definition: Particle.h:76
viskores::Particle::GetTime
viskores::FloatDefault GetTime() const
Definition: Particle.h:159
viskores::ParticleStatus::CheckTemporalBounds
bool CheckTemporalBounds() const
Definition: Particle.h:59
viskores::Float64
double Float64
Base type to use for 64-bit floating-point numbers.
Definition: Types.h:169
viskores::Particle::Velocity
viskores::Vec3f Velocity(const viskores::VecVariable< viskores::Vec3f, 2 > &vectors, const viskores::FloatDefault &) const
Definition: Particle.h:163
viskores::ParticleStatus::TERMINATE_BIT
static constexpr viskores::Id TERMINATE_BIT
Definition: Particle.h:84
viskores::ChargedParticle::GetStatus
viskores::ParticleStatus & GetStatus()
Definition: Particle.h:271
viskores::Vec< viskores::FloatDefault, 3 >
viskores::ChargedParticle::GetNumberOfSteps
viskores::Id GetNumberOfSteps() const
Definition: Particle.h:267
viskores::ParticleStatus::CheckFail
bool CheckFail() const
Definition: Particle.h:44
viskores::ChargedParticle::ID
viskores::Id ID
Definition: Particle.h:341
viskores::ParticleStatus::CheckTookAnySteps
bool CheckTookAnySteps() const
Definition: Particle.h:66
viskores::ParticleStatus::SetFail
void SetFail()
Definition: Particle.h:43
viskores::Vec3f
viskores::Vec< viskores::FloatDefault, 3 > Vec3f
Vec3f corresponds to a 3-dimensional vector of floating point values.
Definition: Types.h:1064
viskores::ParticleStatus::ClearTookAnySteps
void ClearTookAnySteps()
Definition: Particle.h:65