micromechanical (C++)
|
Base class for elastoplastic contact laws. More...
#include <contactlaw.hpp>
Public Member Functions | |
void | setPlasticMethod (const std::string &method) |
set the plastic method | |
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > | yieldSurfaces (int idx, const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &fn, const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &fr, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Calculate yield function for multiple times. | |
![]() | |
ContactLawBase (const std::map< std::string, T > &props={}) | |
constructor | |
virtual | ~ContactLawBase ()=default |
destructor | |
virtual std::vector< std::string > | symmetricContactScalars () |
Symmetric contact scalar variables. | |
virtual std::vector< std::string > | symmetricContactVectors () |
Symmetric contact vector variables. | |
virtual void | initialize (StateVariable< T > &sv) |
initialize the contact law | |
ContactLawBase & | operator= (const ContactLawBase &other) |
move operator | |
T | frictionCoefficient (int idx, const StateVariable< T > &sv0, const StateVariable< T > &sv) |
calculate the friction coefficient combined with different criteria | |
Eigen::Matrix< T, 3, 3 > | forceDisplacement (int idx, Eigen::Matrix< T, 3, 1 > &ddisp, Eigen::Matrix< T, 3, 3 > &Ke, const StateVariable< T > &sv0, StateVariable< T > &sv) |
integrate the force-displacement relation | |
virtual Eigen::Matrix< T, 3, 3 > | elasticStiffness (int idx, T fn, const StateVariable< T > &sv0, const StateVariable< T > &sv)=0 |
Calculate the elastic stiffness matrix. | |
Public Attributes | |
std::string | plasticMethod = "CPA" |
Plastic method. | |
std::string | type = "Elastoplastic" |
Type of the contact law. | |
![]() | |
std::shared_ptr< Material< T > > | material |
Material properties. | |
std::string | name = "Undefined" |
Name of the contact law. | |
std::string | type = "Undefined" |
Type of the contact law. | |
int | nstatev_custom = 0 |
Number of custom state variables. | |
bool | plastic_displacement = false |
Flag to save the plastic displacement in the state variables. | |
std::shared_ptr< Options< T > > | options = std::shared_ptr<Options<T>>(new Options<T>()) |
options for the micromechanical model | |
std::shared_ptr< DebugVariable< T > > | debugVariable = std::shared_ptr<DebugVariable<T>>(new DebugVariable<T>()) |
debug variable | |
int | _phase = 0 |
index of the phase | |
int | _step = 0 |
current step | |
int | _mixedLoad = 0 |
number of mixed load steps | |
int | _integration = 0 |
number of integration steps | |
int | _increment = 0 |
number of contact increments | |
int | _plasticCorrection = 0 |
number of contact plastic corrections | |
Protected Member Functions | |
bool | isExplicit () const |
check if the plastic method is explicit | |
bool | isCPA () const |
check if the plastic method is CPA | |
bool | isCPPM () const |
check if the plastic method is CPPM | |
Eigen::Matrix< T, 3, 3 > | integrate (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const Eigen::Matrix< T, 3, 3 > &Ke, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
integrate the force-displacement contact law, with a number of increments. | |
Eigen::Matrix< T, 3, 3 > | stiffness (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
calculate the elastoplastic stiffness matrix | |
virtual bool | isConverged (int idx, T f, bool trial, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Determine whether the contact force state is converged to the yield surface or the force state is in the elastic region. | |
virtual T | plasticModulus (int idx, const Eigen::Matrix< T, 3, 3 > &Ke, const Eigen::Matrix< T, 3, 1 > &dfdforce, const Eigen::Matrix< T, 3, 1 > &dgdforce, T hardening, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Calculate the plastic modulus. | |
virtual T | plasticMultiplier (int idx, T f, const Eigen::Matrix< T, 3, 3 > &Ke, const Eigen::Matrix< T, 3, 1 > &ddisp, const Eigen::Matrix< T, 3, 1 > &dfdforce, T Kp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Calculate the plastic multiplier. | |
Eigen::Matrix< T, 3, 3 > | ExplicitCPA (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Explicit method for elastoplastic contact laws. | |
Eigen::Matrix< T, 3, 3 > | CPPM (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
CPPM method for elastoplastic contact laws. | |
virtual T | yieldSurface (int idx, T fn, T fr, const StateVariable< T > &sv0, StateVariable< T > &sv)=0 |
Yield function for elastoplastic contact laws. | |
virtual Eigen::Matrix< T, 3, 1 > | dfdforce (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)=0 |
Derivative of the yield function with respect to the force. | |
virtual Eigen::Matrix< T, 3, 1 > | dgdforce (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)=0 |
Derivative of the potential function with respect to the force. | |
virtual T | hardening (int idx, const Eigen::Matrix< T, 3, 1 > &dgdforce, const StateVariable< T > &sv0, StateVariable< T > &sv)=0 |
Hardening items for elastoplastic contact laws. | |
virtual void | updateHardeningVariables (int idx, T dlambda, const Eigen::Matrix< T, 3, 1 > &ddispp, const StateVariable< T > &sv0, StateVariable< T > &sv)=0 |
Update the hardening variables. | |
virtual void | revertHardeningVariables (int idx, T dlambda, const Eigen::Matrix< T, 3, 1 > &ddispp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Revert the hardening variables. | |
virtual void | YieldSurfaceCorrection (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Yield surface correction to keep the force state on the yield surface. | |
virtual void | maintainYieldSurface (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const Eigen::Matrix< T, 3, 1 > &dforce, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Revert state variables from elastic state to maintain the force state on the yield surface. | |
![]() | |
Eigen::Matrix< T, 3, 3 > | increment (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const Eigen::Matrix< T, 3, 3 > &Ke, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Calculate one increment. | |
virtual void | check (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
check the convergence of the contact law | |
virtual void | preIntegration (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
pre-processing before the integration | |
virtual void | postIntegration (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
post-processing after the integration | |
virtual void | preIncrement (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
pre-processing before the increment | |
virtual void | postIncrement (int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) |
post-processing after the increment | |
virtual T | CSL (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) |
calculate the critical state line | |
Base class for elastoplastic contact laws.
|
inlineprotected |
CPPM method for elastoplastic contact laws.
idx | index of the integration point |
ddisp | displacement increment |
sv0 | initial state variable |
sv | state variable |
References ExplicitCPA().
Referenced by stiffness().
|
protectedpure virtual |
Derivative of the yield function with respect to the force.
idx | index of the integration point |
sv0 | initial state variable |
sv | state variable |
Implemented in micromechanical::contacts::MCCContactLaw< T >, micromechanical::contacts::OSIMSANDContactLaw< T >, micromechanical::contacts::SANISANDContactLaw< T >, and micromechanical::contacts::SIMSANDContactLaw< T >.
Referenced by ExplicitCPA(), plasticModulus(), and plasticMultiplier().
|
protectedpure virtual |
Derivative of the potential function with respect to the force.
idx | index of the integration point |
sv0 | initial state variable |
sv | state variable |
Implemented in micromechanical::contacts::MCCContactLaw< T >, micromechanical::contacts::OSIMSANDContactLaw< T >, micromechanical::contacts::SANISANDContactLaw< T >, and micromechanical::contacts::SIMSANDContactLaw< T >.
Referenced by ExplicitCPA(), hardening(), and plasticModulus().
|
inlineprotected |
Explicit method for elastoplastic contact laws.
idx | index of the integration point |
ddisp | displacement increment |
sv0 | initial state variable |
sv | state variable |
References micromechanical::core::ContactLawBase< T >::_increment, micromechanical::core::ContactLawBase< T >::_integration, micromechanical::core::ContactLawBase< T >::_mixedLoad, micromechanical::core::ContactLawBase< T >::_phase, micromechanical::core::ContactLawBase< T >::_plasticCorrection, micromechanical::core::ContactLawBase< T >::_step, micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::debugVariable, dfdforce(), dgdforce(), micromechanical::core::StateVariable< T >::disp, micromechanical::core::StateVariable< T >::dispp, micromechanical::core::StateVariable< T >::elasticStiffnessMatrix(), micromechanical::core::StateVariable< T >::fn(), micromechanical::core::StateVariable< T >::fnc(), micromechanical::core::StateVariable< T >::force, micromechanical::core::StateVariable< T >::fr(), hardening(), isConverged(), isExplicit(), maintainYieldSurface(), micromechanical::core::ContactLawBase< T >::material, micromechanical::core::ContactLawBase< T >::options, plasticModulus(), plasticMultiplier(), revertHardeningVariables(), updateHardeningVariables(), micromechanical::core::StateVariable< T >::vectors, micromechanical::core::StateVariable< T >::w, yieldSurface(), and YieldSurfaceCorrection().
Referenced by CPPM(), and stiffness().
|
protectedpure virtual |
Hardening items for elastoplastic contact laws.
idx | index of the integration point |
dgdforce | derivative of the potential function with respect to the force |
sv0 | initial state variable |
sv | state variable |
Implemented in micromechanical::contacts::MCCContactLaw< T >, micromechanical::contacts::OSIMSANDContactLaw< T >, micromechanical::contacts::SANISANDContactLaw< T >, and micromechanical::contacts::SIMSANDContactLaw< T >.
References dgdforce().
Referenced by ExplicitCPA(), and plasticModulus().
|
inlineoverrideprotectedvirtual |
integrate the force-displacement contact law, with a number of increments.
idx | index of the integration point |
ddisp | displacement increment |
Ke | elastic stiffness matrix |
sv0 | initial state variable |
sv | state variable |
Implements micromechanical::core::ContactLawBase< T >.
References micromechanical::core::ContactLawBase< T >::_increment, and micromechanical::core::ContactLawBase< T >::increment().
|
inlineprotectedvirtual |
Determine whether the contact force state is converged to the yield surface or the force state is in the elastic region.
idx | index of the integration point |
f | yield function value |
trial | whether it is for elastic trial |
sv0 | initial state variable |
sv | state variable |
References micromechanical::core::ContactLawBase< T >::options.
Referenced by ExplicitCPA().
|
inlineprotected |
check if the plastic method is CPA
Referenced by stiffness().
|
inlineprotected |
check if the plastic method is CPPM
Referenced by stiffness().
|
inlineprotected |
check if the plastic method is explicit
Referenced by ExplicitCPA(), plasticMultiplier(), and stiffness().
|
inlineprotectedvirtual |
Revert state variables from elastic state to maintain the force state on the yield surface.
idx | index of the integration point |
ddisp | displacement increment |
dforce | force increment |
sv0 | initial state variable |
sv | state variable |
Reimplemented in micromechanical::contacts::SANISANDContactLaw< T >.
Referenced by ExplicitCPA().
|
inlineprotectedvirtual |
Calculate the plastic modulus.
idx | index of the integration point |
Ke | elastic stiffness matrix |
dfdforce | derivative of the yield function with respect to the force |
dgdforce | derivative of the hardening variable with respect to the force |
hardening | hardening item |
sv0 | initial state variable |
sv | current state variable |
References dfdforce(), dgdforce(), and hardening().
Referenced by ExplicitCPA().
|
inlineprotectedvirtual |
Calculate the plastic multiplier.
idx | Index of the integration point |
f | Yield function value |
Ke | Elastic stiffness matrix |
ddisp | Displacement increment |
dfdforce | Derivative of the yield function with respect to the force |
Kp | Plastic modulus |
sv0 | Initial state variables |
sv | Current state variables |
References dfdforce(), and isExplicit().
Referenced by ExplicitCPA().
|
inlineprotectedvirtual |
Revert the hardening variables.
idx | index of the integration point |
dlambda | plastic multiplier |
ddispp | plastic displacement increment |
sv0 | initial state variable |
sv | state variable |
Referenced by ExplicitCPA().
|
inline |
set the plastic method
method | plastic method, "Explicit", "CPA", or "CPPM" |
|
inlineoverrideprotectedvirtual |
calculate the elastoplastic stiffness matrix
idx | index of the integration point |
ddisp | displacement increment |
sv0 | initial state variable |
sv | state variable |
Implements micromechanical::core::ContactLawBase< T >.
References CPPM(), micromechanical::core::ContactLawBase< T >::CSL(), micromechanical::core::StateVariable< T >::ec, micromechanical::core::StateVariable< T >::elasticStiffnessMatrix(), ExplicitCPA(), micromechanical::core::StateVariable< T >::force, isCPA(), isCPPM(), isExplicit(), and micromechanical::core::StateVariable< T >::vectors.
|
protectedpure virtual |
Update the hardening variables.
idx | index of the integration point |
dlambda | plastic multiplier |
ddispp | plastic displacement increment |
sv0 | initial state variable |
sv | state variable |
Implemented in micromechanical::contacts::MCCContactLaw< T >, micromechanical::contacts::OSIMSANDContactLaw< T >, micromechanical::contacts::SANISANDContactLaw< T >, and micromechanical::contacts::SIMSANDContactLaw< T >.
Referenced by ExplicitCPA().
|
protectedpure virtual |
Yield function for elastoplastic contact laws.
idx | index of the integration point |
fn | normal force |
fr | shear force |
sv0 | initial state variable |
sv | state variable |
Implemented in micromechanical::contacts::MCCContactLaw< T >, micromechanical::contacts::OSIMSANDContactLaw< T >, micromechanical::contacts::SANISANDContactLaw< T >, and micromechanical::contacts::SIMSANDContactLaw< T >.
Referenced by ExplicitCPA(), and yieldSurfaces().
|
inlineprotectedvirtual |
Yield surface correction to keep the force state on the yield surface.
idx | index of the integration point |
sv0 | initial state variable |
sv | state variable |
Referenced by ExplicitCPA().
|
inline |
Calculate yield function for multiple times.
idx | index of the integration point |
fn | normal force |
fr | shear force |
sv0 | initial state variable |
sv | state variable |
References yieldSurface().
std::string micromechanical::core::ElastoplasticContactLaw< T >::plasticMethod = "CPA" |
Plastic method.
std::string micromechanical::core::ElastoplasticContactLaw< T >::type = "Elastoplastic" |
Type of the contact law.