Skip to content

Commit

Permalink
🔁 Merge branch 'develop' into refactor/serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
kks32 committed Aug 19, 2020
2 parents 020d0b8 + 8fa04f6 commit 6543ab1
Show file tree
Hide file tree
Showing 27 changed files with 1,473 additions and 624 deletions.
12 changes: 8 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,12 @@ include_directories(BEFORE
${mpm_SOURCE_DIR}/include/functions/
${mpm_SOURCE_DIR}/include/generators/
${mpm_SOURCE_DIR}/include/io/
${mpm_SOURCE_DIR}/include/contacts/
${mpm_SOURCE_DIR}/include/loads_bcs/
${mpm_SOURCE_DIR}/include/materials/
${mpm_SOURCE_DIR}/include/particles/
${mpm_SOURCE_DIR}/include/solvers/
${mpm_SOURCE_DIR}/include/solvers/mpm_scheme/
${mpm_SOURCE_DIR}/external/
${mpm_SOURCE_DIR}/tests/include/
)
Expand Down Expand Up @@ -176,6 +178,7 @@ if(MPM_BUILD_TESTING)
${mpm_SOURCE_DIR}/tests/test_main.cc
${mpm_SOURCE_DIR}/tests/cell_test.cc
${mpm_SOURCE_DIR}/tests/cell_vector_test.cc
${mpm_SOURCE_DIR}/tests/contact_test.cc
${mpm_SOURCE_DIR}/tests/factory_test.cc
${mpm_SOURCE_DIR}/tests/geometry_test.cc
${mpm_SOURCE_DIR}/tests/elements/hexahedron_element_test.cc
Expand Down Expand Up @@ -206,10 +209,11 @@ if(MPM_BUILD_TESTING)
${mpm_SOURCE_DIR}/tests/mesh_test_2d.cc
${mpm_SOURCE_DIR}/tests/mesh_test_3d.cc
${mpm_SOURCE_DIR}/tests/mpi_transfer_particle_test.cc
${mpm_SOURCE_DIR}/tests/mpm_explicit_usf_test.cc
${mpm_SOURCE_DIR}/tests/mpm_explicit_usf_unitcell_test.cc
${mpm_SOURCE_DIR}/tests/mpm_explicit_usl_test.cc
${mpm_SOURCE_DIR}/tests/mpm_explicit_usl_unitcell_test.cc
${mpm_SOURCE_DIR}/tests/solvers/mpm_explicit_usf_test.cc
${mpm_SOURCE_DIR}/tests/solvers/mpm_explicit_usf_unitcell_test.cc
${mpm_SOURCE_DIR}/tests/solvers/mpm_explicit_usl_test.cc
${mpm_SOURCE_DIR}/tests/solvers/mpm_explicit_usl_unitcell_test.cc
${mpm_SOURCE_DIR}/tests/solvers/mpm_scheme_test.cc
${mpm_SOURCE_DIR}/tests/nodal_properties_test.cc
${mpm_SOURCE_DIR}/tests/node_map_test.cc
${mpm_SOURCE_DIR}/tests/node_test.cc
Expand Down
31 changes: 31 additions & 0 deletions include/contacts/contact.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef MPM_CONTACT_H_
#define MPM_CONTACT_H_

#include "mesh.h"

namespace mpm {

//! Contact class
//! \brief Contact base class
//! \tparam Tdim Dimension
template <unsigned Tdim>
class Contact {
public:
//! Default constructor with mesh class
Contact(const std::shared_ptr<mpm::Mesh<Tdim>>& mesh);

//! Intialize
virtual inline void initialise(){};

//! Compute contact forces
virtual inline void compute_contact_forces(){};

protected:
//! Mesh object
std::shared_ptr<mpm::Mesh<Tdim>> mesh_;
}; // Contact class
} // namespace mpm

#include "contact.tcc"

#endif // MPM_CONTACT_H_
6 changes: 6 additions & 0 deletions include/contacts/contact.tcc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//! Constructor of contact with mesh
template <unsigned Tdim>
mpm::Contact<Tdim>::Contact(const std::shared_ptr<mpm::Mesh<Tdim>>& mesh) {
// Assign mesh
mesh_ = mesh;
}
31 changes: 31 additions & 0 deletions include/contacts/contact_friction.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef MPM_CONTACT_FRICTION_H_
#define MPM_CONTACT_FRICTION_H_

#include "contact.h"

namespace mpm {

//! ContactFriction class
//! \brief ContactFriction base class
//! \tparam Tdim Dimension
template <unsigned Tdim>
class ContactFriction : public Contact<Tdim> {
public:
//! Default constructor with mesh class
ContactFriction(const std::shared_ptr<mpm::Mesh<Tdim>>& mesh);

//! Intialize
virtual inline void initialise() override;

//! Compute contact forces
virtual inline void compute_contact_forces() override;

protected:
//! Mesh object
using mpm::Contact<Tdim>::mesh_;
}; // Contactfriction class
} // namespace mpm

#include "contact_friction.tcc"

#endif // MPM_CONTACT_FRICTION_H_
52 changes: 52 additions & 0 deletions include/contacts/contact_friction.tcc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
//! Constructor of contact with mesh
template <unsigned Tdim>
mpm::ContactFriction<Tdim>::ContactFriction(
const std::shared_ptr<mpm::Mesh<Tdim>>& mesh)
: mpm::Contact<Tdim>(mesh) {}

//! Initialize nodal properties
template <unsigned Tdim>
inline void mpm::ContactFriction<Tdim>::initialise() {
// Initialise nodal properties
mesh_->initialise_nodal_properties();

// Append material ids to nodes
mesh_->iterate_over_particles(
std::bind(&mpm::ParticleBase<Tdim>::append_material_id_to_nodes,
std::placeholders::_1));
}

//! Compute contact forces
template <unsigned Tdim>
inline void mpm::ContactFriction<Tdim>::compute_contact_forces() {

// Map multimaterial properties from particles to nodes
mesh_->iterate_over_particles(std::bind(
&mpm::ParticleBase<Tdim>::map_multimaterial_mass_momentum_to_nodes,
std::placeholders::_1));

// Map multimaterial displacements from particles to nodes
mesh_->iterate_over_particles(std::bind(
&mpm::ParticleBase<Tdim>::map_multimaterial_displacements_to_nodes,
std::placeholders::_1));

// Map multimaterial domain gradients from particles to nodes
mesh_->iterate_over_particles(std::bind(
&mpm::ParticleBase<Tdim>::map_multimaterial_domain_gradients_to_nodes,
std::placeholders::_1));

// Compute multimaterial change in momentum
mesh_->iterate_over_nodes(
std::bind(&mpm::NodeBase<Tdim>::compute_multimaterial_change_in_momentum,
std::placeholders::_1));

// Compute multimaterial separation vector
mesh_->iterate_over_nodes(
std::bind(&mpm::NodeBase<Tdim>::compute_multimaterial_separation_vector,
std::placeholders::_1));

// Compute multimaterial normal unit vector
mesh_->iterate_over_nodes(
std::bind(&mpm::NodeBase<Tdim>::compute_multimaterial_normal_unit_vector,
std::placeholders::_1));
}
3 changes: 3 additions & 0 deletions include/io/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ class IO {
//! Return post processing object
Json post_processing() const;

//! Return JSON analysis boolean
bool analysis_bool(const std::string& key) const;

//! Return the entity sets from the input set JSON file
//! \param[in] filename File name
//! \param[in] sets_type type of sets
Expand Down
8 changes: 4 additions & 4 deletions include/solvers/mpm.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@ class MPM {
}

// Initialise mesh and particles
virtual bool initialise_mesh() = 0;
virtual void initialise_mesh() = 0;

// Initialise particles
virtual bool initialise_particles() = 0;
virtual void initialise_particles() = 0;

// Initialise materials
virtual bool initialise_materials() = 0;
virtual void initialise_materials() = 0;

// Initialise external loads
virtual bool initialise_loads() = 0;
virtual void initialise_loads() = 0;

// Initialise math functions
virtual bool initialise_math_functions(const Json&) = 0;
Expand Down
28 changes: 15 additions & 13 deletions include/solvers/mpm_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@
#endif

#include "constraints.h"
#include "contact.h"
#include "contact_friction.h"
#include "mpm.h"
#include "mpm_scheme.h"
#include "mpm_scheme_usf.h"
#include "mpm_scheme_usl.h"
#include "particle.h"
#include "vector.h"

Expand All @@ -30,13 +35,6 @@ namespace mpm {
//! Tensor: Symmetric tensor arranged in voigt notation
enum class VariableType { Scalar, Vector, Tensor };

//! Stress update method
//! USF: Update Stress First
//! USL: Update Stress Last
//! MUSL: Modified Stress Last
enum class StressUpdate { USF, USL, MUSL };
extern std::map<std::string, StressUpdate> stress_update;

//! Damping type
//! None: No damping is specified
//! Cundall: Cundall damping
Expand All @@ -53,16 +51,16 @@ class MPMBase : public MPM {
MPMBase(const std::shared_ptr<IO>& io);

//! Initialise mesh
bool initialise_mesh() override;
void initialise_mesh() override;

//! Initialise particles
bool initialise_particles() override;
void initialise_particles() override;

//! Initialise materials
bool initialise_materials() override;
void initialise_materials() override;

//! Initialise loading
bool initialise_loads() override;
void initialise_loads() override;

//! Initialise math functions
bool initialise_math_functions(const Json&) override;
Expand Down Expand Up @@ -184,8 +182,12 @@ class MPMBase : public MPM {
//! Logger
using mpm::MPM::console_;

//! Stress update method (default USF = 0, USL = 1, MUSL = 2)
mpm::StressUpdate stress_update_{mpm::StressUpdate::USF};
//! Stress update method
std::string stress_update_{"usf"};
//! Stress update scheme
std::shared_ptr<mpm::MPMScheme<Tdim>> mpm_scheme_{nullptr};
//! Interface scheme
std::shared_ptr<mpm::Contact<Tdim>> contact_{nullptr};
//! velocity update
bool velocity_update_{false};
//! Gravity
Expand Down
Loading

0 comments on commit 6543ab1

Please sign in to comment.