20#include "../Definitions.H"
21#include "../Utils/Constants.H"
22#include "../Utils/RealTensor2.H"
23#include "../Utils/Types.H"
24#include "../Utils/Units.H"
25#include "../Utils/Vec3.H"
57 std::array<Real,nFieldQty>
q;
62 static constexpr std::array<char[qtyNameLen],nFieldQty>
qtyNames =
63 {{
"nden",
"pres",
"eden" }};
65 static constexpr std::array<Real,nFieldQty>
qtyUnits = {
93 std::array<Real,nFieldQty> w;
148 for (
int i=0; i<
nFieldQty; i++) fq.
q[i] =
q[i] + a.
q[i];
159 for (
int i=0; i<
nFieldQty; i++) fq.
q[i] =
q[i] - a.
q[i];
169 std::array<Real,nFieldQty> arr;
170 for (
int i=0; i<
nFieldQty; i++) arr[i] =
q[i] / a.
q[i];
183 for (
int i=0; i<
nFieldQty; i++) fq.
q[i] =
q[i] * a;
194 for (
int i=0; i<
nFieldQty; i++) fq.
q[i] =
q[i] / a;
253 for (
int i=0; i<
nFieldQty; i++) f.
q[i] = a * fq.
q[i];
267 f.
q[i] = std::min(q1.
q[i], q2.
q[i]);
281 f.
q[i] = std::max(q1.
q[i], q2.
q[i]);
297 std::array<RealVec,nFieldQty>
qGrad;
385 std::array<RealVec,nFieldQty> arr;
512 f[i] =
min(q1[i], q2[i]);
526 f[i] =
max(q1[i], q2[i]);
Class to hold data on a CR packet.
std::ostream & operator<<(std::ostream &os, const criptic::FieldQty &fQ)
ASCII-formatted write of field quantities to stream.
Definition FieldQty.cpp:37
std::istream & operator>>(std::istream &is, criptic::FieldQty &fQ)
ASCII-formatted read of field quantities from stream.
Definition FieldQty.cpp:17
A class that holds data to describe a CR packet.
Definition CRPacket.H:28
Real v() const
Velocity of packet.
Definition CRPacket.H:118
Real T() const
Kinetic energy of packet.
Definition CRPacket.H:94
Real w
Definition CRPacket.H:48
Real p
Definition CRPacket.H:47
Class to hold and compute gradients of field quantities.
Definition FieldQty.H:293
std::array< RealVec, nFieldQty > qGrad
Definition FieldQty.H:297
void setZero()
Set all field quantities to zero.
Definition FieldQty.H:310
void addPacket(const CRPacket &pkt, const RealVec &r, const RealTensor2 &h2Inv)
Add contribution of packet at target point.
Definition FieldQty.H:324
std::array< RealVec, nFieldQty > operator/(const FieldQtyGrad &a) const
Divide two FieldQtyGrad objects.
Definition FieldQty.H:384
RealVec & operator[](int i)
Return an element of the FieldQtyGrad.
Definition FieldQty.H:340
FieldQtyGrad & operator+=(const FieldQtyGrad &a)
Add a FieldQtyGrad object to this one.
Definition FieldQty.H:459
FieldQtyGrad operator*(const RealVec &a) const
Multiply a FieldQtyGrad by a scalar.
Definition FieldQty.H:423
FieldQtyGrad & operator*=(const Real &a)
Multiply a FieldQtyGrad by a scalar.
Definition FieldQty.H:437
FieldQtyGrad operator*(const Real a) const
Multiply a FieldQtyGrad by a scalar.
Definition FieldQty.H:397
FieldQtyGrad operator/(const Real a) const
Divide a FieldQtyGrad by a scalar.
Definition FieldQty.H:409
FieldQtyGrad operator-(const FieldQtyGrad &a) const
Subtract two FieldQtyGrad objects.
Definition FieldQty.H:372
FieldQtyGrad & operator-=(const FieldQtyGrad &a)
Subtract a FieldQtyGrad object from this one.
Definition FieldQty.H:469
FieldQtyGrad()
Construct a field quantity gradient filled with zeros.
Definition FieldQty.H:303
FieldQtyGrad operator+(const FieldQtyGrad &a) const
Add two FieldQtyGrad objects.
Definition FieldQty.H:360
FieldQtyGrad & operator/=(const Real &a)
Divide a FieldQty by a scalar.
Definition FieldQty.H:447
Class to hold and compute field quantities.
Definition FieldQty.H:53
FieldQty & operator+=(const FieldQty &a)
Add a FieldQty object to this one.
Definition FieldQty.H:227
FieldQty operator-(const FieldQty &a) const
Subtract two FieldQty objects.
Definition FieldQty.H:157
std::array< Real, nFieldQty > operator/(const FieldQty &a) const
Divide two FieldQty objects.
Definition FieldQty.H:168
void setZero()
Set all field quantities to zero.
Definition FieldQty.H:79
FieldQty()
Construct a field quantity filled with zeros.
Definition FieldQty.H:72
void addPacket(const CRPacket &pkt, const RealVec &r, const RealTensor2 &h2Inv)
Add contribution of packet to field quantities at target point.
Definition FieldQty.H:110
FieldQty operator+(const FieldQty &a) const
Add two FieldQty objects.
Definition FieldQty.H:146
FieldQty & operator/=(const Real &a)
Divide a FieldQty by a scalar.
Definition FieldQty.H:215
FieldQty operator*(const Real a) const
Multiply a FieldQty by a scalar.
Definition FieldQty.H:181
static constexpr std::array< Real, nFieldQty > qtyUnits
Definition FieldQty.H:65
FieldQty operator/(const Real a) const
Divide a FieldQty by a scalar.
Definition FieldQty.H:192
std::array< Real, nFieldQty > getWgt(const CRPacket &pkt) const
Get weight with which packet contributes to field quantities.
Definition FieldQty.H:92
static constexpr int qtyNameLen
Definition FieldQty.H:60
std::array< Real, nFieldQty > q
Definition FieldQty.H:57
static constexpr std::array< char[qtyNameLen], nFieldQty > qtyNames
Definition FieldQty.H:62
FieldQty & operator-=(const FieldQty &a)
Subtract a FieldQty object from this one.
Definition FieldQty.H:237
Real & operator[](int i)
Return an element of the FieldQty.
Definition FieldQty.H:125
FieldQty & operator*=(const Real &a)
Multiply a FieldQty by a scalar.
Definition FieldQty.H:205
Class that represents a rank 2 tensor.
Definition RealTensor2.H:34
Real contract(const RealVec &a, const RealVec &b) const
Compute the tensor contraction a_i b_j T_ij.
Definition RealTensor2.H:395
auto dot(const Vec3< U > &a) const
Returns the dot product of this vector with another vector.
Definition Vec3.H:575
static constexpr Real mp_c2
Definition Constants.H:118
static constexpr Real kB
Definition Constants.H:41
static constexpr Real eV
Definition Units.H:34
The primary namespace for criptic objects.
Definition AdvancePacket.H:25
criptic::FieldQty max(const criptic::FieldQty &q1, const criptic::FieldQty &q2)
Take elementwise maximum of two FieldQty objects.
Definition FieldQty.H:277
double Real
Definition Types.H:38
FieldQtyType
Enum of field quantities.
Definition FieldQty.H:32
@ ndenIdx
Definition FieldQty.H:33
@ nFieldQty
Definition FieldQty.H:36
@ edenIdx
Definition FieldQty.H:35
@ presIdx
Definition FieldQty.H:34
criptic::FieldQty min(const criptic::FieldQty &q1, const criptic::FieldQty &q2)
Take elementwise minimum of two FieldQty objects.
Definition FieldQty.H:263
criptic::FieldQty operator*(const criptic::Real a, const criptic::FieldQty &fq)
Multiply a scalar by a FieldQty elementwise.
Definition FieldQty.H:250