#include <energymomentumtensor.h>
The EnergyMomentumTensor class represents a symmetric positive semi-definite energy-momentum tensor \( T^{\mu \nu}\).
Definition at line 29 of file energymomentumtensor.h.
|
typedef std::array< double, 10 > | tmn_type |
| The energy-momentum tensor is symmetric and has 10 independent components. More...
|
|
using | iterator = tmn_type::iterator |
| Iterator over the components. More...
|
|
using | const_iterator = tmn_type::const_iterator |
| Constant iterator over the components. More...
|
|
|
static std::int8_t | tmn_index (std::int8_t mu, std::int8_t nu) |
| Access the index of component \( (\mu, \nu) \). More...
|
|
◆ tmn_type
The energy-momentum tensor is symmetric and has 10 independent components.
Definition at line 32 of file energymomentumtensor.h.
◆ iterator
◆ const_iterator
◆ EnergyMomentumTensor() [1/2]
smash::EnergyMomentumTensor::EnergyMomentumTensor |
( |
| ) |
|
|
inline |
Default constructor (nulls all components)
Definition at line 34 of file energymomentumtensor.h.
tmn_type Tmn_
The internal storage of the components.
◆ EnergyMomentumTensor() [2/2]
smash::EnergyMomentumTensor::EnergyMomentumTensor |
( |
const tmn_type & |
Tmn | ) |
|
|
inlineexplicit |
Copy constructor.
- Parameters
-
[in] | Tmn | Components of the energy-momentum tensor |
Definition at line 40 of file energymomentumtensor.h.
41 for (
size_t i = 0; i < 10; i++) {
@ Tmn
Energy-momentum tensor in lab frame.
◆ operator[]()
double smash::EnergyMomentumTensor::operator[] |
( |
std::size_t |
i | ) |
const |
|
inline |
◆ tmn_index()
static std::int8_t smash::EnergyMomentumTensor::tmn_index |
( |
std::int8_t |
mu, |
|
|
std::int8_t |
nu |
|
) |
| |
|
inlinestatic |
Access the index of component \( (\mu, \nu) \).
- Parameters
-
[in] | mu | \(\mu\) is the row index (0 to 3) |
[in] | nu | \(\nu\) is the line index (0 to 3) |
Definition at line 54 of file energymomentumtensor.h.
56 constexpr std::array<std::int8_t, 16> indices = {0, 1, 2, 3,
61 if (mu < 4 && nu < 4 && mu >= 0 && nu >= 0) {
62 return indices[mu + 4 * nu];
64 throw std::invalid_argument(
"Invalid indices: " + std::to_string(mu) +
65 ", " + std::to_string(nu));
◆ operator+=()
Addition of \(T^{\mu \nu}_0\) to tensor.
Definition at line 154 of file energymomentumtensor.h.
156 for (
size_t i = 0; i < 10; i++) {
◆ operator-=()
Subtraction of \(T^{\mu \nu}_0\) of tensor.
Definition at line 168 of file energymomentumtensor.h.
170 for (
size_t i = 0; i < 10; i++) {
◆ operator*=()
Scaling of the tensor by scalar \(a\).
Definition at line 182 of file energymomentumtensor.h.
183 for (
size_t i = 0; i < 10; i++) {
◆ operator/=()
Division of the tensor by scalar \(a\).
Definition at line 199 of file energymomentumtensor.h.
200 for (
size_t i = 0; i < 10; i++) {
◆ landau_frame_4velocity()
FourVector smash::EnergyMomentumTensor::landau_frame_4velocity |
( |
| ) |
const |
Find the Landau frame 4-velocity from energy-momentum tensor.
IMPORTANT: resulting 4-velocity is fourvector with LOWER index
Definition at line 23 of file energymomentumtensor.cc.
24 using Eigen::Matrix4d;
25 using Eigen::Vector4d;
49 logg[
LTmn].debug(
"Looking for Landau frame for T_{mu}^{nu} ", A);
50 Eigen::EigenSolver<Matrix4d> es(A);
52 Vector4d eig_im = es.eigenvalues().imag();
53 Vector4d eig_re = es.eigenvalues().real();
54 size_t i_maxeigenvalue = 0;
55 for (
size_t i = 0; i < 4; i++) {
56 if (eig_re(i_maxeigenvalue) < eig_re(i)) {
66 if (i_maxeigenvalue != 0) {
68 "The Tmn diagonalization code previously relied on assumption that"
69 " 0th eigenvalue is the largest one. It seems to be always fulfilled "
70 "in practice, but not guaranteed by Eigen. Here is Tmn * gmn, ",
71 A,
" for which it is not fulfilled. Please let Dima(oliiny) know.");
73 for (
size_t i = 0; i < 4; i++) {
75 logg[
LTmn].error(
"Tmn*gmn\n ", A,
"\n has a complex eigenvalue ",
76 eig_re(i),
" + i * ", eig_im(i));
80 "\nenergy density eigenvalue is not positive ",
81 eig_re(i),
" + i * ", eig_im(i));
82 logg[
LTmn].error(
"i_max = ", i_maxeigenvalue);
85 logg[
LTmn].error(
"Tmn*gmn\n", A,
"\npressure eigenvalue is not negative ",
86 eig_re(i),
" + i * ", eig_im(i));
90 Vector4d tmp = es.eigenvectors().col(i_maxeigenvalue).real();
97 FourVector u(tmp(0), tmp(1), tmp(2), tmp(3));
98 const double u_sqr = u.sqr();
100 u /= std::sqrt(u_sqr);
103 "Landau frame is not defined.",
" Eigen vector", u,
" of ", A,
104 " is not time-like and",
105 " cannot be 4-velocity. This may happen if energy-momentum",
106 " tensor was constructed for a massless particle.");
107 u = FourVector(1., 0., 0., 0.);
std::array< einhard::Logger<>, std::tuple_size< LogArea::AreaTuple >::value > logg
An array that stores all pre-configured Logger objects.
static constexpr int LTmn
constexpr double really_small
Numerical error tolerance.
◆ boosted()
Boost to a given 4-velocity.
IMPORTANT: boost 4-velocity is fourvector with LOWER index
- Parameters
-
Definition at line 112 of file energymomentumtensor.cc.
113 using Eigen::Matrix4d;
123 const ThreeVector tmp = u.threevec() / (1.0 + u[0]);
125 L << u[0], u[1], u[2], u[3],
126 u[1], u[1] * tmp.x1() + 1.0, u[2] * tmp.x1(), u[3] * tmp.x1(),
127 u[2], u[1] * tmp.x2(), u[2] * tmp.x2() + 1.0, u[3] * tmp.x2(),
128 u[3], u[1] * tmp.x3(), u[2] * tmp.x3(), u[3] * tmp.x3() + 1.0;
134 R(1, 1),
R(1, 2),
R(1, 3),
EnergyMomentumTensor()
Default constructor (nulls all components)
◆ add_particle() [1/2]
void smash::EnergyMomentumTensor::add_particle |
( |
const FourVector & |
mom | ) |
|
Given momentum of the particle adds \(p^{\mu}p^{\mu}/p^0\) to the energy momentum tensor.
- Parameters
-
[in] | mom | Momentum 4-vector with upper index, as all 4-momenta in SMASH |
Definition at line 140 of file energymomentumtensor.cc.
141 const ThreeVector tmp = mom.threevec() / mom[0];
146 Tmn_[4] += mom[1] * tmp.x1();
147 Tmn_[5] += mom[1] * tmp.x2();
148 Tmn_[6] += mom[1] * tmp.x3();
149 Tmn_[7] += mom[2] * tmp.x2();
150 Tmn_[8] += mom[2] * tmp.x3();
151 Tmn_[9] += mom[3] * tmp.x3();
◆ add_particle() [2/2]
void smash::EnergyMomentumTensor::add_particle |
( |
const ParticleData & |
p, |
|
|
double |
factor |
|
) |
| |
Same, but \( p^{\mu}p^{\mu}/p^0\) times factor is added.
- Parameters
-
[in] | p | Reference to the data information of the particle |
- See also
- ParticleData
- Parameters
-
[in] | factor | Usually a smearing factor |
Definition at line 154 of file energymomentumtensor.cc.
void add_particle(const FourVector &mom)
Given momentum of the particle adds to the energy momentum tensor.
◆ add_particle_for_derivatives()
◆ begin() [1/2]
iterator smash::EnergyMomentumTensor::begin |
( |
| ) |
|
|
inline |
Returns an iterator starting at the (0,0) component.
The iterator implements the randomIterator concept. Thus, you can simply write begin() + 1
to get an iterator that points to the 1st component.
Definition at line 120 of file energymomentumtensor.h.
120 {
return Tmn_.begin(); }
◆ end() [1/2]
iterator smash::EnergyMomentumTensor::end |
( |
| ) |
|
|
inline |
◆ begin() [2/2]
◆ end() [2/2]
◆ cbegin()
◆ cend()
◆ Tmn_
tmn_type smash::EnergyMomentumTensor::Tmn_ |
|
private |
The internal storage of the components.
Tensor has 16 components, but it is symmetric, so number of independent components reduces to 10.
Definition at line 143 of file energymomentumtensor.h.
The documentation for this class was generated from the following files: