Index
__all__
module-attribute
__all__ = [
"ChangHicherAbstractModel",
"ElastoplasticContactLaw",
"micromechanical_registry",
"NonlinearElasticContactLaw",
]
micromechanical_registry
module-attribute
micromechanical_registry: Registry[str, Type[MicromechanicalBase]] = Registry()
ChangHicherAbstractModel
Bases: MixedLoadControl
, LoveWeberAveraging
, BestFitAveraging
, StaticHypothesisLocalization
, KinematicHypothesisLocalization
Abstract class for the Chang-Hicher model, define the createContactLaw
method and contact
property
annotation.
The Stress-strain relation of the Chang-Hicher model is given by:
where \(K_{jl}^c\) is the elastic stiffness matrix of the contact law, \(l_i^c\) is the unit vector pointing from the center of the contact area to the contact point, \(A\) is the fabric tensor, and \(V\) is the volume of the representative volume element.
The macro-micro integration algorithm is given by:
Calculated the contact force increment from the stress increment based on the static hypothesis:
Calculate the contact displacement increment from the contact force increment based on the elastic trial:
Update the contact force increment based on the contact law:
Update the stress increment based on the Love-Weber formula:
Update contact force from the stress increment based on the static hypothesis:
Calculate the unbalanced force:
Set the force increment to the unbalanced force and repeat the steps from the second step until the unbalanced force is small enough.
adaptiveIntegrationSubstepping
adaptiveIntegrationSubstepping(
dforce: ndarray, ddisp: ndarray, sv0: StateVariable, sv: StateVariable
) -> float
Adaptive substepping for macro-micro integration.
PARAMETER | DESCRIPTION |
---|---|
dforce
|
The force increment.
TYPE:
|
ddisp
|
The displacement increment.
TYPE:
|
sv0
|
The initial state variable.
TYPE:
|
sv
|
The current state variable.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
float
|
A ratio to reduce the force/displacement increment. |
contactIntegrate
contactIntegrate(
idx: int,
dforce: ndarray,
ddisp: ndarray,
sv0: StateVariable,
sv: StateVariable,
)
macroMicroIntegrate
macroMicroIntegrate(
K: ndarray,
dsig: ndarray,
deps: ndarray,
sv0: StateVariable,
sv: StateVariable,
) -> None
stiffness
stiffness(
sv0: StateVariable,
sv: StateVariable,
kn: ndarray = None,
ks: ndarray = None,
original: bool = False,
) -> ndarray
ElastoplasticContactLaw
Bases: ContactLawBase
Base class for elastoplastic contact laws.
CPPM
CPPM(
idx: int, ddisp: ndarray, sv0: StateVariable, sv: StateVariable
) -> ndarray
Solve plastic problem (plastic strain) with the closest point projection method (CPPM)
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
ddisp
|
Displacement increment
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Kep
|
Elasto-plastic stiffness matrix
TYPE:
|
ExplicitCPA
ExplicitCPA(
idx: int, ddisp: ndarray, sv0: StateVariable, sv: StateVariable
) -> ndarray
Solve plastic problem (plastic strain) with the explicit or cutting plane algorithm (CPA)
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
ddisp
|
Displacement increment
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Kep
|
Elasto-plastic stiffness matrix
TYPE:
|
dfdforce
dfdforce(idx: int, sv0: StateVariable, sv: StateVariable) -> ndarray
Calculate derivative of yield function f with respect to the force:
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
dfdsig
|
Derivative of yield function f with respect to the force
TYPE:
|
dgdforce
dgdforce(idx: int, sv0: StateVariable, sv: StateVariable) -> ndarray
Calculate derivative of potential function g with respect to the force:
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
dgdsig
|
Derivative of potential function g with respect to the stress
TYPE:
|
hardening
hardening(
idx: int, dgdsig: ndarray, sv0: StateVariable, sv: StateVariable
) -> float
Hardening items in the equation of plastic multiplier, coefficient of plastic multiplier:
make sure to define the derivative of plastic multiplier with respect to plastic strain dkappa_ddispp
(:math:\frac{\partial\kappa}{\partial\boldsymbol{\delta}^p}
) attribute in this class since it will be used in
the :meth:.updateHardeningVariables
method to update hardening variables.
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
dgdsig
|
Derivative of potential function g with respect to the force
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
hardening
|
Hardening items in the equation of plastic multiplier
TYPE:
|
integrate
integrate(
idx: int, ddisp: ndarray, Ke: ndarray, sv0: StateVariable, sv: StateVariable
) -> ndarray
isConverged
isConverged(
idx: int, f: float, trial: bool, sv0: StateVariable, sv: StateVariable
) -> bool
Determine whether the contact force state is converged to the yield surface or the force state is in the elastic region.
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
f
|
Yield function value
TYPE:
|
trial
|
Whether it is for elastic trial
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
bool
|
Whether the contact force state is converged to the yield surface or the force state is in the elastic region |
maintainYieldSurface
maintainYieldSurface(
idx: int,
ddisp: ndarray,
dforce: ndarray,
sv0: StateVariable,
sv: StateVariable,
)
Revert state variables from elastic state to maintain the force state on the yield surface
Notes
This method should be overridden when the force state is already plastic, but the mixed load iteration converges to the elastic state. This is similar to the yield surface correction method, but the force state is in the elastic region initially caused by the mixed load iteration. However, previous mixed load iteration indicates that the force state is already in the plastic region. This method is used to update the state variables to keep the force state on the yield surface.
If you override this method, make sure to initialize the sv.cscalars["plastic"]
state variable to an array
of zeros with the same size as the number of integration points in the initialize
method of the contact law.
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
ddisp
|
Displacement increment
TYPE:
|
dforce
|
Force increment
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
plasticModulus
plasticModulus(
idx: int,
Ke: ndarray,
dfdforce: ndarray,
dgdforce: ndarray,
hardening: float,
sv0: StateVariable,
sv: StateVariable,
) -> float
Calculate the plastic modulus
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
Ke
|
Elastic stiffness matrix
TYPE:
|
dfdforce
|
Derivative of the yield function with respect to the force
TYPE:
|
dgdforce
|
Derivative of the hardening variable with respect to the force
TYPE:
|
hardening
|
Hardening item
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
float
|
Plastic modulus |
plasticMultiplier
plasticMultiplier(
idx: int,
f: float,
Ke: ndarray,
ddisp: ndarray,
dfdforce: ndarray,
Kp: float,
sv0: StateVariable,
sv: StateVariable,
) -> float
Calculate the plastic multiplier
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
f
|
Yield function value
TYPE:
|
Ke
|
Elastic stiffness matrix
TYPE:
|
ddisp
|
Displacement increment
TYPE:
|
dfdforce
|
Derivative of the yield function with respect to the force
TYPE:
|
Kp
|
Plastic modulus
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
Current state variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
float
|
Plastic multiplier |
revertHardeningVariables
revertHardeningVariables(
idx: int,
dlambda: float,
ddispp: ndarray,
sv0: StateVariable,
sv: StateVariable,
)
Revert hardening variables.
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
dlambda
|
Plastic multiplier
TYPE:
|
ddispp
|
Plastic displacement increment
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
setPlasticMethod
setPlasticMethod(method: str)
Set the plastic method
PARAMETER | DESCRIPTION |
---|---|
method
|
The plastic method
TYPE:
|
updateHardeningVariables
updateHardeningVariables(
idx: int,
dlambda: float,
ddispp: ndarray,
sv0: StateVariable,
sv: StateVariable,
)
Update hardening variables, the derivative of plastic multiplier with respect to plastic strain is available
in the dkappa_ddispp
(:math:\frac{\partial\kappa}{\partial\boldsymbol{\delta}^p}
) attribute:
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
dlambda
|
Plastic multiplier
TYPE:
|
ddispp
|
Plastic displacement increment
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
yieldSurface
yieldSurface(
idx: int, fn: float, fr: float, sv0: StateVariable, sv: StateVariable
) -> float
Calculate yield function. You are required to define the yield function of the contact force and the state variables:
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
fn
|
Normal force
TYPE:
|
fr
|
Shear force
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
float
|
Value of the yield function |
yieldSurfaceCorrection
yieldSurfaceCorrection(idx: int, sv0: StateVariable, sv: StateVariable)
Update state variables after every plastic increment to keep the force state on the yield surface
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
yieldSurfaces
yieldSurfaces(
idx: int, fn: ndarray, fr: ndarray, sv0: StateVariable, sv: StateVariable
) -> ndarray
Calculate yield function for multiple times
PARAMETER | DESCRIPTION |
---|---|
idx
|
Index of the integration point
TYPE:
|
fn
|
Normal force
TYPE:
|
fr
|
Shear force
TYPE:
|
sv0
|
Initial state variables
TYPE:
|
sv
|
State variables
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
ndarray
|
Values of the yield function |
NonlinearElasticContactLaw
Bases: ContactLawBase
Nonlinear elastic contact law
integrate
integrate(
idx: int, ddisp: ndarray, Ke: ndarray, sv0: StateVariable, sv: StateVariable
) -> ndarray
postIncrement
postIncrement(
idx: int, ddisp: ndarray, sv0: StateVariable, sv: StateVariable
) -> None