The convention used to construct reduced strain/stress vectors is generally as follows. If in a particular mode a particular stress component is zero, the corresponding strain is not computed and not stored in reduced vector, and in full vector there is zero value on corresponding position. On the other hand, if zero strain component is imposed, then this condition must be taken into account in geometrical relations (at element level), and corresponding components are included in stress/strain reduced vectors.

Generally, the following major tasks are declared by
**StructuralMaterial** or inherited from **Material** class:

- Computing the real stress vector (tensor) at an integration point for
a given strain increment and updating its temporary state corresponding to
the local equilibrium, but not necessarily to the global equilibrium (see
*giveRealStressVector*). The parameters include the total strain vector and the corresponding integration point. The total strain is defined as strain computed directly from the displacement field at a given time. The stress independent parts (temperature, eigen strains) should be subtracted and the corresponding load-history variables (stored in the corresponding status) can be used. The temporary history variables in the status should be updated according to the newly reached state. The temporary history variables are moved into equilibrium history variables just after the global structure equilibrium has been reached by the iteration process. - Updating the integration point state (final state), when the global equilibrium has been reached.
- Returning material stiffness and/or flexibility matrices for a given material mode. The general methods computing the response for the specific material mode are provided, based on converting 3D stiffness or compliance matrix to that corresponding to the specific material mode. But, if it is possible to compute stiffness or compliance matrix directly for the specific mode, then these general methods should be overloaded.
- Storing/restoring integration point state to/from a stream.
- Requesting internal variables, their types and properties
(
*giveIPValue*,*giveIPValueSize*,*giveIPValueType*, and*giveIntVarCompFullIndx*services). - Returning material properties.

Structural material services should not be called directly by elements. Instead, the elements should pass their requests to the corresponding cross section model, that performs all necessary integration over its volume and invokes corresponding material model services.

The **StructuralMaterial** class comes with definition of
associated material status - **StructuralMaterialStatus**.
This is only an abstract class. For every instance of
**StructuralMaterial** class
there should be a specialized derived class, which maintains all history variables.
It only adds attributes common to all ``structural analysis'' material models - the
strain and stress vectors (both the temporary-like, corresponding to
the local
equilibrium and non-temporary ones, corresponding to the global equilibrium). The corresponding services
for accessing, setting, initializing, and updating these attributes are provided.

Borek Patzak 2018-01-02