micromechanical (C++)
|
MCC contact law. More...
#include <mcc.hpp>
Public Member Functions | |
MCCContactLaw (const std::map< std::string, T > &props={}) | |
void | initialize (StateVariable< T > &sv) override |
initialize the contact law | |
T | yieldSurface (int idx, T fn, T fr, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
Yield function for elastoplastic contact laws. | |
![]() | |
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. | |
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 | |
![]() | |
Eigen::Matrix< T, 3, 3 > | elasticStiffness (int idx, T fn, const StateVariable< T > &sv0, const StateVariable< T > &sv) override |
Calculate the elastic stiffness matrix. | |
![]() | |
T | CSL (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
calculate the critical state line | |
Public Attributes | |
std::string | name = "MCC" |
int | nstatev_custom = 111 |
bool | plastic_displacement = true |
![]() | |
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 | |
void | checkConvergence (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) |
Eigen::Matrix< T, 3, 1 > | dfdforce (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
Derivative of the yield function with respect to the force. | |
Eigen::Matrix< T, 3, 1 > | dgdforce (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
Derivative of the potential function with respect to the force. | |
T | hardening (int idx, const Eigen::Matrix< T, 3, 1 > &dgdforce, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
Hardening items for elastoplastic contact laws. | |
void | updateHardeningVariables (int idx, T dlambda, const Eigen::Matrix< T, 3, 1 > &ddispp, const StateVariable< T > &sv0, StateVariable< T > &sv) override |
Update the hardening variables. | |
![]() | |
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 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 | |
![]() | |
T | tanphip (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) |
T | tanphipt (int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) |
MCC contact law.
|
inlineexplicit |
|
inlineprotected |
References micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::StateVariable< T >::fnc(), micromechanical::core::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, and micromechanical::core::CSLBase< T >::tanphip().
Referenced by dfdforce(), dgdforce(), and yieldSurface().
|
inlineoverrideprotectedvirtual |
Derivative of the yield function with respect to the force.
idx | index of the integration point |
sv0 | initial state variable |
sv | state variable |
Implements micromechanical::core::ElastoplasticContactLaw< T >.
References checkConvergence(), micromechanical::core::StateVariable< T >::cscalars, dfdforce(), micromechanical::core::StateVariable< T >::fnc(), micromechanical::core::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, micromechanical::core::StateVariable< T >::nst(), and micromechanical::core::CSLBase< T >::tanphip().
Referenced by dfdforce().
|
inlineoverrideprotectedvirtual |
Derivative of the potential function with respect to the force.
idx | index of the integration point |
sv0 | initial state variable |
sv | state variable |
Implements micromechanical::core::ElastoplasticContactLaw< T >.
References checkConvergence(), micromechanical::core::StateVariable< T >::cscalars, dgdforce(), micromechanical::core::StateVariable< T >::fnc(), micromechanical::core::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, micromechanical::core::StateVariable< T >::nst(), and micromechanical::core::CSLBase< T >::tanphipt().
Referenced by dgdforce(), and hardening().
|
inlineoverrideprotectedvirtual |
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 |
Implements micromechanical::core::ElastoplasticContactLaw< T >.
References micromechanical::core::StateVariable< T >::cscalars, dgdforce(), micromechanical::core::StateVariable< T >::e, micromechanical::core::StateVariable< T >::fnc(), micromechanical::core::StateVariable< T >::force, micromechanical::core::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, micromechanical::core::StateVariable< T >::vectors, and micromechanical::core::StateVariable< T >::w.
|
inlineoverridevirtual |
initialize the contact law
sv | state variable |
Reimplemented from micromechanical::core::ContactLawBase< T >.
References micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::material, and micromechanical::core::StateVariable< T >::size.
|
inlineoverrideprotectedvirtual |
Update the hardening variables.
idx | index of the integration point |
dlambda | plastic multiplier |
ddispp | plastic displacement increment |
sv0 | initial state variable |
sv | state variable |
Implements micromechanical::core::ElastoplasticContactLaw< T >.
References micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::material, micromechanical::core::StateVariable< T >::vectors, and micromechanical::core::StateVariable< T >::w.
|
inlineoverridevirtual |
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 |
Implements micromechanical::core::ElastoplasticContactLaw< T >.
References checkConvergence(), micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::material, and micromechanical::core::CSLBase< T >::tanphip().
std::string micromechanical::contacts::MCCContactLaw< T >::name = "MCC" |
int micromechanical::contacts::MCCContactLaw< T >::nstatev_custom = 111 |
bool micromechanical::contacts::MCCContactLaw< T >::plastic_displacement = true |