Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Solver] XMPM #8

Closed
wants to merge 99 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
90c00e1
:tada::sparkles:creat xmpm solver and ParticleXMPM class
yliang-sn Aug 1, 2020
06f4331
:construction: creat and initialise nodal properties for discontinuity
yliang-sn Aug 2, 2020
28c684f
:construction:update nodal properties function and update nodal enric…
yliang-sn Aug 2, 2020
8ba5a31
:construction:update:external force,internal force, compute strain rate
yliang-sn Aug 2, 2020
e5a61ed
:construction:apply velocity constraints discontinuity
yliang-sn Aug 2, 2020
07bd480
:construction:compute updated position
yliang-sn Aug 2, 2020
2beb5ac
:hammer:
yliang-sn Aug 3, 2020
2ddda95
:hammer::construction:self contact for XMPM and boundary condation
yliang-sn Aug 5, 2020
e4a1265
:hammer:move the node_xmpm function to a separate file
yliang-sn Aug 5, 2020
e185bb4
:bug:miss some functions for node_xmpm.tcc
yliang-sn Aug 5, 2020
c399266
:hammer:add const
yliang-sn Aug 5, 2020
cf3a06b
:construction:clang format
yliang-sn Aug 6, 2020
32b51bb
:constructor:discontinuity function
Aug 15, 2020
67ae1db
:hammer::construction:clean xmpmparticle class
Aug 16, 2020
6f9da8b
:hammer:change discontinuouty_point_line name
Aug 16, 2020
030993a
:hammer:separate the discontinuity functions into different files
Aug 16, 2020
f4792f4
:pencil::hammer::construction:clean up particleXMPM class
Aug 17, 2020
701cdd9
:pencil::hammer::construction:clean the discontinuity base class
Aug 17, 2020
7c58d82
:pencil:clean discontinuity3d class
Aug 17, 2020
c3ad208
:constructuin:assign friction coefficient for nodes
Aug 17, 2020
ce0c7b3
Update include/mesh.h
yliang-sn Aug 25, 2020
2d95f12
:tada::sparkles:creat xmpm solver and ParticleXMPM class
yliang-sn Aug 1, 2020
41a05a1
:construction: creat and initialise nodal properties for discontinuity
yliang-sn Aug 2, 2020
54e7b4d
:construction:update nodal properties function and update nodal enric…
yliang-sn Aug 2, 2020
332e940
:construction:update:external force,internal force, compute strain rate
yliang-sn Aug 2, 2020
c24c3f4
:construction:apply velocity constraints discontinuity
yliang-sn Aug 2, 2020
faec00b
:construction:compute updated position
yliang-sn Aug 2, 2020
d94e611
:hammer:
yliang-sn Aug 3, 2020
4a8deb6
:hammer::construction:self contact for XMPM and boundary condation
yliang-sn Aug 5, 2020
ab32ab3
:hammer:move the node_xmpm function to a separate file
yliang-sn Aug 5, 2020
d7a5c85
:bug:miss some functions for node_xmpm.tcc
yliang-sn Aug 5, 2020
3b9b316
:hammer:add const
yliang-sn Aug 5, 2020
fee31b7
:construction:clang format
yliang-sn Aug 6, 2020
835db0a
:constructor:discontinuity function
Aug 15, 2020
201f6cf
:hammer::construction:clean xmpmparticle class
Aug 16, 2020
c1850df
:hammer:change discontinuouty_point_line name
Aug 16, 2020
6494559
:hammer:separate the discontinuity functions into different files
Aug 16, 2020
8152840
:pencil::hammer::construction:clean up particleXMPM class
Aug 17, 2020
71179ea
:pencil::hammer::construction:clean the discontinuity base class
Aug 17, 2020
435dccd
:pencil:clean discontinuity3d class
Aug 17, 2020
a62c285
:constructuin:assign friction coefficient for nodes
Aug 17, 2020
684f192
Update include/mesh.h
yliang-sn Aug 25, 2020
f1f6af3
:pencil::construction:delete the compute_strain function in XMPM
Aug 28, 2020
7869f64
:hammer:modify the solver scheme
Aug 31, 2020
91ff382
:hammer:use assert instead of if
Aug 31, 2020
84158b6
:hammer:update some comments and fix some code
Sep 1, 2020
f8cb643
:hammer:
Sep 1, 2020
0c86c24
:construction:xmpm solver test functions for 3d
Sep 7, 2020
2734df6
:construction:particle_xmpm test functions
Sep 7, 2020
85a8d68
:construction:check discontinuity in mesh
Sep 7, 2020
66332b0
add width of the discontinuity
Oct 1, 2020
48755b6
:construction:assign the levelset width and coefficient
Oct 4, 2020
ff7ff15
:construction:node_xmpm test functions
Oct 4, 2020
3be07a8
:hammer:modify node default enriched type
Oct 4, 2020
c2d9142
:hammer:modify the level set computation
Oct 4, 2020
44afbe0
:construction:output level set values
Oct 4, 2020
0af8791
:hammer:fix the issue about friction coefficient
Oct 5, 2020
8decf2b
:construction:compute the principal stress and strain
Oct 5, 2020
77b115f
Merge remote-tracking branch 'origin/refactor/resume' into solver/xmpm
Oct 5, 2020
2d64ccd
:hammer:velocity update by the enriched nodes
Oct 6, 2020
2372c0a
Merge remote-tracking branch 'origin/refactor/resume' into solver/xmpm
Oct 6, 2020
026ca2a
xmpm solver
yliang-sn Sep 8, 2021
c4140ea
xmpm solver
yliang-sn Sep 8, 2021
edf16fc
merge develop
yliang-sn Sep 8, 2021
512a160
clean oso part
yliang-sn Oct 7, 2021
8ce7850
clean oso hardcode
yliang-sn Oct 7, 2021
a71f048
clean hard code
yliang-sn Oct 8, 2021
3f8f0b0
Update cell.h
yliang-sn Oct 8, 2021
8316654
apply the clang format
yliang-sn Oct 8, 2021
8b5f813
make a separate file mesh_xmpm
yliang-sn Oct 18, 2021
b9d6385
find the cells at nodes
yliang-sn Oct 20, 2021
26291c8
make a separate file cell_xmpm.tcc
yliang-sn Oct 20, 2021
9aa5404
tidy the mark points generation
yliang-sn Oct 20, 2021
91fe5d5
merge master into xmpm
yliang-sn Oct 21, 2021
0ba0c01
solve the conflicts about hdf5
yliang-sn Oct 21, 2021
2462fe8
tidy the code and comments
yliang-sn Nov 3, 2021
138dd64
merge master into solver/xmpm
yliang-sn Nov 3, 2021
98d5aa3
add P3DXMPM particle type
yliang-sn Nov 4, 2021
128ea5c
clang formating
bodhinandach Nov 4, 2021
50138ee
clean the unsed variables
yliang-sn Nov 5, 2021
4f7965d
Merge branch 'xmpm_crackbranch' into solver/xmpm
yliang-sn Nov 5, 2021
b178b13
clean the unsed variables
yliang-sn Nov 5, 2021
f27b51c
clean the unsed variables
yliang-sn Nov 5, 2021
5aa3fbd
fix particle cc
bodhinandach Nov 5, 2021
730b803
Merge branch 'solver/xmpm' of https://github.com/geomechanics/mpm int…
yliang-sn Nov 5, 2021
652dec6
remove hardcode in mohr_coulomb.tcc
yliang-sn Nov 5, 2021
7daa8d8
remove typo
yliang-sn Nov 5, 2021
170658c
update write_mesh_particles.cc
yliang-sn Nov 5, 2021
99179d8
update write_mesh_particles.cc
yliang-sn Nov 5, 2021
302708d
resolve bugs in test part
yliang-sn Nov 5, 2021
708682d
define XMPM group for XMPM functions and variables
yliang-sn Nov 6, 2021
93497aa
add comment "\ingroup XMPM" and initialise_xmpm function
yliang-sn Nov 6, 2021
76fbda1
delete discontinuity_enrich_ initialization in the node.tcc
yliang-sn Nov 7, 2021
1bb55d5
defgroup xmpm
yliang-sn Nov 7, 2021
3b72509
tidy the code
yliang-sn Nov 7, 2021
288371e
add the pod_particle_xmpm class
yliang-sn Nov 7, 2021
66da947
Merge branch 'master' of https://github.com/geomechanics/mpm into sol…
yliang-sn Nov 15, 2021
533f5f8
clang format
bodhinandach Nov 16, 2021
70112b5
xmpm modification after discussions
bodhinandach Nov 17, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
🔨modify the solver scheme
yong liang committed Aug 31, 2020

Unverified

This user has not yet uploaded their public signing key.
commit 7869f64c471d01b828281fe4d98ad70898bc78f9
8 changes: 4 additions & 4 deletions include/mesh.h
Original file line number Diff line number Diff line change
@@ -462,14 +462,11 @@ class Mesh {
// Initialise the nodal properties' map
void initialise_nodal_properties();

//! Set particles lsm values
void assign_particle_levelset(const std::vector<double>& phi_list);

// Create the nodal properties' map for discontinuity
void create_nodal_properties_discontinuity();

//! Initialise discontinuities
//! \param[in] discontinuities List of discontinuities
//! \param[in] discontinuities List of discontinuities
void initialise_discontinuities(
const std::map<unsigned, std::shared_ptr<mpm::DiscontinuityBase<Tdim>>>&
discontinuities) {
@@ -489,6 +486,9 @@ class Mesh {
//! compute the normal vector of enriched nodes at the discontinuity
void compute_normal_vector_discontinuity();

//! Initialise the level set function values
void initialise_levelset_discontinuity();

private:
// Read particles from file
//! \param[in] pset_id Set ID of the particles
24 changes: 15 additions & 9 deletions include/mesh.tcc
Original file line number Diff line number Diff line change
@@ -1975,8 +1975,7 @@ void mpm::Mesh<Tdim>::create_nodal_properties_discontinuity() {
nodal_properties_->create_property("external_force_enrich", nrows, 1);
nodal_properties_->create_property("normal_unit_vectors_discontinuity",
nrows, 1);
nodal_properties_->create_property("friction_coef",
nodes_.size(), 1);
nodal_properties_->create_property("friction_coef", nodes_.size(), 1);
// Iterate over all nodes to initialise the property handle in each node
// and assign its node id as the prop id in the nodal property data pool
for (auto nitr = nodes_.cbegin(); nitr != nodes_.cend(); ++nitr)
@@ -1994,13 +1993,6 @@ void mpm::Mesh<Tdim>::initialise_nodal_properties() {
nodal_properties_->initialise_nodal_properties();
}

//! Set particles lsm values
template <unsigned Tdim>
void mpm::Mesh<Tdim>::assign_particle_levelset(const std::vector<double>& phi_list) {
for (mpm::Index i = 0; i < nparticles(); ++i)
particles_[i]->assign_levelsetphi(phi_list[i]);
}

//! Locate points in a cell
template <unsigned Tdim>
void mpm::Mesh<Tdim>::locate_discontinuity() {
@@ -2045,3 +2037,17 @@ void mpm::Mesh<Tdim>::compute_normal_vector_discontinuity() {
normal, Tdim);
}
}

// Initialise level set values particles
template <unsigned Tdim>
void mpm::Mesh<Tdim>::initialise_levelset_discontinuity() {

double phi_particle;
for (unsigned i = 0; i < discontinuities_.size(); ++i) {
for (mpm::Index j = 0; j < nparticles(); ++j) {
discontinuities_[i]->compute_levelset(particles_[j]->coordinates(),
phi_particle);
particles_[j]->assign_levelsetphi(phi_particle);
}
}
}
2 changes: 1 addition & 1 deletion include/node.h
Original file line number Diff line number Diff line change
@@ -279,7 +279,7 @@ class Node : public NodeBase<Tdim> {
void assign_discontinuity_enrich(bool discontinuity) {
discontinuity_enrich_ = discontinuity;
};

//! Return whether the node is enriched
bool discontinuity_enrich() const { return discontinuity_enrich_; };

2 changes: 1 addition & 1 deletion include/node.tcc
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ void mpm::Node<Tdim, Tdof, Tnphases>::initialise() noexcept {
acceleration_.setZero();
status_ = false;
material_ids_.clear();
//mark: need to check
// mark: need to check
discontinuity_enrich_ = true;
}

19 changes: 11 additions & 8 deletions include/node_xmpm.tcc
Original file line number Diff line number Diff line change
@@ -121,8 +121,8 @@ void mpm::Node<Tdim, Tdof, Tnphases>::self_contact_discontinuity(
// single phase for solid
unsigned phase = 0;
const double tolerance = 1.0E-15;
//obtain the enriched values of enriched nodes

// obtain the enriched values of enriched nodes
Eigen::Matrix<double, 1, 1> mass_enrich =
property_handle_->property("mass_enrich", discontinuity_prop_id_, 0, 1);
Eigen::Matrix<double, Tdim, 1> momenta_enrich = property_handle_->property(
@@ -156,7 +156,8 @@ void mpm::Node<Tdim, Tdof, Tnphases>::self_contact_discontinuity(

// friction_coef < 0: move together without slide
// need to be done
double friction_coef = property_handle_->property("friction_coef", discontinuity_prop_id_, 0, 1)(0,0);
double friction_coef = property_handle_->property(
"friction_coef", discontinuity_prop_id_, 0, 1)(0, 0);

if (friction_coef < 0) {
property_handle_->update_property("momenta_enrich", discontinuity_prop_id_,
@@ -165,25 +166,27 @@ void mpm::Node<Tdim, Tdof, Tnphases>::self_contact_discontinuity(
discontinuity_prop_id_, 0,
force_contact.col(phase), Tdim);
} else {
//the contact momentum, force value for sticking contact at normal direction
// the contact momentum, force value for sticking contact at normal
// direction
double momentum_contact_norm =
momentum_contact.col(phase).dot(normal_vector);
double force_contact_norm = momentum_contact_norm / dt;

// the maximum friction contact force
double max_friction_force = friction_coef * abs(force_contact_norm);

// the contact momentum, force vector for sticking contact at tangential direction
// the contact momentum, force vector for sticking contact at tangential
// direction
auto momentum_tangential =
momentum_contact.col(phase) - momentum_contact_norm * normal_vector;
auto force_tangential = momentum_tangential / dt;

//the friction force magnitude
// the friction force magnitude
double force_tangential_value = force_tangential.norm();

double force_friction = force_tangential_value < max_friction_force
? force_tangential_value
: max_friction_force;
? force_tangential_value
: max_friction_force;

// adjust the momentum and force
property_handle_->update_property(
4 changes: 2 additions & 2 deletions include/particles/particle.tcc
Original file line number Diff line number Diff line change
@@ -977,8 +977,8 @@ std::vector<uint8_t> mpm::Particle<Tdim>::serialize() {
unsigned nmaterials = material_id_.size();
MPI_Pack(&nmaterials, 1, MPI_UNSIGNED, data_ptr, data.size(), &position,
MPI_COMM_WORLD);
MPI_Pack(&material_id_[mpm::ParticlePhase::Solid], 1, MPI_UNSIGNED, data_ptr, data.size(), &position,
MPI_COMM_WORLD);
MPI_Pack(&material_id_[mpm::ParticlePhase::Solid], 1, MPI_UNSIGNED, data_ptr,
data.size(), &position, MPI_COMM_WORLD);

// ID
MPI_Pack(&id_, 1, MPI_UNSIGNED_LONG_LONG, data_ptr, data.size(), &position,
9 changes: 8 additions & 1 deletion include/particles/particle_xmpm.h
Original file line number Diff line number Diff line change
@@ -68,6 +68,7 @@ class ParticleXMPM : public Particle<Tdim> {
//! \retval strain rate at particle inside a cell
inline Eigen::Matrix<double, 6, 1> compute_strain_rate(
const Eigen::MatrixXd& dn_dx, unsigned phase) noexcept;

private:
//! Assign the level set function values
//! \param[in] phivalue The level set values
@@ -142,8 +143,14 @@ class ParticleXMPM : public Particle<Tdim> {
using Particle<Tdim>::dn_dx_centroid_;
//! Logger
using Particle<Tdim>::console_;
//! Map of scalar properties
using Particle<Tdim>::scalar_properties_;
//! Map of vector properties
using Particle<Tdim>::properties_;
using Particle<Tdim>::vector_properties_;
//! Map of tensor properties
using Particle<Tdim>::tensor_properties_;
//! Pack size
using Particle<Tdim>::pack_size_;

private:
//! level set value: phi for discontinuity
11 changes: 8 additions & 3 deletions include/solvers/xmpm_explicit.h
Original file line number Diff line number Diff line change
@@ -28,9 +28,8 @@ class XMPMExplicit : public MPMBase<Tdim> {
void compute_stress_strain(unsigned phase);

//! Initialise discontinuities
bool initialise_discontinuities();
//! Initialise the level set function values
bool initialise_levelset();
void initialise_discontinuities();

// return the number of discontinuities
mpm::Index ndiscontinuities() { return discontinuities_.size(); };

@@ -55,6 +54,12 @@ class XMPMExplicit : public MPMBase<Tdim> {
using mpm::MPMBase<Tdim>::post_process_;
//! Logger
using mpm::MPMBase<Tdim>::console_;
//! MPM Scheme
using mpm::MPMBase<Tdim>::mpm_scheme_;
//! Stress update method
using mpm::MPMBase<Tdim>::stress_update_;
//! Interface scheme
using mpm::MPMBase<Tdim>::contact_;

#ifdef USE_GRAPH_PARTITIONING
//! Graph
Loading