Stress states
In many cases, the full 3d stress and strain states are not desired. In some cases, a specialized reduced material model can be written for these cases, but for advanced models this can be tedious. A stress state iteration procedure is therefore included in this package, since this does not interfere with the internal implementation of the material model.
It also allows custom implementations of specific materials for e.g. plane stress if desired.
The specific stress state is invoked by defining a stress state of type AbstractStressState
, of which the following specific stress states are implemented:
MaterialModelsBase.FullStressState
— TypeFullStressState()
Return the full stress state, without any constraints. Equivalent to not giving any stress state to the material_response
function, except that when given, the full strain (given as input) is also an output which can be useful if required for consistency with the other stress states.
MaterialModelsBase.PlaneStrain
— TypePlaneStrain()
Plane strain such that if only 2d-components (11, 12, 21, and 22) are given, the remaining strain components are zero. The output is the reduced set, with the mentioned components. It is possible to give non-zero values for the other strain components, and these will be used for the material evaluation.
MaterialModelsBase.PlaneStress
— TypePlaneStress(; kwargs...)
Plane stress such that $\sigma_{33}=\sigma_{23}=\sigma_{13}=\sigma_{32}=\sigma_{31}=0$ The strain input should be at least 2d (components 11, 12, 21, and 22). A 3d input is also accepted and used as an initial guess for the unknown out-of-plane strain components.
The optional keyword arguments are forwarded to IterationSettings
.
MaterialModelsBase.UniaxialStrain
— TypeUniaxialStrain()
Uniaxial strain such that if only the 11-strain component is given, the remaining strain components are zero. The output is the reduced set, i.e. only the 11-stress-component. It is possible to give non-zero values for the other strain components, and these will be used for the material evaluation.
MaterialModelsBase.UniaxialStress
— TypeUniaxialStress(; kwargs...)
Uniaxial stress such that $\sigma_{ij}=0 \forall (i,j)\neq (1,1)$ The strain input can be 1d (SecondOrderTensor{1}
). A 3d input is also accepted and used as an initial guess for the unknown strain components.
The optional keyword arguments are forwarded to IterationSettings
.
MaterialModelsBase.UniaxialNormalStress
— TypeUniaxialNormalStress(; kwargs...)
This is a variation of the uniaxial stress state, such that only $\sigma_{22}=\sigma_{33}=0$ The strain input must be 3d, and the components $\epsilon_{22}$ and $\epsilon_{33}$ are used as initial guesses. This case is useful when simulating strain-controlled axial-shear experiments. Note that the stress and stiffness outputs are the 3d tensors, and that the stiffness is not modified to account for the stress constraints.
The optional keyword arguments are forwarded to IterationSettings
.
MaterialModelsBase.GeneralStressState
— TypeGeneralStressState(σ_ctrl::AbstractTensor{2,3,Bool}, σ::AbstractTensor{2,3,Bool}; kwargs...)
Construct a general stress state controlled by σ_ctrl
whose component is true
if that component is stress-controlled and false
if it is strain-controlled. If stress-controlled, σ gives the value to which it is controlled. The current stress, for stress-controlled components can be updated by calling update_stress_state!(s::GeneralStressState, σ)
. Components in σ that are not stress-controlled are ignored.
Note that the stress and stiffness outputs are the 3d tensors, and that the stiffness is not modified to account for the stress constraints.
The optional keyword arguments are forwarded to IterationSettings
.
To adjust the iteration parameters (number of iterations and tolerance) for stress states requiring iterations, such stress states contain an IterationSettings
object,
MaterialModelsBase.IterationSettings
— TypeIterationSettings(;tolerance=1e-8, max_iter=10)
Settings for stress iterations. Constructors for iterative stress states forwards given keyword arguments to this constructor and saves the result.
Reduced stress state wrapper
When used in finite element codes, it is often convenient to collect both the stress state and the material type into a single type that is passed to the element routine. The wrapper ReducedStressState
is provided for that purpose.
MaterialModelsBase.ReducedStressState
— TypeReducedStressState(s::AbstractStressState, m::AbstractMaterial)
Creates a subtype of AbstractMaterial
that wraps a stress state and a material, such that calls to material_response(w::ReducedStressState, args...)
gives the same result as material_response(s, m, args...)
. Calls to initial_material_state
, allocate_material_cache
, get_num_tensorcomponents
, get_num_statevars
, get_num_params
, get_params_eltype
, tovector!
, tovector
, and allocate_differentiation_output
are forwarded with m
as the argument. fromvector
returns ReducedStressState
and is supported as well.