Skip to content

Index

__all__ module-attribute

__all__ = ['ChangHicherAbstractModel']

ChangHicherAbstractModel

Bases: 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:

\[ S_{ijkl}=\frac{1}{V}\sum_{c=1}^N\sum_{m=1}^3\sum_{n=1}^3{(K_{jl}^c)^{-1} l_m^c l_n^c A_{mi} A_{nk}} \]

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:

\[\mathrm{d}f_i^{(k),c} = \mathrm{d}\sigma_{ij}^{(k)} A_{jk} l_k^c\]

Calculate the contact displacement increment from the contact force increment based on the elastic trial:

\[\mathrm{d}u_j^{(k+1),c} = (K_{ij}^{e,c})^{-1} \mathrm{d}f_i^{(k),c}\]

Update the contact force increment based on the contact law:

\[f_i^{(k+1),c} = f_i^{(k),c} + K_{ij}^{ep,c} \mathrm{d}u_j^{(k+1),c}\]

Update the stress increment based on the Love-Weber formula:

\[\sigma_{ij}^{(k+1)} = \frac{1}{V}\sum_{c=1}^N{f_i^{(k+1),c} l_j^c}\]

Update contact force from the stress increment based on the static hypothesis:

\[f_i^{(k+1),c} = \sigma_{ij}^{(k+1)} A_{jk} l_k^c\]

Calculate the unbalanced force:

\[\mathrm{d}f_i^{unb,c} = f_i^{(k+1),c} - f_i^{(k),c}\]

Set the force increment to the unbalanced force and repeat the steps from the second step until the unbalanced force is small enough.

\[\mathrm{d}f_i^{(k+1),c} = -\mathrm{d}f_i^{unb,c}\]

idx instance-attribute

idx: int

Index of the failed contact

contactIntegrate

contactIntegrate(
    idx: int,
    dforce: ndarray,
    ddisp: ndarray,
    sv0: StateVariable,
    sv: StateVariable,
) -> ndarray

dfdepsp

dfdepsp(sv0: StateVariable, sv: StateVariable) -> ndarray

dfdsig

dfdsig(sv0: StateVariable, sv: StateVariable) -> ndarray

dgdsig

dgdsig(sv0: StateVariable, sv: StateVariable) -> ndarray

maxYieldFunction

maxYieldFunction(sv0: StateVariable, sv: StateVariable)

Determine the maximum yield function value

setup

setup()

stiffness

stiffness(sv0: StateVariable, sv: StateVariable) -> ndarray

stiffness1

stiffness1(
    sv0: StateVariable,
    sv: StateVariable,
    kn: ndarray = None,
    ks: ndarray = None,
    kt: ndarray = None,
) -> ndarray

stress2force

stress2force(idx: int, sv0: StateVariable, sv: StateVariable)

Transformation matrix converting from stress increment to force increment

stressStrainIntegrate

stressStrainIntegrate(
    K: ndarray,
    dsig: ndarray,
    deps: ndarray,
    sv0: StateVariable,
    sv: StateVariable,
) -> None

stressStrainIntegrate1

stressStrainIntegrate1(
    K: ndarray,
    dsig: ndarray,
    deps: ndarray,
    sv0: StateVariable,
    sv: StateVariable,
) -> None

updateHardeningVariables

updateHardeningVariables(
    ddlambda: float, ddepsp: ndarray, sv0: StateVariable, sv: StateVariable
)

yieldFunction

yieldFunction(sv0: StateVariable, sv: StateVariable) -> float

yieldFunctionCorrection

yieldFunctionCorrection(
    K: ndarray, deps: ndarray, sv0: StateVariable, sv: StateVariable
)