SPHinXsys  alpha version
inelastic_solid.h
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------*
2 * SPHinXsys *
3 * --------------------------------------------------------------------------*
4 * SPHinXsys (pronunciation: s'finksis) is an acronym from Smoothed Particle *
5 * Hydrodynamics for industrial compleX systems. It provides C++ APIs for *
6 * physical accurate simulation and aims to model coupled industrial dynamic *
7 * systems including fluid, solid, multi-body dynamics and beyond with SPH *
8 * (smoothed particle hydrodynamics), a meshless computational method using *
9 * particle discretization. *
10 * *
11 * SPHinXsys is partially funded by German Research Foundation *
12 * (Deutsche Forschungsgemeinschaft) DFG HU1527/6-1, HU1527/10-1 *
13 * and HU1527/12-1. *
14 * *
15 * Portions copyright (c) 2017-2020 Technical University of Munich and *
16 * the authors' affiliations. *
17 * *
18 * Licensed under the Apache License, Version 2.0 (the "License"); you may *
19 * not use this file except in compliance with the License. You may obtain a *
20 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
21 * *
22 * --------------------------------------------------------------------------*/
31 #pragma once
32 
33 #include "elastic_solid.h"
34 
35 namespace SPH
36 {
42  {
43  protected:
44  Real yield_stress_;
45 
46  virtual void initializePlasticParameters() = 0;
47 
48  public:
50  explicit PlasticSolid(Real rho0, Real youngs_modulus, Real poisson_ratio, Real yield_stress)
51  : NeoHookeanSolid(rho0, youngs_modulus, poisson_ratio), yield_stress_(yield_stress)
52  {
53  material_type_name_ = "PlasticSolid";
54  };
55  virtual ~PlasticSolid(){};
56 
57  Real YieldStress() { return yield_stress_; };
59  virtual Matd PlasticConstitutiveRelation(const Matd &deformation, size_t index_i, Real dt = 0.0) = 0;
60 
61  virtual PlasticSolid *ThisObjectPtr() override { return this; };
62  };
63 
69  {
70  protected:
71  Real hardening_modulus_;
72  const Real one_over_dimensions_ = 1.0 / (Real)Dimensions;
73  const Real sqrt_2_over_3_ = sqrt(2.0 / 3.0);
77  virtual void initializePlasticParameters() override;
78 
79  public:
81  explicit HardeningPlasticSolid(Real rho0, Real youngs_modulus, Real poisson_ratio, Real yield_stress, Real hardening_modulus)
82  : PlasticSolid(rho0, youngs_modulus, poisson_ratio, yield_stress), hardening_modulus_(hardening_modulus)
83  {
84  material_type_name_ = "HardeningPlasticSolid";
85  };
86  virtual ~HardeningPlasticSolid(){};
87 
88  Real HardeningModulus() { return hardening_modulus_; };
90  virtual void assignBaseParticles(BaseParticles *base_particles) override;;
92  virtual Matd PlasticConstitutiveRelation(const Matd &deformation, size_t index_i, Real dt = 0.0) override;
93 
94  virtual HardeningPlasticSolid *ThisObjectPtr() override { return this; };
95  };
96 }
StdLargeVec< Real > hardening_parameter_
Definition: inelastic_solid.h:75
PlasticSolid(Real rho0, Real youngs_modulus, Real poisson_ratio, Real yield_stress)
Definition: inelastic_solid.h:50
HardeningPlasticSolid(Real rho0, Real youngs_modulus, Real poisson_ratio, Real yield_stress, Real hardening_modulus)
Definition: inelastic_solid.h:81
virtual Matd PlasticConstitutiveRelation(const Matd &deformation, size_t index_i, Real dt=0.0) override
Definition: inelastic_solid.cpp:27
Abstract class for a generalized plastic solid.
Definition: inelastic_solid.h:41
virtual void assignBaseParticles(BaseParticles *base_particles) override
Definition: inelastic_solid.cpp:21
Class for plastic solid with hardening.
Definition: inelastic_solid.h:68
virtual Matd PlasticConstitutiveRelation(const Matd &deformation, size_t index_i, Real dt=0.0)=0
StdLargeVec< Matd > inverse_plastic_strain_
Definition: inelastic_solid.h:74
Neo-Hookean solid, Compressible formulation!
Definition: elastic_solid.h:130
These are classes for define properties of elastic solid materials. These classes are based on isotro...
Definition: solid_body_supplementary.cpp:9