Material model interface

For fullfilling the AbstractMaterial interface, the following functions need to be defined:

MaterialModels.AbstractMaterialType
AbstractMaterial

Store material parameters here. It can also be used to store constant precomputed properties, e.g. the elastic stiffness tensor. Ideally, the name should be chosen according to the first author of the initial publication of a model. For every Material there should be a keyword constructor and a list of arguments in the docstrings. If possible, also include the reference to a publication.

source
MaterialModels.AbstractMaterialStateType
AbstractMaterialState

Store state variables here. For now, this should not be mutable, a new object should be constructed for every new state. (We can discuss if this is a good or a bad idea.)

source
MaterialModels.material_responseFunction
material_response(m::AbstractMaterial, Δε::SymmetricTensor{2,3}, state::AbstractMaterialState, Δt; cache, options)

Compute the stress, stress tangent and state variables for the given strain increment Δε and previous state state.

Instead of the strain increment, the total strain could be handed over. Good ideas on how to handle this in general are welcome. For non-continuum kind of material models, the interface should be similar with stress-like and strain-like quantities. (E.g. for cohesive laws traction instead of stress and displacement jump instead of strain.) This function signature must be the same for all material models, even if they don't require all arguments.

source