dynLattice
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ElastoPlasticRodMaterial Class Reference

Elasto-plastic rod material implementing yield conditions with isotropic and kinematic hardening. More...

#include "ElastoPlasticRodMaterial.h"

Inheritance diagram for ElastoPlasticRodMaterial:
Inheritance graph
[legend]
Collaboration diagram for ElastoPlasticRodMaterial:
Collaboration graph
[legend]

Public Types

enum  YieldType { EXPRESSION , SUPER_ELLIPSE }
 Yield condition implementations, selected by the property yieldType More...
 

Public Member Functions

 ElastoPlasticRodMaterial (const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
 Constructor with plasticity configuration.
 
virtual void configure (const Properties &props, const Properties &globdat) override
 Configure plasticity parameters and yield conditions.
 
virtual void getConfig (const Properties &conf, const Properties &globdat) const override
 Retrieve current material configuration.
 
virtual void getHardVals (const Vector &hardVals, const Vector &hardParams) const
 Get hardening values from hardening parameters.
 
virtual void getStress (const Vector &stress, const Vector &strain) override
 Elastic stress computation based on elastic rod material model.
 
virtual void getStress (const Vector &stress, const Vector &strain, const idx_t &ielem, const idx_t &ip, const bool inelastic=true) override
 Plastic stress computation using convex cutting plane algorithm.
 
virtual void applyDeform () override
 Apply computed deformation to the material state.
 
virtual void rejectDeform () override
 Reject the current deformation and revert to previous state.
 
virtual void getTable (XTable &strain_table, const Vector &weights, const String &name, const IdxVector &items) const override
 Populate strain table with material-specific data.
 
virtual double getDissipatedEnergy (const idx_t &ielem, const idx_t &ip) const override
 Get the dissipated energy at a specific integration point.
 
virtual double getHardeningPotential (const idx_t &ielem, const idx_t &ip) const override
 Get the hardening potential energy at a specific integration point.
 
virtual double getPotentialEnergy (const idx_t &ielem, const idx_t &ip) const override
 Get the potential energy at a specific integration point.
 
- Public Member Functions inherited from ElasticRodMaterial
 ElasticRodMaterial (const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
 Constructor with configuration and global data.
 
virtual Matrix getMaterialStiff () const override
 Get the material stiffness matrix.
 
virtual Matrix getMaterialStiff (const idx_t &ielem, const idx_t &ip) const override
 Get the material stiffness matrix for specific element and integration point.
 
virtual void getMaterialStiff (const Matrix &stiff) const override
 Write the material stiffness matrix into an existing matrix (no allocation, for hot code)
 
virtual void getMaterialStiff (const Matrix &stiff, const idx_t &ielem, const idx_t &ip) const override
 Write the material stiffness matrix for an element and integration point into an existing matrix.
 
virtual Matrix getMaterialMass () const override
 Get the material mass matrix per unit length.
 
virtual Matrix getMaterialMass (const idx_t &ielem, const idx_t &ip) const override
 Get the material mass matrix for specific element and integration point.
 
virtual void getMaterialMass (const Matrix &mass) const override
 Write the material mass matrix per unit length into an existing matrix (no allocation, for hot code)
 
virtual void getMaterialMass (const Matrix &mass, const idx_t &ielem, const idx_t &ip) const override
 Write the material mass matrix for an element and integration point into an existing matrix.
 
virtual Matrix getLumpedMass (const double l) const override
 Get the lumped mass matrix for a given element length.
 
virtual Matrix getLumpedMass (const double l, const idx_t &ielem) const override
 Get the lumped mass matrix for specific element and length.
 
- Public Member Functions inherited from Material
 Material (const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
 Constructs a new Material object.
 
virtual String getContext () const override
 Get the context string for error reporting and debugging.
 

Static Public Member Functions

static Ref< Material > makeNew (const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
 Factory method for plastic material creation.
 
static void declare ()
 Register plastic material type with factory.
 
- Static Public Member Functions inherited from ElasticRodMaterial
static Ref< Material > makeNew (const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
 Factory method for material creation.
 
static void declare ()
 Register material type with factory.
 

Static Public Attributes

Plasticity property identifiers
static const char * TYPE_NAME = "ElastoPlasticRod"
 
static const char * YIELD_PROP = "yieldCond"
 Yield condition function.
 
static const char * YIELD_DERIV_PROP = "yieldDeriv"
 Yield condition derivatives.
 
static const char * YIELD_TYPE_PROP = "yieldType"
 Yield condition type (see YieldType)
 
static const char * YIELD_STRENGTH_PROP = "yieldStrength"
 Strengths c_i of the super-ellipse yield condition.
 
static const char * YIELD_EXPONENT_PROP = "yieldExponent"
 Exponents p_i of the super-ellipse yield condition.
 
static const char * ISO_HARD_PROP = "isotropicCoefficient"
 Isotropic hardening parameters.
 
static const char * KIN_HARD_PROP = "kinematicTensor"
 Kinematic hardening parameters.
 
- Static Public Attributes inherited from ElasticRodMaterial
static const char * TYPE_NAME = "ElasticRod"
 
static const char * STIFF_PREFIX = "C_"
 Prefix for direct stiffness-matrix input.
 
static const char * YOUNGS_MODULUS = "young"
 Young's modulus property key.
 
static const char * SHEAR_MODULUS = "shear_modulus"
 Shear modulus property key.
 
static const char * POISSON_RATIO = "poisson_ratio"
 Poisson's ratio property key.
 
static const char * AREA = "area"
 Cross-sectional area property key.
 
static const char * DENSITY = "density"
 Material density property key.
 
static const char * AREA_MOMENT = "area_moment"
 Area moment of inertia property key.
 
static const char * SHEAR_FACTOR = "shear_correction"
 Shear correction factor property key.
 
static const char * POLAR_MOMENT = "polar_moment"
 Polar moment of inertia property key.
 
static const char * CROSS_SECTION = "cross_section"
 Cross-section type property key (e.g., "square", "circle" "rectangle")
 
static const char * RADIUS = "radius"
 Radius for circular sections property key.
 
static const char * SIDE_LENGTH = "side_length"
 Side lengths for rectangular sections property key.
 
static const char * N_ELEM = "elemCount"
 Number of elements property key.
 
static const char * EDGE_FACTOR = "edge_factor"
 Edge factor f property key: edge elements get stiffness blocks scaled by f^2, f^3, f^4 and mass blocks by (2-f)^2, (2-f)^3, (2-f)^4.
 
static const char * EDGE_ELEMS = "edge_elements"
 Number of edge elements property key.
 
- Static Public Attributes inherited from Material
static const char * VERBOSITY_PROP = "verbosity"
 Property name for verbosity level control.
 

Protected Member Functions

 ~ElastoPlasticRodMaterial ()
 Destroy the elasto-plastic rod material.
 
double getYield_ (const Vector &args) const
 Value of the yield condition.
 
void getYieldGrad_ (const Vector &grad, const Vector &args) const
 Gradient of the yield condition with respect to args.
 
double getSuperEllipse_ (const Vector &args) const
 Super-ellipse yield condition f = sum_i |s_i/(c_i-h_i)|^p_i - (1+h_0)
 
void getSuperEllipseGrad_ (const Vector &grad, const Vector &args) const
 Gradient of the super-ellipse yield condition (zero stress derivative for |s_i| < EPS)
 
- Protected Member Functions inherited from ElasticRodMaterial
 ~ElasticRodMaterial ()
 Destroy the elastic rod material.
 
void calcMaterialStiff_ ()
 Calculate material stiffness matrix.
 
void calcMaterialMass_ ()
 Calculate material mass matrix.
 
- Protected Member Functions inherited from Material
virtual ~Material ()
 Destroy the Material object.
 

Protected Attributes

Matrix currDeltaFlow_
 Current plastic flow increment.
 
Matrix energyDiss_
 Dissipated energy storage.
 
Matrix energyHardPot_
 Hardening potential energy storage.
 
Plasticity algorithm components
Ref< Function > yieldCond_
 Yield condition function.
 
FuncUtils::FuncArray yieldDeriv_
 Derivatives of yield condition.
 
idx_t maxIter_
 Max iterations for stress update.
 
double precision_
 Convergence tolerance for stress update.
 
YieldType yieldType_
 Selected yield condition implementation.
 
bool isoHard_
 Isotropic hardening stress is a yield function argument.
 
bool kinHard_
 Kinematic hardening stresses are yield function arguments.
 
Vector yieldStrength_
 Strengths c_i of the super-ellipse yield condition.
 
Vector yieldExponent_
 Exponents p_i of the super-ellipse yield condition.
 
Function argument organization
idx_t dofCount_
 Degrees of freedom in stress/strain vectors.
 
idx_t argCount_
 Total arguments to yield condition.
 
Hardening and plastic state
Matrix materialH_
 Hardening matrix.
 
Cubix oldHardParams_
 Hardening parameters from last converged step.
 
Cubix currHardParams_
 Current hardening parameters.
 
Cubix oldPlastStrains_
 Plastic strains from last converged step.
 
Cubix currPlastStrains_
 Current plastic strains.
 
Cubix oldStresses_
 Elastic stresses from last converged step (set in applyDeform)
 
Work arrays of getStress

Created once in configure and overwritten in every call, so that getStress does not have to create new arrays for every integration point (see the note in utils/helpers.h). Not thread safe.

Vector plastStrain_
 Plastic strain iterate.
 
Vector hardParams_
 Hardening parameter iterate.
 
Vector hardStress_
 Hardening stresses.
 
Vector elasticStrain_
 Elastic strain.
 
Vector yieldArgs_
 Arguments of the yield condition.
 
Vector yieldGrad_
 Gradient of the yield condition.
 
- Protected Attributes inherited from ElasticRodMaterial
double young_
 Young's modulus.
 
double shearMod_
 Shear modulus.
 
double shearParam_
 Shear parameter.
 
double edgeFact_
 Edge factor for lattice materials.
 
idx_t edgeElems_
 Number of edge elements.
 
idx_t nElem_
 Total number of elements.
 
double area_
 Cross-sectional area.
 
Vector areaMoment_
 Area moments of inertia.
 
double polarMoment_
 Polar moment of inertia.
 
String crossSection_
 Cross-section type identifier.
 
double radius_
 Radius for circular sections.
 
Vector sideLength_
 Side lengths for rectangular sections.
 
double density_
 Material density.
 
Matrix materialK_
 Material stiffness matrix.
 
Matrix materialM_
 Material mass matrix.
 
Cubix oldStrains_
 Strains from last converged step.
 
Cubix currStrains_
 Strains from current iteration.
 
Matrix energyPot_
 Potential energy storage.
 
jem::numeric::MatmulChain< double, 1 > matvec_
 
Matrix stiffWork_
 Work array for the stiffness in getStress and applyDeform.
 
String rodName_
 Material instance name.
 
- Protected Attributes inherited from Material
idx_t verbosity_
 Verbosity level for material output and debugging.
 

Detailed Description

See also
Corresponding Paper

Member Enumeration Documentation

◆ YieldType

Enumerator
EXPRESSION 

"Expression": interpreted function yieldCond (default)

SUPER_ELLIPSE 

"SuperEllipse": native Lamé curve, see getSuperEllipse_

Constructor & Destructor Documentation

◆ ElastoPlasticRodMaterial()

ElastoPlasticRodMaterial::ElastoPlasticRodMaterial ( const String &  name,
const Properties &  conf,
const Properties &  props,
const Properties &  globdat 
)
Parameters
[in]nameMaterial instance name
[out]confActually used configuration properties
[in]propsUser-specified material properties
[in]globdatGlobal data container

◆ ~ElastoPlasticRodMaterial()

ElastoPlasticRodMaterial::~ElastoPlasticRodMaterial ( )
protected

Member Function Documentation

◆ applyDeform()

void ElastoPlasticRodMaterial::applyDeform ( )
overridevirtual

This method commits the current deformation state to the material's internal variables. It's typically called at the end of a successful load step to update the material's permanent state.

Reimplemented from ElasticRodMaterial.

◆ configure()

void ElastoPlasticRodMaterial::configure ( const Properties &  props,
const Properties &  globdat 
)
overridevirtual
Parameters
[in]propsProperties containing configuration parameters
[in]globdatGlobal data container with simulation context
Exceptions
jem::util::PropertyExceptionif yield function is not provided

Reimplemented from ElasticRodMaterial.

◆ declare()

void ElastoPlasticRodMaterial::declare ( )
static

◆ getConfig()

void ElastoPlasticRodMaterial::getConfig ( const Properties &  conf,
const Properties &  globdat 
) const
overridevirtual
Parameters
[out]confProperties object to store configuration in
[in]globdatGlobal data container with simulation context

Reimplemented from ElasticRodMaterial.

◆ getDissipatedEnergy()

double ElastoPlasticRodMaterial::getDissipatedEnergy ( const idx_t &  ielem,
const idx_t &  ip 
) const
overridevirtual

Computes the energy dissipated through inelastic processes at the specified element and integration point location.

Parameters
[in]ielemElement index
[in]ipIntegration point index within the element
Returns
Total dissipated energy at the specified location
Note
Contract: must return the value of the last committed state, i.e. it has to be stored in applyDeform(). SpecialCosseratRodModel::getEnergies_ reads it right after applyDeform() without re-evaluating strains/stresses.

Reimplemented from ElasticRodMaterial.

◆ getHardeningPotential()

double ElastoPlasticRodMaterial::getHardeningPotential ( const idx_t &  ielem,
const idx_t &  ip 
) const
overridevirtual

Computes the energy stored in hardening variables for plasticity models. This represents the energy associated with the evolution of the yield surface.

Parameters
[in]ielemElement index
[in]ipIntegration point index within the element
Returns
Hardening potential energy at the specified location

Reimplemented from ElasticRodMaterial.

◆ getHardVals()

void ElastoPlasticRodMaterial::getHardVals ( const Vector &  hardVals,
const Vector &  hardParams 
) const
virtual
Parameters
[out]hardValsComputed hardening values
[in]hardParamsHardening parameters

◆ getPotentialEnergy()

double ElastoPlasticRodMaterial::getPotentialEnergy ( const idx_t &  ielem,
const idx_t &  ip 
) const
overridevirtual

Computes the stored elastic energy at the specified element and integration point location.

Parameters
[in]ielemElement index
[in]ipIntegration point index within the element
Returns
Elastic potential energy at the specified location
Note
Contract: must return the value of the last committed state, i.e. it has to be stored in applyDeform(). SpecialCosseratRodModel::getEnergies_ reads it right after applyDeform() without re-evaluating strains/stresses.
0 for purely elastic materials

Reimplemented from ElasticRodMaterial.

◆ getStress() [1/2]

void ElastoPlasticRodMaterial::getStress ( const Vector &  stress,
const Vector &  strain 
)
overridevirtual
Exceptions
jem::Exceptionas this method should not be called directly for elasto-plastic materials

Reimplemented from ElasticRodMaterial.

◆ getStress() [2/2]

void ElastoPlasticRodMaterial::getStress ( const Vector &  stress,
const Vector &  strain,
const idx_t &  ielem,
const idx_t &  ip,
const bool  inelastic = true 
)
overridevirtual

Implements iterative return mapping with yield condition evaluation

Parameters
[out]stressCalculated stress vector
[in]strainInput strain vector
[in]ielemElement index
[in]ipIntegration point index
[in]inelasticWhether to compute the inelastic stress update
See also
Computational Inelasticity Box 3.6

Reimplemented from ElasticRodMaterial.

◆ getSuperEllipse_()

double ElastoPlasticRodMaterial::getSuperEllipse_ ( const Vector &  args) const
protected

Kinematic hardening h_i shifts the strengths c_i (Herrnböck et al., Comput. Mech. 2023, Eq. 39), isotropic hardening h_0 acts on the sum (Herrnböck et al., Comput. Mech. 2021, Eq. 47).

◆ getSuperEllipseGrad_()

void ElastoPlasticRodMaterial::getSuperEllipseGrad_ ( const Vector &  grad,
const Vector &  args 
) const
protected

◆ getTable()

void ElastoPlasticRodMaterial::getTable ( XTable &  strain_table,
const Vector &  weights,
const String &  name,
const IdxVector &  items 
) const
overridevirtual

This method fills an XTable with strain-related data for output or post-processing purposes. The specific data depends on the material type.

Parameters
[out]strain_tableOutput table to populate with strain data
[in,out]weightsWeight vector for data averaging or integration
[in]nameName identifier for the table data
[in]itemsIndex vector specifying which items to include

Reimplemented from ElasticRodMaterial.

◆ getYield_()

double ElastoPlasticRodMaterial::getYield_ ( const Vector &  args) const
protected
Parameters
[in]argsStresses, [isotropic hardening stress], [kinematic hardening stresses]

◆ getYieldGrad_()

void ElastoPlasticRodMaterial::getYieldGrad_ ( const Vector &  grad,
const Vector &  args 
) const
protected
Parameters
[out]gradGradient
[in]argsStresses, [isotropic hardening stress], [kinematic hardening stresses]

◆ makeNew()

Ref< Material > ElastoPlasticRodMaterial::makeNew ( const String &  name,
const Properties &  conf,
const Properties &  props,
const Properties &  globdat 
)
static
Parameters
[in]nameMaterial instance name
[out]confActually used configuration properties
[in]propsUser-specified material properties
[in]globdatGlobal data container
Returns
Reference to the created material

◆ rejectDeform()

void ElastoPlasticRodMaterial::rejectDeform ( )
overridevirtual

This method reverts the material to its state before the current load step. It's called when a load step fails to converge or needs to be repeated.

Reimplemented from ElasticRodMaterial.

Member Data Documentation

◆ argCount_

idx_t ElastoPlasticRodMaterial::argCount_
protected

◆ currDeltaFlow_

Matrix ElastoPlasticRodMaterial::currDeltaFlow_
protected

◆ currHardParams_

Cubix ElastoPlasticRodMaterial::currHardParams_
protected

◆ currPlastStrains_

Cubix ElastoPlasticRodMaterial::currPlastStrains_
protected

◆ dofCount_

idx_t ElastoPlasticRodMaterial::dofCount_
protected

◆ elasticStrain_

Vector ElastoPlasticRodMaterial::elasticStrain_
protected

◆ energyDiss_

Matrix ElastoPlasticRodMaterial::energyDiss_
protected

◆ energyHardPot_

Matrix ElastoPlasticRodMaterial::energyHardPot_
protected

◆ hardParams_

Vector ElastoPlasticRodMaterial::hardParams_
protected

◆ hardStress_

Vector ElastoPlasticRodMaterial::hardStress_
protected

◆ ISO_HARD_PROP

const char * ElastoPlasticRodMaterial::ISO_HARD_PROP = "isotropicCoefficient"
static

◆ isoHard_

bool ElastoPlasticRodMaterial::isoHard_
protected

◆ KIN_HARD_PROP

const char * ElastoPlasticRodMaterial::KIN_HARD_PROP = "kinematicTensor"
static

◆ kinHard_

bool ElastoPlasticRodMaterial::kinHard_
protected

◆ materialH_

Matrix ElastoPlasticRodMaterial::materialH_
protected

◆ maxIter_

idx_t ElastoPlasticRodMaterial::maxIter_
protected

◆ oldHardParams_

Cubix ElastoPlasticRodMaterial::oldHardParams_
protected

◆ oldPlastStrains_

Cubix ElastoPlasticRodMaterial::oldPlastStrains_
protected

◆ oldStresses_

Cubix ElastoPlasticRodMaterial::oldStresses_
protected

◆ plastStrain_

Vector ElastoPlasticRodMaterial::plastStrain_
protected

◆ precision_

double ElastoPlasticRodMaterial::precision_
protected

◆ TYPE_NAME

const char * ElastoPlasticRodMaterial::TYPE_NAME = "ElastoPlasticRod"
static

◆ YIELD_DERIV_PROP

const char * ElastoPlasticRodMaterial::YIELD_DERIV_PROP = "yieldDeriv"
static

◆ YIELD_EXPONENT_PROP

const char * ElastoPlasticRodMaterial::YIELD_EXPONENT_PROP = "yieldExponent"
static

◆ YIELD_PROP

const char * ElastoPlasticRodMaterial::YIELD_PROP = "yieldCond"
static

◆ YIELD_STRENGTH_PROP

const char * ElastoPlasticRodMaterial::YIELD_STRENGTH_PROP = "yieldStrength"
static

◆ YIELD_TYPE_PROP

const char * ElastoPlasticRodMaterial::YIELD_TYPE_PROP = "yieldType"
static

◆ yieldArgs_

Vector ElastoPlasticRodMaterial::yieldArgs_
protected

◆ yieldCond_

Ref<Function> ElastoPlasticRodMaterial::yieldCond_
protected

◆ yieldDeriv_

FuncUtils::FuncArray ElastoPlasticRodMaterial::yieldDeriv_
protected

◆ yieldExponent_

Vector ElastoPlasticRodMaterial::yieldExponent_
protected

◆ yieldGrad_

Vector ElastoPlasticRodMaterial::yieldGrad_
protected

◆ yieldStrength_

Vector ElastoPlasticRodMaterial::yieldStrength_
protected

◆ yieldType_

YieldType ElastoPlasticRodMaterial::yieldType_
protected