1The `Hooke` brick describes the linear elastic part of
2the behaviour of an isotropic or orthotropic material.
3
4## Evolution of the elastic strain
5
6This bricks relies on the fact that the behaviour is based on the
7strain split hypothesis.
8
9The elastic strain must be defined as the first integration
10variable. The associated variable must be called `eel` and its
11glossary name must be `ElasticStrain`. This is automatically the case
12with the `@Implicit` dsl.
13
14The total strain increment `deto` is automatically substracted to the
15equation associated with the elastic (`feel`), which is equivalent to
16the following statement:
17\[
18feel -= deto
19\]
20
21## Computation of the stress
22
23If the elastic behaviour is orthotropic, the stiffness tensor must be
24available available (using the keyword `@RequireStiffnessTensor`) or
25computed by the behaviour (using the keyword
26`@ComputeStiffnessTensor`). If those keywords are not explicitly
27used, the brick will automatically sets the attribute
28`requireStiffnessTensor` to `true` which has the same effect than the
29`@RequireStiffnessTensor` keyword.
30
31Thus, two cases arise:
32
33- the stiffness tensor is available (using keyword
34  `@RequireStiffnessTensor`) or computed by the behaviour
35  (`@ComputeStiffnessTensor`).
36- the behaviour has is an isotropic elastic behaviour and the
37  stiffness tensor is not available.
38
39### First case: the stiffness tensor is available
40
41#### Computation of the stress at \(t+\theta\,dt\)
42
43At \(t+\theta\,dt\), the stress are computed using:
44
45\[
46\mts{\sigma}=\tenseurq{D}\,\colon\,\mts{\tepsilonel}
47\]
48
49#### Computation of the final stress at \(t+dt\)
50
51If the stiffness tensor is avaible using the
52`@RequireStiffnessTensor`, the final stress \(\ets{\sigma}\) is
53computed using the following formula :
54
55\[
56\ets{\sigma}=\tenseurq{D}\,\colon\,\ets{\tepsilonel}
57\]
58
59If the stiffness tensor is computed using `@ComputeStiffnessTensor`,
60the final \(\ets{\sigma}\) stress is computed using:
61
62\[
63\ets{\sigma}=\ets{\tenseurq{D}}\,\colon\,\ets{\tepsilonel}
64\]
65
66### Second case: the stiffness tensor is not available
67
68In this case, the elastic behaviour of the material is isotropic. The
69computation of the stress requires the definition of the first Lamé
70coefficient and the shear modulus (second Lamé coefficient).
71
72The Lamé coefficients are derived from the Young modulus and Poisson
73ratio. They can be defined using:
74
75- the `@ElasticMaterialProperties` keyword. In this case, the
76  `Implicit` dsl already automatically computes the following
77  variables (See the documentation of the `@ElasticMaterialProperties`
78  keyword):
79    - `young`: the Young modulus at \(t+\theta\,dt\)
80    - `nu`: the Poisson ratio modulus at \(t+\theta\,dt\)
81    - `lambda`: the first Lamé coefficient at \(t+\theta\,dt\)
82    - `mu`: the second Lamé coefficient at \(t+\theta\,dt\)
83    - `young_tdt`: the Young modulus at \(t+dt\)
84    - `nu_tdt`: the Poisson ratio modulus at \(t+dt\)
85    - `lambda_tdt`: the first Lamé coefficient at \(t+dt\)
86    - `mu_tdt`: the second Lamé coefficient at \(t+dt\)
87- the Young modulus and Poisson ratio has been defined as material
88  properties or parameters. In this case, the names of those variables
89  must be `young` and the `nu` and the glossary names associated with
90  those variables must be respectively `YoungModulus` and
91  `PoissonRatio`. The Lamé coefficients will be computed and stored in
92  a data structure used internally by the brick.
93
94If the material properties are not defined using one of those two
95ways, the appropriate material properties will be automatically
96defined by the brick.
97
98#### Computation of the stress at \(t+\theta\,dt\)
99
100At \(t+\theta\,dt\), the stress are computed using the following
101formula:
102\[
103\mts{\sigma}=\lambda\,\trace{\mts{\tepsilonel}}+2\,\mu\,\mts{\tepsilonel}
104\]
105where \(\lambda\) and \(\mu\) are respectively the values of the first
106and second Lamé coefficients at \(t+\theta\,dt\)
107
108#### Computation of the final stress at \(t+dt\)
109
110The final stress \(\ets{\sigma}\) is computed using the following
111formula :
112
113\[
114\ets{\sigma}=\ets{\lambda}\,\trace{\ets{\tepsilonel}}+2\,\ets{\mu}\,\ets{\tepsilonel}
115\]
116
117## Enforcement of the plane stress conditions: computation of the axial strain
118
119If the user has explicitly specified that the axisymmetric generalised
120plane stress modelling hypothesis must be supported by the behaviour
121using the `@ModellingHypothesis` keyword or the `@ModellingHypotheses`
122keyword, this support is performed by automatically introducing an
123additional state variable: the axial strain. The associated variable
124is `etozz`, although this variable shall not be used by the end
125user. The glossary name of this variable is `AxialStrain`.
126
127The introduction of the variable modify the strain split equation like
128this:
129\[
130feel(2) += detozz;
131\]
132where \(detozz\) is the increment of the axial strain. The associated
133jacobian term is added if necessary.
134
135The plane stress condition is enforced by adding an additional
136equation to the implicit system ensuring that:
137\[
138\ets{\sigma_{zz}}=0
139\]
140
141This equation is appropriately normalised using one of the elastic
142properties. The associated jacobian term are added if necessary.
143
144## Enforcement of the generalised plane stress conditions: computation of the axial strain
145
146If the user has explicitly specified that the axisymmetric generalised
147plane stress modelling hypothesis must be supported by the behaviour
148using the `@ModellingHypothesis` keyword or the `@ModellingHypotheses`
149keyword, this support is performed by automatically introducing an
150additional state variable, the axial strain and an additional external
151state variable, the axial stress.
152
153The variable associated to the axial strain is `etozz`, although this
154variable shall not be used by the end user. The glossary name of this
155variable is `AxialStrain`.
156
157The variable associated to the axial stress is `sigzz`, although this
158variable shall not be used by the end user. The glossary name of this
159variable is `AxialStress`.
160
161The introduction of the variable modify the strain split equation like
162this:
163\[
164feel(1) += detozz;
165\]
166where \(detozz\) is the increment of the axial strain. The associated
167jacobian term is added if necessary.
168
169The plane stress condition is enforced by adding an additional
170equation to the implicit system ensuring that:
171\[
172\ets{\sigma_{zz}}-\sigma^{zz}-d\sigma^{zz}=0
173\]
174
175where \(\sigma^{zz}\) is the value of the axial stress at the
176beginning of the time step and \(d\sigma^{zz}\) is the value of the
177increment of the axial stress.
178
179This equation is appropriately normalised using one of the elastic
180properties. The associated jacobian terms are added if necessary.
181
182## Generic computation of the tangent operator
183
184The elastic and secant operator are equal to the elastic stiffness
185matrix at the end of the time step. How this elastic stiffness matrix
186is obtained depends on the many cases described before.
187
188The consistent tangent operator is computed by multiplying the elastic
189stiffness matrix at the end of the time step by a partial invert of
190the jacobian matrix. This procedure is discussed in depth in the
191MFront manuals.
192
193## Options of the brick
194
195The `Hooke` brick supports the following options:
196
197- `Isotropic`: the elastic part of the behaviour will be assumed
198  isotropic. This is the default for an isotropic material. This is
199  usefull if the material is declared orthotropic.
200- `Orthotropic`: the elastic part of the behaviour will be assumed
201  isotropic. This is the default for an isotropic material.
202- `NoPlaneStressSupport`: plane stress and axisymmetrical generalised
203  plane stress hypotheses support will not be added.
204- `NoGenericTangentOperator`: generic computation of the consistent
205  tangent operator will not be added.
206- `NoGenericPredictionOperator`: generic computation of the prediction
207  operator will not be added.
208