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

Chang and Hicher's micromechanical model. More...

#include <changhicher.hpp>

Inheritance diagram for micromechanical::ChangHicher< T >:
Collaboration diagram for micromechanical::ChangHicher< T >:

Public Member Functions

 ChangHicher (ContactLawBase< T > *contact, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 
 ChangHicher (ContactLawType type, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 
 ChangHicher (const std::string &path, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > stiffness (const StateVariable< T > &sv0, const StateVariable< T > &sv, const Eigen::Matrix< T, Eigen::Dynamic, 1 > kn=Eigen::Matrix< T, Eigen::Dynamic, 1 >::Zero(0, 1), const Eigen::Matrix< T, Eigen::Dynamic, 1 > ks=Eigen::Matrix< T, Eigen::Dynamic, 1 >::Zero(0, 1), bool original=false) override
 Compute the stiffness matrix.
 
- Public Member Functions inherited from micromechanical::core::MicromechanicalBase< T >
 MicromechanicalBase (ContactLawBase< T > *contact, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 constructor
 
 MicromechanicalBase (ContactLawType type, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 constructor
 
 MicromechanicalBase (const std::string &path, const std::map< std::string, T > &props={}, T npv=1e9, T radius=0.65e-3)
 constructor
 
 MicromechanicalBase ()=default
 default constructor
 
virtual ~MicromechanicalBase ()=default
 destructor
 
void setContactLaw (ContactLawType type, const std::map< std::string, T > &props={})
 Set the contact law if it is not set in the constructor.
 
void setContactLaw (const std::string &path, const std::map< std::string, T > &props={})
 Set the contact law if it is not set in the constructor.
 
void setContactLaw (ContactLawBase< T > *contact)
 Set the contact law if it is not set in the constructor.
 
std::vector< StateVariable< T > > run ()
 Run the micromechanical model.
 
void umat (const T *dstran, T *stress, T *statev, T *ddsdde=nullptr, const bool initialize=false, const bool normalize_ddsdde=true)
 ABAQUS UMAT interface.
 
void vumat (const int nBlock, const T *strainInc, const T *stressOld, T *stressNew, const T *stateOld, T *stateNew, const bool initialize=false)
 ABAQUS VUMAT interface.
 
- Public Member Functions inherited from micromechanical::core::LoveWeberAveraging< T >
Eigen::Matrix< T, 6, 1 > averageStress (const Eigen::Matrix< T, Eigen::Dynamic, 3 > force, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Average the micro contact force to macro stress.
 
- Public Member Functions inherited from micromechanical::core::BestFitAveraging< T >
Eigen::Matrix< T, 6, 1 > averageStrain (const Eigen::Matrix< T, Eigen::Dynamic, 3 > disp, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Average the micro contact displacement to macro strain.
 
- Public Member Functions inherited from micromechanical::core::StaticHypothesisLocalization< T >
Eigen::Matrix< T, Eigen::Dynamic, 3 > localizeStress (const Eigen::Matrix< T, 6, 1 > &sig, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 localize the marcro stress to micro contact force
 
- Public Member Functions inherited from micromechanical::core::KinematicHypothesisLocalization< T >
Eigen::Matrix< T, Eigen::Dynamic, 3 > localizeStrain (const Eigen::Matrix< T, 6, 1 > &eps, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 localize the marcro strain to micro contact displacement
 

Public Attributes

std::string name = "CH"
 name of the model
 
- Public Attributes inherited from micromechanical::core::MicromechanicalBase< T >
std::shared_ptr< ContactLawBase< T > > contact
 contact law
 
std::shared_ptr< Integration< T > > integration
 gauss integration points
 
std::shared_ptr< Load< T > > load
 load
 
std::shared_ptr< DebugVariable< T > > debugVariable = std::shared_ptr<DebugVariable<T>>(nullptr)
 debug variable
 
std::string name = "Undefined"
 name of the model
 
std::vector< StateVariable< T > > stateVars = {}
 state variables of the current run
 
std::shared_ptr< Options< T > > options = std::shared_ptr<Options<T>>(nullptr)
 options for the micromechanical model
 
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
 

Protected Member Functions

adaptiveIntegrationSubstepping (const Eigen::Matrix< T, Eigen::Dynamic, 3 > &dforce, const Eigen::Matrix< T, Eigen::Dynamic, 3 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Adaptive substepping for macro-micro integration.
 
void macroMicroIntegrate (const Eigen::Matrix< T, 6, 6 > &K, const Eigen::Matrix< T, 6, 1 > &dsig, const Eigen::Matrix< T, 6, 1 > &deps, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Integrate the macro-micro relation.
 
void contactIntegrate (int idx, const Eigen::Matrix< T, 3, 1 > &dforce, const Eigen::Matrix< T, 3, 1 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv) const override
 Integrate the contact law.
 
- Protected Member Functions inherited from micromechanical::core::MixedLoadControl< T >
std::tuple< T, bool > checkConvergence (const Eigen::Matrix< T, 6, 1 > &dsig, const Eigen::Matrix< T, 6, 1 > &deps, T err0, T erri, const StateVariable< T > &sv0, const StateVariable< T > &sv)
 
Eigen::Matrix< T, 6, 1 > increment (const Eigen::Matrix< T, 6, 1 > &dx, Eigen::Matrix< T, 6, 1 > x, const Eigen::Matrix< T, 6, 6 > &S, const Eigen::Matrix< T, 6, 6 > &E, const Eigen::Matrix< T, 6, 6 > &G, const StateVariable< T > &sv0, StateVariable< T > &sv) override
 Compute one increment.
 
std::tuple< Eigen::Matrix< T, 6, 6 >, Eigen::Matrix< T, 6, 1 >, Eigen::Matrix< T, 6, 1 > > linearize (const Eigen::Matrix< T, 6, 1 > &dx, const Eigen::Matrix< T, 6, 6 > &S, const Eigen::Matrix< T, 6, 6 > &E, const Eigen::Matrix< T, 6, 6 > &G, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Linearize the stress and strain increment.
 
- Protected Member Functions inherited from micromechanical::core::MicromechanicalBase< T >
int nstatev () const
 
StateVariable< T > initialize ()
 Initialize the state variables.
 
virtual void postInitialize (StateVariable< T > &sv)
 Post-initialize the state variables.
 
void postProcess (StateVariable< T > &sv)
 Post-process the state variables.
 
void resetCustomStateVariables (StateVariable< T > &sv0, StateVariable< T > &sv)
 Reset the custom state variables to zeros existing in the current state variables but not in the initial state variables.
 
void fabricEvolution (const StateVariable< T > &sv0, StateVariable< T > &sv)
 Compute the fabric evolution.
 
void contactIntegrates (const Eigen::Matrix< T, Eigen::Dynamic, 3 > &dforce, const Eigen::Matrix< T, Eigen::Dynamic, 3 > &ddisp, const StateVariable< T > &sv0, StateVariable< T > &sv)
 Integrate all the contact laws with cache.
 

Detailed Description

template<typename T>
struct micromechanical::ChangHicher< T >

Chang and Hicher's micromechanical model.

Constructor & Destructor Documentation

◆ ChangHicher() [1/3]

template<typename T>
micromechanical::ChangHicher< T >::ChangHicher ( ContactLawBase< T > * contact,
const std::map< std::string, T > & props = {},
T npv = 1e9,
T radius = 0.65e-3 )
inlineexplicit

◆ ChangHicher() [2/3]

template<typename T>
micromechanical::ChangHicher< T >::ChangHicher ( ContactLawType type,
const std::map< std::string, T > & props = {},
T npv = 1e9,
T radius = 0.65e-3 )
inlineexplicit

◆ ChangHicher() [3/3]

template<typename T>
micromechanical::ChangHicher< T >::ChangHicher ( const std::string & path,
const std::map< std::string, T > & props = {},
T npv = 1e9,
T radius = 0.65e-3 )
inlineexplicit

Member Function Documentation

◆ adaptiveIntegrationSubstepping()

template<typename T>
T micromechanical::ChangHicher< T >::adaptiveIntegrationSubstepping ( const Eigen::Matrix< T, Eigen::Dynamic, 3 > & dforce,
const Eigen::Matrix< T, Eigen::Dynamic, 3 > & ddisp,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineprotected

Adaptive substepping for macro-micro integration.

Parameters
dforcecontact force increment
ddispcontact displacement increment
sv0initial state variable
svstate variable

References micromechanical::core::StateVariable< T >::disp, micromechanical::core::StateVariable< T >::force, micromechanical::core::MicromechanicalBase< T >::load, and micromechanical::core::MicromechanicalBase< T >::options.

Referenced by macroMicroIntegrate().

Here is the caller graph for this function:

◆ contactIntegrate()

template<typename T>
void micromechanical::ChangHicher< T >::contactIntegrate ( int idx,
const Eigen::Matrix< T, 3, 1 > & dforce,
const Eigen::Matrix< T, 3, 1 > & ddisp,
const StateVariable< T > & sv0,
StateVariable< T > & sv ) const
inlineoverrideprotectedvirtual

Integrate the contact law.

Parameters
idxindex of the integration point
dforceforce increment
ddispdisplacement increment
sv0initial state variable
svstate variable

Implements micromechanical::core::MicromechanicalBase< T >.

References micromechanical::core::MicromechanicalBase< T >::contact, micromechanical::core::StateVariable< T >::force, micromechanical::core::MicromechanicalBase< T >::options, and micromechanical::core::StateVariable< T >::scalars.

◆ macroMicroIntegrate()

template<typename T>
void micromechanical::ChangHicher< T >::macroMicroIntegrate ( const Eigen::Matrix< T, 6, 6 > & K,
const Eigen::Matrix< T, 6, 1 > & dsig,
const Eigen::Matrix< T, 6, 1 > & deps,
const StateVariable< T > & sv0,
StateVariable< T > & sv )
inlineoverrideprotectedvirtual

Integrate the macro-micro relation.

Parameters
Kstiffness matrix
dsigstress increment
depsstrain increment
sv0initial state variable
svstate variable

Implements micromechanical::core::MicromechanicalBase< T >.

References micromechanical::core::MicromechanicalBase< T >::_integration, micromechanical::core::MicromechanicalBase< T >::_mixedLoad, micromechanical::core::MicromechanicalBase< T >::_phase, micromechanical::core::MicromechanicalBase< T >::_step, adaptiveIntegrationSubstepping(), micromechanical::core::BestFitAveraging< T >::averageStrain(), micromechanical::core::LoveWeberAveraging< T >::averageStress(), micromechanical::core::MicromechanicalBase< T >::contact, micromechanical::core::MicromechanicalBase< T >::contactIntegrates(), micromechanical::core::StateVariable< T >::cscalars, micromechanical::core::StateVariable< T >::cvectors, micromechanical::core::MicromechanicalBase< T >::debugVariable, micromechanical::core::StateVariable< T >::disp, micromechanical::core::StateVariable< T >::dispp, micromechanical::core::StateVariable< T >::e, micromechanical::core::StateVariable< T >::eps, micromechanical::core::StateVariable< T >::epsp, micromechanical::core::StateVariable< T >::epspu, micromechanical::core::StateVariable< T >::epsv(), micromechanical::core::StateVariable< T >::epsva(), micromechanical::core::StateVariable< T >::force, micromechanical::math::ignoreDistractions(), micromechanical::core::MicromechanicalBase< T >::integration, micromechanical::core::KinematicHypothesisLocalization< T >::localizeStrain(), micromechanical::core::StaticHypothesisLocalization< T >::localizeStress(), micromechanical::core::MicromechanicalBase< T >::options, micromechanical::core::StateVariable< T >::sig, and micromechanical::core::StateVariable< T >::w.

Here is the call graph for this function:

◆ stiffness()

template<typename T>
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > micromechanical::ChangHicher< T >::stiffness ( const StateVariable< T > & sv0,
const StateVariable< T > & sv,
const Eigen::Matrix< T, Eigen::Dynamic, 1 > kn = Eigen::Matrix< T, Eigen::Dynamic, 1 >::Zero(0, 1),
const Eigen::Matrix< T, Eigen::Dynamic, 1 > ks = Eigen::Matrix< T, Eigen::Dynamic, 1 >::Zero(0, 1),
bool original = false )
inlineoverridevirtual

Compute the stiffness matrix.

Parameters
sv0initial state variable
svstate variable
kncontact normal stiffness
kscontact shear stiffness
originalreturn the original 9x9 stiffness matrix
Returns
stiffness matrix

Implements micromechanical::core::MicromechanicalBase< T >.

References micromechanical::core::MicromechanicalBase< T >::contact, micromechanical::core::StateVariable< T >::force, micromechanical::core::MicromechanicalBase< T >::integration, and micromechanical::core::MicromechanicalBase< T >::options.

Member Data Documentation

◆ name

template<typename T>
std::string micromechanical::ChangHicher< T >::name = "CH"

name of the model


The documentation for this struct was generated from the following file: