\chapter{Introduction} \label{chap:intro}

The \caps{\PROGRAM} program allows the user to manipulate data from a
finite element program before it is plotted. The program reads the
database output from an analysis program, manipulates the data using
algebraic expressions supplied by the user, and writes the new data to a
database to be processed by a plot program such as \caps{BLOT}
\cite{bib:blot}.

The program's algebraic evaluations allow special functions that are not
provided by the analysis program (such as principal values, effective
stress, and pressure) to be available for plotting. The evaluations
include all of the \caps{FORTRAN} arithmetic operations and most of the
\caps{FORTRAN} functions plus several special functions.

Both the input and output databases are in the \exo{} database
format \cite{bib:exodus}. The \exo{} format defines three types of
variables:\footnote{There are actually more variables than this
  permitted in an \exo{} database, but only the three below are
  currently supported by \caps{\PROGRAM}}
\setlength{\itemsep}{\medskipamount} \begin{itemize}
\item
A global variable has a value representative of the system as a whole
at each time step (e.g., the total energy).
\item
A nodal variable has a value for every node of the mesh at each time
step in the analysis (e.g., the displacement in the x-direction).
\item
An element variable has a value for every element in the element block
in which the variable is defined at each time step (e.g., the stress in the
x-direction).

\end{itemize}

A time step includes the values for all the variables (global, nodal, and element).

Each element in the database is assigned to an ``element block''. An
element block distinguishes a material or an element type (such as a
truss or quadrilateral). A specific element variable may be undefined
for some element blocks, meaning that the variable has no value for
elements in that element block.

The algebraic expressions to be evaluated in \caps{\PROGRAM} depend on
the values from the input database. These input values include the time
of the time step, the nodal coordinates, and the global, nodal,
and element variables calculated by the analysis program, including
values at specific nodes or elements. The values of variables from the
previous database time step or the first database time step may also be
referenced in the algebraic expressions. Global, nodal, and
element variables are created by \caps{\PROGRAM} in the output database,
with the variable type determined by the types of variables in the
expression being evaluated.

The \exo{} database format includes the names of the coordinates
and variables. This allows the user to reference the input variables by
name and to associate a meaningful name with calculated data.

There are two or three (depending on the number of dimensions in the
mesh) special nodal variables which contain the displacement components
at each node. The \caps{BLOT} plot program~\cite{bib:blot} expects these
variables to follow certain order and naming conventions. These
variables must be the first nodal variables and they must start with
``D'' and end with the last letter of the corresponding coordinate name.

\caps{\PROGRAM} allows the user to restrict the information that is
written to the output database. The time steps to be written may be
selected from those available on the input database. The size of the
output mesh may be limited by giving the nodal coordinates of a section
of the mesh or by selecting elements by element block.

\section{Changes since original printing}
\begin{itemize}
  \item Algebra will now add a timestep to an exodus file with no previous timesteps.  The equation
	    defining the new variable(s) can access constants and coordinates.

  \item	Can remove elements by global id. The syntax is:
\cmddef{\cmdverb{REMOVE ELEMENT} \param{id1} \param{id2} \ldots\ \param{idn}}{}
    A maximum of 1024 ids may be specified. It is currently not very efficient, but should work.

  \item Implemented filtering of elements which is the capability
    to remove elements based on the value of a specified element
    variable.  The syntax is:

\cmddef{\cmdverb{FILTER ELEMENT}
  \param{variable} \param{lt$|$le$|$ge$|$ne$|$gt$|$ge} \param{value} \cmd{TIME} \param{db\_time}
}{
\begin{itemize}
\item \param{variable} is the name of an element variable on the database.
\item \param{value} is the value that this variable will be compared against.
\item \param{lt$|$le$|$ge$|$ne$|$gt$|$ge} is the type of comparison corresponding to: lt -- less than, le == less than or
		equal, \ldots
\item \param{db\_time} is the time on the database where the variable
  will be read. If \param{db\_time} is less than the minimum database time, then the minimum time will be used; if greater than
  the maximum database time, then the maximum time will be used.
\end{itemize}
If the variable doesn't exist on an element block, then all of the elements in that element block will be retained.
}


\item Added inverse zoom capability -- delete all nodes and
  elements inside the specified zoom box unless the element
  contains nodes that are outside the zoom box. This is
  specified by adding \cmd{OUTSIDE} to the end of the
  \cmd{ZOOM} command line.

\item Removed all mention of history variables which have been removed from \exo{} a long time ago.
\end{itemize}
