This is an example of how to use the netdem library.
#include <iostream>
#include <unordered_map>
using namespace std;
void TriaxialComp() {
for (auto &p : particle_list) {
p.SetDensity(265000);
p.damp_numerical = 0.7;
}
string root_dir = "local/examples/netdem/ann_models/";
cnt_solver_pp.
Init(root_dir +
"trimesh_trimesh/ann_classifier.xml",
root_dir + "trimesh_trimesh/ann_regressor.xml");
cnt_solver_pw.
Init(root_dir +
"trimesh_plane/ann_classifier.xml",
root_dir + "trimesh_plane/ann_regressor.xml");
int solver_id_pp =
int solver_id_pw =
for (auto shape_ptr_1 : shape_list) {
for (auto shape_ptr_2 : shape_list) {
if (shape_ptr_1->shape_type == Shape::Type::trimesh &&
shape_ptr_2->shape_type == Shape::Type::trimesh) {
shape_ptr_1->use_customized_solver = true;
shape_ptr_2->use_customized_solver = true;
shape_ptr_1->id, shape_ptr_2->id, solver_id_pp);
} else if (shape_ptr_1->shape_type == Shape::Type::trimesh &&
shape_ptr_2->shape_type == Shape::Type::plane) {
shape_ptr_1->use_customized_solver = true;
shape_ptr_2->use_customized_solver = true;
shape_ptr_1->id, shape_ptr_2->id, solver_id_pw);
}
}
}
for (int i = 0; i < 10; i++) {
}
servo_top.
label =
"servo_top";
do {
} while (!servo_top_ptr->achieved);
servo_lateral.
label =
"servo_lateral";
servo_lateral.
SetWall({0, 1, 2, 3});
do {
}
while (!servo_top_ptr->achieved || !servo_lateral.
achieved);
servo_lateral_ptr->enable_warning = true;
delete sim;
}
void SetSpacing(double s_x, double s_y, double s_z)
Set the spacing between adjacent cells in the simulation grid.
Definition cell_manager.cpp:94
double timestep
Definition dem_solver.hpp:42
ContactSolverFactory contact_solver_factory
Definition dem_solver.hpp:50
A class used to dump particle data into vtk files. This is a post-modifier, which will be executed at...
Definition data_dumper.hpp:12
void Init(Simulation *sim) override
Initializes the DataDumper instance.
Definition data_dumper.cpp:24
bool dump_wall_info
A flag that determines whether to dump wall information.
Definition data_dumper.hpp:21
bool dump_contact_info
A flag that determines whether to dump contact information.
Definition data_dumper.hpp:25
void SaveShapeInfoAsSTL()
Saves shape information as an STL file.
Definition data_dumper.cpp:2245
void SetSaveByCycles(double interval)
Sets the interval for saving data by cycles.
Definition data_dumper.cpp:39
void SetRootPath(std::string const &root_path)
Sets the root directory path for the output file.
Definition data_dumper.cpp:26
CellManager cell_manager
Manages the cells, which are used in the borad-phase contact detection.
Definition domain.hpp:58
void SetBound(double bmin_x, double bmin_y, double bmin_z, double bmax_x, double bmax_y, double bmax_z)
Sets the lower and upper bounds of the domain.
Definition domain_manager.cpp:83
Domain * GetSelfSubDomain()
Returns a pointer to the sub-domain that belongs to this process.
Definition domain_manager.cpp:124
A class used to apply gravity to particles in a DEM simulation.
Definition gravity.hpp:10
void Init(Simulation *sim) override
Initializes the Gravity instance.
Definition gravity.cpp:14
std::string label
Definition modifier.hpp:20
virtual void Init(Simulation *sim)
Initializes the Modifier instance.
Definition modifier.cpp:11
Modifier * Insert(Modifier *e)
Inserts new modifier into the simulation.
Definition modifier_manager.cpp:17
void Enable(std::string const &label)
Enables a modifier in the simulation.
void Disable(std::string const &label)
Disables a modifier in the simulation.
ContactModel * InsertContactModel(const ContactModel *const cm_ptr)
Insert a contact model into this scene.
Definition scene.cpp:290
void SetNumberOfMaterials(int num)
Set the number of materials in this scene and initialize the contact lookup table accordingly.
Definition scene.cpp:346
Shape * InsertShape(const Shape *const s_ptr)
Insert a single shape into this scene.
Definition scene.cpp:19
void SetCollisionModel(int mat_type_1, int mat_type_2, ContactModel *const cnt_model)
Set the collision model between two materials.
Definition scene.cpp:397
Particle * InsertParticle(const Particle *const p_ptr)
Insert a single particle into this scene.
Definition scene.cpp:76
VecXT< Shape * > GetShapes()
Return a vector of pointers to all shapes in this scene.
Definition scene.cpp:316
VecXT< Wall * > wall_list
A list of pointers to all walls assumed to exist in this scene. No MPI transfer is performed on wall ...
Definition scene.hpp:71
Class for managing a DEM simulation.
Definition simulation.hpp:21
DEMSolver dem_solver
Implements DEM algorithms to solve the scene.
Definition simulation.hpp:47
void Run(double time)
Runs the simulation for a specified period of time.
Definition simulation.cpp:28
DomainManager domain_manager
Manager for domain and sub-domain calculations.
Definition simulation.hpp:31
ModifierManager modifier_manager
Manages add-on features (i.e., customized evaluations not hard-coded in the DEM calculation cycle).
Definition simulation.hpp:53
Scene scene
Contains and manages basic DEM objects (e.g., shapes, particles, walls) for a DEM simulation.
Definition simulation.hpp:42
A class that represents a collision solver using artificial neural networks.
Definition solver_ann_pp.hpp:28
void Init(std::string const &classifier_file, std::string const ®ressor_file)
Initializes the collision solver with neural network models from disk.
A class that represents a collision solver between a particle and a plane using artificial neural net...
Definition solver_ann_pplane.hpp:28
void Init(std::string const &classifier_file, std::string const ®ressor_file)
Initializes the collision solver with neural network models from disk.
A class representing a triangular mesh in 3D space.
Definition shape_trimesh.hpp:23
void InitFromSTL(std::string const &file)
Initialize the TriMesh object from an STL file.
void Decimate(int num_nodes)
Decimate the TriMesh object.
Definition shape_trimesh.cpp:121
void AlignAxes()
Align the axes of the TriMesh object.
Definition shape_trimesh.cpp:107
void SetSize(double d) override
Set the size of the TriMesh object.
Definition shape_trimesh.cpp:207
Contact model that evaluates forces and moments based on volume overlap and relative velocity.
Definition model_volume_based.hpp:13
A class for generating a box of six walls.
Definition gen_wall_box_plane.hpp:23
void ImportToScene(Scene *scene)
Imports the shapes and walls generated by the wall box into a scene.
Definition gen_wall_box_plane.hpp:102
void SetWall(int id)
Sets the walls based on a wall ID.
Definition wall_group.cpp:56
A class used to control the displacement of walls in a DEM simulation.
Definition wall_motion_control.hpp:16
void SetVelocity(double v_x, double v_y, double v_z)
Sets the velocity properties for all walls in the group.
Definition wall_motion_control.cpp:15
A class used to control the pressure of walls in a DEM simulation.
Definition wall_servo_control.hpp:17
double target_pressure
Target pressure.
Definition wall_servo_control.hpp:24
double study_rate
Coefficient of PID servo-control.
Definition wall_servo_control.hpp:26
bool enable_auto_area
A flag indicating whether to automaticaly calculate the contact area from the particles.
Definition wall_servo_control.hpp:36
bool achieved
A flag indicating if target pressure is achieved.
Definition wall_servo_control.hpp:29
double vel_max
Maximum velocity of wall during servo-control.
Definition wall_servo_control.hpp:25
double tol
Tolerance of servo-control.
Definition wall_servo_control.hpp:28
Definition bond_entry.hpp:7
std::vector< T > VecXT
Definition utils_macros.hpp:31