StandardFields.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #ifndef StandardFields_H
6 #define StandardFields_H
7 
8 #include <Math/Matrix.h>
9 #include <Math/MatrixSymmetric.h>
11 #include <array>
12 
13 #include "BaseFields.h"
14 
15 class BaseParticle;
16 
17 class BaseInteraction;
18 
19 namespace CGFields
20 {
21 
32 class StandardFields : public BaseFields
33 {
34 public:
35 
40 
44  StandardFields(const StandardFields& P) = default;
45 
50  ~StandardFields() = default;
51 
52  static void writeNames(std::ostream& os, unsigned countVariables);
53 
57  void write(std::ostream& os) const;
58 
62  void output(std::ostream& os) const;
63 
67  void setZero();
68 
72  StandardFields getSquared() const;
73 
78 
83 
88 
93 
99 
105  void addParticleStatistics(Mdouble phi, const StandardFields& currentInteraction);
106 
107  void addParticleDifferentialStatistics(Vec3D& dphi, const StandardFields& currentInteraction);
108 
114  void addInteractionStatistics(Mdouble psi, const StandardFields& currentInteraction);
115 
121  void addContactPointStatistics(Mdouble phi, const StandardFields& currentInteraction);
122 
124 
126 
127  void setFields(const BaseParticle& p);
128 
129  void setCylindricalFields(const BaseParticle& p);
130 
131 
136  static bool doInteractionStatistics();
137 
139  {
140  return volumeFraction_;
141  }
142 
144  {
145  return density_;
146  }
147 
149  {
150  return momentum_;
151  }
152 
154  {
155  return momentumFlux_;
156  }
157 
159  {
160  return contactStress_;
161  }
162 
164  {
166  }
167 
169  {
170  return particleSizeDensity_[i];
171  }
172 
173  std::array<Mdouble, 6> getParticleSizeDensity() const
174  {
175  return particleSizeDensity_;
176  }
177 
178  std::array<Mdouble, 6> getParticleSizeMomenta() const;
179 
180  std::array<Mdouble, 6> getCentralParticleSizeMomenta() const;
181 
182  std::array<Mdouble, 6> getStandardisedParticleSizeMomenta() const;
183 
184  void outputStandardisedParticleSizeMomenta(std::ostream& os) const;
185 
187  {
188  return false;
189  }
190 
195  static bool isDifferentialField()
196  {
197  return false;
198  }
199 
200 protected:
201  void setContactStress(Matrix3D contactStress)
202  {
203  contactStress_ = contactStress;
204  }
205 
206  void addContactStress(Matrix3D contactStress)
207  {
208  contactStress_ += contactStress;
209  }
210 
211  void setInteractionForceDensity(Vec3D interactionForceDensity)
212  {
213  interactionForceDensity_ = interactionForceDensity;
214  }
215 
216  void addInteractionForceDensity(Vec3D interactionForceDensity)
217  {
218  interactionForceDensity_ += interactionForceDensity;
219  }
220 
221 private:
222 
230 
238 
250 
262 
274 
284 
294  std::array<Mdouble, 6> particleSizeDensity_;
295 
296 };
297 
298 }
299 #endif
int i
Definition: BiCGSTAB_step_by_step.cpp:9
IntegralType
Specifies the two points between which a line integral is computed.
Definition: IntegralType.h:14
float * p
Definition: Tutorial_Map_using.cpp:9
Stores information about interactions between two interactable objects; often particles but could be ...
Definition: BaseInteraction.h:39
Definition: BaseParticle.h:33
A Base class for the fields.
Definition: BaseFields.h:22
Contains the computed field values, like density, momentum and stress.
Definition: StandardFields.h:33
Vec3D momentum_
Definition: StandardFields.h:249
void addContactPointStatistics(Mdouble phi, const StandardFields &currentInteraction)
This function should be called from within a loop over all Interactions to compute all the fields tha...
Definition: StandardFields.cc:196
std::array< Mdouble, 6 > getStandardisedParticleSizeMomenta() const
Definition: StandardFields.cc:295
MatrixSymmetric3D momentumFlux_
Definition: StandardFields.h:261
Mdouble getDensity() const
Definition: StandardFields.h:143
MatrixSymmetric3D getMomentumFlux() const
Definition: StandardFields.h:153
StandardFields & operator=(const StandardFields &P)
Copies all field values.
void setCylindricalFields(const BaseInteraction &c, IntegralType type)
Definition: StandardFields.cc:245
static bool isDifferentialField()
Definition: StandardFields.h:195
Matrix3D contactStress_
Definition: StandardFields.h:273
void setZero()
Sets all fields to zero.
Definition: StandardFields.cc:63
StandardFields()
Default constructor, sets all field values to zero.
Definition: StandardFields.cc:11
std::array< Mdouble, 6 > getParticleSizeMomenta() const
Definition: StandardFields.cc:271
Vec3D getInteractionForceDensity() const
Definition: StandardFields.h:163
StandardFields & operator-=(const StandardFields &P)
Subtracts the field values on the RHS from the LHS of the equation.
Definition: StandardFields.cc:118
static void writeNames(std::ostream &os, unsigned countVariables)
Definition: StandardFields.cc:23
Matrix3D getContactStress() const
Definition: StandardFields.h:158
void outputStandardisedParticleSizeMomenta(std::ostream &os) const
Definition: StandardFields.cc:259
Mdouble density_
Definition: StandardFields.h:237
std::array< Mdouble, 6 > particleSizeDensity_
Definition: StandardFields.h:294
Vec3D interactionForceDensity_
Definition: StandardFields.h:283
Mdouble getParticleSizeDensity(size_t i) const
Definition: StandardFields.h:168
std::array< Mdouble, 6 > getParticleSizeDensity() const
Definition: StandardFields.h:173
void addInteractionStatistics(Mdouble psi, const StandardFields &currentInteraction)
This function should be called from within a loop over all Interactions to compute all the fields tha...
Definition: StandardFields.cc:186
Mdouble getVolumeFraction() const
Definition: StandardFields.h:138
static bool doInteractionStatistics()
Returns true if the class contains fields that are defined as a sum over all Interactions (e....
Definition: StandardFields.cc:207
static bool evaluateFixedParticles()
Definition: StandardFields.h:186
void addParticleStatistics(Mdouble phi, const StandardFields &currentInteraction)
This function should be called from within a loop over all particles to compute all the fields that a...
Definition: StandardFields.cc:168
StandardFields operator*(Mdouble a) const
Multiplies the field values on the left of the '*' by the scalar value on the right of the '*' and re...
Definition: StandardFields.cc:134
void setFields(const BaseInteraction &c, IntegralType type)
Definition: StandardFields.cc:212
Vec3D getMomentum() const
Definition: StandardFields.h:148
void write(std::ostream &os) const
Writes class content into an output stream, typically a stat file.
Definition: StandardFields.cc:37
StandardFields & operator/=(Mdouble a)
Divides the field values on the LHS by the RHS of the equation.
Definition: StandardFields.cc:152
void addInteractionForceDensity(Vec3D interactionForceDensity)
Definition: StandardFields.h:216
void setContactStress(Matrix3D contactStress)
Definition: StandardFields.h:201
StandardFields(const StandardFields &P)=default
Default copy constructor, copies the values of all fields.
StandardFields & operator+=(const StandardFields &P)
Adds the field values on the RHS to the LHS of the equation.
Definition: StandardFields.cc:102
~StandardFields()=default
Destructor, it simply destructs the StandardFields and all the objects it contains.
std::array< Mdouble, 6 > getCentralParticleSizeMomenta() const
Definition: StandardFields.cc:282
void addParticleDifferentialStatistics(Vec3D &dphi, const StandardFields &currentInteraction)
Definition: StandardFields.cc:178
void addContactStress(Matrix3D contactStress)
Definition: StandardFields.h:206
StandardFields getSquared() const
Returns the square of all field values (to calculate standard deviation).
Definition: StandardFields.cc:77
void output(std::ostream &os) const
Writes human-readable class content into an output stream, typically a stat file.
Definition: StandardFields.cc:51
Mdouble volumeFraction_
Definition: StandardFields.h:229
void setInteractionForceDensity(Vec3D interactionForceDensity)
Definition: StandardFields.h:211
Implementation of a 3D matrix.
Definition: Kernel/Math/Matrix.h:17
Implementation of a 3D symmetric matrix.
Definition: MatrixSymmetric.h:16
Definition: Kernel/Math/Vector.h:30
const Scalar * a
Definition: level2_cplx_impl.h:32
Definition: BaseFields.h:14
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
int c
Definition: calibrate.py:100
type
Definition: compute_granudrum_aor.py:141