\documentstyle[color,epsfig]{article}
\pagestyle{plain}
\textheight=24cm
\leftmargin=0cm
\textwidth=15cm
\parskip=1em
\parindent=0em
\topmargin=-3cm
\pagecolor{white}

\begin{document}

\title{TOCHNOG User's manual}
\author{Dennis Roddeman}
\maketitle

\clearpage
\tableofcontents

\clearpage
\section{Basic information}

\subsection{Introduction}

TOCHNOG is a free finite element program. 
See the homepage
\begin{center}
http://info.uibk.ac.at/c/c8/c813/tn\_release/tnhome.html
\end{center}

Use the email address below for error reports, questions, 
wishes, etc. 
Please enclose a small input file if you report an error.
\begin{center}
dennis.roddeman@uibk.ac.at
\end{center}

\subsection{License} 

The GNU GENERAL PUBLIC LICENSE applies.
It specifies COPYING conditions and a NO WARRANTY statement.
It is included in the last chapter of this manual,
and furthermore as a separate LICENSE.txt file in each distribution.

\subsection{Distribution files and installation}

After installation of the source distribution file 
from the homepage you will find in the tn directory the following:
\begin{itemize}
 \item src/tochnog.h
  \linebreak
  Header file for C++ routines.
 \item src/Makefile
  \linebreak
  Compiles the program. 
  Some precompiled executables are available at the download
  section of our home page.
  If you have another computer system then you need to compile yourself.
  Either use 
 \begin{itemize}
   \item make hp
   \item make linux
   \item make linux\_old
   \item make sgi
   \item make sparc
   \item nmake visual\_cpp (for Microsoft windows; you need the visual c++ compiler)
   \item make borland\_cpp (for Microsoft windows; you need the borland c++ compiler)
 \end{itemize}
  where linux is for linux multiprocessor platforms (with kernels 2.0 or later, 
  and with the linuxthreads library installed, see http://pauillac.inria.fr/$\sim$xleroy/linuxthreads/),
  and linux\_old is a single threaded version.
  The switch 'linux\_old' is reported to compile correctly also on NeXT computers
  (which used gcc version 2.7.3).
 \item src/*.cc
  \linebreak
  These are C++ routines.
 \item test/Makefile
  \linebreak
   Runs input files. 
   On Unix use 
 \begin{itemize}
   \item make small
   \item make large
   \item make very\_large
   \item make all
 \end{itemize}
  On Microsoft Windows with visual\_cpp use nmake instead of make.
  On Microsoft Windows without any make mechanism, just use the included make.bat file by typing make.bat.
  'Small' means that each input file's running time, core memory 
  requirements, and the disk files are all small: probably
  a few seconds of running time, a few Mbytes of core, and a few Kbytes of file space.
  'Very\_large' may require several hours of running time,
  several Mbytes of core, and several Mbytes of file space.
  See also the {\bf target\_item} description later in this manual.
 \item test/*.dat 
  \linebreak
  Data files.
 \item doc/LICENSE.txt
  \linebreak
 GNU GENERAL PUBLIC LICENSE
\end{itemize}

After installation of the Latex distribution file 
from the homepage you will find in the tn directory the following:
\begin{itemize}
 \item doc/tnu.tex
  \linebreak
 User's documentation in Latex format.
 \item doc/tnp.tex
  \linebreak
 Programmer's documentation in Latex format.
 \item doc/ps/*.ps
  \linebreak
 Postscript figures in Latex documentation.
\end{itemize}

After installation of the html distribution file 
from the homepage you will find in the tn directory the following:
\begin{itemize}
 \item doc/tnu/*
  \linebreak
 User's documentation in html format. 
 The entry file is tnu.html.
 \item doc/tnp/*
  \linebreak
 Programmer's documentation in html format. 
 The entry file is tnp.html.
\end{itemize}

To create a soft link on Unix to the tochnog executable use:
\begin{itemize}
 \item ln -s  \${HOME}/tn/src/tochnog \${HOME}/bin/tochnog
\end{itemize}
If you put your bin directory in your PATH, you can
use the tochnog executable everywhere.
As an alternative, you can move the executable to any
directory which is part of your PATH.

\subsection{How to perform a calculation and how to get started}

Create an input file, e.g. {\bf problem.dat}. 
The default input file is {\bf tn.dat}, which will be used if no other
input file is specified.
Thus the command {\bf tochog} or
{\bf tochnog tn.dat} yields output on the screen while 
{\bf tochnog tn.dat $>$ tn.out} redirects the output to a file.
On a Unix system you can run the job in the
background with {\bf tochnog tn.dat $>$ tn.out \&}.
On a Microsoft windows system you need to run from a Dos shell.

\vspace{2em}

Use the {\bf condif1.dat} test to get started.

\begin{itemize}
  \item Copy {\bf condif1.dat} to {\bf tn.dat}.
  \item Use your favorite editor to open the file {\bf tn.dat} and study it.
  \item Change {\bf echo} to {\bf -yes}.
  \item Remove the parentheses (...) surrounding the {\bf control\_print} statement
        and save the file.
  \item Run by typing {\bf tochnog} or {\bf tochnog tn} or {\bf tochnog tn.dat}.
  \item Study the output on the screen.
  \item Study the {\bf tn.log} file.
  \item Study the {\bf condif1.dbs} file. It contains the database after the
        calculation, and is an input file itself!
\end{itemize}

Afterwards do the same for the test {\bf repeat1.dat}.
It is simple, but shows some of the advanced features of TOCHNOG.
Finally look at the test {\bf repeat2.dat}.
After that you understand much of the program.

\subsection{Plotting programs}

Plots are made with {\bf gnuplot}, {\bf plotmtv}, {\bf gmv}
or {\bf vtk} in combination with {\bf Melati}.
You can use {\bf xv} to convert the rgb plot format of {\bf gmv}
to other formats sich as postscript.
For plotting you can also use {\bf matlab} and {\bf tecplot}, which
are not free however.

\vspace{1em}

From ftp.uni-paderborn.de you can get {\bf plotmtv}.

See http://www-xdiv.lanl.gov/XCM/gmv/GMVHome.html for {\bf gmv}.

See http://www.kitware.com/ for {\bf vtk}.

See http://www.scriptics.com/ for {\bf tcl}.

See http://fzs05.ms.tu-berlin.de/~runarko/ for {\bf Melati}.

See http://www.amtec.com/ for {\bf tecplot}.

See http://www.mathworks.com/ for {\bf matlab}.

From ftp.cis.upenn.edu you can get {\bf xv}.

\subsection{Space discretization, time discretization}

The computational domain is divided into finite elements.
The elements connect at nodes. Either one-dimensional (1D), 
two-dimensional (2D), three-dimensional (3D)
or axi-symmetrical (2D) domains can be used.
All fields (velocities, stresses, etc.) are assumed to be continuous
over the domain!
This differs from common finite element programs where quantities like 
stresses, etc. can show jumps over element borders.
This continuity gives a more diffuse but at the same time a more
stable numerical scheme.
Furthermore it has the advantage that all fields can be stored 
in the nodes (and not in integration points as in common finite element programs);
this leads to a relatively easy implementation of remeshing and refining techniques.

Only first order in time equations are solved. 
Time derivatives are approximated with Euler backward time discretization.

\subsection{Program capabilities}

\begin{itemize}

\item Input

  Format free input. Words and no 'magic numbers' in rigidly defined columns are used.

  Boundary conditions can be imposed onto at geometrical entities,
  as well as onto elements and nodes.

\item Output/plotting

  Output can be printed over user-specified geometrical objects 
  (points, lines, quadrilaterals,...) as well as at nodes. 

  The history of each variable, and for functions of variables,
  can be printed over user-specified geometrical objects as well as at nodes.

  Interface files can be created for both free and commercial post-processing programs.


\item Finite elements 

  1D, 2D and 3D. 
  Tochnog uses only isoparametric elements, so there are no beams or shells.

  Linear simplex elements (2 node bar, 3 node triangle, 4 node tetrahedron).
  A full family of first to fourth order bar, quadrilateral and brick elements.

\item Mesh generation/refining/etc.

  Macro regions are automatically divided into finite elements.

  Local h-refinement (e.g. using residues in equations).

  Global h-refinement (more elements).

  Global p-refinement (polynomial refinement).

  Remeshing (using residues in equations or element shapes).

  Building a totally new mesh. Mapping from old state variables.

\item Differential equations (materials)

  Convection-diffusion equation:

  - Temperature calculations.

  Fluids:

  - Stokes and Navier-Stokes.

  Solids:

  - Elasticity (isotropy and transverse isotropy).

  - Plasticity (Von-Mises, Mohr-Coulomb, Gurson, etc.; plasticity surfaces 
    can be arbitrarily combined).

  - Damage.
 
  - Thermal stresses.

  - Hypoelasticity.

  - Viscoelasticity.
 
  - Viscoplasticity.

  - Viscosity.

  Ground water flow equation:

  - Storage equation.

  Wave equation.

\item Accuracy information

  Residues in equations can be printed/plotted.

  Error estimates for all data (stresses, forces, temperatures, etc.)

\item Interaction analysis

  Automatic fluid-solid interaction.

  Temperature effects on fluids, solids.

\item Contact analysis

  Contact with and without friction.

  Frictional heat generation.

\item Frames of description

  Lagrangian, Eulerian, and AEL (arbitrary Eulerian Lagrangian) calculations.

\item Types of analysis

  Static, quasi-static and dynamic analysis.

\item Parallelization

  The following functionality is parallized:

  - element nodal force calculation.

  - contact algorithm.

  - mapping of state variables when building a new mesh.

  - determination of boundary conditions.

  - iterative linear equations solver
    (diagonal preconditioned biconjugate gradient solver).

  - etc.

\item Special features

  Automatic time-stepping (large steps for good iteration behavior,
  small steps for bad iteration behavior).

  Automatic distribution of tendons over linear finite elements (automatic embedment).

  Inverse modeling.

  Restart possibility.

  Convection wiggle stabilization (both for low and high order elements).


\item Costs

  Available for free. Including the source.

\end{itemize}

\subsection{Files used by Tochnog}

\begin{itemize}
  \item Input file. 
        By example {\bf tn.dat}. 
        The input file consists of an initialisation part (which unknowns should be solved, etc.)
        and a data part (elements, nodes, etc.).
  \item Log file {\bf tn.log}.
        Contains log messages of calculation.
  \item Plot files. 
        By example, {\bf plotmtv1.dat}, {\bf gmv001.inp}, etc.
  \item Database file. 
        By example, after the calculation with input file {\bf condif1.dat} the
        database file {\bf condif1.dbs} will be written.
        It contains everything (nodes, elements, solutions fields, etc.).
  \item Visual Tochnog files.
        Several vtn.* files are generated for Visual Tochnog.
        You should not use such file names yourself.
\end{itemize}

\clearpage
\section{Equations}

\subsection{Convection and diffusion of heat}

\subsubsection{Convection-diffusion equation}

\begin{displaymath}
  \rho C ( \dot{T} + \beta_i \frac{\partial T}{\partial x_i} ) =
  k ( \frac{\partial^2 T}{\partial {x_1}^2} +
    \frac{\partial^2 T}{\partial {x_2}^2} +
    \frac{\partial^2 T}{\partial {x_3}^2} ) -
  a T + f
\end{displaymath}

The primary unknown is the {\bf condif\_temperature} $T$. Further notation: $\rho$
{\bf group\_condif\_density}; $C$ {\bf group\_condif\_capacity}; $x$ space coordinate; $\beta_i$
{\bf group\_condif\_flow} in $i$-direction; $k$ {\bf group\_condif\_conductivity}; 
$a$ {\bf group\_condif\_absorption}; $f$ {\bf force\_element\_volume}.
Typical applications are heat conduction and heat conduction in a flow.

\subsubsection{Convection to environment}

\begin{displaymath}
  q_c = \alpha_c ( T - T_c )
\end{displaymath}

Here $q_c$ is the {\bf condif\_convection} heat flux, $\alpha_c$ is the convection
coefficient and $T_c$ is the environmental temperature for convection.

\subsubsection{Radiation to environment}

\begin{displaymath}
  q_r = \alpha_r ( T^4 - {T_r}^4 )
\end{displaymath}

Here $q_r$ is the {\bf condif\_radiation} heat flux, $\alpha_r$ is the radiation
coefficient and $T_r$ is the environmental temperature for radiation.

\clearpage

\subsection{Material deformation and flow}

\begin{displaymath}
  \rho \dot{v_i} = \frac{\partial \sigma_{ij}}{\partial x_j} +
    (1-\beta T) \rho g_i - 
    d {\frac{\partial v_i}{\partial x_i}}_{\rm no ~ sum ~ on ~ i}
    + f_i
\end{displaymath}

Notations:
$\rho$ {\bf materi\_density}; $v_i$ {\bf materi\_velocity} in $i$-direction; 
$\sigma_{ij}$ {\bf materi\_stress} matrix; 
$x$ space coordinate; $\beta$ {\bf group\_materi\_expansion\_volume};
$T$ (optional) {\bf condif\_temperature}; 
$g_i$ {\bf force\_gravity}; $d$ {\bf group\_materi\_damping} coefficient;
$f_i$ {\bf force\_element\_volume}.
The equation is given for space coordinates following the material
velocities $v_i$.

TOCHNOG allows you to build your favorite material, 
by adding separate contributions to the stresses $\sigma_{ij}$. 
In this way you can build solids or fluids or things in between. 
The separate contributions will be listed below. 
First two typical examples are given.

Nearly incompressible Navier Stokes:

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf group\_type 0  -materi} \\
  {\bf group\_materi\_elasti\_compressibility 0  1.0} \\
  {\bf group\_materi\_viscosity 0  1.2} \\
\end{quotation}

Linear solid:

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf group\_type 0  -materi} \\
  {\bf group\_materi\_elasti\_young 0  1.e10} \\
  {\bf group\_materi\_elasti\_poisson 0  0.2} \\
  {\bf group\_materi\_memory 0  -updated\_without\_rotation} \\
\end{quotation}

\subsubsection{Memory}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Total Lagrange}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Updated Lagrange}

Deformations (i.e. the deformation matrix $F$) can either refer to 
the previous time point ({\bf -updated} Lagrange formulation) or to
time 0 ({\bf -total} Lagrange formulation). 
\newline
In both cases, TOCHNOG composes the deformation
tensor with a polar decomposition into $F = R U$ with
$F$ the deformation matrix, $R$ the rotation matrix and $U$ the stretch matrix.
In a {\bf -updated\_without\_rotation} approximation, 
the rotation matrix is neglected (this saves CPU time).
See also {\bf group\_materi\_memory}.

\subsubsection{Elasticity}

The elastic stress rate is 

\begin{displaymath}
  C_{ijkl} \dot{{\epsilon_{kl}}}^{{\rm elas}}
\end{displaymath}

where $C_{ijkl}$ is the elastic modulus tensor (which is a
doubly symmetric tensor: $C_{ijkl}=C_{jikl}$, $C_{ijkl}=C_{ijlk}$ and $C_{ijkl}=C_{jilk}$), 
and $\dot{{\epsilon_{kl}}}^{{\rm elas}}$ is the elastic strain rate.
See the plasticity section for a definition of the elastic strain rate.

For an isotropic material
\addcontentsline{toc}{subsubsection}{\hspace{4em}Isotropy}

\begin{displaymath}
  C_{0000} = C_{1111} = C_{2222} = \frac{E(1-\nu)}{(1+\nu)(1-2\nu)}
\end{displaymath}
\begin{displaymath}
  C_{0011} = C_{0022} = C_{1122} = \frac{E\nu}{(1+\nu)(1-2\nu}
\end{displaymath}
\begin{displaymath}
  C_{0101} = C_{0202} = C_{1212} = \frac{E}{1+\nu}
\end{displaymath}

with $E$ {\bf group\_materi\_elasti\_young} modulus and $\nu$ {\bf group\_materi\_elasti\_poisson} ratio 
(the remaining non-zero moduli follow from the double symmetry conditions).

For a transverse isotropic material the material has one unique
\addcontentsline{toc}{subsubsection}{\hspace{4em}Transverse Isotropy}
direction (think of an material with fibers in one direction).
Here we take 'a' as the unique direction; 'b' and 'c' are 
the transverse directions. The material is fully defined by $C_{aaaa}$,
$C_{bbbb}$, $C_{aabb}$, $C_{abab}$ and $C_{bcbc}$ and the unique direction 
in space (see {\bf group\_materi\_elasti\_transverse\_isotropy}).
The other non-zero moduli follow from $C_{cccc}=C_{bbbb}$,
$C_{acac}=C_{abab}$, $C_{bbcc}=C_{bbbb}-2C_{bcbc}$ and from the 
double symmetry conditions. 

\subsubsection{Plasticity}

\underline{Plastic strain}
\vspace{1em}

In plastic analysis, the {\bf materi\_strain\_elasti} rate follows by subtracting from 
the {\bf materi\_strain\_total} rate the {\bf materi\_strain\_plasti} rate

\begin{displaymath}
  \dot{\epsilon_{ij}}^{\rm elas}  = \dot{\epsilon_{ij}} - 
    \dot{\epsilon_{ij}}^{\rm plas}
\end{displaymath}

where the {\bf materi\_strain\_total} rate is

\begin{displaymath}
  \dot{\epsilon_{ij}} = 0.5 ( \frac{\partial v_i}{\partial x_j} +
    \frac{\partial v_j}{\partial x_i} )
\end{displaymath}

The {\bf materi\_strain\_plasti} rate follows from the
condition that the stress cannot exceed the yield surface.
This condition is specified by a yield function $f^{\rm yield}(\sigma_{ij})=0$. 
The direction of the plastic strain rate is specified by the stress gradient
of a flow function $\frac{\partial f^{\rm flow}}{\partial \sigma_{ij}}$.
If the yield function and flow function are chosen to be the same,
the plasticity is called associative, else it is non-associative.

Von-Mises is typically used for metal plasticity.
Mohr-Coulomb and Drucker-Prager are typically used for soils and other
frictional materials. 
{\em The plasticity models can freely be combined;
the combination of the plasticity surfaces defines the 
total plasticity surface.} 

\underline{Von-Mises stress, mean stress and deviatoric stress}
\vspace{1em}

First some stress quantities which are used in most of the plasticity models 
are listed.

Equivalent Von-Mises stress:
\begin{displaymath}
  \bar{\sigma} = \sqrt{ \frac{ s_{ij}s_{ij} } {2} }
\end{displaymath}
Mean stress:
\begin{displaymath}
  \sigma_m = \frac{ \sigma_{11} + \sigma_{22} + \sigma_{33} } {3}
\end{displaymath}
Deviatoric stress:
\begin{displaymath}
  s_{ij} = \sigma_{ij} - \sigma_m \delta_{ij}
\end{displaymath}

\underline{Compression limiting plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Compression limiting plasticity model}
\vspace{1em}

This {\bf group\_materi\_plasti\_compression} model uses a special 
definition for the equivalent stress

\begin{displaymath}
  \bar{\sigma} = 
  \sqrt{ {\sigma_1}^2 + {\sigma_2}^2 + {\sigma_3}^2 }
\end{displaymath}

where $\sigma_1$, $\sigma_2$ and $\sigma_3$ are the first, second and third
principal stress respectively. 
Each of these is only incorporated if it is a compression stress.
The model now reads

\begin{displaymath}
\bar{\sigma} - \sigma_y = 0
\end{displaymath}

This plasticity surface limits the allowed compression stresses.

\underline{Drucker-Prager plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Drucker-Prager plasticity model}
\vspace{1em}

The {\bf group\_materi\_plasti\_druckprag} model reads

\begin{displaymath}
  3 \alpha \sigma_m + \bar{\sigma} - K = 0
\end{displaymath}
\begin{displaymath}
  \alpha = \frac{2 \sin( \phi )}{\sqrt{3} ( 3 - \sin(\phi) )}
\end{displaymath}
\begin{displaymath}
  K = \frac{ 6 c \cos( \phi )}{\sqrt{3} ( 3 - \sin(\phi) )}
\end{displaymath}

Here $c$ is the cohesion, which needs to be specified both for the yield
function and the flow rule; by choosing different values
non-associative plasticity is obtained.

\underline{Gurson plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Gurson plasticity model}
\vspace{1em}

The {\bf group\_materi\_plasti\_gurson} model reads
\begin{displaymath}
  \frac{3 \bar{\sigma}^2}{\sigma_y^2} + 
  2 q_1 f^* \cosh ( q_2 \frac{3 \sigma_m}{2 \sigma_y} ) -
  (1 + ( q_3 f^* ) ^2 ) = 0
\end{displaymath}

Here $f^*$ is the volume fraction of voids.
The rate equation
\begin{displaymath}
  \dot{f^*} = ( 1 - f^*) f^* \epsilon_{kk}^{\rm plas}
\end{displaymath}
defines the evolution of $f^*$ if the start value for $f^*$ is specified.
Furthermore, $q_1$, $q_2$ and $q_3$ are model parameters.

\underline{Tension limiting plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Tension limiting plasticity model}
\vspace{1em}

This {\bf group\_materi\_plasti\_tension} model uses a special 
definition for the equivalent stress

\begin{displaymath}
  \bar{\sigma} = 
  \sqrt{ {\sigma_1}^2 + {\sigma_2}^2 + {\sigma_3}^2 }
\end{displaymath}

where $\sigma_1$, $\sigma_2$ and $\sigma_3$ are the first, second and third
principal stress respectively. 
Each of these is only incorporated if it is a tension stress.
The model now reads

\begin{displaymath}
\bar{\sigma} - \sigma_y = 0
\end{displaymath}

This plasticity surface limits the allowed tension stresses.

A simple model for concrete can be obtained as follows.
Ue {\bf group\_materi\_plasti\_tension} to limit the tension strength {\it ft}.
Use {\bf group\_materi\_plasti\_compression} to limit the compressive strength {\it fc}.
The tension strength could be softened to zero over a plastic strain of, say, 1 percent.
The compressive strength could be softened to zero over a plastic strain of, say, 10 percent.

\underline{Von-Mises plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Von-Mises plasticity model}
\vspace{1em}

The {\bf group\_materi\_plasti\_vonmis} model reads

\begin{displaymath}
  \sqrt{3} ~ \bar{\sigma} - \sigma_y = 0
\end{displaymath}

\underline{Mohr-Coulomb plasticity model}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Mohr-Coulomb plasticity model}
\vspace{1em}

The {\bf group\_materi\_plasti\_mohrcoul} model reads

\begin{displaymath}
  0.5 ( \sigma_1 - \sigma_3 ) + 0.5 ( \sigma_1 + \sigma_3 ) \sin ( \phi ) 
  - c ~ \cos ( \phi ) = 0
\end{displaymath}

Here $c$ is the cohesion, $\sigma_1$ is the maximal principal stress
and $\sigma_3$ is the minimal principal stress.
The angle $\phi$ needs to be specified for
both the yield condition and the flow rule; by choosing different
values, non-associative plasticity is obtained.

\underline{Isotropic Hardening}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Isotropic Hardening}
\vspace{1em}

The size of the plastic strains rate is measured
by the {\bf materi\_plasti\_kappa} parameter
\begin{displaymath}
  \dot{\kappa} = \sqrt{ 0.5 \dot{\epsilon}_{ij}^{\rm plas} \dot{\epsilon}_{ij}^{\rm plas} }
\end{displaymath}

This parameter can be used for isotropic hardening.
Use the {\bf dependency\_diagram} for this.

\underline{Kinematic Hardening}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Kinematic Hardening}
\vspace{1em}

The {\bf materi\_plasti\_rho} matrix $\rho_{ij}$, governs the kinematic
hardening in the plasticity models.
It is used in the yield rule and flow rule to get a new origin by using the
argument $\sigma_{ij} - \rho_{ij}$:

\begin{displaymath}
  f^{\rm yield} = f^{\rm yield}(\sigma_{ij} - \rho_{ij})
\end{displaymath}
\begin{displaymath}
  f^{\rm flow} = f^{\rm flow}(\sigma_{ij} - \rho_{ij})
\end{displaymath}
where the rate of the matrix $\rho_{ij}$ is taken to be

\begin{displaymath}
  \dot { \rho_{ij} } = a \;\; \dot{\epsilon_{ij}}^{\rm plas}
\end{displaymath}
where $a$ is a user specified factor
(see {\bf group\_materi\_plasti\_kinematic\_hardening}).


\underline{Plastic heat generation}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Plastic heat generation}
\vspace{1em}

The plastic energy loss can be partially turned into heat rate per unit
volume $q$:

\begin{displaymath}
 q = \eta \: \sigma_{ij} \: \dot{\epsilon_{ij}}^{\rm plas}
\end{displaymath}

where $\eta$ is a user specified parameter (between 0 and 1)
specifying which part of the plastic energy loss is turned into heat
(see {\bf group\_materi\_plasti\_heat\_generation}).

\subsubsection{Damage}

\vspace{1em}

In the presence of {\bf materi\_damage} $d$, 
the {\bf materi\_stress} follows:

\begin{displaymath}
  \sigma_{ij}^{\rm damaged} = (1-d) \sigma_{ij}^{\rm undamaged}
\end{displaymath}

\addcontentsline{toc}{subsubsection}{\hspace{4em}Mazars}
\vspace{1em}

For the damage, the {\bf group\_materi\_damage\_mazars} model is available:
\begin{displaymath}
  d = d_t ~ \alpha^{\beta} ~ + ~ d_c ~ (1 - \alpha )^{\beta}
\end{displaymath}

where
\begin{displaymath}
  d_t = 1. - (1-a_t) ~ \frac{\epsilon^0}{\epsilon^{\rm eq}} - 
       a_t ~ e ^ { -b_t(\epsilon^{\rm eq} - {\epsilon^0}) }
\end{displaymath}

and
\begin{displaymath}
  d_c = 1. - (1-a_c) ~ \frac{\epsilon^0}{\epsilon^{\rm eq}} - 
       a_c ~ e ^ { -b_t(\epsilon^{\rm eq} - {\epsilon^0}) }
\end{displaymath}

Here $\epsilon^{\rm eq}$ contains the positive principal strains,
and $\epsilon$ contains the total strains (both negative and positive).
The parameter $\epsilon^0$ is the strain threshold for damage;
other material parameters are $\beta ~,~ a_t ~,~ b_t ~,~ a_c ~,~ b_c$.
Typically for concrete:
\begin{displaymath}
  1.e-4 < \epsilon^0 < 3.e-4 ~~;~~
  \beta = 1. ~~ ; ~~ 
  1 < a_t < 1.5 ~~ ; ~~ 
 500 < b_t < 2000 ~~ ; ~~
 0.7 < a_t < 1.2 ~~ ; ~~
 e^4 < b_t < 5 e^4
\end{displaymath}

You can combine damage freely with plasticity models
or other material behavior.

\subsubsection{Average stress (hydrostatic compressibility)}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Compressibility contribution}

An extra average stress contribution on each of $\sigma_{11}$, $\sigma_{22}$
and $\sigma_{33}$ is

\begin{displaymath}
  - \frac{1}{co} \frac{\partial v_i}{\partial x_i}
\end{displaymath}

where $co$ is the {\bf group\_materi\_elasti\_compressibility}, which should not be $0$. 
This pressure term can be used to model
nearly incompressible fluids or nearly incompressible solids (e.g. rubbers).
It typically is combined with a contribution for the deviatoric stresses
(see {\bf group\_materi\_viscosity} and {\bf group\_materi\_hyperelasticity}).

\subsubsection{Thermal stresses}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Expansion}

Temperature rates cause fictitious thermal strain rates 

\begin{displaymath}
   - \alpha \dot{T} \delta_{ij} \;\;\; 
  {\rm where}  \;\;\;  \delta_{ij}=1 \;\;\; {\rm if} \;\;\; i=j 
   \;\;\;  {\rm else}  \;\;\;  \delta_{ij}=0
\end{displaymath}

where $\alpha$ is the {\bf group\_materi\_expansion\_linear} coefficient and $\dot{T}$ is 
the {\bf condif\_temperature}.
These fictitious thermal strain rates in turn lead to stress rates.

\subsubsection{Hyper elasticity}

Hyper elasticity is used to model rubbers. The stresses follow from a
strain function (with $C_{ij}$ components of the matrix $C$, and
where $F$ is the deformation tensor and $U$ is the stretch tensor following
from the polar decomposition of the deformation tensor)

\begin{displaymath}
  2 \frac{\partial W}{\partial {C_{ij}}}
\end{displaymath}

\begin{displaymath}
  C = F^T F = U^T U 
\end{displaymath}

Strictly speaking $W$ is not a strain energy function, because
the Cauchy stresses $\sigma_{ij}$ are not conjugate to the strain 
matrix $C_{ij}$; the approach obeys the restriction of objectivity however.
The stress rates follow from the time derivative of this law. Typically, 
this law is chosen such that it gives only a deviatoric stress contribution.
The hydrostatic stress is obtained by including {\bf group\_materi\_elasti\_compressibility}.
To obtain a purely deviatoric function, the following strain measures 
are used (with $I_1$, $I_2$ and $I_3$ the first, second and third 
invariant of the elastic strain matrix respectively)

\begin{displaymath}
  J_1 = I_1 {I_3}^{\frac{-1}{3}} \; \; \; \;
  J_2 = I_2 {I_3}^{\frac{-2}{3}}
\end{displaymath}

\addcontentsline{toc}{subsubsection}{\hspace{4em}Besseling}

The {\bf group\_materi\_hyper\_besseling} function reads ( with $K_1$, $K_2$ 
and $\alpha$ user defined constants)

\begin{displaymath}
  W = K_1 ( J_1 - 3 ) ^ \alpha + K_2 ( J_2 - 3 )
\end{displaymath}

\addcontentsline{toc}{subsubsection}{\hspace{4em}Mooney-Rivlin}

The {\bf group\_materi\_hyper\_mooney\_rivlin} function reads (with $K_1$ and $K_2$ user 
defined constants)

\begin{displaymath}
  W = K_1 ( J_1 - 3 ) + K_2 ( J_2 - 3 )
\end{displaymath}

\subsubsection{Viscoelasticity}
\addcontentsline{toc}{subsubsection}{\hspace{4em}Maxwell chains}

Viscoelasticity is modeled with $n$ parallel {\bf group\_materi\_maxwell\_chains}. 
Each of the chains contains a spring with stiffness $E^m$ in line with a dash pot
with relaxation time $t^m$ ($m$ indicates the $m$-th maxwell chain).
The viscoelastic stress rate is given by (with $C_{ijkl}^m$ is the elastic 
tensor modulus of the $m$-th maxwell chain (depending on $E^m$ and the 
poisson ratio))

\begin{displaymath}
  \sum_{m=0}^{m=n-1} ( {C_{ijkl}}^m \dot{\epsilon_{kl}}^{\rm elas}
    - \frac {{\sigma_{ij}}^m}{t^m} )
\end{displaymath}

\subsubsection{Viscoplasticity}

Viscoplasticity is a model for rate-dependent plasticity.
Rate dependent plasticity is important for (high-speed)
transient plasticity calculations. It should be used in combination
with a plasticity law. Viscoplasticity influences the stresses
via the plastic strains.

\addcontentsline{toc}{subsubsection}{\hspace{4em}Power model}

\begin{displaymath}
\dot{{\epsilon_{kl}}} ^{\rm plas} =
 \eta ( \frac{f}{f^{\rm ref}} ) ^ p \;\; 
 \frac{\partial f^{\rm flow}}{\partial \sigma_{kl}}
\end{displaymath}

where $\eta$ (fluidity constant), $f^{\rm ref}$ (reference value for
yield function, e.g. the yield stress for Von-Mises plasticity) 
and $p$ (power) are user specified parameters for the {\bf group\_materi\_plasti\_visco}
model.

\subsubsection{Viscosity}

The viscous contribution to the total stress is

\begin{displaymath}
 \nu ( \frac{\partial v_i}{\partial x_j} + 
   \frac{\partial v_j}{\partial x_i} )
\end{displaymath}

where divergence is neglected since we only model slightly compressible flows.

\clearpage
\subsection{Contact analysis}

\subsubsection{Penalty formulation}

In contact analysis, normal forces $F_n$ follow from the condition that
bodies cannot penetrate each other.
Since we use a penalty formulation, the normal force is given by

\begin{displaymath}
  F_n = \lambda u_n
\end{displaymath}

where $u$ is the penetration and $\lambda$ is called 
the {\bf contact\_penalty\_velocity} because its generates
forces on the velocity unknowns.
You can also impose {\bf groundflow\_pressure} and {\bf condif\_temperature} contact conditions
by respectively the penalty factors {\bf contact\_penalty\_pressure} and
{\bf contact\_penalty\_temperature}.

\subsubsection{Friction and frictional heat generation}

This normal force leads to a friction force $F_f$ which equals

\begin{displaymath}
  F_f = \nu \: F_n
\end{displaymath}

where $\nu$  is the {\it friction} coefficient (see {\bf contact\_friction}.
The friction force causes heat generation rate $Q$:

\begin{displaymath}
  Q = \eta \: F_f \: v_f
\end{displaymath}

where $v_f$ is the slip velocity, and the factor $\eta$ is a user 
specified factor which determines which part of the frictional energy
loss is transformed into heat ($\eta$ is between 0 and 1;
see {\bf contact\_heat\_generation}).

\clearpage

\subsection{Ground water flow}

\subsubsection{Storage equation}

\begin{displaymath}
    \rho \; co \; \dot{p} =
    k_p ( \frac{\partial^2 p}{\partial {x_1}^2} +
          \frac{\partial^2 p}{\partial {x_2}^2} +
          \frac{\partial^2 p}{\partial {x_3}^2} ) -
    \frac{\partial v_i}{\partial x_i} + f
\end{displaymath}

Primary unknown is the {\bf groundflow\_pressure} $p$. Further notation: 
$\rho$ {\bf group\_groundflow\_density}; $co$ {\bf group\_groundflow\_compressibility}; 
$k_p$ {\bf group\_groundflow\_permeability}; $x_i$ space coordinate; 
$v_i$ material velocity (if present);
$f$ {\bf force\_element\_volume} (pressure source).
The equation is given for space coordinates following material 
velocities $v_i$ (if present).

The groundflow velocities (see {\bf groundflow\_velocity}) follow from:
\begin{displaymath}
  {v_i}^{{\rm g}} = - k_p \frac{\partial p}{\partial x_i}
\end{displaymath}

In case of gravity, the initial nodal pressures should be initialized in
the pressure part of the {\bf node\_dof} records, and the gravity force
should be included in the pressure part of the {\bf force\_element\_volume} record.

\clearpage

\subsection{Wave equation}

\begin{displaymath}
    \frac{\partial \dot s}{\partial t} =
      c^2 ( \frac{\partial^2 s}{\partial {x_1}^2} +
            \frac{\partial^2 s}{\partial {x_2}^2} +
            \frac{\partial^2 s}{\partial {x_3}^2} )
\end{displaymath}
\begin{displaymath}
    \frac{\partial s}{\partial t} = \dot s
\end{displaymath}

The primary unknowns are the {\bf wave\_scalar} $s$ and its first time 
derivative {\bf wave\_fscalar} $\dot s$ (
as TOCHNOG only solves first order in time equations, the first time
derivative of $s$ also becomes primary unknown in order to turn this second
order in time equation into a set of first order in time equations).
Further notation: $x$ space coordinate, $t$ time and $c$ speed of sound.

\clearpage
\section{Examples}

Data files are enclosed with the TOCHNOG distribution.
These files have several purposes. First, they show the analysis
capabilities of TOCHNOG. Second, these input files enable an easy start in
performing calculations yourself. Third, the data items
{\bf target\_item} and {\bf target\_value} are used in the data part,
allowing you to test TOCHNOG on your specific computer system.
This manual only contains results with some of the input files
(examp1.dat, examp2.dat, etc..).

\subsection{Example 1: Backward facing step (fluid flow)}

The following specific case of the GAMM workshop \cite{GAMM} is studied here:

\begin{quotation}
\mbox{ }

total length of channel $L=22$.

length inflow section $l=3$.

total height $H=1$.

height inflow section $h=0.5$.

viscosity $\nu=0.01$.

density $\rho=1$.

maximum flow component of parabolic profile in inflow section $U_{max}=1$.

the flow volume is $(2/3)hU_{max}=1/3$.

Reynolds $ Re= U_{max}(H-h)/\nu = 50$.

\end{quotation}

The result for the minimum x-velocity $v_x$ at distance $x=0.8$ behind the step
is studied. 
This result checks the correct modeling of the recirculation zone after the step.
At the distance $x=0.8$ we find the minimum velocity is $v_x = -0.041$.
This happens at $y=0.1$ above the lower edge. 
The results of the GAMM workshop were in between $-0.066$ and $-0.018$.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex1mesh.ps,width=8cm}}
\end{figure}

\clearpage

\subsection{Example 2: Confined compression of fluid filled porous material}

In this 1D example, a porous solid saturated with fluid is compressed
by a force $F$ on the solid phase. The length of the test specimen is
$L$, plane strain conditions hold, the Young's modulus is $E$, Poisson's ratio
is $\nu$, permeability $k_p$, width of test specimen $W$, thickness $T$,
area $A=WT$. Some non-dimensional variables are introduced
\begin{displaymath}
X = x/L \; \; \; \; \;
T = \frac{Hk_p}{L^2} t \; \; \; \; \;
P = \frac{Ap}{F}
\end{displaymath}
\begin{displaymath}
H=\frac{E(1-\nu)}{(1+\nu)(1-2\nu)}
\end{displaymath}
At $X=1$ free drainage holds ($P=0$) for $T>0$. At $X=0$ the
boundary is not permeable ($\frac{\partial P}{\partial X} = 0$) for $T>0$.
Using the non-dimensional variables, the analytical solution reads
(see \cite{Carlslaw})
\begin{displaymath}
P = \sum_{n=0}^{\infty} \frac{2}{M} \sin(MY) \exp (-M^2T)
\end{displaymath}
\begin{displaymath}
M = \frac{\pi}{2} (2n+1)
\end{displaymath}
As a typical result, $P$ at $T=0.22$ is checked; at $X=0.4$ the
exact solution for the non-dimensional pressure $P$ is 0.6.

Now we choose: $L=1$, $W=1$, $T=1$, $E=1.e1$, $\nu=0$, $k_p=0.1$ and $F=1$.
Thus, for $x=0.4$ at $t=0.22$ we should find $p=0.6$.
The numerical analysis (5 elements, time step size 0.01) gives $p=0.607$.
Note that relaxation on the pressure in combination with iterations is used
(because the compressibility is taken zero to model a fully incompressible 
fluid phase). The pressure distribution at $T=0.22$ is given below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex2pres.ps,width=4cm}}
\end{figure}

\clearpage

\subsection{Example 3: Plasticity in plate with circular hole}

This example is taken from \cite{Zienkiewicz2} (page 245).
A plate ($20 \; {\rm mm}$ wide, $36 \; {\rm mm}$ long) is perforated 
at the center with a hole with radius $5 \; {\rm mm}$. 
The plate is stretched in length direction by increasing the overall
strain $\epsilon$ in time. 
The other two boundaries are free to deform. 
Because of symmetry, only a quarter needs to be modeled.
A mesh with 48 linear quadrilateral elements is used

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex3mesh.ps,width=3cm}}
\end{figure}

The Young's modulus $E=7000 \; \frac{kg}{mm^2}$,
Poisson's ratio $\nu = 0.2$, the Von Mises yield stress
$\sigma_y = 24.3 \; \frac{kg}{mm^2}$ and the strain hardening
$h=0.032E=224 \; \frac{kg}{mm^2}$.
Plane stress conditions hold.
The plasticity influence is characterized by $\sigma^{\rm mean}$ 
at the upper edge for $v=0.0625$. 
The elasto-plastic analysis gives 
$\sigma^{\rm mean}=12.4 \; \frac{kg}{mm^2}$ for $v=0.0625$. 
A purely elastic calculation would have 
given $\sigma^{\rm mean}=16.13 \; \frac{kg}{mm^2}$ .

\clearpage

\subsection{Example 4: Two-dimensional convection and diffusion}

This example demonstrates the effect of the spatial stabilization algorithm
in 2D. 
A convection and diffusion of heat equation is analyzed on
a 1 by 1 square. 
The two-dimensional mesh consists of distorted linear quadrilaterals

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex4mesh.ps,width=4cm}}
\end{figure}

The convection velocity $\beta=1$ and the conductivity $k=0.01$.
The boundary conditions for temperature are chosen such that the exact
solution for a boundary layer in $y$-direction holds:
\begin{displaymath}
 T(y) = T(y=0) +
   (T(y=1)-T(y=0)) \frac{1- \exp (\beta\frac{y}{k})}{1-exp(\frac{\beta}{k})}
\end{displaymath}
where we choose $T(y=0)=1$ and $T(y=1)=0$.
This is a severe test for the spatial stabilization algorithm.
Many algorithms exist which solve this example exactly when
using a one-dimensional domain, say with $y$-axis only, but few exist
which do not show wiggles for irregular 2D grids.
The {\bf node\_dof} records are initialized 
with temperature 1 as a first estimate for the solution field. 
The we check the results at $x=0.7$ and $y=0.6$.
The exact solution is 1. 
The numerical solution with the 4-noded elements is 0.95. 
Splitting the elements in triangles 
(see {\bf control\_mesh\_split}) would have given the solution 1.001. 
Triangles seem to behave better than distorted quads (in this example anyway). 
Both solutions are quite good however.

\clearpage

\subsection{Example 5: Inverse modeling of indenter test}

In an experiment, a plate (size 1 by 1) is clamped at the bottom and loaded
at the middle top point by a concentrated load ($-0.000\,1$ in $y$-direction) 

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex5draw.ps,width=5cm,angle=-90}}
\end{figure}

The $y$-displacement at the point of loading is measured ($-0.000\,25571$) and used 
to estimate the Young's modulus of the material. 
Four quadratic elements are used to model the indenter test. 
Initially, the Young's modulus is estimated to be $0.2$. 
The top force and the measured displacement are such that the Young's modulus should
become 1 in the inverse iteration process (with this element mesh). 
The table below shows the estimated Young's modulus versus the inverse iteration number

\begin{center}
\begin{tabular}{cc}
\multicolumn{1}{c}{iteration} &
\multicolumn{1}{c}{Young's modulus} \\
0 & 0.200 \\
1 & 0.276 \\
2 & 0.371 \\
3 & 0.487 \\
4 & 0.619 \\
5 & 0.760 \\
6 & 0.887 \\
7 & 0.970 \\
8 & 0.998 \\
9 & 1.000 \\
\end{tabular}
\end{center}

\clearpage

\subsection{Example 6: Impact of metal plate, local mesh refinement}

A plate has an initial velocity and impacts on a rigid disk.
The initial mesh is plotted below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex6mes0.ps,width=5cm}}
\end{figure}

With this initial mesh, several time steps are taken.
Then a local mesh refinement is applied.
This local mesh refinement uses the residue in the equations to
decide where the mesh should be refined.
This strategy is applied several times.
The final mesh is plotted below:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex6mes1.ps,width=5cm}}
\end{figure}

\clearpage

\subsection{Example 7: Global mesh refinement over polynomial domain}

This example shows that mesh refinement follows the boundaries of
a domain; more precisely, if the nodes of an element edge are all
placed on a specific geometrical entity ({\bf geometry\_line},
{\bf geometry\_circle}, etc.) then new generated nodes along that edge
will also be placed on that geometrical entity;
see {\bf refine\_globally\_geometry} for this.
Here we mesh a domain bounded at the left and right side by vertical lines
($x=0$ and $x=10$), bounded at the bottom by the 
polynomial $y = -10 - 10x + x^2$ and bounded
at the top by the polynomial $y = +10 + x^2 - 0.1x^3$.
Initially only one 4-noded quadrilateral is used

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex7mes0.ps,width=4cm}}
\end{figure}

The four nodes of the element are placed on the intersection
points of the polynomials and the lines.
After 4 global refinements the mesh looks like

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex7mes1.ps,width=4cm}}
\end{figure}

Each refinement is accompanied by some remeshing in order to
obtain a more regular mesh.

\clearpage
 
\subsection{Example 8: Residual remeshing near heat spot}

The boundaries of a rectangle (size 1 by 1) 
have prescribed temperature 0.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex8mes0.ps,width=5cm}}
\end{figure}

The middle point is heated so that it gets temperature 1.
The residual remeshing is used to capture the temperature
distribution near the heated spot in the middle.
After some time, the temperature in the middle is imposed,
and the residual remeshing did locate nodes more closely
to the middle.
The number of nodes is not changed; the nodes are replaced in
the direction of high equation residual.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex8mes1.ps,width=5cm}}
\end{figure}

\clearpage
\subsection{Example 9: 2D Impact of metal plate, 
  rebuilding of mesh after large deformations.}

A metal plate impacts on a rigid sphere.
We study here the large deformation of the plate.
The initial mesh is show below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex9mes0.ps,width=7cm}}
\end{figure}

In each time step, a new mesh is built to prevent the
elements from becoming too distorted.
State variables (velocities, stresses, etc.) are mapped from
the old mesh onto the new mesh.
The mesh after these time steps is shown below:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex9mes1.ps,width=7cm}}
\end{figure}

Finally we show the equivalent plastic strain distribution:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex9epeq.ps,width=7cm}}
\end{figure}

\clearpage

\subsection{Example 10: Shear of low-tension material (cracking)}

The top edge of a 1 by 1 plate is sheared over 0.01 to the right,
and the bottom edge of the plate is sheared over a distance 0.01
to the left. 
The material cannot sustain positive principal stress 
exceeding 0.002 --- it cracks. 
This cracking is modeled with a plasticity model which does
not allow for principal stresses exceeding 0.002; the {\bf group\_materi\_plasti\_tension}
model is used for this.
The plate is modeled with linear triangles ({\bf -tria3}).
The first plot below shows the (deformed) mesh.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex10mes.ps,width=4.5cm}}
\end{figure}


The second plot below shows the largest positive principal stress;
notice that this principal stress did become equal 
to 0.002 over the entire tension diagonal.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex10s0.ps,width=5cm}}
\end{figure}

The third plot below shows the plastic strain; plastic strain does show up
especially in the corners of the tension diagonal.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex10epp.ps,width=5cm}}
\end{figure}

\clearpage

\subsection{Example 11: Propagation of a disturbance in the wave equation.}

The wave equation is used over a one-dimensional domain 
(between $x=0$ and $x=1$). The domain is divided into 128 linear elements.
At time $t=0$, $s=0$ over the entire domain.
After time $t=0$, at $x=0$ the scalar $s$ is prescribed to hold the value $0$ and 
at $x=1$ the rate of the scalar s ($\dot s$) is prescribed to have the
value $1. \; 10 ^{-4}$.
This disturbance at the right edge propagates into the domain with
the speed of sound ($c=1$).
At time $0.5$ the rate of $s$ over the entire domain is monitored;
at this time point $\dot s$ should have become $1. \; 10 ^ {-4}$ in
the right half of the domain, whereas nothing should have happened yet in the
left half of the domain.
The first plot shows $\dot s$ if we use purely explicit time stepping
({\bf control\_timestep\_iterations} is set to 1).

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex111.ps,width=4cm}}
\end{figure}

It is clear that the disturbance did propagate into half of the domain,
but quite some oscillations do show up. The oscillations are
greatly reduced if two iterations are used ({\bf control\_timestep\_iterations} is set to 2);
see the second plot.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex112.ps,width=4cm}}
\end{figure}

\clearpage

\subsection{Example 12: Contact frictional heat generation.}

A rectangular piece of material (size 1 by 1; Young's modulus $1$) 
is rubbed against a solid wall. In this example, we will analyze the stresses
and temperature profile caused by frictional heat generation.
The free edges of the material are prescribed to have temperature 0.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex12dra.ps,width=4.5cm,angle=-90}}
\end{figure}

The deformed mesh (with 16 quadratic elements) at time $1$ looks like:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex12mes.ps,width=5cm}}
\end{figure}

Initially the right edge of the material did penetrate the solid wall
over a distance $0.01$, but the contact algorithm did eliminate this
penetration. 
This resulted in a normal stress {\bf -sigxx} of about size $-0.01$.
The normal stress causes a frictional stress {\bf -sigxy} of about size $-0.0001$
at the interface between material and solid wall, due to a friction coefficient
of $0.01$: 

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex12sxy.ps,width=8cm}}
\end{figure}

This frictional stress, in turn, causes frictional heat generation.
The stationary temperature profile is plotted below:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex12tem.ps,width=8cm}}
\end{figure}

\clearpage

\subsection{Example 13: Automatically embedded tendon with local mesh refinement}

A tendon is embedded over a diagonal of a circular solid.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex13dra.ps,width=4.5cm,angle=-90}}
\end{figure}

This tendon has an initial stress.
Due to this initial stress, the tendon will contract and deform the solid. 
The solid is modeled with linear triangular elements.
TOCHNOG will automatically distribute the tendon over the solid elements
(automatic embedment).

Time steps are taken, after which the mesh is automatically
locally refined; this is done several times.
The first plot shows the final deformed mesh.
Notice that most refinement takes place where the tendon enters into the solid,
but there is also some refinement of elements along the tendon.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex13mes1.ps,width=5cm}}
\end{figure}

The second plot shows the residue in the equations.
Notice that the residue is high at the entrance of the tendon in the solid,
but high residues also appear on both sides of the tendon.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex13res.ps,width=5cm}}
\end{figure}

\clearpage
\subsection{Example 14: Continuous metal forming.}

A metal sheet is extruded in a continuous process.
The initial thickness of the metal is 1, and the thickness after
extrusion is 0.9.
The Young's modulus is $7000$ and the Poisson ratio is $0.2$.
The Von Mises plasticity model is used to model permanent
deformations (yield stress $24.3$).
The first flow shows the finite elements mesh:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex14mesh.ps,width=8cm}}
\end{figure}

The extrusion is modeled by prescribing a velocity $1.0$ at the right edge
of the computational domain.
On the left edge, the stresses and plastic strains are set to zero,
in order to specify that virgin material enters the domain.
Friction at the upper wall is not taking into account in this example.
The result for $\kappa$, measuring the build up of plastic strains,
is plotted below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex14kap.ps,width=8cm}}
\end{figure}

\clearpage
\subsection{Example 15: Generation of two holes in 2D mesh.}

This example demonstrates some mesh manipulation.
We start with one 4-noded quadrilateral element (of size 1 by 1).
After four global refinements of the mesh,
and splitting the 4-noded elements into 3-noded triangles
the following mesh is obtained:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex15mes1.ps,width=5cm}}
\end{figure}

Finally a two circular holes are taken out of the mesh,
and 10 remeshing passes are applied to get more nicely shaped
elements

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex15mes2.ps,width=5cm}}
\end{figure}

\clearpage
\subsection{Example 16: Bearing capacity of foundation.}

In this plane-strain example the Mohr-Coulomb plasticity law 
is used to calculate the bearing capacity of a foundation.
The foundation is symmetric, so that only half of the problem is analyzed.
The width of (half of) the foundation is $1.52 {\rm m}$.
The size of the soil domain is taken to be $6 {\rm m}$ by $6 {\rm m}$.
The Young's modulus of the soil is $207 \times \; 10^6 {\rm Nm^{-2}}$ and the Poisson 
ratio is $0.3$.
For the Mohr-Coulomb law, both the yield rule angle and
the flow rule angle are $20 \; {\rm degrees}$,
and the cohesion is $0.069 \; 10^6 {\rm Nm^{-2}}$.
At the bottom of the domain, all displacements are assumed
to be fixed.
At the left edge (the symmetry axis) and at the right edge, the horizontal
displacement is fixed while the vertical displacement is free.

The classical solutions from Prandtl, Coulomb and Terzaghi give for the maximal 
average pressure $\sigma_{yy}$ at the foundation values in the
range $0.98 \; 10^6 {\rm Nm^{-2}}$ up to $1.20 \; 10^6 {\rm Nm^{-2}}$.

To get the same order of accuracy as in the classical solutions,
a coarse mesh with only sixteen quadratic elements is used.
For optimal numerical stability, the elements are integrated fully 
(integration points in the nodes).
The foundation is prescribed a downward velocity of $0.05 \frac{\rm m}{\rm s}$ in
the calculation.
With time steps of $10^{-3} {\rm s}$ the solution is advanced up to time $0.6 {\rm s}$.
First the deformed mesh at time $1 {\rm s}$ is plotted below.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex16def.ps,width=5cm}}
\end{figure}

Secondly, the development for the average pressure at footing over time
is plotted

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex16syy.ps,width=5cm,angle=-90.}}
\end{figure}

The maximum value of average pressure is near $1. \; 10^6 {\rm Nm^{-2}}$.

\clearpage
\subsection{Example 17: Herz contact problem.}

A circular solid is compressed to a rigid surface.
Due to symmetry only half of the circle needs to be analyzed.
The compression is imposed, by prescribing the displacement of the
middle line of the circle, so that in fact only one quarter of the
circle needs to be analyzed.
Plane strain conditions are assumed.
The circle radius is $254 \; {\rm mm}$, the prescribed displacement of the
middle line is $10.16 \; {\rm mm}$, the Young's modulus 
is $206000 \; {\rm N mm^{-2}}$ and the Poisson ratio is $0.3$.
The mesh contains 64 quadratic {\bf -quad9} elements.

The first plot shows the deformed mesh.
Notice that the nodes at the bottom of the circle did not penetrate
the line $y=0$.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex17def.ps,width=6cm}}
\end{figure}

The second plot shows the Mises stresses (the size of the deviatoric
stress matrix) in ${\rm N mm^{-2}}$..

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex17seq.ps,width=6cm}}
\end{figure}

\clearpage
\subsection{Example 18: Thermally induced stresses in plate.}

A plate (of size $1$ by $1$) is initially stress
free and in thermal equilibrium with its environment 
(all initial temperatures are $0$).
Then the left edge of the plate is prescribed a temperature $1$
which will heat the plate.
The plate starts convecting energy at its other edges; the coefficient
for heat convection is $10^3$, the convection environmental temperature 
is $0$ and the conductivity of the plate is $50$.
The first plot shows the stationary temperature distribution.
A mesh with 16 by 16 linear finite elements is used for the 
numerical analysis.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex18tem.ps,width=5cm}}
\end{figure}

Due to the temperatures, thermal stresses will be induced in the plate.
The plate cannot deform at its left edge, but is otherwise free to deform.
The Young's modulus is $206 \; 10^9$, the Poisson ratio 
is $0.3$, and a plane stress situation is assumed ($\sigma_{zz}$ is $0$).
The thermal expansion coefficient is $8.4 \; 10^{-4}$.
The second plot shows the size of the deviatoric stresses (the von Mises
stress) which indicates if plasticity is to be expected.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex18seq.ps,width=5cm}}
\end{figure}

\clearpage
\subsection{Example 19: Nonlocal plasticity in softening bar.}

A bar of length $1$ is clamped at the left edge and is subjected
at the right edge to a step velocity of $0.7$.
The Young's modulus is $1$ and the density is $1$.
The velocity induces a stress step of $0.7$ in the bar which
travels with a speed of $1$ to the left.
At the left edge it re-bounces, and wants to build a stress of $1.4$.
The yield stress in plasticity model is $1$.
We soften the yield stress with the plasticity parameter $\kappa$.
This maximum stress softens from $1$ at $\kappa ~=~ 0$
down to $0$ at $\kappa ~=~ 0.7$.
To prevent unlimited localization of the plasticity zone, viscoplasticity is used,
so that stresses a bit above the yield stress are allowed.

With 64 linear elements we find after time $1.5$ the following result for the stress:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex19sxx.ps,width=6cm}}
\end{figure}

Notice that the stress is a bit higher then 1, which is due to the viscoplastic law.
The result for $\kappa$ is:

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex19kap.ps,width=6cm}}
\end{figure}

The plasticity occurs over a length larger then the element size.
Without viscoplasticity, the plasticity would have localised to 1 element,
because of the softening.

\clearpage
\subsection{Example 20: Three dimensional local mesh refinement near heat source.}

A sphere has zero temperature at the outer surface, and contains a heat
source in the middle such that the temperature in the middle is 1.
The temperature distribution is calculated.
A wire frame plot of the initial mesh (with {\bf -TET4} elements) is given below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex20mes0.ps,width=8cm}}
\end{figure}

Using the local refinement algorithm, 10 percent of the elements
are refined after the time stepping shown in the figure.
The {\bf residue} in the temperature equation is used to select
which elements need to be refined.
Since the {\bf residue} in the temperature equation is most large near
the heat source in the middle, the local refinement algorithm places
most elements near the middle.
This can be seen in the wire frame plot below

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex20mes1.ps,width=8cm}}
\end{figure}

\clearpage
\subsection{Example 21: Injection of an elastic material into an initially empty channel.}

A linear elastic material (Young's modulus $1.e3$, density $1$, Poisson's ratio $0.3$)
is injected from the left into an initially empty channel.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex21dra.ps,width=8cm,angle=-90}}
\end{figure}

The material is injected with a speed of $1$.
The length of the channel is $1$. 
We will study results at time $0.5$.
At this time the material has filled half of the domain,
so that the density and the velocity should be $1$ in the left
half of the channel, and they should still be zero in the right half of the channel.

A one-dimensional model is used (only a $x$-coordinate).
The filling of the domain is obtained by initializing the 
{\bf materi\_density} as an unknown which is to be solved by the 
mass conservation law.
We give the calculated density for a finite element mesh 
with 32, 64, 128, 256 and 512 linear elements respectively.
Better results correspond to a finer mesh.
It can be seen that on a coarse mesh the density is numerically diffused.
However, the same amount of density is spreaded to the right of $0.5$ as is
spreaded to the left of $0.5$; this indicates that the numerical algorithm 
is conservative.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex21dens.ps,width=5cm}}
\end{figure}

\clearpage
\subsection{Example 23: Automatic local mesh refinement near shear band.}

A test specimen is subjected to a vertical compression.
The initial mesh is given in the first plot

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex23mes0.ps,width=4cm}}
\end{figure}

A hole is present in the down left corner; this hole triggers a shear band.
Symmetry boundary conditions are applied, so that in
fact the quarter part of a total test specimen is modeled.
After the test specimen is compressed, automatic local mesh refinement
is applied; the elements with the highest plastic strains are refined.
Then the calculation restarts with the new mesh automatically.
This refinement + automatic restart is done three times.
The final plot shows the deformed mesh after the three refinements.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex23mes1.ps,width=4cm}}
\end{figure}

\clearpage
\subsection{Example 24: 3D Impact of metal plate, 
  rebuilding of mesh after large deformations.}

This is essentially the same calculation as example 9,
but now in 3D however.
The metal plate is modeled with {\bf -tet4} elements.
At the end time, the sphere starts completely penetrating the plate.
We only show the equivalent plastic strain distribution
in the final mesh.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/ex24epeq.ps,width=7cm}}
\end{figure}

\clearpage
\section{Input: general remarks}

The input is free format. Comments are enclosed between ( ), e.g.
(this is comment only). The input should consist of an initialization
part and a data part, separated by {\bf end\_initia} and ended by
{\bf end\_data}

\begin{quotation}
  \mbox{ } \\
  {\it initialization} \\
  \ldots \\
  {\it initialization} \\
  {\bf end\_initia} \\
  {\it data\_item index data\_values} \\
  \ldots \\
  {\it data\_item index data\_values} \\
  {\bf end\_data} \\
\end{quotation}

{\bf Bold} printed data in this manual can be used literally. {\it Italic}
printed data is only symbolic (it represents a number or a word).

\clearpage
\section{Input: initialization part}

The initialization part contains initialization records and an
{\bf end\_initia} record

\begin{quotation}
  \mbox{ } \\
  {\it initialization} \\
  \ldots \\
  {\it initialization} \\
  {\bf end\_initia}
\end{quotation}

The example below initializes nearly incompressible Navier Stokes
or a solid material

\begin{quotation}
  \mbox{ } \\
  {\bf echo -yes}\\
  {\bf number\_of\_space\_dimensions 2}\\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf end\_initia}
\end{quotation}

The {\bf echo} (always the first record), 
{\bf number\_of\_space\_directions} (always the second record),
and {\bf end\_initia} record should be supplied always.
Use {\bf echo -yes} to echo the input
and {\bf echo -no} to not echo the input. Use
{\bf number\_of\_space\_directions 1} for 1D problems, etc..
The records {\bf materi\_velocity} 
and {\bf materi\_stress} create a velocity and
stress field in the entire domain. In the following sections,
all possible {\it initialization} records are discussed.
Most of these records create an unknown field, a 
physical field like a temperature field or or a strain field,
over the computational domain.

\subsection{{\bf echo} {\it switch} (first record of initialization part)}

If {\it switch} is {\bf -yes} the input will be echoed.
If {\it switch} is {\bf -no} the input will not be echoed.
This needs to be the first record.

\subsection{{\bf number\_of\_space\_dimensions} {\it number\_of\_space\_dimensions} \\
  (second record of initialization part)}

Set {\it number\_of\_space\_dimensions} to 1 in 1D, etc.. 
You can also use the short name {\bf ndim} if you prefer.
This needs to be the second record.

\subsection{{\bf derivatives} (third record of initialization part,
 if specified)}

If this record is included, the time derivative and the space derivatives 
will be stored in the {\bf node\_dof} records. 
This is only required for a limited number of models. 
The model description will specify if
this {\bf derivatives} initialization is needed.

\subsection{{\bf condif\_temperature}}

The temperature $T$ is added to the {\bf node\_dof} records.

\subsection{{\bf groundflow\_velocity}}

The ground water flow velocity ${v_i}^{\rm g}$ is added to the {\bf node\_dof} records.
Condition: the {\bf -groundflow} differential {\bf group\_type} should be present.

\subsection{{\bf groundflow\_pressure}}

The pressure $p$ is added to the {\bf node\_dof} records.
Condition: the {\bf -materi} or {\bf -groundflow}
differential {\bf group\_type} should be present.

\subsection{{\bf materi\_damage}}

The damage $d$ is added to the {\bf node\_dof} records.
Also {\bf materi\_velocity} and {\bf materi\_strain\_total} should be initialized.

\subsection{{\bf materi\_density}}

The density $\rho$ is added to the {\bf node\_dof} records.
Now this density is used in the equations,
and the data item record {\bf materi\_density} in the data part
needs not to be specified.
The density is governed by the mass conservation law

\begin{displaymath}
  \dot{\rho} + \frac{\partial \rho v_j}{\partial x_j} = 0
\end{displaymath}

where $v_j$ is the velocity in the direction of the 
space coordinate $x_j$.
Don't forget to initialize the density by specifying {\bf node\_dof}
records.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.
And see also {\bf group\_materi\_density\_minimum}.

\subsection{{\bf materi\_displacement}}

The displacements $u,v,w$ are added to the {\bf node\_dof} records.
If {\bf materi\_displacement} is initialized or if nodes are relocated via 
{\bf node\_locate}, then equations like the convection
and diffusion of heat equation or the 
ground water flow equation are evaluated over the 
deformed volume.
Condition: also {\bf materi\_velocity} should be initialized because the displacement
follows from integration of the velocity.

\subsection{{\bf materi\_history\_variables {\it number\_of\_variables}}}

Generic history variables which can e.g. be used in some
user supplied routines.

\subsection{{\bf materi\_maxwell\_stress} {\it number\_of\_chains}}

Maxwell stress $ {\sigma_{11}}^m \; {\sigma_{12}}^m \; {\sigma_{13}}^m \;
{\sigma_{22}}^m \; {\sigma_{23}}^m \; {\sigma_{33}}^m $ 
is added to the {\bf node\_dof} records. 
The parameter {\it number\_of\_chains} should match
data item {\bf group\_materi\_maxwell\_chains}. 
The number of maxwell stresses is 6 * {\it number\_of\_chains}.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_plasti\_kappa}}

The plastic isotropic hardening parameter $ \kappa $
is added to the {\bf node\_dof} records.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_plasti\_rho}}

The plastic kinematic hardening vector
$ \rho_{11} \; \rho_{12} \; \rho_{13} \; \rho_{22} \;
\rho_{23} \; \rho_{33} $ is added to the {\bf node\_dof} records.
See also {\bf group\_materi\_plasti\_kinematic\_hardening}.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_strain\_elasti}}

The elastic strain ${\epsilon_{kl}}^{\rm elas}$ is added to the 
{\bf node\_dof} records.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.
See also: {\bf materi\_strain\_total}.

\subsection{{\bf materi\_strain\_plasti}}

The plastic strain ${\epsilon_{kl}}^{\rm plas}$ is added to the 
{\bf node\_dof} records. 
Condition: the {\bf -materi} differential {\bf group\_type} should be present.
See also: {\bf materi\_strain\_total}.

\subsection{{\bf materi\_strain\_total}}

The total strain $\epsilon_{kl}$ is added to the {\bf node\_dof} records.
All strains are time integrals of the strain rates 
for a specific material particle which happens to be present in the node.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_stress}}

The stresses $ \sigma_{11} \; \sigma_{12} \; \sigma_{13} \; \sigma_{22} \;
\sigma_{23} \; \sigma_{33} $ are added to the 
{\bf node\_dof} records.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_velocity}}

The velocities $v_i$ are added to the {\bf node\_dof} records.
Condition: the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf materi\_void\_fraction}}

The material void fraction $f^*$ is added to the {\bf node\_dof} records.
This is required for the {\bf group\_materi\_plasti\_gurson} model.

\subsection{{\bf residue}}

A scalar unknown is added to the {\bf node\_dof} records.
The scalar is the residue in the differential equations.
Also {\bf derivatives} should be initialized.

\subsection{{\bf wave\_scalar}}

Scalar in wave equation is {\bf node\_dof} records. 
Condition: also {\bf wave\_fscalar} should be initialized
and the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf wave\_fscalar}}

The first time derivative in the wave equation is added to the {\bf node\_dof} records. 
Condition: also {\bf wave\_scalar} should be initialized and
the {\bf -materi} differential {\bf group\_type} should be present.

\subsection{{\bf end\_initia} (last record of initialization part)}

\clearpage
\section{Input: data part}

\underline{Data items}
\addcontentsline{toc}{subsubsection}{Data items}
\vspace{1em}

Data items in the data part are used to control the calculation,
select required output, give unknowns initial values, etc..
Note that an {\bf end\_data} record is needed.

\begin{quotation}
  \mbox{ } \\
  {\it data\_item index data\_values} \\
  \ldots \\
  {\it data\_item index data\_values} \\
  {\bf end\_data}
\end{quotation}

Consider the following example

\begin{quotation}
  \mbox{ } \\
  {\bf element 0  -tria3 0 1 2} \\
  {\bf element 1  -tria3 1 2 3} \\
  {\bf node 0  0. 0.} \\
  {\bf node 1  1. 0.} \\
  {\bf node 2  0. 1.} \\
  {\bf node 3  1. 1.} \\
  \ldots \\
  {\bf end\_data}
\end{quotation}

Note that the data items {\bf element} and {\bf node} are indexed.
In fact most data items need to be indexed.
Indexing starts at 0 (all numbering in TOCHNOG starts at 0).
Indices need not strictly be sequential (e.g. only the indices 1,2 and 5
of a data item may be specified). 

\underline{Ranges}
\addcontentsline{toc}{subsubsection}{Ranges {\bf -ra \ldots -ra}}
\vspace{1em}

Ranges are general input formats used for indices and data values. 
Possible ranges are illustrated by the following examples

\begin{samepage}
\begin{quotation}
  \mbox{ } \\
  {\bf 12} \\
  {\bf -all} \\
  {\bf -ra} part1 part2 \ldots {\bf -ra}
\end{quotation}
\end{samepage}

The {\bf -all} range is not available for indices. 
The {\bf -ra} are delimiters of complex ranges. 
Each complex range part, e.g. part1, consists by example out of
\begin{quotation}
  {\bf 35} \\
  {\bf -from 5 -to 16} \\
  {\bf -from 5 -to 25 -step 2}
\end{quotation}

The data values for a data item can be specified as a range if this is
allowed for in the description of the data item.
All words in the data part (or part of an index)
need to be preceeded with a 'tic' (-).
In the example the {\bf node\_dof} records 1 to 100 are initialized

\begin{quotation}
  \mbox{ } \\
  {\bf node\_dof -ra -from 1 -to 100 -ra  1. 0. 0.}
\end{quotation}

\underline{Define blocks}
\addcontentsline{toc}{subsubsection}{Define blocks {\bf -start\_define \ldots -end\_define}}
\vspace{1em}

You can define a word to represent a set of strings.
For each word defined, you need to specify a {\bf start\_define}
\ldots {\bf end\_define} block.
Within the block, you first specify the word, and then you specify the set of strings.
Later in the data part, you can use the defined words as the replacement
of the set of strings.

Example:
\begin{quotation}
  \mbox{ } \\
  {\bf start\_define} \\
  {\bf velocity 1.34} \\
  {\bf end\_define} \\
  {\bf start\_define} \\
  {\bf left\_edge geometry\_line 1} \\
  {\bf end\_define} \\
  \ldots \\
  {\bf left\_edge 0. 0. 0. 10. 1.e-4} \\
  \ldots \\
  {\bf bounda\_unknown 1  -left\_edge -velx} \\
  {\bf bounda\_time 1  0. 0. 100. velocity} \\
  \ldots \\
\end{quotation}

\underline{Control indices}
\addcontentsline{toc}{subsubsection}{Control indices}
\vspace{1em}

All possible data items are defined in the following sections.
It only makes sense to specify some of the data items before the calculation;
the other data items are only meant to be printed after the calculation.
The example below specifies a 1D temperature calculation.

\begin{quotation}
  \mbox{ } \\
  {\bf echo -no} \\
  {\bf number\_of\_space\_dimensions 1} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \\
  {\bf node 1  0} \\
  {\bf node 2  1} \\
  {\bf node 3  2} \\
  \\
  {\bf element 1  -bar2 1 2} \\
  {\bf element 2  -bar2 2 3} \\
  \\
  {\bf bounda\_unknown 0  1 -temp} \\
  {\bf bounda\_time    0  0.0 0. 1. 1. 100. 1.} \\
  {\bf bounda\_unknown 1  3 -temp} \\
  {\bf bounda\_time    1  0.0 0.0 100.0 0.} \\
  \\
  {\bf group\_type 0  -condif} \\
  {\bf group\_condif\_density 0  1.0} \\
  {\bf group\_condif\_capacity 0  0.1} \\
  {\bf group\_condif\_conductivity 0  0.1} \\
  {\bf group\_condif\_flow 0  0.} \\
  \\
  {\bf control\_timestep 0  0.1 10.0} \\
  {\bf control\_print 0  -time\_current -node\_dof} \\
  {\bf control\_print\_database 1  -yes} \\
  {\bf control\_timestep 2  0.2 10.0} \\
  {\bf control\_print 2  -time\_current -node\_dof} \\
  \\
  {\bf end\_data} \\
\end{quotation}

Note how the indices of control items 
like {\bf control\_timestep} and {\bf control\_print} 
are used to control the sequence of events. First, ({\it index=0}) time steps
of size 0.1 are taken and for each time step results are printed. Then
({\it index=1}) the database is printed which can serve as a point of restart.
Finally ({\it index=2}) time steps of size 0.2 are taken and for each
time step results are printed.

\underline{Types of unknowns}
\addcontentsline{toc}{subsubsection}{Types of unknowns}
\vspace{1em}

Some of the unknowns are \underline{principal} unknowns:
these are {\bf materi\_velocity}, {\bf condif\_temperature},
{\bf groundflow\_pressure}, {\bf wave\_fscalar}.
These are the unknowns which are solved by the equilibrium
equations (conservation laws).

The other unknowns, like {\bf materi\_stress} and so, follow
from these principal unknowns (strains follow from displacement
derivatives, stresses follow from strains by material laws, etc.).

Furthermore, for all the unknowns we have \underline{primary} values,
which are the unknowns themselves,
and \underline{derived} unknowns, which are the space and time derivatives
of the primary unknowns.

\subsection{{\bf area\_element\_group} {\it index geometry\_entity\_item
  geometry\_entity\_index element\_group}}

At the start of the calculations, this record is used to generate
{\bf element\_group} records.
Each element, all of whose nodes are part of the {\it geometry\_item},
will get an {\bf element\_group} record with value {\it element\_group}.
Please realise that the geometry entity can be a two-dimensional
area, a volume, etc.

This option comes handy whenever a part of the domain gets some
specific element data.
By example, this would be the case if different areas in the structure
have different material properties like stiffness, etc.

Beware: any directly specified {\bf element\_group} records
will be overwritten.

\subsection{{\bf area\_node\_boundary} {\it index geometry\_entity\_item
  geometry\_entity\_index}}

This record is used to generate {\bf node\_boundary} records.
All nodes located on the specified geometrical entity
get a {\bf node\_boundary} set to {\bf -yes}.
This is done at the time that another option, like contact analysis,
needs these records.

\subsection{{\bf bounda\_force} {\it index node\_range unknown\_0 unknown\_1
  \ldots }}

States which ones from the list of dof's 
in which nodes get prescribed nodal forces.
The item {\it node\_range} represents a range of node numbers.
In stead of a node range also, by example,
{\bf -geometry\_line 1} can be used, indicating that the nodes on line 1
get the prescribed nodal forces.
The items {\it unknown\_0} etc. can be one of the items listed at {\bf dof\_label}. 
However, neither {\bf -dis} and {\bf -scal} can be used.

For a specific {\it index}, only one of
{\bf bounda\_force} and {\bf bounda\_unknown} can be specified;
thus, either Neumann conditions or Dirichlet conditions
can be applied to a particular node, but nor both.

\underline{Attention}: with this option you get the same nodal force
on all the specified nodes. 
If you want to apply a distributed force on a edge, however, you should use
{\bf force\_element\_edge}.
That option gives forces consistent with the displacement
field, so not necessarily the same for all nodes.
By example the nodes on the side of linear elements on a edge
get only half the force.

See also: {\bf bounda\_time}, {\bf bounda\_sine} and {\bf force\_element\_edge}.

\subsection{{\bf bounda\_sine} {\it index start\_time 
  freq\_0 amp\_0 freq\_1 amp\_1 \ldots}}

The {\bf bounda\_unknown} or {\bf bounda\_force} record with the same
{\it index} is imposed with the sum of the sine functions; 
the first sine function has frequency {\it freq\_0} and amplitude {\it amp\_0}, 
the second sine function has frequency {\it freq\_1} and amplitude {\it amp\_1}, 
etc.. The sine functions starts at time 0 and are imposed the whole calculation.
More general behavior in time can be imposed by using {\bf bounda\_time}
records. For a specific {\it index} only one of {\bf bounda\_time} and
{\bf bounda\_sine} can be specified. 

As a typical application the response due to the excitation 
with a frequency spectrum can be analyzed. 
Just print the relevant response by {\bf control\_print\_history} and
extract the frequency spectrum of that response signal. 

The sine loads will be only imposed after {\it start\_time}.

\subsection{{\bf bounda\_time} {\it index time load time load \ldots}}

This record specifies a multi linear time-load diagram for the
{\bf bounda\_unknown} or {\bf bounda\_force} record with the same {\it index}.
At all times that an unknown is not prescribed in such way, it is free and
determined with the governing differential equations.
For a specific {\it index} only one of {\bf bounda\_time},
{\bf bounda\_time\_file} and {\bf bounda\_sine} can be specified.

\subsection{{\bf bounda\_time\_file} {\it index switch}}

The same multilinear diagram as in the {\bf bounda\_time} record
can be specified, now however it is given in the file {\it index}{\bf .bounda}.
This allows for a larger number of {\it time load} sets
than possible with the {\bf bounda\_time} record, since the
value of that record is limited in length by the maximum length
that Tochnog uses to store it. 

You need to set {\it switch} to {\bf -yes}.

By example if {\it index} is 3 then the sets need to be specified
in the file {\bf 3.bounda}.

\subsection{{\bf bounda\_unknown} {\it index node\_range unknown\_0
  unknown\_1 \ldots }}

States which unknowns in which nodes get prescribed values by adjustment of
the {\bf node\_dof} records. The item {\it node\_range}
represents a range of node numbers. In stead of a node range also, by
example, {\bf -geometry\_line 1} can be used, indicating that the
nodes on line 1 get the prescribed boundary values.
The items {\it unknown\_0} etc. are one of the
primary unknowns listed at {\bf dof\_label}. 

For a specific {\it index}, only one of {\bf bounda\_force} and
{\bf bounda\_unknown} can be specified (thus either Neumann conditions or
Dirichlet conditions).

Example for discrete node forces in y-direction on the nodes on a line:

\begin{quotation}
  \mbox{ } \\
  {\bf bounda\_unknown 0  -geometry\_line 1 -vely} \\
  {\bf bounda\_time    0  0. 0. 1. 1. 100. 1.} \\
\end{quotation}

Normally you only should specify boundary conditions on principal unknowns
(like velocity, temperature, etc.) and not on
strain, stresses, etc.! 

See also: {\bf bounda\_time}, {\bf bounda\_sine},
{\bf force\_element\_edge} and {\bf force\_element\_volume}.

\subsection{{\bf condif\_convection} {\it index $\alpha_c$ $T_r$}}

Convection coefficient and convection environmental temperature.
Also the record {\bf condif\_convection\_geometry} should be specified.

\subsection{{\bf condif\_convection\_geometry} {\it index node\_0 node\_1 node\_2 \ldots}}

Selects the area for which the {\bf condif\_convection} record with
the same {\it index} should be applied. 
This is only available for linear elements.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/convect.ps,width=4cm,angle=-90}}
\end{figure}

In 1D, the convective heat flux is 0.
In 2D this option is available for all elements.
In 3D this option is only available for all linear elements.
In stead of a number of nodes also,
by example, {\bf -geometry\_line 1} can be used in 2D, indicating that
the nodes on line 1 start to convect.
See also: {\bf condif\_convection}.

\subsection{{\bf condif\_radiation} {\it index $\alpha_r$ $T_r$}}

Radiation coefficient and radiation environmental temperature.
Also the record {\bf condif\_radiation\_geometry} should be specified. 

\subsection{{\bf condif\_radiation\_geometry} {\it index node\_0 node\_1 node\_2 \ldots}}

Selects the area for which the {\bf condif\_radiation} record with
the same {\it index} should be applied. 
This is only available for linear elements.

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/radiate.ps,width=4cm,angle=-90}}
\end{figure}

In 1D, the radiation heat flux is 0.
In 2D this option is available for all elements.
In 3D this option is only available for linear elements.
the triangle between the 3 nodes will radiate heat.
In stead of a number of nodes also, by example, {\bf -geometry\_line 1} can
be used in 2D, indicating that the nodes on line 1 radiate heat.
See also: {\bf condif\_radiation}.

\subsection{{\bf contact\_friction} {\it friction}}

See {\bf contact\_geometry}.

\subsection{{\bf contact\_geometry} {\it index geometry\_entity\_item 
  geometry\_entity\_index}}

This record specifies a contact geometry. 
The allowed geometries and their material outward normals are listed below
\begin{itemize}
\item
If a {\bf geometry\_point} is used in 1D, the normal is in
positive x-direction.
\item 
If a {\bf geometry\_line} is used in 2D, the normal is the outer
product of 3-direction and the line direction (from point 0 to point 1).
\item 
If a {\bf geometry\_circle} is used in 2D, the normal is the outward
direction at the circle.
\item 
If a {\bf geometry\_sphere} is used in 3D, the normal is the outward
direction at the sphere.
\item 
If a {\bf geometry\_polynomial} is used in 2D, the normal is in positive 
y-direction.
\item 
If a {\bf geometry\_polynomial} is used in 3D, the normal is in positive 
z-direction.
\item 
If a {\bf geometry\_triangle} is used in 3D, the normal is in direction
of the outer product v01 $*$ v02 where v01 is the vector from node
0 to node 1 and v02 is the vector from node 0 to node 2.
\item 
If a {\bf geometry\_quadrilateral} is used in 3D, the normal is in direction
of the outer product v01 $*$ v02 where v1 is the vector from node
0 to node 1 and v02 is the vector from node 0 to node 2.
Only non-distorted quadrilaterals should be used.
\end{itemize}
This normal can be switched sign by setting 
the {\bf contact\_geometry\_switch} with the same {\it index} to {\bf -yes}.

In stead of geometries, also contact
with all elements will be checked.
Only contact with the elements {\bf -bar2}, {\bf -tria3},
{\bf -quad4} and {\bf -tet4} can be detected.
The outer boundary of the elements should be specified
by {\bf node\_boundary} records.
Often it is sufficient to apply {\bf node\_boundary} records
on the body with the coarsest mesh; if the meshes
of the contacting bodies are of the same size however,
you should specify {\bf node\_boundary} records for both
contacting bodies.

The time steps should be such small, that contacter nodes
penetrate the other elements only in small steps.

If a {\bf contact\_geometry } is used, then
the contacter node should also be within the tolerance of
the geometrical entity to be noticed!

If contact is detected, normal contact forces of 
size {\it contact\_penalty\_velocity} $*$ penetration are 
generated between the contacting node and the 
other element. Moreover, also a frictional force of size
{\it friction} $*$ normal force is generated
(see {\bf contact\_friction}).

You need more iterations, see {\bf control\_timestep\_iterations},
then normal; say 10 or so.

As an alternative to the contact algorithm, see {\bf node\_slide}.

\subsection{{\bf contact\_geometry\_switch} {\it index switch}}

See {\bf contact\_geometry}.
See also {\bf contact\_geometry}.

\subsection{{\bf contact\_heat\_generation} {\it factor}}

This {\it factor} specifies how much of the frictional energy
is transformed into heat (this only makes sense if
{\it friction} in {\bf contact\_friction} is not zero,
and if {\bf condif\_temperature} is initialized).
The {\it factor} should be between 0 and 1.
See also {\bf contact\_geometry}.

\subsection{{\bf contact\_penalty\_pressure} {\it pressure\_penalty}}

The {\it pressure\_penalty} should be given some high value  
if the pressure is freely linked at the surfaces of contacter and target.
See also {\bf contact\_geometry}.

\subsection{{\bf contact\_penalty\_temperature} {\it temperature\_penalty}}

The {\it temperature\_penalty} should be given some high value if
free heat exchange between contacter and target is possible.
See also {\bf contact\_geometry}.

\subsection{{\bf contact\_penalty\_velocity} {\it velocity\_penalty}}

The {\bf velocity\_penalty} essentially puts a spring between 
the contacter and the target if penetration occurs. 
Iterations (see {\bf control\_timestep\_iterations}) are needed;
more iterations are needed if the penalty factor is higher.
See also {\bf contact\_geometry}.

\subsection{{\bf control\_data\_delete} {\it index data\_item\_name index\_range}}

Delete one or more data items. The {\it index\_range} is a number (e.g. 3)
or a range ({\bf -ra ... -ra}, or {\bf -all}). 

In the example below element 1-10 
and nodes 1-100 are deleted after some time in the calculation; 
this simulates dismantling a part of a structure somewhere in its lifetime.
First, time steps with the total structure are taken;
then a part of the structure is dismantled; 
then time steps with the remaining part of the structure are taken.

\begin{quotation}
 \mbox{ } \\
 \ldots \\
 {\bf control\_timestep 10 \ldots} \\
 \ldots \\
 {\bf control\_data\_delete 20 -element -ra -from 1 -to 10 -ra} \\
 {\bf control\_data\_delete 21 -node -ra -from 1 -to 100 -ra} \\
 \ldots \\
 {\bf control\_timestep 30 \ldots} \\
 \ldots \\
\end{quotation}

If an element or node is deleted, then also the corresponding records 
will be deleted.
See also {\bf control\_data\_put}.

\subsection{{\bf control\_data\_put} {\it index data\_item\_name index\_range}}

Puts one or more data items. The values to be put should be specified
in a {\bf control\_data\_put\_double} record for real data or in a 
{\bf control\_data\_put\_integer} record otherwise.
The {\it index\_range} is a number (e.g. 3) or a range ({\bf -ra ... -ra},
or {\bf -all}). 
If the data item already exists it is overwritten; else a new
record will be generated.

See also {\bf control\_data\_delete}.

\subsection{{\bf control\_data\_put\_double} {\it index \ldots}}

See {\bf control\_data\_put}.

\subsection{{\bf control\_data\_put\_integer} {\it index \ldots}}

See {\bf control\_data\_put}.

\subsection{{\bf control\_eigen} {\it index type\_of\_eigen\_analysis number\_of\_modes}}

With this option you can ask for eigenvalues (and eigenvectors).
The eigenvectors are determined for the principal
unknowns in the system (like velocity, temperature, etc.).
With {\it type\_of\_eigen\_analysis} you can determine which eigen problem will be solved.
This option is only available after the matrices have been set
up with {\bf -matrix\_direct} or {\bf -matrix\_iterative} in {\bf control\_solver}.
And it is assumed that the matrices used in the eigenmodes determination
are \underline{symmetric}.

If {\it type\_of\_eigen\_analysis} is set to {\bf -matrix},
the eigen modes of the matrix which is used for iteration will be solved.

If {\it type\_of\_eigen\_analysis} is set to {\bf -buckling},
the buckling modes of the system will be solved.
This option is still experimental and being tested.
The eigenvalues tell how much times the load applied to the
system at the time of buckling mode determination can be applied
before buckling is to be expected.

The eigenvalues are put in the {\bf control\_eigen\_values} record.
The eigenvectors are put in the {\bf node\_eigen} records.

\underline{Warning}: the eigensolvers we use are not tuned for finite element analysis.
So the eigensolvers may be very slow, and large amounts of memory may be consumed.

\underline{Warning}: the {\bf -buckling} is still experimental and being tested.

See also {\bf control\_eigen\_scale}.

\subsection{{\bf control\_eigen\_scale} {\it index largest\_component}}

With this option you can scale the eigenvectors such that
the largest component becomes {\it largest\_component}.

See also {\bf control\_eigen}.

\subsection{{\bf control\_eigen\_values} {\it index eigen\_value\_0
  eigen\_value\_1 \ldots}}

See {\bf control\_eigen}.

\subsection{{\bf control\_mesh\_adjust\_geometry} {\it index geometry\_entity\_item \\
  geometry\_entity\_index} }

The nodes of the geometry are replaced such that they neatly follow
the boundary of the geometry item.
In this way, it is easy to make a mesh with elements
precisely in specific regions, if this is required to give
separate {\bf element\_group} data (e.g. materials)
to the geometry and it is too difficult to make the mesh at
once ok for this.

Nodes moved in this process automatically get a {\bf node\_boundary} record.

The created mesh may be quite distorted.
Consider using {\bf control\_mesh\_remesh}.

\subsection{{\bf control\_mesh\_delete\_geometry} {\it index geometry\_entity\_item \\
  geometry\_entity\_index} }

All elements which are part of the geometry item are deleted.
In this way, it is easy to make a mesh with holes, tunneling
systems in ground, etc.
Remaining nodes in the geometry, are moved onto the edge of the geometry. 
For these remaining nodes, automatically a {\bf node\_boundary}
record will be generated.

If you combine this record with a {\bf control\_timestep} record,
then the element will be slowly deleted, starting from a complete
element at the start of the timestep up to no element
at the end of the timestep.
This is accomplished by reducing the nodal forces of the elements
slowly to zero; at the end of the timestep, the element is deleted completely.
This might be usefull for a better convergence behaviour of the iterative process.

\subsection{{\bf control\_mesh\_macro} {\it index macro\_item 
  element\_name element\_group \\
  attach\_method n \ldots}}

With this record and the {\bf control\_mesh\_macro\_parameters}
record you define a macro region.
The macro region will automatically be divided into finite elements.

The type of macro region is defined by {\it macro\_item}.
You can set {\it macro\_item} to a {\bf -sphere} (3D),
{\bf -cylinder\_hollow} (3D), {\bf -brick} (3D),
{\bf -rectangle} (2D), {\bf -circle (2D)}, {\bf -circle\_hollow} (2D)
and {\bf -bar} (1D).

The element type to be generated needs to be specified in {\it element\_name};
only the elements {\bf -bar2}, {\bf -tria3}, {\bf -quad4},
{\bf -tet4} and {\bf -hex8} can be generated.

The elements to be generated will get {\bf element\_group} {\it element\_group}.

With {\it attach\_method} you define how the new generated elements
are attached to already existing directly neighboring elements.
Setting {\it attach\_method} to {\bf -tyings} causes
the new elements to be tied (equal displacements and, if present,
equal temperatures) to the old elements.
Setting {\it attach\_method} to {\bf -nothing} means that
no special attachment conditions are needed (loose structures).
To have contact conditions between the old and new elements,
you need to specify contact data yourself.

With {\it n \ldots} you define how much nodes and elements will be generated.
For a {\bf -sphere}, first 8 elements are generated; you need to specify 
the number of refinements.
For a {\bf -cylinder\_hollow}, you need to specify the number of
nodes in the length direction, the number of nodes 
over the wall thickness, the number of nodes in circ. direction.
For a {\bf -brick}, you need to specify the number of nodes in length direction,
the number of nodes in width direction and the number of nodes in
height direction.
For a {\bf -circle}, you need to specify the number of nodes
in a cross-section direction.
For a {\bf -circle\_hollow}, you need to specify the number of nodes
over the wall thickness, the number of nodes in circ. direction.
For a {\bf -rectangle}, you need to specify the number of
nodes in width direction and the number of nodes in thickness
direction.
For a {\bf -bar}, you need to specify the number of nodes.

Nodes on the boundary edge of the macro region automatically
get a {\bf node\_boundary} record.

In the next example a tunnel of radius 1 is build.
A lining of thickness 0.02 is used.

\begin{quotation}
 \mbox{ } \\
 \ldots \\
 {\bf number\_of\_space\_dimension  2} \\
 \ldots \\
 {\bf end\_initia} \\
 \ldots \\
 {\bf geometry\_point 1  0. 0. 1.} \\
 \ldots \\
 (apply initial load) \\
 \ldots \\
 \ldots \\
 (create tunnel) \\
 {\bf control\_mesh\_delete\_geometry 10 -geometry\_point 1} \\
 {\bf control\_mesh\_macro 20 -cylinder\_hollow -tyings 6 12} \\
 {\bf control\_mesh\_macro\_parameters 20 0. 0. 0.99 0.02 0. 360.} \\
 \ldots \\
 \ldots \\
 (study tunnel deformations in time) \\
 {\bf control\_timestep 30 \ldots} \\
 \ldots \\
\end{quotation}

In the following example a sphere is generated, after which
the nodes get an initial velocity:

\begin{quotation}
 \mbox{ } \\
 \ldots \\
 {\bf number\_of\_space\_dimension  2} \\
 \ldots \\
 {\bf end\_initia} \\
 \ldots \\
 {\bf control\_mesh\_macro 20 -sphere \ldots} \\
 {\bf control\_mesh\_macro\_parameters 20 \ldots} \\
 \ldots \\
 {\bf control\_data\_put 30 -node\_dof -all} \\
 {\bf control\_data\_put\_double 30  0. 1. \ldots} \\
 \ldots \\
\end{quotation}

\subsection{{\bf control\_mesh\_macro\_parameters} {\it index 
  x y \ldots }}

With this record you can specify the dimensions of the
{\bf control\_mesh\_macro} region.

For a {\bf -sphere}, you need to specify the x, y, z coordinates of
the middle of the sphere and the radius of the sphere.
For a {\bf -cylinder\_hollow}, you need to specify 
the x, y, z coordinates at the start of the cylinder, 
the x, y, z coordinates at the end of the cylinder, 
the middle radius, the wall thickness,
the start angle and the end angle in degrees (which allows for an open section).
For a {\bf -brick}, you need to specify
the x, y, z coordinates at the middle of the start of the brick, 
the x, y, z coordinates at the middle of the end of the brick, 
the width in the first lateral direction,
and the width in the second lateral direction.
For a {\bf -circle}, you need to specify the x, y coordinates of
the middle and also the radius.
For a {\bf -circle\_hollow}, you need to specify the same as for the
{\bf circle} and additionally the wall thickness, the start angle
and the end angle in degrees (which allows for an open section).
For a {\bf -rectangle}, you need to specify the x, y coordinates of
the middle, the width and the height respectively.
For a {\bf -bar}, you need to specify the x coordinate of the middle
and the length respectively.

\subsection{{\bf control\_mesh\_merge} {\it index switch}}

If {\it switch} is set to {\bf -yes}, then nodes with the same coordinates
are merged into one node.

\subsection{{\bf control\_mesh\_new\_mesh} {\it index delta}}

If {\bf switch} is set to {\bf -yes} then a new mesh is build.

This is useful whenever the old mesh is very distorted
as a result of a large deformation process.
The parameter {\it delta} determines the typical element size,
with which the new mesh should be build.

This option tends to make elements at the edge of the domain small.

See also {\bf control\_mesh\_new\_mesh\_element} and
{\bf control\_mesh\_new\_mesh\_region}.

\subsection{{\bf control\_mesh\_new\_mesh\_element} {\it index element\_type}}

With this record you can determine the element type which will
be created by {\bf control\_mesh\_new\_mesh}.
Allowed types are {\bf -bar2}, {\bf -tria3}, {\bf -quad4},
{\bf -tet4} and {\bf -hex8}.
If this record is not specified one of the simplex elements
({\bf -bar2}, {\bf -tria3}, {\bf -tet4}; depending on the
number of dimensions) will be generated. 

\subsection{{\bf control\_mesh\_new\_mesh\_region} {\it index element\_group}}

This sets the element group for which the new mesh should be build.
You only are allowed to build a new mesh on element group 0 or element group 1.
But you can also specify {\bf -all} for {\it element\_group},
so that all groups will be given a new mesh.
Nodal unknowns, see {\bf -node\_dof} are mapped from the old mesh onto the new mesh.
The new mesh should be sufficient fine as compared to the old mesh.
The boundary of the old mesh of the element group should be specified by
{\bf node\_boundary} records.

If this record is not specified, {\it index element\_group} is 0.

\subsection{{\bf control\_mesh\_refine\_globally} {\it index refinement\_type}}

This record activates global mesh refinement or global mesh coarsening.
This is not available for {\bf -tria3} and {\bf -tet4} elements.
Either {\it refinement\_method} is {\bf -h\_refinement}
(more of the same elements) or {\it refinement\_method} is
{\bf -p\_refinement} (higher order elements) or {\it refine\_method} is
{\bf -p\_coarsen} (lower order elements). Note that alternating
{\bf -p\_refinement} with {\bf -p\_coarsen} is possible.

As a special option for the {\bf -h\_refinement} method, the format 
{\bf refine\_globally} {\it index} {\bf -h\_refinement}
{\it switch\_$\xi$ switch\_$\eta$ switch\_$\zeta$} 
can be used. By example in 1D, only {\bf refine\_globally} 
{\it index} {\bf -h\_refinement} {\it switch\_$\xi$} should be specified. 
By example in the {\bf -hex8} element, $\xi$ is the isoparametric coordinate 
running from the first node to the second node, $\eta$ runs from the first node
the third node and $\zeta$ runs from the first node to the fifth node.
A isoparametric direction will be refined if the corresponding switch 
is set to {\bf -yes}. This option allows for refinement in specific directions.
It should be used with care however, and only gives proper results if
the $\xi$,$\eta$ and $\zeta$ directions of the elements match.

Rules for old and new:
\begin{itemize}
\item
A new generated element inherits its data items
from the old element it is generated from.
\item
If a new generated node is placed on an old element edge it inherits
those data items of the old nodes on that old edge that 
have a property in common (e.g. all old nodes on that edge have
{\bf node\_locate} specified.); then arbitrarily the data
item of one of the old nodes is taken.
\item
If a new generated node is placed inside an old element
it inherits those data items of the old nodes of that old element that 
have a property in common (e.g. all old nodes of that old element have
{\bf node\_locate} specified.); then arbitrarily the data
item of one of the old nodes is taken.
\item
For all new nodes the {\bf node\_dof} records are interpolated from
the old element nodes {\bf node\_dof} records by using the
old element interpolation functions.
\end{itemize}
 
See also {\bf control\_mesh\_refine\_globally\_geometry}.

\subsection{{\bf control\_mesh\_refine\_globally\_geometry} {\it index 
  geometry\_entity\_item \\
  geometry\_entity\_index}}

This record can be used together with the {\bf control\_mesh\_refine\_globally}
record with the same index.
If all nodes of an element edge is part of the geometrical entity, the 
new generated nodes are also placed on that geometrical entity.
This typically is used to follow curved edges of the domain.

\subsection{{\bf control\_mesh\_refine\_locally} {\it index percentage}}

An elements will be refined depending on the size
of a solution variable.
Typically the solution variable{\bf residue} is used,
but others can be chosen via {\bf control\_mesh\_refine\_locally\_unknown}.

The percentage of elements which will be refined is specified
by {\it percentage}.
Typically {\it percentage} is 10 or so.

This local mesh refinement is only available for {\bf -bar2}, {\bf -tria3} and
{\bf -tet4} elements. 

See the rules for old and new at {\bf control\_mesh\_refine\_globally}.

See also {\bf control\_mesh\_refine\_locally\_geometry}.

\subsection{{\bf control\_mesh\_refine\_locally\_geometry} {\it index 
  geometry\_entity\_item \\ geometry\_entity\_index}}

This record can be used together with the {\bf control\_mesh\_refine\_locally}
record with the same index.
If all nodes of an element edge is part of the geometrical entity, the 
new generated nodes are also placed on that geometrical entity.
This typically is used to follow curved edges of the domain.

\subsection{{\bf control\_mesh\_refine\_locally\_minimum} {\it index minimum\_length}}

With this record you can set the minimum length allowed for elements
in a local mesh refinement.

This especially is handy to prevent elements becoming smaller than the width
of localisation zones in softening analysis.
In this case use the, experimentally determined, localisation zone
with for {\it minimum\_length}.
This keeps energy dissipation over the localisation zone finite,
and thus prevemts excessive mesh dependency of the results.

\subsection{{\bf control\_mesh\_refine\_locally\_not} {\it index geometry\_entity\_0
  geometry\_entity\_index\_0}}

The refinement as specified in the {\bf control\_mesh\_refine\_locally}
record with the same index, will not be applied on the geometry specified by
{\it geometry\_entity\_0 geometry\_entity\_index\_0}.

\subsection{{\bf control\_mesh\_refine\_locally\_only} {\it index geometry\_entity\_0
  geometry\_entity\_index\_0}}

The refinement as specified in the {\bf control\_mesh\_refine\_locally}
record with the same index, will only be applied on the geometry specified by
{\it geometry\_entity\_0 geometry\_entity\_index\_0}.

\subsection{{\bf control\_mesh\_refine\_locally\_unknown} {\it index unknown}}

With {\it unknown} you can set which unknown will
be used for deciding if an element should be refined.
The size of the unknown field will be used.

Possibilities for {\it unknown} are:
{\bf -materi\_damage},
{\bf -materi\_displacement},
{\bf -materi\_strain\_elasti},
{\bf -materi\_strain\_plasti},
{\bf -materi\_strain\_total},
{\bf -materi\_stress},
{\bf -materi\_velocity} and
{\bf -residue}.

As a special option you can set {\it unknown} to {\bf -nothing}; then
an element is refined always.

For finding localization zones (e.g. shear bands) choosing {\bf -materi\_strain\_plasti}
or {\bf -materi\_damage} seems to be most robust.

\subsection{{\bf control\_mesh\_remesh} {\it index number\_of\_passes}}

This record causes remeshing. 

Nodes are replaced either such that the mesh becomes 
more regular (geometric remeshing) or such that
the mesh becomes more dense in areas of residues (residue remeshing). 

By example, the geometric remeshing can be used 
after local mesh refinement ({\bf control\_mesh\_refine\_locally}).
And by example, the residue remeshing can be used so that 
nodes follow wave propagation phenomena.

The remeshing is done with {\it number\_of\_passes} sweeps through the mesh,
for each iteration (see {\bf control\_timestep\_iteration}) of
a time increment (see {\bf control\_timestep}). 
Typically, {\it number\_of\_passes} is 2 or 3.

If {\bf derivatives} is initialized, TOCHNOG adjusts the unknowns for changing 
nodal positions (new unknown = old unknown + gradient * node replacement);
this is only strictly required for history dependent or transient calculations.

See also {\bf control\_mesh\_remesh\_factor} and {\bf node\_boundary}.

\subsection{{\bf control\_mesh\_remesh\_factor} {\it index geometry\_factor residue\_factor}}

With this record you can set the relative usage of geometry remeshing
and residue remeshing.
As the typical remeshing step (i.e. the distance
that a node is relocated) is about 100 times as large in geometry
remeshing than in residue remeshing, you should use, say, {\it geometry\_factor}
is 0.01 and {\it residue\_factor} 1.0 for both effects to be
of about equal size. Some examples are given below.

\begin{quotation}
  \mbox{ } \\
  (only geometric remeshing) \\
  {\bf control\_mesh\_remesh} {\it index} \ldots \\
\end{quotation}

\begin{quotation}
  \mbox{ } \\
  (only geometric remeshing) \\
  {\bf control\_mesh\_remesh} {\it index} \ldots \\
  {\bf control\_mesh\_remesh\_factor} {\it index} {\bf 1. 0.}
\end{quotation}

\begin{quotation}
  \mbox{ } \\
  (only residue remeshing) \\
  \ldots \\
  {\bf residue} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf control\_mesh\_remesh} {\it index} \ldots \\
  {\bf control\_mesh\_remesh\_factor} {\it index} {\bf 0. 1.}
\end{quotation}

\begin{quotation}
  \mbox{ } \\
  (both geometric remeshing and residue remeshing) \\
  \ldots \\
  {\bf residue} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf control\_mesh\_remesh} {\it index} \ldots \\
  {\bf control\_mesh\_remesh\_factor} {\it index} {\bf 0.05 0.5}
\end{quotation}

The {\it residue\_factor} can only be larger that 0 if {\bf residue}
is specified in the initialization part. 

If this {\bf control\_mesh\_remesh\_factor} record is not specified, 
then {\it geometry\_factor} is 1 and {\bf residue\_factor} is 0. 

Practical tips:
\begin{itemize}
\item 
Lowering the factors will stabilize the remeshing algorithm (this comes
handy when elements tend to collapse, etc.).
\item 
Including some geometrical remeshing (by using an {\it geometry\_factor}
unequal 0, say  {\it residue\_factor} ) stabilizes the 
remeshing and is almost always needed.
\end{itemize}

\subsection{{\bf control\_mesh\_renumber} {\it index lowest\_element lowest\_node}}

The element numbers are made strictly sequential starting from 
{\it lowest\_element} and the node numbers are made strictly sequential
starting from {\it lowest\_node}. Beware using {\bf control\_renumber} in 
combination with, by example, node numbers in printing of 
{\bf node\_dof} records; use {\bf post\_point} records instead.

\subsection{{\bf control\_mesh\_split} {\it index switch}}

If {\it switch} is set to {\bf -yes} then each {\bf -quad4} element
is split into four {\bf -tria3} elements and
each {\bf -hex8} element is split into twelve {\bf -tet4} elements.

See the rules for old and new at {\bf control\_mesh\_refine\_globally}.

\subsection{{\bf control\_print} {\it index data\_item\_name\_0 data\_item\_name\_1
  \ldots}}

The is the normal printing command.
A {\bf control\_print} record causes the data items
with name {\it data\_item\_name\_0}, etc. to be printed.
Example

\begin{quotation}
  \mbox{ } \\
  {\bf control\_print 1  -node -node\_dof} \\
\end{quotation}

See also: {\bf print\_filter}.

\subsection{{\bf control\_print\_database} {\it index switch}}

If {\it switch} is set to {\bf -yes}, the complete database is be printed.
See the example below

\begin{quotation}
  \mbox{ } \\
  {\bf control\_print\_database 6  -yes} \\
\end{quotation}

The printing of the database is such that it can be used itself
as a new input file (for instance for continued analysis).
By example if {\it index} is 6, data base is 
printed in the file input\_file\_name.dbs.

Always a database tn.dbs is printed at the end of the calculation.

\subsection{{\bf control\_print\_data\_versus\_data} {\it index data\_item\_name\_0
  index\_0 number\_0 \\
  data\_item\_name\_1 index\_1 number\_1}}

Print in the first column the {\it number\_0} value of
{\it data\_item\_name\_0} with index {\it index\_0}.
Similar in the second column for {\it data\_item\_name\_1 index\_1
\it number\_1}. Typically, the data item names can be {\bf -node\_dof}
such that unknowns can be printed against each other in time.
If the data item names are {\bf -node\_dof}, then {\it number\_0} and
{\it number\_1} can be {\bf -velx}, {\bf -temp}, etc.
(see {\bf dof\_label}); otherwise, by example, if {\it number\_0} is
3 then the fourth value of {\it data\_item\_name\_0} is printed. All results
will be printed in the file tn.dvd. 

Example:
\begin{quotation}
  \mbox{ } \\
  {\bf control\_print\_data\_versus\_data 0  -node\_dof 2 -temp -node\_dof 2 -sigxx}
\end{quotation}

See also: {\bf control\_print}.

\subsection{{\bf control\_print\_gmv} {\it index switch}}

Print the mesh and the unknowns in a file which can be plotted
with the General Mesh Viewer if {\it switch} is set to {\bf -yes}. 
The files are numbered sequentially.
By example, the first results are printed in the file gmv001.inp,
the second results are printed in the file gmv002.inp, etc.
Also results of {\bf node\_dof\_calcul} records (if present)
will be printed.

Always a gmv.inp file will be generated at the end of the calculation.

Only the elements {\bf -tria3}, {\bf -quad4}, {\bf -quad9}, {\bf -tet4},
{\bf -hex8} and {\bf -hex27} are available.
The elements {\bf -quad9} and {\bf -hex27} will be mapped
to {\bf -quad4} and {\bf -hex8} elements to allow for {\bf gmv} plotting.

TOCHNOG will temporarily renumber elements and nodes when
is writes the GMV data.
So the numbering in the GMV plots will not correspond with the numbering
as it was in the actual calculation.

If present, TOCHNOG element groups will be attributed to
GMV material numbers.

If present, TOCHNOG {\bf post\_point} records will be attributed to
GMV tracers.

As a special option, you can specify the number of an eigen mode 
instead of {\bf -yes} after {\bf materi\_velocity} has
been initialized and an eigenvalue analysis has been
performed by {\bf control\_eigen}.
Then the eigenmode for the velocity is added to the nodal coordinates.
In this way you can view the mode.

\subsection{{\bf control\_print\_history} {\it index data\_item\_name\_0
  data\_item\_index\_0 number\_0 \ldots }}

Print the time history for each of the sets
{\it data\_item\_name\_0 data\_item\_index\_0 number\_0 \ldots }.
By example, {\it data\_item\_name\_0}
is {\bf -node\_dof} so that the development of an unknown can be followed in
time. If {\bf -node\_dof} is used, {\it number\_0} is one of {\bf -velx},
{\bf -temp}, etc. (see {\bf dof\_label}); otherwise, {\it number\_0} should
be an integer specifying the number of the value in the record (for instance
number 2 means the third value).

The following history is printed in the file temp112.his
\begin{quotation}
  \mbox{ } \\
  {\bf control\_print\_history 0  -node\_dof 112 -temp}
\end{quotation}

\subsection{{\bf control\_print\_matlab} {\it index switch}}

Print $x$ in x.{\it index}.
Print $y$ in y.{\it index}.
Print $z$ in z.{\it index}.
Also the primary unknowns are printed; by example, 
print {\bf -temp} in temp.{\it index}.
Furthermore, also data generated by {\bf post\_calcul} is printed.

Use {\bf matlab} (a trademark of The MathWorks, Inc.) to plot.
By example, if you want to plot temperatures after
a 3D calculation with {\bf control\_print\_matlab 100 -yes},
then do in {\bf matlab} the following:
\begin{quotation}
  \mbox{ } \\
  {\bf load x.100} \\
  {\bf load y.100} \\
  {\bf load z.100} \\
  {\bf load temp.100} \\
  {\bf fill3(x,y,z,temp)}
\end{quotation}


\subsection{{\bf control\_print\_plotmtv} {\it index switch}}

Print the mesh and the unknowns in a file which can be plotted
with {\bf plotmtv} if {\it switch} is set to {\bf -yes}. 
By example, the first results are printed in the file plotmtv1.dat,
the second results are printed in the file plotmtv2.dat, etc.
Also results of {\bf node\_dof\_calcul} records (if present)
will be printed.

Always a plotmtv.dat file will be generated at the end of the calculation.

Only the elements {\bf -bar2}, {\bf -bar3}, {\bf -bar4}, 
{\bf -bar5}, {\bf -tria3}, {\bf -quad4}, {\bf -quad9},
{\bf -tet4} and {\bf -hex8} are available.

As a special option, you can specify the number of an eigen mode 
instead of {\bf -yes} after {\bf materi\_velocity} has
been initialized and an eigenvalue analysis has been
performed by {\bf control\_eigen}.
Then the eigenmode for the velocity is added to the nodal coordinates.
In this way you can view the mode.

\subsection{{\bf control\_print\_tecplot} {\it index switch}}

Print primary unknown field in {\bf node\_dof} into the file
{\bf tecplot.plt} if {\it switch} is set to {\bf -yes}.
Also results of {\bf node\_dof\_calcul} records (if present)
are printed in the {\bf tecplot.plt} file.

If {\it switch} is set to {\bf -mesh}, then also the mesh is printed;
this will be done automatically however for a new mesh or if the
mesh has been changed.

The {\bf tecplot.plt} file will be generated anyway at the end
of the calculation, with results of the end of the calculation.

As a special option, you can specify the number of an eigen mode 
instead of {\bf -yes} after {\bf materi\_velocity} has
been initialized and an eigenvalue analysis has been
performed by {\bf control\_eigen}.
Then the eigenmode for the velocity is added to the nodal coordinates.
In this way you can view the mode.

You can plot this file with the program {\bf tecplot} (a trademark
of Amtec Eng., Inc.). 

\subsection{{\bf control\_print\_vtk} {\it index switch}}

Print the mesh and the unknowns in a file which can be plotted
with the Visual Tool Kit, vtk, if {\it switch} is set to {\bf -yes}. 
The results are printed in the file vtn{\it index}.vtk.
Also results of {\bf node\_dof\_calcul} records, if present, will be printed.

Only the elements {\bf -bar2}, {\bf -bar3},
{\bf -tria3}, {\bf -quad4}, {\bf -quad9}, {\bf -tet4},
{\bf -hex8} and {\bf -hex27} are available.
The elements {\bf -bar3}, {\bf -quad9} and {\bf -hex27} will be mapped
to {\bf -bar2}, {\bf -quad4} and {\bf -hex8} elements respectively for {\bf vtk} plotting.

Always at the end of a calculation a file tn.vtk will be generated.
This file will be used for the graphical layer on top of tn
which will depent on vtk.

\underline{Warning: This option is still under development and being tested}.

\subsection{{\bf control\_relaxation\_condif\_temperature} 
  {\it index group\_condif\_temperature\_relaxation}}

Relaxation parameters for temperature. 
See also {\bf control\_relaxation\_materi\_velocity}.

\subsection{{\bf control\_relaxation\_groundflow\_pressure} 
  {\it index group\_groundflow\_pressure\_relaxation}}

Relaxation parameters for groundflow pressure. 
See also {\bf control\_relaxation\_materi\_velocity}.

\subsection{{\bf control\_relaxation\_materi\_velocity} 
  {\it index group\_materi\_velocity\_relaxation}}

Relaxation parameters for velocity. 
This parameter only enters the left hand side of the iterative scheme. 
If enough iterations are used (see {\bf control\_timestep\_iterations}), the
parameters do not influence the final results.

You typically need relaxation in quasi static calculations where
you don't have inertia {\bf group\_materi\_density}.
Then time stepping is only a process to go incrementally to
the final solution.

\subsection{{\bf control\_relaxation\_wave\_fscalar} 
  {\it index group\_wave\_fscalar\_relaxation}}

Relaxation parameters for wave fscalar. 
See also {\bf control\_relaxation\_materi\_velocity}.

\subsection{{\bf control\_repeat} {\it index number\_of\_repeats control\_index}}

If {\it number\_of\_repeats} is larger than 0 the calculation repeats 
from the {\it control\_index}.
The value of {\it number\_of\_repeats} is decreased with 1.

This can typically be used to perform a number
of refinements combined with time stepping to a new, refined, solution.
This is done a fixed number of times.

See also {\bf control\_repeat\_until\_item}.

\subsection{{\bf control\_repeat\_until\_item} {\it index control\_index 
  repeat\_criterium data\_item\_name \\
  data\_item\_index data\_item\_number}}

The calculation repeats from the {\it control\_index} until
the data item value as specified by {\it data\_item\_name
data\_item\_index data\_item\_number} satisfies {\it repeat\_criterium}.

If {\it repeat\_criterium} is {\bf -change} then
repeating is stopped if the value changes less than {\it tolerance}.
The {\it tolerance} needs to be specified in the
{\bf control\_repeat\_until\_tolerance} record (with the same index).
It specifies as a percentage the relative change in the data item value
above which repeating occurs.

If {\it repeat\_criterium} is {\bf -value} then
repeating is stopped if the absolute value is less than {\it tolerance}.
The {\it tolerance} needs to be specified in the
{\bf control\_repeat\_until\_tolerance} record (with the same index).

This can typically be used to perform a number
of refinements combined with time stepping to a new solution
until some data item doesn't change much anymore.

See also {\bf control\_repeat}.

\subsection{{\bf control\_repeat\_until\_tolerance} {\it index tolerance}}

\subsection{{\bf control\_restart} {\it index switch}}

If {\it switch} is set to {\bf -yes} then
the calculation continues with the undeformed mesh.
The unknowns (in the {\bf node\_dof} records) are reset to the initial values.
And {\bf time\_current} is set to the initial time.

This allows you to calculate some path dependent behavior completely 
from the start with a refined mesh.

\subsection{{\bf control\_skip\_convective\_part} {\it index switch\_0 switch\_1 \ldots}}

If a switch is set to {\bf -yes}, then the convective contributions
of temperature, etc. with respect to the mesh are skipped.
The switch {\it switch\_0} is for the first primary unknown, etc..
A switch should be specified for each primary unknown.
Default the switches are {\bf -no}.

A geometrical linear analysis ('small deformations') is obtained by
skipping the convective parts of the velocities with this
{\bf control\_skip\_convective\_part} record, and keep the nodes fixed in space 
by using {\bf -no} in the {\bf node\_locate} record.

A special format {\bf control\_skip\_convective\_part} {\it index} {\bf -all} sets
each switch to {\bf -yes}.

\subsection{{\bf control\_skip\_inertia\_condif\_temperature} {\it index switch}}

If a switch is set to {\bf -yes} the inertia term (i.e. the time
derivative term) for {\bf condif\_temperature} is skipped. 

\subsection{{\bf control\_skip\_inertia\_groundflow\_pressure} {\it index switch}}

If a switch is set to {\bf -yes} the inertia term (i.e. the time
derivative term) for {\bf groundflow\_pressure} is skipped. 

\subsection{{\bf control\_skip\_inertia\_materi\_velocity} {\it index switch}}

If a switch is set to {\bf -yes} the inertia term (i.e. the time
derivative term) for {\bf materi\_velocity}  is skipped. 

\subsection{{\bf control\_skip\_inertia\_wave\_fscalar} {\it index switch}}

If a switch is set to {\bf -yes} the inertia term (i.e. the time
derivative term) for {\bf wave\_fscalar}  is skipped. 

\subsection{{\bf control\_skip\_spatial\_stabilization} {\it index switch\_0 switch\_1 \ldots}}

If a switch is set to {\bf -yes}, then convected unknowns 
(like temperature) will not be stabilized for numerical oscillations.
If a switch is set to {\bf -no}, then spatial stabilization is used.
The switch {\it switch\_0} is for the first primary unknown, etc..
A switch should be specified for each primary unknown.
Default the switches are {\bf -no}.

A special format {\bf control\_skip\_spatial\_stabilization} {\it index} {\bf -all} sets
each switch to {\bf -yes}.

\subsection{{\bf control\_solver} {\it index solver\_type}}

If {\it solver\_type} is set to {\bf -diagonal} then
only the main diagonal of the system matrix will be used
for the solution of all unknowns.
This gives the program an explicit like structure.
In fact, if {\bf control\_timestep\_iterations} is set to 1,
then a classical explicit finite element program is obtained.

If {\it solver\_type} is set to {\bf -matrix\_direct} then
the complete system matrix will be used for solution of the principal 
unknowns (see the initialization section).
A direct solver, performing an lu decomposition of the total matrix, is applied.

If {\it solver\_type} is set to {\bf -matrix\_iterative} then
the complete system matrix will be used for solution of the principal 
unknowns (see the initialization section).
A diagonal Preconditioned BiConjugate Gradient method, is applied.
Typically you would like to try the {\bf -matrix\_iterative} solver
in large 3D calculations.
Also, the {\bf -matrix\_iterative} solver runs in parallel
where the {\bf -matrix\_direct} solver doesn't.
\underline{Warning:} this iterative solution method suffers from bad conditioned
system matrices, which typically show up with:
\begin{itemize}
  \item high penalty factors like {\bf contact\_penalty\_velocity}.
  \item low compressibility in {\bf group\_materi\_elasti\_compressibility}.
\end{itemize}

In all cases, the first iterations will give estimates for velocities, displacements, etc..
Typically you need at least two iterations to get estimates for strains, stresses, etc.

Even if the equations are linear, using more iterations may change the results.
This is because, the strain, stresses, etc. are redistributed due
to the continuous field approach. 
Typically the results become more accurate when using more iterations; 
but using three iterations is ok in most cases.

Even in case of plasticity, damage, or so we use the linear stiffness
matrix in both the diagonal solver and the matrix solvers.
This gives a stable iteration behavior but requires that enough
time steps and/or iterations are used.

Default we use {\bf -matrix\_direct}.

\subsection{{\bf control\_timestep} {\it index step\_size time\_increment
  step\_size time\_increment \ldots}}

These records define sets of time steps of size {\it step\_size}
which are to be taken till the time is increased by {\it time\_increment}.
In the example below time steps of 0.1 are taken from time 0.0 up
to time 1.0. Then time steps of 0.2 are taken up to time 2.0

\begin{quotation}
  \mbox{ } \\
  {\bf control\_timestep 0  0.1 1. 0.2 1.}
\end{quotation}

\subsection{{\bf control\_timestep\_iterations} {\it index number\_of\_iterations}}

This sets a fixed number of equilibrium iterations in each time step
(for time steps of the {\bf control\_timestep} record with the same index).
If {\it number\_of\_iterations} is 1 then the time stepping is
completely Euler explicit.
For larger values, the time stepping becomes implicit. 
For many iterations, the time stepping is Euler implicit.
Typically, {\it number\_of\_iterations} is 1,2 or 3.
Default {\it number\_of\_iterations} is 2.

As an alternative, you can use {\bf control\_timestep\_iterations\_automatic}.

\subsection{{\bf control\_timestep\_iterations\_automatic} {\it index 
  ratio\_criterium maximum\_timestep}}

After specification of this record, iterations will be performed
until {\it ratio} in {\bf post\_node\_rhside\_ratio} is less then {\it ratio\_criterium}.
Typically, set {\it ratio\_criterium} to 0.01 or 0.001.

TOCHNOG will now also adjust the time step size.
If few iterations are needed the time step size is increased.
If many iterations are needed the time step size is decreased.

The time step specified in {\bf control\_timestep} is used as initial step.
The time step is not allowed to become higher then {\it maximum\_timestep}.
If the time step becomes very low compared to the initial step,
time stepping is aborted.

\subsection{{\bf dependency\_diagram} {\it index unknown\_value\_0 \ldots
  data\_item\_value\_0 \ldots}}

See {\bf dependency\_item}.

\subsection{{\bf dependency\_item} {\it index data\_item element\_group
  unknown n}}

This record allows you to make an element data item 
dependent on one of the unknowns (see {\bf dof\_label} for unknown names). 
This is done for {\it n} values of the unknown.
The dependency should be specified in the {\bf dependency\_diagram} 
record (same index) with a multi linear diagram. 
In the diagram first a set of unknowns values should be specified. 
Second the set of data item values for those
unknown values should be specified. 

Some examples are given below.

Temperature dependent Young's modulus of element\_group 1 
($E=1.e10$ at temperature $1$, etc.):
\begin{quotation}
  \mbox{ } \\
  {\bf dependency\_item 1  -group\_materi\_elasti\_young 1  -temp 4} \\
  {\bf dependency\_diagram 1  1. 2. 3. 4.  1.e10 1.e9 1.e8 3.e5}
\end{quotation}

Temperature dependent Young's moduli in two maxwell chains of element\_group 1
(
for the first chain the moduli $1.e10, 1.e9, \ldots$ 
for the second chain the moduli $1.e10, 1.e9, \ldots$ 
all relaxation times are $1. \; 10 ^ {-2}$.
):
\begin{quotation}
  \mbox{ } \\
  {\bf dependency\_item 1  -group\_materi\_maxwell\_chain 1  -temp 4} \\
  {\bf dependency\_diagram 1   \\
   1. 2. 3. 4.  \\
   1.e10 1.e9  1.e8  3.e5  \\
   1.e-2 1.e-2 1.e-2 1.e-2 \\
   1.e12 1.e11 1.e10 3.e7 \\
   1.e-2 1.e-2 1.e-2 1.e-2 \\
  }
\end{quotation}

As a special option, {\it unknown} can be set to {\bf -time\_current}.
This allows for time-dependent properties (aging).
The example below shows time dependent Young's modulus of element\_group 1 
($E=1.e10$ at time $0$, etc.):
\begin{quotation}
  \mbox{ } \\
  {\bf dependency\_item 1  -group\_materi\_elasti\_young 1  -time\_current 4} \\
  {\bf dependency\_diagram 1  0. 1. 2. 3.  1.e10 1.e9 1.e8 3.e5}
\end{quotation}

The dependencies are available only for real data (and thus not for integer data). 
The {\bf dependency\_diagram} values shows be specified from
low to high values for the unknown.

\subsection{{\bf dof\_tyings} {\it index geometry\_entity\_item
  geometry\_entity\_index unknown\_0 unknown\_1 \ldots}}

With this record you can tie unknowns on the nodes which are 
located on the geometrical item.
That is, for nodes located at the same point in space
,on the geometry entity, the specified unknowns will be tied.
To do so, {\bf node\_tyings} records will be generated.

\subsection{{\bf dof\_label} {\it unknown\_0 unknown\_1 \ldots}}

This record will be filled with labels of the unknowns in the correct order. 
This information is required for understanding records like
{\bf node\_dof} etc. 
The sequential order for the primary unknowns
will match the order in which they are specified in the initialization part.

The total list of possible unknown labels is:
{\bf -dam} damage,
{\bf -dens} density,
{\bf -epexx} $xx$-strain elastic, {\bf -epexy}, {\bf -epexz},
{\bf -epeyy}, {\bf -epeyz}, {\bf -epezz},
{\bf -eppxx} $xx$-strain plastic, {\bf -eppxy}, {\bf -eppxz},
{\bf -eppyy}, {\bf -eppyz}, {\bf -eppzz},
{\bf -eptxx} $xx$-strain total, {\bf -eptxy}, {\bf -eptxz},
{\bf -eptyy}, {\bf -eptyz}, {\bf -eptzz},
{\bf -eppsize} size of plastic strains,
{\bf -gvelx} ground water velocity in $x$-direction, {\bf -gvely}, {\bf -gvelz}.
{\bf -hisv0}, {\bf -hisv1}, ..., material history variables,
{\bf -kap} plastic isotropic hardening parameter kappa,
{\bf -pres} pressure,
{\bf -res} residue unknown,
{\bf -rhoxx} $xx$ plastic kinematic hardening, {\bf -rhoxy}, {\bf -rhoxz},
{\bf -rhoyy}, {\bf -rhoyz}, {\bf -rhozz},
{\bf -scal} scalar,
{\bf -temp} temperature,
{\bf -fscal} time derivative of scalar,
{\bf -sigxx} $xx$-stress, {\bf -sigxy}, {\bf -sigxz},
{\bf -sigyy}, {\bf -sigyz}, {\bf -sigzz},
{\bf -1msigxx} $xx$-stress in first maxwell chain,
{\bf -1msigxy}, {\bf -1msigxz}, {\bf -1msigyy}, {\bf -1msigyz},
{\bf -1msigzz},
{\bf -velx} velocity in $x$-direction, {\bf -vely}, {\bf -velz},
{\bf -void} material void fraction.
Furthermore, {\bf -xvelx} denotes the spatial $x$-derivative of
{\bf -velx} in $x$-direction, etc.. 
Finally, {\bf -tvelx} denotes the first time 
derivative of {\bf -velx}, etc..
The time derivative and the space derivatives are
only calculated if {\bf derivatives} is included in the
initialization part.

By example, the following might be seen after a print of the database

\begin{quotation}
  \mbox{ } \\
  {\bf echo -yes} \\
  {\bf number\_of\_space\_dimensions 2} \\
  {\bf derivatives} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf dof\_label -temp -xtemp -ytemp -ttemp} \\
  \ldots \\
\end{quotation}

Or, by example, the following might be seen after a print of the database

\begin{quotation}
  \mbox{ } \\
  {\bf echo -yes} \\
  {\bf number\_of\_space\_dimensions 2} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf dof\_label -temp} \\
  \ldots \\
\end{quotation}

\subsection{{\bf element} {\it index element\_name node\_0 node\_1
  node\_2 \ldots}}

Nodal connective of element {\it index}.
In 1D, {\it element\_name} is {\bf -bar2} (2 noded bar),
{\bf -bar3}, {\bf -bar4} or {\bf -bar5}. In 2D, {\it element\_name} is
{\bf -tria3} (3 noded triangle), {\bf -quad4} (4 noded quadrilateral),
{\bf -quad9}, {\bf -quad16} or {\bf -quad25}. In 3D, {\it element\_name}
is {\bf -tet4} (4 noded tetrahedral), {\bf -hex8} (8 noded hexahedral),
{\bf -hex27}, {\bf -hex64} or {\bf -hex125}.  
Example with 4-noded quadrilateral
\begin{quotation}
  \mbox{ } \\
  {\bf element 0  -quad4 1 2 3 4} \\
  {\bf node 1  0. 0.} \\
  {\bf node 2  1. 0.} \\
  {\bf node 3  0. 1.} \\
  {\bf node 4  1. 1.}
\end{quotation}

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/quad4.ps,width=3cm}}
\end{figure}

Example with 9-noded quadrilateral
\begin{quotation}
  \mbox{ } \\
  {\bf element 0  -quad9 1 2 3 4 5 6 7 8 9} \\
  {\bf node 1  0.0 0.0} \\
  {\bf node 2  0.5 0.0} \\
  {\bf node 3  1.0 0.0} \\
  {\bf node 4  0.0 0.5} \\
  {\bf node 5  0.5 0.5} \\
  {\bf node 6  1.0 0.5} \\
  {\bf node 7  0.0 1.0} \\
  {\bf node 8  0.5 1.0} \\
  {\bf node 9  1.0 1.0} \\
\end{quotation}

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/quad9.ps,width=3cm}}
\end{figure}

Example with hexahedral
\begin{quotation}
  \mbox{ } \\
  {\bf element 0  -hex8 1 2 3 4 5 6 7 8} \\
  {\bf node 1  0. 0. 0.} \\
  {\bf node 2  1. 0. 0.} \\
  {\bf node 3  0. 1. 0.} \\
  {\bf node 4  1. 1. 0.} \\
  {\bf node 5  0. 0. 1.} \\
  {\bf node 6  1. 0. 1.} \\
  {\bf node 7  0. 1. 1.} \\
  {\bf node 8  1. 1. 1.}
\end{quotation}

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/hex8.ps,width=4cm}}
\end{figure}

As a special option, user supplied elements can be used by
specifying {\bf -user}. 
See the section on user supplied subroutines.

Except for the {\bf -tria3} and {\bf -tet4} element, the nodal location
is always in lobatto points. See also: {\bf group\_integration\_points}.

\subsection{{\bf element\_group} {\it index element\_group}}

This data item is specified which element data items should be taken for the element
{\it index}.
Example: elements 0 and 1 get density 1024 while element 2 gets
density 1236

\begin{quotation}
  \mbox{ } \\
  {\bf element 0  0 1 2} \\
  {\bf element 1  1 2 3} \\
  {\bf element 2  2 3 4} \\
  \ldots \\
  {\bf element\_group 0  1} \\
  {\bf element\_group 1  1} \\
  {\bf element\_group 2  2} \\
  \ldots \\
  {\bf density 1  1024.} \\
  {\bf density 2  1236.}
\end{quotation}

If no {\bf element\_group} records are specified, all element data
should use {\it index} is 0. 

See also {\bf area\_element\_group}.

\subsection{{\bf element\_tendon\_direction} {\it index dir\_x
  dir\_y dir\_z dir\_x dir\_y dir\_z \ldots}}

This record will be filled with the direction of the
tendons which are placed in element {\it index} (all three directions
for each tendon). See also {\bf tendon}.

\subsection{{\bf element\_tendon\_number} {\it index tendon\_0 
  tendon\_1 \ldots}}

This record will be filled with the tendons which are placed
in element {\it index}. See also {\bf tendon}.

\subsection{{\bf element\_tendon\_stress} {\it index sig\_0 sig\_1 \ldots}}

This record will contain after the calculation the stresses of the tendons 
which are placed in element {\it index}. See also {\bf tendon}.

\subsection{{\bf element\_tendon\_volume} {\it index volume\_0
  volume\_1 \ldots}}

This record will contain after the calculation the volume of the
tendons which are placed in element {\it index}. See also {\bf tendon}.

\subsection{{\bf force\_element\_edge} {\it index force\_0 force\_1 \ldots}}

Distributed edge source terms (force terms per unit length in 2D or
per unit area in 3D). 
These distributed terms are translated into equivalent nodal force terms
on the edges of elements.
In 1D this option is not available.
In 2D this option is available for all elements.
In 3D this option is only available for linear elements.
You should specify a force term for each primary unknown.
Also the record {\bf force\_element\_edge\_geometry} should
be specified, and optionally the 
record {\bf force\_element\_edge\_time} can be specified.

\subsection{{\bf force\_element\_edge\_geometry}
  {\it index node\_0 node\_1 node\_2 \ldots}}

Selects the area for which the {\bf force\_element\_edge} record with
the same {\it index} should be applied.
In stead of specifying node numbers also, 
by example, {\bf -geometry\_line 1} can be 
used in 2D, indicating that the nodes on line 1 get the distributed force.

\subsection{{\bf force\_element\_edge\_time} {\it index time load time load \ldots }}

This record specifies a diagram which contains the factors
with which the {\bf force\_element\_edge} record with the same index is applied.
Linear interpolation is used to extend the {\it time load} values
to the intervals between these pairs.

If this record is not specified, the force is applied at all times with a factor 1.

If no external forces like {\bf force\_element\_edge\_time} are specified,
the internal element forces become zero at free edges to satisfy equilibrium.
This causes, by example, temperature gradients to become zero
at free edges in heat problems.

\subsection{{\bf force\_element\_volume} {\it index force\_0 force\_1 \ldots}}

Distributed volume source terms (like force, heat generation, etc.) in differential equations.
Here {\it force\_0} is the source term for the first primary unknown, etc. 
Use the {\bf control\_print} data item to print {\bf dof\_label}
to get the sequential order of the primary unknowns. 
Specify source terms for each primary unknown.
Consider the example with distributed volume force in x-direction 
for a 2D material:
\begin{quotation}
  \mbox{ } \\
  {\bf force\_element\_volume 0} $1. 0.$
\end{quotation}

See also {\bf force\_element\_volume\_factor}, {\bf force\_element\_volume\_geometry},
and {\bf force\_element\_volume\_time}.

\subsection{{\bf force\_element\_volume\_factor} {\it index $a_0$ $a_1$ \ldots $a_n$}}

This data item defines a polynomial in space in 1D or 2D.
This polynomial gives a factor which is used as a multiplication
factor for {\bf force\_element\_volume} records (with the same index).
In this way, you can obtain coordinate dependent forces.

In 1D the polynomial is $a_0 + a_1 x + a_2 x^2 + \ldots $.
In 2D the polynomial is $a_0 + a_1 x + a_2 y + a_3 x^2 + a_4 xy +
a_5 y^2 + a_6 x^3 + a_7 x^2 y + a_8 x y^2 + a_9 y^3 + \ldots $.

\subsection{{\bf force\_element\_volume\_geometry}
  {\it index element\_0 element\_1 element\_2 \ldots}}

Restricts the area for which the {\bf force\_element\_volume} record with
the same {\it index} should be applied.
In stead of a specifying element numbers also, 
by example, {\bf -geometry\_quadrilateral 1} can be 
used in 2D, indicating that the elements on quadrilateral 1 get the distributed force.

\subsection{{\bf force\_element\_volume\_time} {\it index time load time load \ldots }}

This record specifies a multi-linear diagram which contains the factors
with which the {\bf force\_element\_volume} record with the same index is applied.

If this record is not specified, the force is applied at all times
with a factor 1.

\subsection{{\bf force\_gravity} {\it g\_x g\_y g\_z}}

Gravitational acceleration.

In 1D, only the gravity in x-direction needs to be specified.
In 2D, the gravity in x-direction and y-direction needs to be specified.
In 3D, the gravity in x-direction, y-direction and z-direction needs to be specified.

See also {\bf force\_gravity\_time}.

\subsection{{\bf force\_gravity\_time} {\it index time load time load \ldots }}

This record specifies a multi-linear diagram which contains the factors
with which the {\bf force\_gravity} record is applied.
This allows you to impose the gravity on a structure slowly,
which might be needed for path dependent problems.

If this record is not specified, the gravity is applied at all times
with a factor 1.

\subsection{{\bf geometry\_bounda\_factor} {\it index factor\_0 \ldots }}

This sets, for either the {\bf geometry\_line} or the {\bf geometry\_triangle}
or the {\bf geometry\_quadrilateral} with the same index extra factors
which are used for the {\bf bounda\_unknown} and the {\bf bounda\_force}
records. The boundary conditions at a node being part of the geometrical
entity are multiplied with the interpolation of the factors.
For a {\bf geometry\_line} either 2 or 3 factors should be specified;
2 factors define a linear variation where the factors hold at 
the start and end of the line respectively; 
3 factors define a parabolic variation
where the factors hold at the start, at the middle and at the end of
the line respectively.
For a {\bf geometry\_triangle} 3 factors should be specified 
(a linear variation with factors for the first, 
second and third corner point respectively).
For a {\bf geometry\_quadrilateral} 4 factors should be specified
(a linear variation with factors for the first, 
second, third and fourth corner point respectively).
In the example below, node 2 will get temperature $20*1.6$ and
node 3 will get temperature $20*2.2$.

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf number\_of\_space\_dimensions 2} \\
  {\bf condif\_temperature} \\
  {\bf \ldots} \\
  {\bf end\_initia} \\
  {\bf node 2  0.2 0} \\
  {\bf node 3  0.4 0.} \\
  \ldots \\
  {\bf geometry\_line 1  0. 0. 1. 0.  0.01} \\
  {\bf geometry\_bounda\_factor 1  1. 4.} \\
  {\bf bounda\_unknown 0  -geometry\_line 1 -temp} \\
  {\bf bounda\_time 0  0. 20. 1.e6 20.} \\
  \ldots \\
  {\bf end\_data} \\
\end{quotation}

\subsection{{\bf geometry\_circle} {\it index x y radius tolerance}}

This data item defines a circle segment in space.
Other data items can check if nodes are located on this geometry.
The coordinate of the center is
{\it x y}. The segment can only be used in 2D. All {\bf node} within
a distance {\it tolerance} of the radius are considered to be 
part of the circle.

\subsection{{\bf geometry\_cylinder} {\it index x\_0 y\_0 z\_0
  x\_1 y\_1 z\_1 radius tolerance}}

This data item defines a cylindrical segment in space.
Other data items can check if nodes are located on this geometry.
The coordinate of the center point at the
bottom is {\it x\_0 y\_0 z\_0}. The coordinate of the center point at the
top is {\it x\_1 y\_1 z\_1}. The cylinder can only be used in 3D.
All {\bf node} within a distance {\it tolerance} of the radius 
are considered to be part of the cylinder.

\subsection{{\bf geometry\_line} {\it index x\_0 y\_0 z\_0
  x\_1 y\_1 z\_1 tolerance}}

This data item defines a line in space. 
Other data items can check if nodes are located on this geometry.
Coordinates of the end points are denoted
by {\it x\_0}, etc.. In 1D, only the $x$-coordinates should be specified,
etc.. All {\bf node} within a distance {\it tolerance} are considered
to be part of the line (this gives a cylinder with radius {\it tolerance}).

In the example, a line in 2D space is defined and is used by a
{\bf convection\_geometry} record (nodes located on the line will convect heat)

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf geometry\_line 2  1. 0. 1. 1. 0.01} \\
  \ldots \\
  {\bf group\_condif\_convection\_geometry 0  -geometry\_line 2} \\
  \ldots \\
\end{quotation}

\subsection{{\bf geometry\_point} {\it index x y z tolerance}}

This data item defines a point in space. 
Other data items can check if nodes are located on this geometry.
The coordinate of the point is
{\it x y z}. In 1D, only {\it x} should be specified, etc..
All {\bf node} within a distance {\it tolerance} are considered to be part
of the point (this gives a sphere with radius {\it tolerance}).

\subsection{{\bf geometry\_polynomial} {\it index $a_0$ $a_1$ \ldots $a_n$
x\_0 x\_1 y\_0 y\_1 tolerance}}

This data item defines a polynomial in space if 2D or 3D.
Other data items can check if nodes are located on this geometry.
In 2D it is the curve $y = a_0 + a_1 x + a_2 x^2 + \ldots $.
In 3D it is the surface $z = a_0 + a_1 x + a_2 y + a_3 x^2 + a_4 xy +
a_5 y^2 + a_6 x^3 + a_7 x^2 y + a_8 x y^2 + a_9 y^3 + \ldots $.
In 2D $x_0-x_1$ defines the domain of $x$.
In 3D $x_0-x_1$ defines the domain of $x$ and $y_0-y_1$ defines the domain
of $y$. All {\bf node} with a distance (that is the $y$-distance in 2D or
the $z$-distance in 3D) not more than {\it tolerance} are considered to be
part of the polynomial.

\subsection{{\bf geometry\_quadrilateral} {\it index x\_0 y\_0 z\_0
  x\_1 y\_1 z\_1 x\_2 y\_2 z\_2 \\
  x\_3 y\_3 z\_3 tolerance}}

This data item defines a quadrilateral in space. 
Other data items can check if nodes are located on this geometry.
The coordinates of
the corner points are {\it x\_0 y\_0 z\_0} etc..
In 1D, only {\it x\_0} etc. should be specified etc..
All {\bf node} within a distance {\it tolerance} are considered
to be part of the quadrilateral (this gives a brick with thickness
$2 \ast tolerance$). Internally in TOCHNOG, 
the quadrilateral is divided into two
{\bf geometry\_triangle}s, which is only approximately true if the
quadrilateral is twisted. Example

\begin{quotation}
\mbox{ } \\
\ldots \\
{\bf number\_of\_space\_dimensions 2} \\
\ldots \\
{\bf geometry\_quadrilateral 0   0. 0.  1. 0.  0. 1.  1. 1.} \\
\ldots
\end{quotation}

\subsection{{\bf geometry\_set} {\it index geometry\_entity\_0
  geometry\_entity\_index\_0  geometry\_entity\_1 \\
  geometry\_entity\_index\_1 \ldots}}

This set combines a number of geometrical entities
(e.g. {\bf geometry\_circle}, {\bf geometry\_line}, etc.) into a new entity. 

As a special option you can refer to nodes with a {\bf node\_boundary} record
by specifying {\bf geometry\_set} {\it index} {\bf node\_boundary}.

Other data items can check if nodes are located on this geometry.

\subsection{{\bf geometry\_sphere} {\it index x y z radius tolerance}}

This data item defines a spherical segment in space.
Other data items can check if nodes are located on this geometry.
The coordinate of the center is
{\it x y z}. All {\bf node} within a distance {\it tolerance} of {\it radius}
are considered to be part of the spherical segment.

\subsection{{\bf geometry\_triangle} {\it index x\_0 y\_0 z\_0
  x\_1 y\_1 z\_1 x\_2 y\_2 z\_2 tolerance}}

This data item defines a triangle in space. 
Other data items can check if nodes are located on this geometry.
The coordinates of the corner points
are {\it x\_0 y\_0 z\_0} etc.. In 2D the $z$ coordinates should not be
specified. All {\bf node} within a distance {\it tolerance} are considered
to be part of the triangle (this gives a wedge with thickness
$2 \ast tolerance$).

\subsection{{\bf group\_condif\_absorption} {\it index $a$}}

Absorption coefficient. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_condif\_capacity} {\it index $C$}}

Heat capacity.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_condif\_conductivity} {\it index $k$}}

Heat conductivity.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_condif\_density} {\it index density}}

Density for convection-diffusion equation. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_condif\_flow} {\it index $beta_1 ~ beta_2 ~ beta_3$}}

Known flow field. In 1D only $beta_1$ should be specified, etc.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_groundflow\_compressibility} {\it index $co$}}

Compressibility for ground water flow. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_groundflow\_density} {\it index $\rho$}}

Density of ground water. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_groundflow\_permeability} {\it index $pe$}}

Permeability coefficient in ground water flow. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_integration\_points} {\it index type}}

Here {\it type} sets the number of integration points in an element.
It should be set to {\bf -minimal} or to {\bf -maximal}.

For {\bf -tria3} elements and {\bf -tet4} elements, the integration
point will be located in the middle with {\bf -minimal} integration,
or the integration points are located in the nodes with {\bf -maximal} integration.

For other elements, if {\bf -minimal} is used then 
the number of integration points in a direction is set equal to
the number of nodes in the direction minus 1, and gauss integration is used.
If for the other elements {\bf -maximal} is used then 
the number of integration points in a direction is set equal to
the number of nodes in the direction, and lobatto integration is used.

Default {\bf -minimal} is used for {\bf -bar2}, {\bf -tria3} and {\bf -tet4} elements;
it is default {\bf -maximal} otherwise.

The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_damage\_failure} {\it index threshold}}

If the average of the damage in an element exceeds
{\it threshold}, the element is considered to be totally failed;
the element will be deleted.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_damage\_mazars} {\it index $\epsilon_0
  a_t ~ b_t ~ a_c ~ b_c ~ \beta$}}

Parameters for the Mazars damage law.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_damping} {\it index $d$}}

Material damping coefficient. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_density} {\it index density}}

Density for material flow equation. 
This may be overruled by specifying the density as
an unknown in the initialization part.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_density\_minimum} {\it index density\_minimum}}

This record can be used whenever you initialize {\bf materi\_density}
in the initialization part.
With {\it density\_minimum} you specify the minimum density
at which elements become active.
Below {\it density\_minimum} the elements are considered to be empty.
Typically, if a material is injected into an initially empty domain
you can take {\it density\_minimum} to be 10 percent or so of the 
density at injection.

If not specified, {\it density\_minimum} is taken to be 0.

The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_elasti\_compressibility} {\it index $co$}}

Compressibility for materials.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_elasti\_poisson} {\it index poisson}}

Poisson ratio for solid. The {\it index} specifies the element\_group,
see {\bf element\_group}.

\subsection{{\bf group\_materi\_elasti\_transverse\_isotropy} {\it index dir\_0 dir\_1 dir\_2 
  $C_{aaaa}$ $C_{bbbb}$ \\
  $C_{aabb}$ $C_{abab}$ $C_{bcbc}$}}

Specifies the unique direction ({\it dir\_0 dir\_1 dir\_2}) 
and the elastic moduli in the transverse isotropic model.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_elasti\_young} {\it index $E$}}

Young's modulus for solid material. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_expansion\_linear} {\it index $\alpha$}}

Linear expansion coefficient. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_expansion\_volume} {\it index $\beta$}}

Volume expansion coefficient. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_hyper\_besseling} {\it index} $K_1 K_2 \alpha$}

Parameters for Besseling Hyper elastic rubber model.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_hyper\_mooney\_rivlin} {\it index} $K_1 K_2$}

Parameters for Mooney-rivlin Hyper elastic rubber model.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_maxwell\_chain} {\it index E\_0 t\_0 \ldots
  E\_{n-1} t\_{n-1}}}

In total {\it n} parallel maxwell chains are defined with stiffness {\it E\_0},
relaxation time {\it t\_0}, etc.. 

\begin{figure}[htbp]
 \centerline{\epsfig{file=ps/maxwell.ps,width=3cm,angle=-90}}
\end{figure}

The number {\it n} should equal
{\bf materi\_maxwell\_stress} in the input initialization part.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_membrane} {\it index switch}}

If {\bf switch} is set to {\bf -yes} the $zz$ stress becomes zero
in 2D and the $yy$ and $zz$ stress become zero in 1D (in combination with
axi-symmetry in 1D, only the $yy$ stress becomes zero since $zz$
is the axi-symmetric direction).
If {\bf group\_materi\_membrane} is not used the plane strain conditions are used.
Always the $z$-thickness is 1. in 3D, and the $y$, and $z$-thickness
are 1. in 2D; see however also {\bf volume\_factor}. 

The {\bf group\_materi\_membrane} option cannot be used in combination with
{\bf group\_materi\_elasti\_compressibility}, {\bf group\_materi\_hyperelasticity} and {\bf group\_materi\_viscosity}.

The {\it index} specifies the element\_group, see {\bf element\_group}. 

\subsection{{\bf group\_materi\_memory} {\it index memory\_type}}

Either {\it memory\_type} should be set to {\bf -updated}, {\bf -total},
{\bf -updated\_without\_rotation}.
See the theoretical part for some explanation.

For a total Lagrange solid the input file may look like
\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_displacement} \\
  {\bf materi\_strain\_total} \\
  {\bf materi\_stress} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf group\_materi\_memory 0  -total} \\
  {\bf group\_materi\_elasti\_young 0  \ldots} \\
  \ldots \\
  {\bf end\_data}
\end{quotation}

For an updated Lagrange solid the input file may look like
\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf node 1 \ldots} \\
  {\bf node 2 \ldots} \\
  \ldots \\
  {\bf node\_locate 1  -no -no} \\
  {\bf node\_locate 2  -no -no} \\
  \ldots \\
  {\bf group\_materi\_memory 0  -updated} \\
  {\bf group\_materi\_elasti\_young 0  \ldots} \\
  \ldots \\
  {\bf end\_data}
\end{quotation}
Use the {\bf node\_locate} records to get an Eulerian calculation.
Skip the {\bf node\_locate} records if you want the mesh to 
follow the updated material.
And use {\bf -updated\_without\_rotation} instead of {\bf -updated} if the 
rotations are small and you want to save some CPU time.

For a fluid the input file may look like
\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf node 1 \ldots} \\
  {\bf node 2 \ldots} \\
  \ldots \\
  {\bf node\_locate 1  -no -no} \\
  {\bf node\_locate 2  -no -no} \\
  \ldots \\
  {\bf group\_materi\_memory 0  -updated\_without\_rotation} \\
  {\bf group\_materi\_viscosity 0  \ldots} \\
  {\bf group\_materi\_elasti\_compressibility 0  \ldots} \\
  \ldots \\
  {\bf end\_data}
\end{quotation}
Again the {\bf node\_locate} record causes an Eulerian calculation.
Skip the {\bf node\_locate} records if you want the mesh to 
follow the fluid material.

The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_plasti\_compression} {\it index sigy}}

Yield data for compression plasticity. 
The {\it index} specifies the element\_group, see {\bf element\_group}.
Condition: {\bf materi\_strain\_plasti} should be initialized.

\subsection{{\bf group\_materi\_plasti\_druckprag} {\it index phi c phiflow}}

Both yield data and flow data (indicated by the word flow) for
Drucker-Prager plasticity. 
Choose {\it phi} and {\it phiflow} in between $0$ and $\frac{\pi}{2}$. 
The {\it index} specifies the element\_group, see {\bf element\_group}.
Condition: {\bf materi\_strain\_plasti} should be initialized.

\subsection{{\bf group\_materi\_plasti\_gurson} {\it index sigy q1 q2 q3}}

Yield data (also used as flow data) for Gurson plasticity. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_plasti\_heat\_generation} {\it factor}}

This {\it factor} specifies how much of the plastic energy loss
is transformed into heat (this only makes sense if
{\bf condif\_temperature} is initialized).
The {\it factor} should be between 0 and 1.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_plasti\_kinematic\_hardening} {\it index $a$}}

This record specifies the size of the rate of the kinematic
hardening matrix $\rho_{ij}$.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_plasti\_mohrcoul} {\it index phi c phiflow}}

Both yield data and flow data (indicated by the word flow) for
Mohr-Coulomb plasticity. 
Choose {\it phi} and {\it phiflow} in between $0$ and $\frac{\pi}{2}$. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_plasti\_tension} {\it index sigy}}

Yield data for tension plasticity. 
The {\it index} specifies the element\_group, see {\bf element\_group}.
Condition: {\bf materi\_strain\_plasti} should be initialized.

\subsection{{\bf group\_materi\_plasti\_visco} {\it index $\eta$ $p$ $f^{\rm ref}$}}

This record specifies visco-plasticity data. It should be used in combination
with a plasticity model. The {\it index} specifies the element\_group, 
see {\bf element\_group}.
Condition: {\bf materi\_strain\_plasti} should be initialized.

\subsection{{\bf group\_materi\_plasti\_vonmises} {\it index sigy}}

Yield data for Von-Mises plasticity. The {\it index} specifies the
element\_group, see {\bf element\_group}.
Condition: {\bf materi\_strain\_plasti} should be initialized.

\subsection{{\bf group\_materi\_stokes} {\it index switch}}

Skip the velocity spatial inertia contribution for materi
equations if {\it switch} is set to {\bf -yes}.
Default {\it switch} is {\bf -no}.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_strain\_plasti\_failure} {\it index threshold}}

If the average size of the plastic strains in an element exceeds
{\it threshold}, the element is considered to be totally failed;
the element will be deleted.

The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_strain\_total\_failure} {\it index threshold}}

If the average size of the total strains in an element exceeds
{\it threshold}, the element is considered to be totally failed;
the element will be deleted.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_viscosity} {\it index $\nu$}}

Viscosity for Newtonian flow. The {\it index} specifies the element\_group,
see {\bf element\_group}.

\subsection{{\bf group\_materi\_viscosity\_bingham} {\it index $\sigma_y$ $\gamma$ $m$}}

Parameters for the non-Newtonian bingham viscosity law. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_materi\_viscosity\_exponential} {\it index $\nu_0$ $m$}}

Parameters for the non-Newtonian exponential viscosity law. 
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf group\_type} {\it index type\_name\_0 type\_name\_1 \ldots}}

With this record a differential equation is specified for
the element group {\it index}. Allowed type names 
are {\bf -condif}, {\bf -groundflow}, {\bf -materi} and {\bf -wave}.
Also {\bf -empty} is allowed; it indicates no differential equation.
See also {\bf element\_group}.

\subsection{{\bf group\_user\_umat} {\it index switch}}

Set {\it switch} to {\bf -yes} if you want to use a umat.c routine.
The {\it index} specifies the element\_group, see {\bf element\_group}.

See also the user supplied subroutines section and {\bf group\_user\_data}.

\subsection{{\bf group\_user\_data} {\it index} {\ldots}}

Data values which will become available for user supplied subroutines.
The {\it index} specifies the element\_group, see {\bf element\_group}.

See also: the user supplied subroutines section and {\bf group\_user\_umat}.

\subsection{{\bf group\_wave\_speed\_of\_sound} {\it index $c$}}

Speed of sound in wave equation.
The {\it index} specifies the element\_group, see {\bf element\_group}.

\subsection{{\bf inverse\_iterations} {\it number\_of\_iterations}}

Number of iterations for inverse modeling of parameters.
In each iteration the total time history as defined by the {\bf control\_timestep}
records will be applied. Moreover, it will be applied for the current 
estimate of the parameters and once for each parameter varied a bit 
(see {\bf inverse\_variation}); in this way, the sensitivity of the target data 
with respect to the parameters is determined. At the end of the iteration, 
these sensitivities are used to determine new estimates for the parameters.
In case of problems consider using {\bf inverse\_parameter\_step}.
See also: {\bf inverse\_target}.

\subsection{{\bf inverse\_iteration\_number} {\it index number}}

This record will be filled with the number of inverse iteration.
This comes handy in printing (see {\bf control\_print}).

\subsection{{\bf inverse\_parameter} {\it index data\_item\_name
  data\_item\_index data\_item\_number}}

Selects a parameter which is to be determined by inverse modeling. 
Condition: the parameter value should not be 0.
See also: {\bf inverse\_target}.

\subsection{{\bf inverse\_parameter\_limits} {\it index lower\_value
  higher\_value}}

Specifies the lower and higher allowed value for the 
{\bf inverse\_parameter} (with the same index).
Default no limits are used.

\subsection{{\bf inverse\_parameter\_step} {\it index size}}

The inverse parameter may be adjusted too much in each inverse iteration, 
such that the inverse process becomes unstable.
This record allows you to set a maximum to the adjustment
of the {\bf inverse\_parameter} (with the same index).
Specifying small values (near 0) for {\it size} gives a stable but slow
inverse process.
Default, {\it size} is 1.0e10.

\subsection{{\bf inverse\_parameter\_variation} {\it index variation}}

Specifies the factor by which the {\bf inverse\_parameter} (same index)
is varied a bit to determine the sensitivity of the targets
with respect to the parameter. 
A relative variation is used: (varied factor = (1+{\it variation})*factor.
On the one hand, it is of importance to use a variation small enough to get a good
approximation of the sensitivity of the targets with respect to the
parameter.
On the other hand the variation should not be such small that we
run into problems with the computer accuracy.
Default, {\it variation} is $1. \; 10^{-4}$.
See also {\bf inverse\_target}. 

\subsection{{\bf inverse\_target} {\it index data\_item\_name
  data\_item\_index data\_item\_number}}

This record, in combination with the {\bf inverse\_target\_data} record
with the same index, allows you to specify target data (e.g. experimental data
to determine model parameters or required data for optimization) 
to be used in the inverse modeling. 
Parameters will be determined by least squares minimization, i.e. the sum 

\begin{displaymath}
  \Sigma { ( penalty \; ( actual\_value - target\_value ) ) } ^ 2
\end{displaymath}

is minimized ($penalty$ and $target\_value$ are the penalty factor and
target value, see {\bf inverse\_target\_data}).
In the example below, the temperature (2.33) at node
3 and the temperature (80.2) at post point 10 were measured and are used for 
inverse modeling of the conductivity.
Both experimental results are imposed with a penalty factor 100 in the
inverse modeling. In total 20 iterations are used to estimate the conductivity.
The initial estimate for the conductivity needs to be specified via
the {\bf group\_condif\_conductivity} record; while iterating this record will be updated
with new estimates. 

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf inverse\_target 1  -node\_dof 3 -temp} \\
  {\bf inverse\_target\_data 1  2.33 100.} \\
  {\bf inverse\_target 2  -post\_point\_dof 10 -temp} \\
  {\bf inverse\_target\_data 2  80.2 100.} \\
  {\bf inverse\_parameter 0  -group\_condif\_conductivity 0 0} \\
  {\bf inverse\_iterations 0  20} \\
  \ldots \\
  {\bf end\_data} \\
\end{quotation}

\subsection{{\bf inverse\_target\_data} {\it index target\_value penalty}}

Specifies the $target\_value$ (required value) and $penalty$ (penalty factor 
in least squares minimization) for the {\bf inverse\_target} record with
the same index.
A special format {\it index lower\_value higher\_value penalty} is available 
which allows for putting limits on targets; if the actual value is in between
the {\it lower\_value} and {\it higher\_value} it considered to be ok; 
if the actual value is lower than {\it lower\_value} than the lower value 
becomes the target value and is imposed with the $penalty$ factor; likewise
for {\it higher\_value}. 

\subsection{{\bf inverse\_target\_timestep} {\it index timestep\_index}}

With this record you can specify at the end of which {\bf control\_timestep} record
the {\bf inverse\_target} record (with the same index) should be evaluated.
This is useful if transient information is needed for the inverse modeling.
Default, the {\bf inverse\_target} is evaluated after the last {\bf control\_timestep}
record.

\subsection{{\bf node} {\it index coord\_0 coord\_1 coord\_2}}

Coordinates of node {\it index}. In 1D, only {\it coord\_0} should be
specified, etc..

You are not allowed to put free nodes (not attached to any element)
in your model.
These free nodes will be removed automatically.

\subsection{{\bf node\_boundary} {\it index switch}}

The {\it index} corresponds to a node.
The node is assumed to be located on the boundary 
of the domain if this record is specified.
You can set {\it switch} is set to {\bf -yes}.

For the options {\bf control\_mesh\_remesh}, {\bf control\_new\_mesh}
and the contact algorithm it is necessary to give all the nodes on the boundary.

These {\bf node\_boundary} records can also be referred to 
by {\bf geometry\_set} records. 

It is not allowed to give all nodes of one element {\bf node\_boundary} records.

\subsection{{\bf node\_damping} {\it index damping}}

This record adds a discrete damper of size {\it damping} to node {\it index}.
The damper will lead to a nodal force of the size $ damping * v $
where $v$ is the velocity.

\subsection{{\bf node\_dof} {\it index dof\_0 dof\_1 \ldots}}

{\it dof\_0 dof\_1 \ldots} are the degrees of freedom (unknowns) at the node
with number {\it index}. The total number and type of the unknowns depends
on the initialization part. Each node has the same unknowns.

Unknowns like pressure, temperature, etc. are primary unknowns.
The other unknowns, space derivatives and the time derivative,
are not primary unknowns. 
In the example below, {\bf -temp} is 1., {\bf -xtemp} is 0.2 and
{\bf -ttemp} is 0.1 in node 6

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf number\_of\_space\_dimensions 1} \\
  {\bf derivatives} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf node\_dof 6  1.0 0.2 0.1} \\
  \ldots \\
\end{quotation}

Default all values in the {\bf node\_dof}
records are set zero at the start of the calculation.
See also: {\bf dof\_label} and {\bf post\_point}.

\subsection{{\bf node\_dof\_calcul} {\it index \ldots}}

See {\bf post\_calcul}.

\subsection{{\bf node\_eigen} {\it index unknown\_0 unknown\_1 \ldots
  unknown\_0 unknown\_1 \ldots }}

Eigenvector for node {\it index} for the principal unknowns.
First the results for the unknowns for the first eigen mode are given.
Then the results for the unknowns for the second eigen mode are given. Etc.

Only the principal unknowns of these unknowns have been actually
solved in the eigen problem.

See also {\bf control\_eigen} and the principal unknowns listed in
the initialization part.

\subsection{{\bf node\_locate} {\it index locate\_x locate\_y locate\_z}}

If {\it locate\_x} is set to {\bf -yes} then node {\it index}
will follow the material displacements in $x$-direction;
If {\it locate\_x} is set to {\it -no} then
node {\it index} will remain fixed in space in $x$-direction. 
Likewise for {\it locate\_y} and {\it locate\_z}.
In 1D only {\it locate\_x} should be specified, etc..

You can use {\bf -yes}
in combination with {\bf -updated} for {\bf group\_materi\_memory} to obtain a updated
Lagrangian analysis where the mesh follows the material; if you use
{\bf -no} in combination with {\bf -updated}, the material is still
an updated Lagrangian solid but the mesh remains fixed in space (convective
terms appear in the equations). 

If {\bf materi\_displacement} is initialized, all of
{\it locate\_x}, {\it locate\_y} and {\it locate\_z} are set to {\bf -no}
and you are not allowed to specify {\bf node\_locate}.
Otherwise, {\bf materi\_velocity} should be initialized; then default all of
{\it locate\_x}, {\it locate\_y} and {\it locate\_z} are set to {\bf -yes}.

Even if nodes are replaced with {\bf node\_locate},
all geometrical entities ({\bf geometry\_line}, etc.) test
if nodes are located on the entity in the start configuration
(that is, the {\bf node} records as initially present in the
input file are used).

\subsection{{\bf node\_mass} {\it index mass}}

This record adds a discrete mass of size {\it mass} to node {\it index}.
The mass will lead to a nodal force of the size $ mass * \dot v $
where $\dot v$ is the acceleration, and to a gravity
force if {\bf force\_gravity} is specified.

\subsection{{\bf node\_rhside} {\it index rhside\_0 rhside\_1 \ldots}}

This record will contain after the calculations

\begin{displaymath}
  F_{\rm external} - ( F_{\rm static} + F_{\rm inertia} + F_{\rm damping} )
\end{displaymath}

Here $F_{\rm external}$ are the external forces resulting
from {\bf bounda\_force} records, $F_{\rm static}$ are the internal
static forces (elastic forces, ..), $F_{\rm inertia}$ are the
internal inertia forces (mass, capacity, ..) and $F_{\rm damping}$
are the internal damping forces.

For the temperature equation, this will give the heat flow
normal to the outer surface (the heat flux to the environment) at prescribed
temperatures.
For velocity unknowns, this will give the force vector at prescribed
displacements.
For the pressure in the ground flow equation, this will give
the ground flow to the environment at prescribed pressures.
See also: {\bf node\_rhside\_internal} and {\bf node\_rhside\_static}.

\subsection{{\bf node\_rhside\_internal} {\it index rhside\_0 rhside\_1 \ldots}}

This record will contain after the calculations

\begin{displaymath}
   F_{\rm static} + F_{\rm inertia} + F_{\rm damping}
\end{displaymath}

So this will give the internal part of the force vector.
See also {\bf node\_rhside}.

\subsection{{\bf node\_rhside\_static} {\it index rhside\_0 rhside\_1 \ldots}}

This record will contain after the calculations

\begin{displaymath}
   F_{\rm static}
\end{displaymath}

So this will give the static part of the internal force vector.
See also {\bf node\_rhside}.

\subsection{{\bf node\_tyings} {\it index node\_0 node\_1 \ldots}}

Some options, e.g. {\bf control\_mesh\_macro}, may generate tyings.
Then the records {\bf node\_tyings}, {\bf node\_tyings\_factors}
and {\bf node\_tyings\_unknowns} will be filled.

The unknowns {\it unknown\_0 unknown\_1 \ldots} of node {\it index}
will be tied to the unknowns of the nodes {\it node\_0 node\_1 \ldots}.
The factor for {\it node\_0} is {\it factor\_0}, 
the factor for {\it node\_1} is {\it factor\_1}, etc.

\subsection{{\bf node\_tyings\_factors} {\it index factor\_0 factor\_1 \ldots}}

See {\bf node\_tyings}.

\subsection{{\bf node\_tyings\_unknowns} {\it index unknown\_0 unknown\_1 \ldots}}

See {\bf node\_tyings}.

\subsection{{\bf options\_axisymmetric} {\it switch}}

If {\it switch} is set to {\bf -yes}, 
the calculation becomes axi-symmetrical (1D or 2D).
Each specified $x$ coordinate becomes a radius and $z$ becomes the
axi-symmetric direction. Specify only non-negative 
$x$ coordinates, i.e. define the computational domain in the right half-plane.

\subsection{{\bf options\_processors} {\it index nproc}}

With this record you can set the number of CPUs you want to use ({\it nproc}).
If your TOCHNOG implementation does not allow for more processors, this
record is ignored.
In fact, not the number of processors but the number of threads is set
(that is, if you use 2 threads while your system only supports 1 processor
than those threads are split over that single processor).

You can also set an environment symbol
{\bf TOCHNOG\_OPTIONS\_PROCESSORS} to {\it nproc}.
In this way, you do not need to set the number of processors in each input file separately.

\underline{Error messages may become confusing when you use more than one processor}.

Default {\it nproc} is 1.

\subsection{{\bf options\_residuefactor} {\it factor\_0 factor\_1 \ldots}}

While determining the residue in the differential equations {\bf -res} for the 
{\bf node\_dof} records, the contribution for 
each primary unknown equation can be multiplied with a separate factor. 
Here {\it factor\_0} is the factor for the
first primary unknown, {\it factor\_1} is the factor for the
second primary unknown, etc. A factor should be specified
for each primary unknown. 

With these factors you can put special importance on the equation for one
(or several) primary unknowns.
If this record is not specified, all factors are taken to be 1.

\subsection{{\bf post\_calcul} {\it unknown operat \ldots}}

This records activates calculation of invariants of strains and stresses.
Here {\it unknown} can be one of the matrices {\bf -materi\_stress}, {\bf -materi\_strain\_elasti},
{\bf -materi\_strain\_plasti}, {\bf -materi\_strain\_total}
or {\it unknown} can be one of the vectors {\bf -materi\_velocity}, {\bf -materi\_displacement}.

The results of these calculations are stored for each
{\bf node\_dof} record in a {\bf node\_dof\_calcul} record,
and are stored for each {\bf post\_point\_dof} record in a 
{\bf post\_point\_dof\_calcul} record,
and are stored for each {\bf post\_line\_dof} record in a 
{\bf post\_line\_dof\_calcul} record,
and are stored for each {\bf post\_quadrilateral\_dof} record in a 
{\bf post\_quadrilateral\_dof\_calcul} record.

We denote a matrix {\it unknown} with $A_{ij}$
and denote a vector {\it unknown} with $A_i$.

If {\it operat} is {\bf -prival} then three principal values 
of a matrix $A_{ij}$ are calculated.
Each principal value contains the size of the principal vector.
The principal values are ordered (the first value is the largest one, 
and the last value is the smallest one).

If {\it operat} is {\bf -privec} then three principal vectors 
of a matrix $A_{ij}$ are calculated.
Each principal vector contains the $x$, $y$ and $z$ component of
the principal vector. The same ordering as used for {\bf -prival} is used
here also.

If {\it operat} is {\bf -average} then 
$\frac{1}{3} ( A_{11} + A_{22} + A_{33} )$ is calculated for a matrix
or $\frac{1}{3} ( A_1 + A_2 + A_3 )$ is calculated for a vector.

If {\it operat} is {\bf -positive} then
the average of the positive principal values 
for a matrix is calculated.
If {\bf materi\_strain\_plasti} is taken for the matrix $A_{ij}$,
then this operator typically can be used as a measure for the
amount of tensile failure (cracking).

If {\it operat} is {\bf -negative} then
the average of the negative principal values 
for a matrix is calculated.
If {\bf materi\_strain\_plasti} is taken for the matrix $A_{ij}$,
then this operator typically can be used as a measure for the
amount of compression failure (crunching).

If {\it operat} is {\bf -size} then 
$ \sqrt { 0.5 A_{ij} A_{ij} } $ is calculated for a matrix or
$ \sqrt { 0.5 A_i A_i } $ is calculated for a vector.
This measures the size of a matrix or the size of a vector.

If {\it operat} is {\bf -sizedev} then 
$ \sqrt { 0.5 B_{ij} B_{ij} } $ is calculated
where $B_{ij}$ is the deviatoric part of a matrix $A_{ij}$: 
$B_{ij} = A_{ij} - \delta_{ij} \frac{A_{11}+A_{22}+A_{33}}{3}$ where
$\delta_{ij}$ is 1 if $i=j$ and is 0 otherwise.
This measures the size of the deviatoric part of the matrix.

Specially for geotechnics you can set {\it operat} to {\bf -phimob} 
in case {\it unknown} is {\bf -materi\_stress}. 
Then the 'mobilised friction angle' is calculated in degrees.

The next piece of input file

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_stress} \\
  {\bf materi\_strain\_plasti} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf post\_calcul -materi\_stress -sizedev -materi\_strain\_plasti -size} \\
  \ldots \\
  {\bf control\_timestep 1  \ldots} \\
  {\bf control\_print 1  -node\_dof\_calcul} \\
\end{quotation}

will print records like

\begin{quotation}
  \mbox{ } \\
  {\bf node\_dof\_calcul} {\it index  0.2 1.1e-4}
\end{quotation}

Here the {0.2} is the equivalent Von Mises stress and {\it 1.1e-4} measures
the plastic strain matrix.

\subsection{{\bf post\_error\_item} {\it index data\_item\_name
  data\_item\_index number}}

By means of this record, you can specify a data record for which the 
error in its value needs to be estimated.

The error is estimated as follows.
The value for the data item will be remembered just before each
mesh refinement (with {\bf control\_mesh\_refine\_locally}
or {\bf control\_mesh\_refine\_globally}).
The last 2 stored values and the current value 
are used create an estimated value .
The error percentage is defined as:

\begin{displaymath}
  100 ~ \frac{actual\_value ~-~ estimated\_value}{estimated\_value}
\end{displaymath}

The percentage will be placed in the {\bf post\_error\_result},
with the same index.

A typical example looks like:

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf post\_error\_item 1  -post\_point\_dof 1 -velx} \\
  \ldots \\
  {\bf control\_mesh\_refine\_globally 10  \ldots} \\
  \ldots \\
  {\bf timesteps 20 \ldots} \\
  \ldots \\
  {\bf control\_repeat\_until\_item 30  10 -value -post\_error\_result 1 0} \\
  {\bf control\_repeat\_until\_tolerance 30  5.} \\
  \ldots \\
\end{quotation}

This asks for the estimation of the error in the x-velocity at a point.
It is used to determine automatically the number of refinements,
by requiring that the error should become less than 5 percent.

A final remark.
The values used for the error estimation 
will not be stored if the mesh refinement takes
place at the start of the calculation, since that mesh
contains normally not useful information.

\subsection{{\bf post\_error\_result} {\it index percentage}}

See {\bf post\_error\_item}.

\subsection{{\bf post\_line} {\it index x\_0 y\_0 z\_0 x\_1 y\_1 z\_1}}

This record specifies a line in space for which the average of the 
unknown values will be calculated. 
The values are placed 
in a record {\bf post\_line\_dof} with the same {\it index}. 
Internally in TOCHNOG, {\bf post\_point} records are used to evaluate
the unknowns on the line.
In 1D only {\it x\_0} and {\it x\_1} should be specified, etc.. 
In the example below, the average of the $x$-velocity
between the points (3,1) and (3,7) will be printed 

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf number\_of\_space\_dimensions 2} \\
  {\bf materi\_velocity} \\
  \ldots \\
  {\bf end\_data} \\
  \ldots \\
  {\bf post\_line 1  3. 1. 3. 7.} \\
  \ldots \\
  {\bf print\_filter 0  -post\_line\_dof 1  -velx} \\
  \ldots \\
  {\bf control\_timestep 1  1. 100.} \\
  {\bf control\_print 1  -post\_line\_dof} \\
\end{quotation}

The coordinates are defined in the initial mesh.
See also: {\bf post\_line\_n}, and {\bf post\_line\_moment}.

\subsection{{\bf post\_line\_dof} {\it index dof\_0 dof\_1 \ldots}}

Average unknown values at a selected line. See {\bf post\_line}.

\subsection{{\bf post\_line\_dof\_calcul} {\it \ldots}}

See {\bf post\_calcul}.

\subsection{{\bf post\_line\_moment} {\it index switch}}

If {\it switch} is set to {\bf -yes}, then the moment of the unknowns 
with respect to the middle of the {\bf post\_line} (same {\it index})
is calculated (instead of the average value of the unknowns).
This moment is the integral of the unknown value multiplied
with the distance to the middle of the line multiplied by the area 
contribution; the first point in the {\bf post\_line} has negative 
distance with respect to the line middle and the second point
in the {\bf post\_line} has positive distance with respect 
to the line middle.

\subsection{{\bf post\_line\_n} {\it index n}}

Use {\it n} {\bf post\_point} records to evaluate the unknowns along the line. 
Default {\it n} is 5. See {\bf post\_line}.

\subsection{{\bf post\_node} {\it index data\_item operat
  geometry\_entity geometry\_entity\_index}}

Results for the nodal {\it data\_item} are summed (if {\it operat}
is set to {\bf -sum}) and are averaged (if {\it operat}
is set to {\bf -average}).
This is done for nodes which are placed on the geometrical entity 
{\it geometry\_entity geometry\_entity\_index}.
The result is put into the {\bf post\_node\_result} record (with the same {\it index}).

For example, you can take for {\it data\_item} the {\bf -node\_rhside} data item. 
In this way you can sum the external nodal forces on a part of the domain.

\subsection{{\bf post\_node\_result} {\it index result\_0 result\_1 \ldots}}

See {\bf post\_node}.

\subsection{{\bf post\_node\_rhside\_fixed} {\it value\_0 value\_1 \ldots}}

After the calculations, this record will be filled with the absolute maxima
for the {\bf node\_rhside} values for those unknowns which
are fixed (so the maxima of external forces, fluxes, etc.).

\subsection{{\bf post\_node\_rhside\_free} {\it value\_0 value\_1 \ldots}}

After the calculations, this record will be filled with the absolute maxima
for the {\bf node\_rhside} values for those unknowns which are free.
In equilibrium these should become 0.
Because of a limited number of equilibrium iterations however,
the values may be larger then 0.

\subsection{{\bf post\_node\_rhside\_ratio} {\it ratio}}

After the calculations, this record will be filled with the ratio
of the the internal forces (out-of-balance forces) and the external forces.
The internal forces are taken from the {\bf post\_node\_rhside\_free} record.
The external forces are taken from the {\bf post\_node\_rhside\_fixed} record.
The maximum ratio for the unknowns is used.

\subsection{{\bf post\_point} {\it index x y z}}

This record specifies a point in space for which unknown values
will be calculated. The values are placed in a record {\bf post\_point\_dof}
with the same {\it index}. The values are obtained by determining
in which element the point is located and then using the element's
interpolation functions.
In 1D only {\it x} should be specified, etc..
The coordinates are defined in the initial mesh.

\subsection{{\bf post\_point\_dof} {\it index dof\_0 dof\_1 \ldots}}

Unknown values at a selected point. See {\bf post\_point}.

\subsection{{\bf post\_point\_dof\_calcul} {\it \ldots}}

See {\bf post\_calcul}.

\subsection{{\bf post\_quadrilateral} {\it index x\_0 y\_0 z\_0 
x\_1 y\_1 z\_1 x\_2 y\_2 z\_2 x\_3 y\_3 z\_3}}

This record specifies a quadrilateral in space for which the average of the 
unknown values will be calculated. The values are placed 
in a record {\bf post\_quadrilateral\_dof} with the same {\it index}. 
Internally in TOCHNOG, {\bf post\_point} records are used to evaluate
the unknowns on the quadrilateral.
In 2D only {\it x\_0 y\_0} and {\it x\_1 y\_1} should be specified. 
The coordinates are defined in the initial mesh.
See also: {\bf post\_quadrilateral\_n}.

\subsection{{\bf post\_quadrilateral\_dof} {\it index dof\_0 dof\_1 \ldots}}

Average unknown values at a selected quadrilateral. 
See {\bf post\_quadrilateral}.

\subsection{{\bf post\_quadrilateral\_dof\_calcul} {\it \ldots}}

See {\bf post\_calcul}.

\subsection{{\bf post\_quadrilateral\_n} {\it index n}}

Use {\it n} {\bf post\_point} records in each direction to evaluate
the unknowns along the quadrilateral. 
Default {\it n} is 5.
See {\bf post\_quadrilateral}.

\subsection{{\bf print\_filter} {\it index data\_item\_name
  data\_item\_index num\-ber\_0 number\_1 \ldots}}

The data selected in {\bf control\_print} will be filtered at output.
Thus only a limited amount of data will actually be printed.
Here {\it data\_item\_name} is the name of the data item to be filtered,
e.g. {\it data\_item\_name} is {\bf -node\_dof}.
{\it data\_item\_index} is the index of the {\it data\_item\_name} record
which passes the filter. 
If, by example, {\it data\_item\_index} is 3 then only index 3 passes the filter. 
If {\it data\_item\_index} is {\bf -all} then all indices pass the filter. 
If, by example, {\it data\_item\_index} is {\bf -geometry\_line 3} (valid if
{\it data\_item\_name} is {\bf -node} or another nodal item
then only records with coordinates located on line 3 pass the filter.
If, by example, {\it data\_item\_index} is {\bf -geometry\_line 3} (valid if
{\it data\_item\_name} is {\bf -element} or another element item
then only element with at least one coordinate located on line 3 pass the filter.
If {\it data\_item\_index} is {\bf -ra \ldots -ra} then indices in
this range pass the filter.

By example, if {\it number\_0} is 3 then the fourth value of a record passes
the filter. If {\it number\_0} is {\bf -all} the whole
record passes the filter. If, by example, {\it number\_0} is
{\bf -velx} while {\it data\_item\_name} is {\bf -node\_dof} then
only $x$-velocities pass the filter.

Some examples are

\begin{quotation}
  \mbox{ } \\
  {\bf print\_filter 1 -node\_dof -all -temp -sigxx} (temperatures and xx-stresses) \\
  {\bf print\_filter 2 -node -geometry\_line 3  0} (x-coordinates on line 3)
\end{quotation}

The filter are placed in-line; thus only data which passes all filters
will be printed.

\subsection{{\bf slide\_geometry} {\it index geometry\_entity geometry\_entity\_index}}

This record makes material to slide over the geometry specified 
by {\it geometry\_entity geometry\_entity\_index}.
Velocities normal to that direction are not allowed. 

This option comes handy when it is a priori known at which nodes
sliding will occur, which is typically the case in an Eulerian calculation
(i.e. if nodes remain in place with {\bf node\_locate} {\it index} {\bf -no} $\ldots$),
or if deformations are small. 
Otherwise, contact conditions should be used
(see {\bf contact\_geometry} etc.).

Optionally {\bf slide\_friction} can be specified.

\subsection{{\bf slide\_friction} {\it index friction\_coefficient}}

This specifies friction for the {\bf slide\_geometry} option.

\subsection{{\bf target\_item} {\it index data\_item\_name
  data\_item\_index number}}

See also: {\bf target\_value}.

\subsection{{\bf target\_value} {\it index value tolerance}}

This allows for testing the results of the calculation.
Typically, {\it data\_item\_name} is {\bf -node\_dof} but also
other data items can be tested. 
The record with index {\it data\_item\_index} will be tested. 
If {\it data\_item\_name} is {\bf -node\_dof} then {\it number} can
be {\bf -velx}, {\bf -temp}, etc. (see {\bf dof\_label});
else, by example, {\it number} is 3 states that the fourth value
needs to be checked. 
The result should not differ more from {\it value} than {\it tolerance}.

For a calculation with no problems, the tn.log file contains a line
stating that the calculation did start followed by a line stating that
the calculation did end. If this is not precisely the case,
some problem did occur or the targeted results differ too much.
In the example below it is checked that the pressure in node 6 does not
differ more than $1. \; 10^{-5}$.

\begin{quotation}
  \mbox{ } \\
  {\bf target\_item 0  -node\_dof 6 -pres} \\
  {\bf target\_value 0  1.2 1.e-5}
\end{quotation}

The chacked value, 1.2 in this case, has been
found from a previous computation that is regarded as reliable.  
The present computed value is compared with the earlier one.  
If they agree within the specified tolerance, 1.e-5 in this case, then Tochnog is silent.  
If they do not, then Tochnog writes an error message into the file "tn.log".

\subsection{{\bf tendon} {\it index x\_0 y\_0 z\_0 
  x\_1 y\_1 z\_1 tendon\_area}}

This record specifies a tendon; the start point is specified by
{\it x\_0 y\_0 z\_0} and the end point is specified
by {\it x\_1 y\_1 z\_1}.
The tendon has cross sectional area {\it tendon\_area}. 
In 1D only {\it x\_0}, {\it x\_1}, etc. should be specified, etc..
Tendons will automatically be distributed over the elements.
This is only available for linear and quadratic elements.
Only if a tendon part completely passes an element 
it will be embedded in the element; tendons need to be embedded in
elements which have a {\bf -materi} differential equation {\bf group\_type}.

This record automatically fills the 
{\bf element\_tendon\_direction}, {\bf element\_tendon\_number},
{\bf element\_tendon\_stress} and {\bf element\_tendon\_volume}
records. You are not allowed to specify those records yourself.

In combination with tendons, the {\bf group\_materi\_memory} model
should be set to {\bf -total} or {\bf -updated\_without\_rotation}.

\subsection{{\bf tendon\_elasti} {\it index stiffness}}

Elastic stiffness for tendon (with the same index).
Tendon will use the {\bf group\_materi\_memory} model of the parent element;
only {\bf -total} is available however for tendons.

\subsection{{\bf tendon\_expansion} {\it index $\alpha$}}

Thermal expansion coefficient for tendon (with the same index).

\subsection{{\bf tendon\_plasti} {\it index yield\_stress}}

Yield stress for tendon (with the same index). Perfectly plastic
yielding is used.

\subsection{{\bf tendon\_stress} {\it index initial\_stress}}

Initial stress for tendon (with the same index).
See also {\bf element\_tendon\_stress}.

\subsection{{\bf time\_current} {\it index current\_time}}

Current time in calculation.

\subsection{{\bf time\_calculation} {\it cpu\_time\_in\_seconds}}

Consumed computer time up to moment of printing. 

\subsection{{\bf volume\_element\_factor} {\it index factor}}

In 1D or 2D you can specify the cross-section and thickness respectively,
for elements of the element group {\it index} (see {\bf element\_group}).

See also {\bf volume\_factor}.

\subsection{{\bf volume\_factor} {\it $a_0$ $a_1$ \ldots $a_n$}}

This data item defines a polynomial in space in 1D or 2D.
The polynomial specifies the cross-sectional area (in 1D) or 
the thickness (2D) as function of the global $x$ coordinate (1D) or 
the global $x$,$y$ coordinates (2D). By example, in a 1D solid
calculation it can be used to specify varying cross-sectional areas
of bars, or in a 1D flow calculation it can be used to specify the cross-
sectional area of a channel.

In 1D the polynomial is $a_0 + a_1 x + a_2 x^2 + \ldots $.
In 2D the polynomial is $a_0 + a_1 x + a_2 y + a_3 x^2 + a_4 xy +
a_5 y^2 + a_6 x^3 + a_7 x^2 y + a_8 x y^2 + a_9 y^3 + \ldots $.

If this record is not specified, the cross-sectional area is 1 (1D)
or the thickness is 1 (2D).

See also {\bf volume\_element\_factor}.

\subsection{{\bf end\_data} (last record of data part)}

\clearpage
\section{Interaction analyzes and advanced analyzes}

\subsection{Fluid-structure interaction}

If a solid construction interacts with a fluid, both the solid
and fluid can be modeled with the materi equation.
Interaction forces between solid and fluid will automatically be generated. 
If required, a temperature field may be imposed. 
An example of a input file is given below

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf element\_group -ra -from 0 -to 100 -ra 1} \\
  {\bf element\_group -ra -from 101 -to 200 -ra 2} \\
  \ldots \\
  {\bf type 1 -materi -condif} \\
  {\bf group\_materi\_elasti\_young 1  \ldots} \\
  {\bf group\_materi\_memory -updated} \\
  {\bf group\_condif\_conductivity 3 \ldots} \\
  \ldots \\
  {\bf type 2 -materi} \\
  {\bf group\_materi\_elasti\_compressibility 2  \ldots} \\
  {\bf group\_materi\_viscosity 2  \ldots} \\
  {\bf group\_materi\_memory -updated\_without\_rotation} \\
  {\bf group\_condif\_conductivity 2 \ldots} \\
  \ldots \\
\end{quotation}

Elements 0-100 are fluids (with temperature) and
elements 101-200 are solids (with temperature).

\subsection{Ground water flow in deforming solid}

The ground water flow equation can be combined with the
materi equations.
The solid will deform due to the ground water flow pressure gradient
and ground water flow pressure will change due to solid volume changes.
An example of a input file is given below

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf groundflow\_pressure} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf type 0  -materi -groundflow} \\
  ( solid material ) \\
  {\bf group\_materi\_elasti\_young 0  \ldots} \\
  {\bf group\_materi\_memory -updated} \\
  ( groundflow ) \\
  {\bf group\_groundflow\_compressibility 0  \ldots} \\
  \ldots \\
\end{quotation}

\subsection{Heat transport in ground water flow}

Heat transport in a ground water flow can
be analyzed by combining the convection and diffusion of heat
equation with the ground water flow equation.
Now the velocity in the convection and
diffusion of heat equation is taken from the groundflow velocity
field ( $\beta_i = {v_i}^{\rm g}$ ) if {\bf groundflow\_velocity}
is initialized. An example of a input file is given below

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf groundflow\_pressure} \\
  {\bf groundflow\_velocity} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf type 0  -groundflow -condif} \\
  {\bf group\_groundflow\_compressibility 0  \ldots} \\
  {\bf group\_condif\_conductivity 0  \ldots} \\
  \ldots \\
\end{quotation}

If both {\bf materi\_velocity} and {\bf groundflow\_velocity} are initialized,
$\beta_i = v_i + {v_i}^{\rm g}$.

\subsection{Heat transport in materials}

Heat transport in a material can be analyzed by combining 
the convection and diffusion of heat equation
with the materi equations. In this way thermal stresses
or heat induced convection can be analyzed. 
Now the velocity in the convection and
diffusion of heat equation is taken from the velocity
field ( $\beta_i = v_i$ ). An example of a input file is given below

\begin{quotation}
  \mbox{ } \\
  \ldots \\
  {\bf materi\_velocity} \\
  {\bf materi\_stress} \\
  {\bf condif\_temperature} \\
  {\bf end\_initia} \\
  \ldots \\
  {\bf type 0  -materi -condif} \\
  {\bf group\_materi\_elasti\_young 0  \ldots} \\
  {\bf group\_materi\_expansion 0 \ldots} \\
  {\bf group\_materi\_memory 0 -updated} \\
  {\bf group\_condif\_conductivity 0  \ldots} \\
  \ldots \\
\end{quotation}

\clearpage
\section{Practical tips}

\subsection{Continuing an analysis}

\begin{itemize}
  \item Copy the database from the previous calculation to a new file,
        e.g. {\bf new.dat}.
  \item Adjust control records like {\bf control\_timestep}, etc.
  \item Run a new calculation with {\bf new.dat}.
\end{itemize}

\subsection{Saving CPU time.}

\begin{itemize}
\item Post data items ({\bf post\_point}, etc.) slow down the calculation.
      Skip them if you want to spare time.
\item Printing ({\bf control\_print}, etc.) can \underline{substantially} slow
      down the calculation. If you know that a calculation
      runs fine, only print the results at the end or so.
\item Redirect printed output to a file and not to the screen.
      A hard disk is faster then a screen.
\item Try {\bf -matrix\_iterative} in {\bf control\_solver}.
\end{itemize}


\subsection{Saving computer memory.}

\begin{itemize}
  \item Try {\bf -matrix\_iterative} in {\bf control\_solver}.
  \item Don't use extreme large indices, since memory is allocated for all indices
        up to the largest.
\end{itemize}

\subsection{To model linear material}

\begin{itemize}
  \item Use {\bf control\_skip\_convective\_parts} {\it index} {\bf -all} 
  \item Use for all nodes {\bf node\_locate} {\it index} {\bf -no ...}
  \item Use {\bf -updated\_without\_rotation} for the material.
\end{itemize}

\subsection{When you find yourself in times of troubles}

\begin{itemize}
  \item Try smaller time steps.
  \item Try {\bf control\_timestep\_iterations} with at least 2.
  \item Try the linear elements ({\bf -bar2}, {\bf -tria3} and {\bf -tet4}).
  \item Try inertia ({\bf group\_condif\_density}, {\bf group\_condif\_capacity}, .. )
  \item Try dynamic relaxation ({\bf control\_relaxation\_materi\_velocity}, ..).
\end{itemize}

\clearpage
\section{User supplied subroutines}

Several skeleton user supplied subroutines are available in the file user.cc. 
You can finish a routine, compile all files and link it to get an executable.
Further explanation is provided in user.cc.

As a special option you can use an ABAQUS (trademark of
Hibbit, Karlsonn \& Sorensen, Inc.) umat.f routine.
See the umat.c routine in the tn/src directory how to do that.
As an example you could try our hypoplasticity implementation,
which is on the Internet at:

\begin{center}
  http://info.uibk.ac.at/c/c8/c813/res/FEhypo.html
\end{center}

See also: {\bf user\_umat}, {\bf user\_data} and {\bf materi\_history\_variables}.

\clearpage

\begin{thebibliography}{99}
\bibitem{Carlslaw}H.S. Carlslaw, J.C.Jeager
  {\em 1974 Conduction of heat in solids}
  Claredon Press Oxford
\bibitem{GAMM}K. Morgan, J. Periaux, F. Thomasset
  {\em 1984 Analysis of Laminar Flow over a Backward Facing Step}
  Notes on Numerical Fluid Mechanics, a GAMM-workshop
  Friedr. Vieweg \& Sohn Braunsweig/Wiesbaden
\bibitem{Zienkiewicz2}O.C. Zienkiewicz, R.L. Taylor
  {\em The finite element method Volume2, fourth edition}
  McGraw-Hill Book Company London
\end{thebibliography}

\clearpage
\section{GNU GENERAL PUBLIC LICENSE} 
 \input LICENSE.txt

\end{document}
