extensive.cpp
1 #include "extensive.hpp"
2 #include "../../misc/utils.hpp"
3 
5  mass(other.mass),
6  energy(other.energy),
7  momentum(other.momentum),
8  tracers(other.tracers) {}
9 
11  mass(0),
12  energy(0),
13  momentum(0,0),
14  tracers() {}
15 
16 Extensive::Extensive(tvector const& Tracers):mass(0),
17 energy(0),
18 momentum(0, 0),
19 tracers(tvector(Tracers.size()))
20 {
21  size_t N = tracers.size();
22  for (size_t i = 0; i < N; ++i)
23  tracers[i] = 0;
24 }
25 
27 {
28  mass -= diff.mass;
29  energy -= diff.energy;
30  momentum -= diff.momentum;
31  assert(diff.tracers.size() == this->tracers.size());
32  size_t N = diff.tracers.size();
33  for (size_t i = 0; i < N; ++i)
34  this->tracers[i] -= diff.tracers[i];
35  return *this;
36 }
37 
39 {
40  mass = origin.mass;
41  energy = origin.energy;
42  momentum = origin.momentum;
43  tracers = origin.tracers;
44  return *this;
45 }
46 
47 void ReplaceExtensive(Extensive &toreplace, Extensive const& other)
48 {
49  toreplace.mass = other.mass;
50  toreplace.energy = other.energy;
51  toreplace.momentum = other.momentum;
52  assert(other.tracers.size() == toreplace.tracers.size());
53  size_t N = other.tracers.size();
54  for (size_t i = 0; i < N; ++i)
55  toreplace.tracers[i] = other.tracers[i];
56 }
57 
59 {
60  mass += diff.mass;
61  energy += diff.energy;
62  momentum += diff.momentum;
63  assert(diff.tracers.size() == this->tracers.size());
64  size_t N = diff.tracers.size();
65  for (size_t i = 0; i < N; ++i)
66  this->tracers[i] += diff.tracers[i];
67  return *this;
68 }
69 
70 Extensive operator*(const double s,
71  const Extensive& e)
72 {
73  Extensive res;
74  res.mass = s*e.mass;
75  res.energy = s*e.energy;
76  res.momentum = s*e.momentum;
77  res.tracers = e.tracers;
78  size_t N = res.tracers.size();
79  for (size_t i = 0; i < N; ++i)
80  res.tracers[i] *= s;
81  return res;
82 }
83 
85  const Extensive& e2)
86 {
87  Extensive res;
88  res.mass = e1.mass + e2.mass;
89  res.energy = e1.energy + e2.energy;
90  res.momentum = e1.momentum + e2.momentum;
91  res.tracers = e1.tracers;
92  size_t N = res.tracers.size();
93  for (size_t i = 0; i < N; ++i)
94  res.tracers[i] += e2.tracers[i];
95  return res;
96 }
97 
98 Extensive& Extensive::operator*=(const double scalar)
99 {
100  mass *=scalar;
101  energy *=scalar;
102  momentum *=scalar;
103  size_t N = tracers.size();
104  for (size_t i = 0; i < N; ++i)
105  tracers[i] *= scalar;
106  return *this;
107 }
108 
110  const Extensive& e2)
111 {
112  return e1+(-1)*e2;
113 }
114 
115 #ifdef RICH_MPI
116 size_t Extensive::getChunkSize(void) const
117 {
118  return 4 + tracers.size();
119 }
120 
121 vector<double> Extensive::serialize(void) const
122 {
123  vector<double> res(getChunkSize());
124  res.at(0) = mass;
125  res.at(1) = energy;
126  res.at(2) = momentum.x;
127  res.at(3) = momentum.y;
128  size_t counter = 4;
129  size_t N = tracers.size();
130  for (size_t i = 0; i < N;++i)
131  {
132  res.at(counter) = tracers[i];
133  ++counter;
134  }
135  assert(counter==res.size());
136  return res;
137 }
138 
140 (const vector<double>& data)
141 {
142  assert(data.size()==getChunkSize());
143  mass = data.at(0);
144  energy = data.at(1);
145  momentum.x = data.at(2);
146  momentum.y = data.at(3);
147  size_t counter = 4;
148  size_t N = tracers.size();
149  for (size_t i = 0; i < N;++i)
150  {
151  tracers.at(i) = data[counter];
152  ++counter;
153  }
154  assert(data.size()==counter);
155 }
156 #endif // RICH_MPI
Extensive variables.
Definition: extensive.hpp:18
Extensive(void)
Null constructor.
Definition: extensive.cpp:10
Extensive & operator=(const Extensive &origin)
Assignment operator.
Definition: extensive.cpp:38
std::vector< double > tvector
Vector2D momentum
momentum, in relativity it is = rho*h*gamma*v
Definition: extensive.hpp:31
Extensive variables.
double mass
rest mass times gamma
Definition: extensive.hpp:25
Extensive & operator-=(const Extensive &diff)
Self difference operator.
Definition: extensive.cpp:26
double energy
energy, in relativity it is = rho*h*gamma^2-P-rho
Definition: extensive.hpp:28
double y
Component in the y direction.
Definition: geometry.hpp:48
Extensive & operator*=(const double scalar)
Self multiplication by scalar.
Definition: extensive.cpp:98
tvector tracers
tracers
Definition: extensive.hpp:34
Vector3D operator*(double d, Vector3D const &v)
Scalar product.
Definition: Vector3D.cpp:162
void unserialize(const vector< double > &data)
Convert an array of numbers to an object.
Definition: extensive.cpp:140
void ReplaceExtensive(Extensive &toreplace, Extensive const &other)
Replaces the data in the extensive. The tracers should already be allocated.
Definition: extensive.cpp:47
vector< double > serialize(void) const
Convert an object to an array of numbers.
Definition: extensive.cpp:121
Extensive & operator+=(const Extensive &diff)
Self addition operator.
Definition: extensive.cpp:58
size_t getChunkSize(void) const
Returns the size of array needed to store all data.
Definition: extensive.cpp:116
Vector3D operator+(Vector3D const &v1, Vector3D const &v2)
Term by term addition.
Definition: Vector3D.cpp:143
double x
Component in the x direction.
Definition: geometry.hpp:45
Vector3D operator-(Vector3D const &v1, Vector3D const &v2)
Term by term subtraction.
Definition: Vector3D.cpp:152