<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><p align="center"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"/></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a></p>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><p align="center"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"/></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a></p>
We now define appropriate function spaces. Standard CG-space of degree 2 will still be used
for the displacement whereas various Quadrature spaces are considered for:
* stress/strain-like variables (represented here as 4-dimensional vector since the :math:`zz` component must be considered in the plane strain plastic behaviour)
* scalar variables for the cumulated plastic strain
* the consistent tangent matrix represented here as a tensor of shape 4x4
As in the previous tutorial a ``degree=2`` quadrature rule (i.e. 3 Gauss points)
will be used. In the end, the total number of Gauss points in the mesh is retrieved
as it will be required to instantiate `MFront` objects (note that it can be obtained
from the dimension of the Quadrature function spaces or computed from the number of
mesh cells and the chosen quadrature degree)::
deg_u = 2
deg_stress = 2
stress_strain_dim = 4
V = VectorFunctionSpace(mesh, "CG", deg_u)
# Quadrature space for sigma
We = VectorElement("Quadrature", mesh.ufl_cell(), degree=deg_stress,