NetDEM v1.0
|
A class used to solve collisions between a particle and a wall using a signed distance field. More...
#include <solver_sdf_pw.hpp>
Public Types | |
enum | PotentialType { linear , hertz } |
An enumeration of potential types used by the solver. More... | |
Public Member Functions | |
SolverSDFPW () | |
Default constructor for SolverSDFPW class. | |
SolverSDFPW (Particle *const p, Wall *const w) | |
Constructor for SolverSDFPW class. | |
CollisionSolverPW * | Clone () const override |
Clones the current SolverSDFPW instance. | |
void | Init (Particle *const p, Wall *const w) override |
Initializes the SolverSDFPW instance with the given particles and walls. | |
bool | Detect () override |
Detects if there is a collision between the particle and the wall. | |
void | ResolveInit (ContactPW *const cnt, double timestep) override |
Resolves the collision based on the initial contact information and timestep. | |
void | ResolveUpdate (ContactPW *const cnt, double timestep) override |
Updates the contact information object and resolves the collision based on the updated information and timestep. | |
void | ResolveInit (CollisionGeometries *const cnt_geoms, double timestep) |
Resolves the collision between the particle and the wall based on the initial contact geometries and timestep. | |
void | ResolveUpdate (CollisionGeometries *const cnt_geoms, double timestep) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep. | |
void | ResolveInitWToP (CollisionGeometries *const cnt_geoms, double timestep) |
Resolves the collision between the wall and the particle based on the initial contact geometries and timestep. | |
void | ResolveUpdateWToP (CollisionGeometries *const cnt_geoms, double timestep) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep. | |
void | ResolveInitPToW (CollisionGeometries *const cnt_geoms, double timestep) |
Resolves the collision between the particle and the wall based on the initial contact geometries and timestep. | |
void | ResolveUpdatePToW (CollisionGeometries *const cnt_geoms, double timestep) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep. | |
double | GetPotential (double dist, double node_area, double size_eq, double size_ratio) |
Calculates the potential energy between two shapes based on their distance and type of potential function used. | |
Public Member Functions inherited from netdem::CollisionSolverPW | |
CollisionSolverPW () | |
CollisionSolverPW (Particle *const p, Wall *const w) | |
virtual bool | Detect (ContactPW *const cnt) |
virtual | ~CollisionSolverPW () |
Static Public Member Functions | |
static double | KiToKn (double ki, double size_eq, double size_ratio) |
static double | KiFromKn (double kn, double size_eq, double size_ratio) |
static double | KiToEstar (double ki, double size_eq, double size_ratio) |
static double | KiFromEstar (double Estar, double size_eq, double size_ratio) |
Public Attributes | |
int | potential_type {PotentialType::linear} |
Whether to solve both sides of the collision. | |
bool | solve_two_sides {false} |
bool | use_equivalent_stiffness {true} |
double | beta {0.65} |
Public Attributes inherited from netdem::CollisionSolverPW | |
Particle * | particle {nullptr} |
Wall * | wall {nullptr} |
Additional Inherited Members | |
Protected Member Functions inherited from netdem::CollisionSolverPW | |
void | InitBasicGeoms (CollisionGeometries *const cnt_geoms, double timestep) |
void | UpdateBasicGeoms (CollisionGeometries *const cnt_geoms, double timestep, Vec3d const &dir_n_old) |
A class used to solve collisions between a particle and a wall using a signed distance field.
The SolverSDFPW class is used to solve collisions between a particle and a wall based on the signed distance field of the particles and walls in a particle-wall collision detection system.
netdem::SolverSDFPW::SolverSDFPW | ( | ) |
Default constructor for SolverSDFPW class.
Constructor for SolverSDFPW class.
p | A pointer to the particle involved in the collision. |
w | A pointer to the wall involved in the collision. |
|
overridevirtual |
Clones the current SolverSDFPW instance.
Implements netdem::CollisionSolverPW.
|
overridevirtual |
Detects if there is a collision between the particle and the wall.
Implements netdem::CollisionSolverPW.
double netdem::SolverSDFPW::GetPotential | ( | double | dist, |
double | node_area, | ||
double | size_eq, | ||
double | size_ratio ) |
Calculates the potential energy between two shapes based on their distance and type of potential function used.
dist | The distance between the shapes. |
node_area | The surface area associated with the node. |
size_eq | The equivalent size of the shape. |
Initializes the SolverSDFPW instance with the given particles and walls.
p | A pointer to the particle involved in the collision. |
w | A pointer to the wall involved in the collision. |
Reimplemented from netdem::CollisionSolverPW.
|
static |
|
static |
|
static |
|
static |
void netdem::SolverSDFPW::ResolveInit | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Resolves the collision between the particle and the wall based on the initial contact geometries and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
|
overridevirtual |
Resolves the collision based on the initial contact information and timestep.
cnt | A pointer to the contact information object. |
timestep | The timestep to use for resolving the collision. |
Implements netdem::CollisionSolverPW.
void netdem::SolverSDFPW::ResolveInitPToW | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Resolves the collision between the particle and the wall based on the initial contact geometries and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
void netdem::SolverSDFPW::ResolveInitWToP | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Resolves the collision between the wall and the particle based on the initial contact geometries and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
void netdem::SolverSDFPW::ResolveUpdate | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
|
overridevirtual |
Updates the contact information object and resolves the collision based on the updated information and timestep.
cnt | A pointer to the contact information object. |
timestep | The timestep to use for resolving the collision. |
Implements netdem::CollisionSolverPW.
void netdem::SolverSDFPW::ResolveUpdatePToW | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
void netdem::SolverSDFPW::ResolveUpdateWToP | ( | CollisionGeometries *const | cnt_geoms, |
double | timestep ) |
Updates the contact geometries object and resolves the collision based on the updated information and timestep.
cnt_geoms | A pointer to the contact geometries object. |
timestep | The timestep to use for resolving the collision. |
double netdem::SolverSDFPW::beta {0.65} |
int netdem::SolverSDFPW::potential_type {PotentialType::linear} |
Whether to solve both sides of the collision.
bool netdem::SolverSDFPW::solve_two_sides {false} |
Whether to auto convert the model stiffness parameter, such that it is identical to those in conventional linear or Hertz contact.
bool netdem::SolverSDFPW::use_equivalent_stiffness {true} |