***material#

Description#

This command marks the definition of the materials in a structure to be studied. The behavior of each material is defined in a file with special syntax (see the chapter Material Behavior). The purpose of this command is therefore to define the material file names, associate these files to different element sets, and specify other global applications on top of a material model such as rotation of material coordinates or give local integration methods.

Syntax#

***material [ **elset nom ] \(~\,~\,\) *file nom [ num ] [ *integration ] [ *rotation ] [ *var_mat_ini ]

The sub-procedure **elset is used when there is more than one material. It is necessary then to give the name of the element set considered (elset). In the absence of the **elset command, the following options with one asterisk will be applied automatically to the ensemble of elements.

The sub-procedure *file is used to specify the file name for a material file in absolute or relative path names. An optional integer parameter is now available after the file name, giving the number of material declaration in a particular file. The second example shows this type of syntax.

Example#

A simple example of the ***material syntax is:

***material
  *file    mat

For a structure with multiple materials in different element sets, an example is:

***material
 **elset E1  *file E.inp 1
 **elset E2  *file E.inp 2

The program will search the first instance of ***behavior in the input file E.inp and assign that material to element set E1, while element set E2 will have the material defined after the second ***behavior in the input file. Please use caution when playing around with instances like this - Always Verify Your Materials.

*integration#

Description#

This option determines the local integration method for a material behavior.

Syntax#

*integration method  params

The allowable methods are summarized in the table below:

Integration methods

Description

runge_kutta

explicit integration with automated time steps based on integration error

theta_method_a

implicit generalized midpoint integration; this method normally supplies the best tangent matrix

theta_auto_a

automatic time stepping in the implicit \(\theta\)-method

theta_method_b

implicit integration by trapezoidal rule

runge_kutta

The Runge-Kutta method implements a second order explicit integration with automatic time stepping. Variables are normalized to allow varied variable magnitudes in “stiff” sets of equations. The method takes two real parameters. These are the convergence criteria followed by a minimum value for normalization. Standard RK error calculation for each integrated variable will be normalized by either the increment of the variable or this second parameter, whichever is greater. the resulting error is compared with the first parameter.

The Runge-Kutta integration with the gen_evp material behavior provides a tangent matrix in models with a single inelastic deformation. This matrix is however not consistent with the integration scheme, and thus yields less than optimal global convergence. The explicit integration also performs poorly in heavily time-dependent problems such as viscoplasticity. However, some complex models are only implemented with this method.

theta_method_a

The \(\theta\)-A method is the standard integration for the majority of material laws requiring integration.

(86)#\[x(t+\Delta t)-x(t) = \dot x\left(t+\theta\Delta t\right) \Delta t\]

This method requires 3 parameters to describe the convergence. These are first the \(\theta\) value (real) followed by the residual required for convergence (real) and the maximum number of local iterations in the integration (integer).

The value for \(\theta\) must be greater than zero and less than one. It is strongly advised to use \(\theta\) values of \(1\) for time independent (plastic) materials, and \(1/2\) for time dependent (viscoplastic) problems. Time independent plasticity will normally show strong oscillations about the solution for values of \(\theta\) less than \(1\).

Reasonable values of convergence range from \(10^{-6}\) to \(10^{-10}\). Values which are too large usually lead to poor global convergence. Too small values will not converge due to numerical round-off (\(10^{-12}\) is about the limit). Convergence will rarely take more than 25 iterations, and should not take more than 50. If this is the case, there may be some error in the integration (make a bug report), or the material parameters are excessive (damage laws may provoke this). If the local iterations are greater than 50 it is probably better to reduce the global iterations or use automatic time stepping (global or local).

The default integration is dependent on the material law used. Most behaviors modeling plastic or viscoplastic materials use a default of the \(\theta\)-method with theta = 0.5 ,eta = 1.e-9 and max_iteration = 200.

Example#

% plasticity or large deformation
*integration theta_method_a 1.0 1.e-9 50

% difficult viscoplastic case
*integration theta_method_a 0.5 1.e-6 100

% complex law
*integration runge_kutta 1.e-3 1.e-3

*rotation#

Description#

This material option is used to change a coordinate systems by rotation. It is used here to simplify specification of some materials (anisotropy, etc), but the syntax is general. Other applications using the rotation object include specification of grain orientations for polycrystals, and mesh rotations.

There are currently three methods for specifying a rotation. These are by vectors of the rotated coordinate axes in the global coordinate system, by Euler angles (used for crystal orientation for example), or the Rodrigues’ representation.

The first case is displayed in the following figure:

../../_images/MatRotation.fig.svg

For the material rotation of this section, the material gradient will be rotated (rotation is applied) before being integrated by the material behavior. For small deformation mechanics, this would be a rotation of the strain tensor.

(87)#\[\ten{\varepsilon}\,\!_{tot}^\prime = \ten R^T\ten \varepsilon\,\!_{tot}\ten R\]

The material behavior then solves for the flux in terms of the new gradient, which is \(\ten{\varepsilon}\,\!_{tot}^\prime\rightarrow\ten \sigma^\prime\) for the mechanical problem. Afterwards the flux is rotated to the global coordinates again:

(88)#\[\ten \sigma = \ten R\ten \sigma^\prime\ten R^T\]

Note that only the flux is rotated back to the global coordinates, but not the other quantities such as internal variables. For some material behaviors this can be modified, see for instance the **global_output option of the ***gen_evp behavior in the Z-mat manual.

Syntax#

For rotations specified using coordinate axes:

*rotation [ x1 \(x^*\) \(y^*\) [\(z^*\)] ] [ x2 \(x^*\) \(y^*\) [\(z^*\)] ] [ x3 \(x^*\) \(y^*\) [\(z^*\)] ]

The arguments x1, x2, x3 indicate the components of direction vectors for the transformed coordinate frame. Exactly one direction is required in 2D problems, and two directions are required in 3D. The order of definition is not important. The local coordinate system may be assembled with any of the geometrical axes. The input vectors will also be normalized by the program to automatically make unit vectors.

Using the notation here that t1 is the first direction vector defined, and t2 is the second (for 3D problems), direction vectors of the coordinate system are defined as follows: The first vector is collinear to t1. The second vector is a vector in the plane defined by t1,t2 and is perpendicular to t1. The third direction will always be calculated using the vector product of the first two vectors. The t vectors will replaced by those given by you using the x1, x2, x3 choices.

Rotation by giving Euler angles is similar. The significance of the three angles is given in the following figure:

../../_images/MatEuler.fig.svg

Syntax#

For rotations specified using Euler angles:

*rotation \(\phi_1\)  \(\phi\)  \(\phi_2\)

Using the Rodrigues’ representation, a rotation can be fully defined by a single vector \(\underline{V}\). The axis of rotation \(\underline{n}\) and the angle \(\theta\) are then:

(89)#\[\underline{n} = \left( n_1, n_2, n_3 \right) = \frac{\underline{V}}{||\underline{V}||}\]
(90)#\[\theta = 2 \arctan \left(||\underline{V}||\right)\]

An efficient way to compute the corresponding rotation matrix \(\ten R\) is given by the Rodrigues’ formula:

(91)#\[\ten R = \ten I + \sin(\theta) \ten K +(1-\cos(\theta))\ten K^2\]

with

(92)#\[\begin{split}\ten K = \left [ \begin{array}{ccc} 0&-n_{3} & n_{2}\\n_{3}&0& -n_{1}\\-n_{2}&n_{1} & 0\end{array} \right]\end{split}\]

Syntax#

For rotation specified using Rodrigues’ vectors:

*rotation rod \(V_{1}~~V_{2}~~V_{3}\)