musica (C++)
Loading...
Searching...
No Matches
micromechanical::contacts::MCCContactLaw< T > Struct Template Reference

MCC contact law. More...

#include <mcc.hpp>

Inheritance diagram for micromechanical::contacts::MCCContactLaw< T >:
Collaboration diagram for micromechanical::contacts::MCCContactLaw< T >:

Public Member Functions

 MCCContactLaw (const std::unordered_map< std::string, T > &props={})
void initialize (StateVariable< T > &sv) override
 initialize the contact law
T yieldFunction (const int idx, const T fn, const T fr, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Yield function for elastoplastic contact laws.
Eigen::Matrix< T, 3, 1 > dfdforce (const 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 (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Derivative of the potential function with respect to the force.
Eigen::Matrix< T, 3, 1 > plasticModulus0 (const int idx, const Eigen::Matrix< T, 3, 1 > &dgdforce, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Plastic modulus for elastoplastic contact laws.
void updateHardeningVariables (const int idx, const T dlambda, const Eigen::Matrix< T, 3, 1 > &ddispp, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Update the hardening variables.
Public Member Functions inherited from micromechanical::core::ElastoplasticContactLaw< T >
void setPlasticMethod (const std::string &method)
 set the plastic method
Public Member Functions inherited from micromechanical::core::ContactLawBase< T >
 ContactLawBase (const std::unordered_map< std::string, T > &props={})
 constructor
virtual ~ContactLawBase ()=default
 destructor
virtual std::vector< std::string > symmetricContactScalars () const
 Symmetric contact scalar variables.
virtual std::vector< std::string > symmetricContactVectors () const
 Symmetric contact vector variables.
T frictionCoefficient (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) const
 calculate the friction coefficient combined with different criteria
Eigen::Matrix< T, 3, 3 > forceDisplacement (const 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, Eigen::Dynamic, Eigen::Dynamic > yieldFunctions (const 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.
Eigen::Matrix< T, 3, 1 > dfdforce0 (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Derivative of the yield function with respect to the force.
virtual T potentialFunction (const int idx, const T fn, const T fr, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Potential function for elastoplastic contact laws.
Eigen::Matrix< T, 3, 1 > dgdforce0 (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Derivative of the potential function with respect to the force.
virtual T plasticModulus (const int idx, const Eigen::Matrix< T, 3, 1 > &dgdforce, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Plastic modulus for elastoplastic contact laws, including dgdforce.
T plasticModulus1 (const int idx, const Eigen::Matrix< T, 3, 1 > &dgdforce, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Plastic modulus for elastoplastic contact laws, including dgdforce.
virtual void yieldFunctionCorrection (const int idx, const Eigen::Matrix< T, 3, 3 > &Ke, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Yield surface correction to keep the force state on the yield surface.
virtual void maintainYieldSurface (const 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.
Public Member Functions inherited from micromechanical::core::ChangStiffness< T >
Eigen::Matrix< T, 3, 3 > elasticStiffness (const int idx, T fn, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Calculate the elastic stiffness matrix.
Public Member Functions inherited from micromechanical::core::MCCCSL< T >
T CSL (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) const override
 calculate the critical state line

Protected Member Functions

void checkConvergence (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)
Protected Member Functions inherited from micromechanical::core::ElastoplasticContactLaw< T >
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 > stiffness (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 calculate the elastoplastic stiffness matrix
Eigen::Matrix< T, 3, 3 > ExplicitCPA (const int idx, const Eigen::Matrix< T, 3, 3 > &Ke, 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 (const int idx, const Eigen::Matrix< T, 3, 3 > &Ke, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 CPPM method for elastoplastic contact laws.
Protected Member Functions inherited from micromechanical::core::ContactLawBase< T >
virtual Eigen::Matrix< T, 3, 3 > integrate (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const Eigen::Matrix< T, 3, 3 > &Ke, const StateVariable< T > &sv0, StateVariable< T > &sv)
 integrate the force-displacement contact law, with a number of increments.
Eigen::Matrix< T, 3, 3 > increment (const 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 (const 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 (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 pre-processing before the integration
virtual void postIntegration (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 post-processing after the integration
virtual void preIncrement (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 pre-processing before the increment
virtual void postIncrement (const int idx, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 post-processing after the increment
Eigen::Matrix< T, 3, 1 > dfdforce1 (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Derivative of the yield function with respect to the force.
Eigen::Matrix< T, 3, 1 > dgdforce1 (const int idx, const Eigen::Matrix< T, 3, 1 > &dfdforce, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Derivative of the potential function with respect to the force.
Protected Member Functions inherited from micromechanical::core::CSLBase< T >
T tanphip (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) const
T tanphipt (const int idx, const StateVariable< T > &sv0, StateVariable< T > &sv) const

Additional Inherited Members

Public Attributes inherited from micromechanical::core::ElastoplasticContactLaw< T >
std::string plasticMethod = "CPA"
 Plastic method.
Public Attributes inherited from micromechanical::core::ContactLawBase< T >
std::string name = "Undefined"
 Name of the contact law.
std::shared_ptr< Material< T > > material
 Material properties.
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::make_shared<Options<T>>()
 options for the micromechanical model
std::shared_ptr< DebugVariable< T > > debugVariable = std::make_shared<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

Detailed Description

template<typename T>
struct micromechanical::contacts::MCCContactLaw< T >

MCC contact law.

Constructor & Destructor Documentation

◆ MCCContactLaw()

template<typename T>
micromechanical::contacts::MCCContactLaw< T >::MCCContactLaw ( const std::unordered_map< std::string, T > & props = {})
inlineexplicit

Member Function Documentation

◆ checkConvergence()

template<typename T>
void micromechanical::contacts::MCCContactLaw< T >::checkConvergence ( const int idx,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineprotected

◆ dfdforce()

template<typename T>
Eigen::Matrix< T, 3, 1 > micromechanical::contacts::MCCContactLaw< T >::dfdforce ( const int idx,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverridevirtual

Derivative of the yield function with respect to the force.

Parameters
idxindex of the integration point
sv0initial state variable
svstate variable
Returns
the derivative of the yield function with respect to the force

Reimplemented from micromechanical::core::ContactLawBase< T >.

References checkConvergence(), constitutive::StateVariable< T >::cscalars, dfdforce(), constitutive::StateVariable< T >::fnc(), constitutive::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, constitutive::StateVariable< T >::nst(), and micromechanical::core::CSLBase< T >::tanphip().

Referenced by dfdforce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dgdforce()

template<typename T>
Eigen::Matrix< T, 3, 1 > micromechanical::contacts::MCCContactLaw< T >::dgdforce ( const int idx,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverridevirtual

Derivative of the potential function with respect to the force.

Parameters
idxindex of the integration point
sv0initial state variable
svstate variable
Returns
the derivative of the potential function with respect to the force

Reimplemented from micromechanical::core::ContactLawBase< T >.

References checkConvergence(), constitutive::StateVariable< T >::cscalars, dgdforce(), constitutive::StateVariable< T >::fnc(), constitutive::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, constitutive::StateVariable< T >::nst(), and micromechanical::core::CSLBase< T >::tanphipt().

Referenced by dgdforce(), and plasticModulus0().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initialize()

template<typename T>
void micromechanical::contacts::MCCContactLaw< T >::initialize ( StateVariable< T > & sv)
inlineoverridevirtual

◆ plasticModulus0()

template<typename T>
Eigen::Matrix< T, 3, 1 > micromechanical::contacts::MCCContactLaw< T >::plasticModulus0 ( const int idx,
const Eigen::Matrix< T, 3, 1 > & dgdforce,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverridevirtual

Plastic modulus for elastoplastic contact laws.

Parameters
idxindex of the integration point
dgdforcederivative of the potential function with respect to the force
sv0initial state variable
svstate variable
Returns
the plastic modulus

Reimplemented from micromechanical::core::ContactLawBase< T >.

References constitutive::StateVariable< T >::cscalars, dgdforce(), constitutive::StateVariable< T >::e, constitutive::StateVariable< T >::fnc(), constitutive::StateVariable< T >::force, constitutive::StateVariable< T >::fr(), micromechanical::core::ContactLawBase< T >::material, constitutive::StateVariable< T >::vectors, and constitutive::StateVariable< T >::w.

Here is the call graph for this function:

◆ updateHardeningVariables()

template<typename T>
void micromechanical::contacts::MCCContactLaw< T >::updateHardeningVariables ( const int idx,
const T dlambda,
const Eigen::Matrix< T, 3, 1 > & ddispp,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverridevirtual

Update the hardening variables.

Parameters
idxindex of the integration point
dlambdaplastic multiplier
ddisppplastic displacement increment
sv0initial state variable
svstate variable

Reimplemented from micromechanical::core::ContactLawBase< T >.

References constitutive::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::material, constitutive::StateVariable< T >::vectors, and constitutive::StateVariable< T >::w.

◆ yieldFunction()

template<typename T>
T micromechanical::contacts::MCCContactLaw< T >::yieldFunction ( const int idx,
const T fn,
const T fr,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverridevirtual

Yield function for elastoplastic contact laws.

Parameters
idxindex of the integration point
fnnormal force
frshear force
sv0initial state variable
svstate variable
Returns
the yield function

Reimplemented from micromechanical::core::ContactLawBase< T >.

References checkConvergence(), constitutive::StateVariable< T >::cscalars, micromechanical::core::ContactLawBase< T >::material, and micromechanical::core::CSLBase< T >::tanphip().

Here is the call graph for this function:

The documentation for this struct was generated from the following file:
  • include/micromechanical/contacts/mcc.hpp