MPM-Geomechanics
Material Point Method for simulating geo-materials under large deformation conditions
Loading...
Searching...
No Matches
Particle.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021-2025 MPM-Geomechanics Development Team
3
4#ifndef PARTICLE_H_
5#define PARTICLE_H_
6
7#include "Eigen/Core"
8using Eigen::Matrix3d;
9using Eigen::Vector3d;
10
11#include "Contribution.h"
12#include "Mesh/Mesh.h"
13#include "Model.h"
14#include "Shape/Shape.h"
15#include "Materials/Material.h"
16
17#include <vector>
18
19class Mesh;
20
25class Particle {
26
27public:
28
33 Particle(const Vector3d& position, Material* material, const Vector3d& size);
34
36 virtual ~Particle();
37
41
44 inline void updateStress() { material->updateStress(this); }
45
48 virtual inline void updatePressure(double) { return; }
49
53
56 virtual inline void updatePorosity() { return; }
57
60 inline bool getActive() const { return this->active; }
61
64 inline int getId() const { return this->id; }
65
68 inline int getMaterialId() const { return this->material!=0?this->material->getId():-1; }
69
72 inline int getBodyId() const { return this->bodyId; }
73
76 inline double getMass() const { return this->mass; }
77
80 virtual inline double getMassFluid() const { return 0.0; }
81
84 inline double getDensity() const { return this->density; }
85
88 virtual inline double getDensityFluid() const { return 0.0; }
89
92 virtual inline double getCurrentVolume() const { return this->mass/this->density; }
93
96 inline double getInitialVolume() const { return this->size.x()*this->size.y()*this->size.z(); }
97
100 inline const Vector3d& getPosition() const { return this->position; }
101
104 inline const Vector3d& getInitialPosition() const { return this->initialPosition; }
105
108 inline const Vector3d& getExternalForce() const { return this->externalForce; }
109
112 virtual inline const Vector3d* getExternalForceFluid() const { return NULL; }
113
116 inline const Vector3d& getVelocity() const { return this->velocity; }
117
120 virtual inline const Vector3d* getVelocityFluid() const { return NULL; }
121
124 inline const Matrix3d& getStress() const { return this->stress; }
125
128 inline const Matrix3d& getStrainIncrement() const { return this->strainIncrement; }
129
132 virtual inline const Matrix3d* getStrainIncrementFluid() const { return NULL; }
133
136 inline const Matrix3d& getStrain() const { return this->strain; }
137
140 inline const Matrix3d& getVorticityIncrement() const { return this->vorticityIncrement; }
141
144 inline vector<Contribution>* getContributionNodes() { return &(this->contributionNodes); }
145
148 inline void setActive(bool particle_active) { this->active=particle_active; }
149
152 inline void setId(int particle_id) { this->id=particle_id; }
153
156 inline void setBodyId(int body_id) { this->bodyId=body_id; }
157
160 inline void setMass(double particle_mass) { this->mass=particle_mass; }
161
164 inline void setDensity(double particle_density) { this->density=particle_density; }
165
168 inline void setPosition(const Vector3d& particle_position) { this->position=particle_position; }
169
172 inline void setInitialPosition(const Vector3d& particle_initial_position) { this->initialPosition=particle_initial_position; }
173
176 inline void setSize(const Vector3d& particle_size) { this->size=particle_size; }
177
180 inline const Vector3d& getSize( ) { return this->size; }
181
184 inline void setVelocity(const Vector3d& particle_velocity) { this->velocity = particle_velocity; }
185
188 virtual inline void setVelocityFluid(const Vector3d&) { return; }
189
192 inline void setStrainIncrement(const Matrix3d& strain_increment) { this->strainIncrement=strain_increment; this->strain+=strain_increment; }
193
196 virtual inline void setStrainIncrementFluid(const Matrix3d&) { return; }
197
200 inline void setVorticityIncrement(const Matrix3d& vorticity_increment) { this->vorticityIncrement=vorticity_increment; }
201
204 inline void setStress(const Matrix3d& particle_stress) { this->stress=particle_stress; }
205
209
212 inline void setShape(Shape* shape) { this->shape=shape; }
213
216 inline void addExternalForce(const Vector3d& delta_external_force) { this->externalForce+=delta_external_force; }
217
220 virtual inline void addExternalForceFluid(const Vector3d&) { return; }
221
224 static int getTotalParticles();
225
228 inline void addPlasticStrain(double deltaPlasticStrain) { this->plasticStrain+=deltaPlasticStrain; }
229
232 inline double getPlasticStrain() const { return this->plasticStrain; }
233
236 virtual inline double getPressureFluid() const { return 0.0; }
237
240 virtual inline void setPressureFluid(double) { return; }
241
244 virtual inline double getPorosity() const { return 0.0; }
245
248 virtual inline double getSaturation() const { return 0.0; }
249
252 virtual inline Vector3d getDragForceFluid() const { return Vector3d::Zero(); }
253
256 inline void setDeformationGradient(const Matrix3d& deformation_gradient) { this->deformationGradient=deformation_gradient; }
257
260 inline const Matrix3d& getDeformationGradient() const { return this->deformationGradient; }
261
263 inline void setDistanceLevelSet(double distance) { this->distanceLevelSet=distance; }
264
266 inline double getDistanceLevelSet() { return this->distanceLevelSet; }
267
268protected:
269
270 bool active;
271 int id;
272 int bodyId;
273
274 double mass;
275 double density;
278
279 Vector3d position;
281 Vector3d velocity;
282 Vector3d externalForce;
283 Vector3d size;
284
285 Matrix3d stress;
286 Matrix3d strain;
290
291 vector<Contribution> contributionNodes;
294
295 static int totalParticles;
296};
297
299
301}
302
304
305 return totalParticles;
306}
307
308#endif /* PARTICLE_H_ */
Represents a material.
Definition Material.h:14
int getId() const
Return the identification.
Definition Material.h:32
virtual void updateStress(Particle *particle) const =0
Update the stress tensor.
Class representing a rectangular grid mesh.
Definition Mesh.h:26
Represents a Lagrangian material point This class contain all Lagrangian variables that represents th...
Definition Particle.h:25
const Matrix3d & getStress() const
Returns the current particle stress tensor.
Definition Particle.h:124
void updateStress()
Update the particle stress.
Definition Particle.h:44
Matrix3d strainIncrement
current particle strain increment:
Definition Particle.h:287
Matrix3d stress
current particle stress:
Definition Particle.h:285
double plasticStrain
current effective plastic strain:
Definition Particle.h:276
void setVorticityIncrement(const Matrix3d &vorticity_increment)
Configures the vorticity increment.
Definition Particle.h:200
Vector3d externalForce
particle external force:
Definition Particle.h:282
Matrix3d deformationGradient
particle deformation gradient:
Definition Particle.h:289
const Matrix3d & getStrain() const
Returns the strain.
Definition Particle.h:136
int getBodyId() const
Returns the particle's body Id.
Definition Particle.h:72
void setActive(bool particle_active)
Configures the particle active status.
Definition Particle.h:148
void setMass(double particle_mass)
Configures particle mass.
Definition Particle.h:160
virtual void setVelocityFluid(const Vector3d &)
Configures particle velocity of fluid phase.
Definition Particle.h:188
Material * material
particle material (see class Material)
Definition Particle.h:293
double getDensity() const
Returns the current solid density.
Definition Particle.h:84
void setBodyId(int body_id)
Configures the set particle's body Id.
Definition Particle.h:156
int getMaterialId() const
Returns the particle's material.
Definition Particle.h:68
virtual double getPorosity() const
Returns current porosity.
Definition Particle.h:244
virtual Vector3d getDragForceFluid() const
Returns the drag force of fluid in particle.
Definition Particle.h:252
void setVelocity(const Vector3d &particle_velocity)
Configures particle velocity.
Definition Particle.h:184
const Matrix3d & getStrainIncrement() const
Returns the strain increment.
Definition Particle.h:128
virtual void addExternalForceFluid(const Vector3d &)
Adds a external fluid force increment.
Definition Particle.h:220
int getId() const
Returns the particle identification.
Definition Particle.h:64
void addPlasticStrain(double deltaPlasticStrain)
Add a plastic strain increment.
Definition Particle.h:228
void setStrainIncrement(const Matrix3d &strain_increment)
Configures the strain increment.
Definition Particle.h:192
int id
particle id
Definition Particle.h:271
void setStress(const Matrix3d &particle_stress)
Configures the current particle stress tensor.
Definition Particle.h:204
const Vector3d & getVelocity() const
Returns particle velocity.
Definition Particle.h:116
Vector3d position
current particle position:
Definition Particle.h:279
void setInitialPosition(const Vector3d &particle_initial_position)
Configures the initial particle position.
Definition Particle.h:172
void setDensity(double particle_density)
Configures particle density.
Definition Particle.h:164
virtual double getCurrentVolume() const
Returns current particle volume.
Definition Particle.h:92
virtual void updatePorosity()
Update the particle porosity.
Definition Particle.h:56
virtual void setPressureFluid(double)
Configure the pressure of fluid.
Definition Particle.h:240
void updateDensity()
Update the particle density.
Matrix3d vorticityIncrement
particle vorticity increment:
Definition Particle.h:288
bool active
is particle active
Definition Particle.h:270
int bodyId
body id
Definition Particle.h:272
virtual double getSaturation() const
Returns Saturation of fluid in void in mixture.
Definition Particle.h:248
virtual const Vector3d * getExternalForceFluid() const
Returns the external force of fluid in particle.
Definition Particle.h:112
const Matrix3d & getDeformationGradient() const
Returns deformation gradient.
Definition Particle.h:260
virtual double getMassFluid() const
Returns fluid mass in mixture.
Definition Particle.h:80
double density
current particle density:
Definition Particle.h:275
Vector3d initialPosition
particle initial position:
Definition Particle.h:280
double getInitialVolume() const
Returns initial particle volume.
Definition Particle.h:96
Shape * shape
shape functions values (see class Shape)
Definition Particle.h:292
bool getActive() const
Returns the particle active status.
Definition Particle.h:60
void setShape(Shape *shape)
Configures the shape function in the particle.
Definition Particle.h:212
void setId(int particle_id)
Configures the particle id.
Definition Particle.h:152
double getDistanceLevelSet()
Returns the distance level set function value.
Definition Particle.h:266
const Matrix3d & getVorticityIncrement() const
Returns the vorticity increment.
Definition Particle.h:140
vector< Contribution > contributionNodes
id of nodes that the particle contributes
Definition Particle.h:291
virtual void updatePressure(double)
Update the particle pressure.
Definition Particle.h:48
double distanceLevelSet
distance level set function value:
Definition Particle.h:277
virtual const Vector3d * getVelocityFluid() const
Returns velocity of fluid.
Definition Particle.h:120
virtual double getPressureFluid() const
Returns pressure of fluid.
Definition Particle.h:236
const Vector3d & getSize()
Return particle size in each direction.
Definition Particle.h:180
virtual const Matrix3d * getStrainIncrementFluid() const
Returns the strain increment of fluid.
Definition Particle.h:132
void updateContributionNodes(Mesh *mesh)
Update the list of nodes that the particle contributes.
void setDeformationGradient(const Matrix3d &deformation_gradient)
Configures deformation gradient.
Definition Particle.h:256
Vector3d size
current size in each direction:
Definition Particle.h:283
void setDistanceLevelSet(double distance)
Configures the distance level set function value.
Definition Particle.h:263
Particle(const Vector3d &position, Material *material, const Vector3d &size)
Create a particle.
virtual ~Particle()
Default destructor.
Definition Particle.h:298
double getMass() const
Returns solid mass.
Definition Particle.h:76
Vector3d velocity
current particle velocity:
Definition Particle.h:281
const Vector3d & getExternalForce() const
Returns the external force in particle.
Definition Particle.h:108
virtual void setStrainIncrementFluid(const Matrix3d &)
Configures the strain increment of fluid phase.
Definition Particle.h:196
virtual void setMaterial(Material *material)
Configures the material in the particle.
const Vector3d & getInitialPosition() const
Returns the initial particle position.
Definition Particle.h:104
void addExternalForce(const Vector3d &delta_external_force)
Adds a external force increment.
Definition Particle.h:216
vector< Contribution > * getContributionNodes()
Returns the contribution list.
Definition Particle.h:144
double mass
particle mass:
Definition Particle.h:274
void setSize(const Vector3d &particle_size)
Configures particle size in each direction.
Definition Particle.h:176
void setPosition(const Vector3d &particle_position)
Configures the current particle position.
Definition Particle.h:168
const Vector3d & getPosition() const
Returns the current particle position.
Definition Particle.h:100
Matrix3d strain
current particle strain:
Definition Particle.h:286
double getPlasticStrain() const
Get effective plastic strain.
Definition Particle.h:232
static int getTotalParticles()
Returns o number of particles created.
Definition Particle.h:303
static int totalParticles
total particle in the model
Definition Particle.h:295
virtual double getDensityFluid() const
Returns the current density of fluid.
Definition Particle.h:88
Represents the shape functions used in the interpolation process.
Definition Shape.h:12