You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
683 lines
33 KiB
683 lines
33 KiB
\chapter{Description of Utilities in \numbers}
|
|
\label{c:numerics}
|
|
|
|
Each utility and the numerical algorithm used in the utility are
|
|
described in this chapter. Although most of the algorithms are
|
|
well-known and documented in several references, it is important to
|
|
understand the actual methods used in each of the utilities to avoid
|
|
misinterpretation of the output and to understand the limitations and
|
|
assumptions used to calculate the properties and values.
|
|
|
|
Another reason for describing the algorithms is that \numbers\ is
|
|
written as a basic shell program for reading \exo\ files. If additional
|
|
utilities are developed for \numbers, it is likely that several of the
|
|
algorithms already implemented can be modified to perform the new
|
|
function.
|
|
|
|
This chapter is organized into several sections; each utility is
|
|
described in a separate section. The descriptions include the function
|
|
of the utility and the algorithm used in the utility including its
|
|
assumptions and limitations. The complete command syntax for each
|
|
utility is given in Section~\ref{sec:oper}; a summary of the command
|
|
syntax is given in Section~\ref{sec:opsum}. Examples of the use of most
|
|
of the utilities are presented in Chapter~\ref{c:examples}.
|
|
|
|
\section{Mass Properties Utility}\label{sec:mass}
|
|
|
|
The mass properties utility calculates the volume, mass, mass moments of
|
|
inertia, and centroid location of the body. These values are often
|
|
required in a finite element analysis to ensure that the finite element
|
|
idealization correctly approximates the actual body. This utility also
|
|
lists the minimum, maximum, and average element volume for each material
|
|
block. A summary of the equations used to calculate the mass properties
|
|
is given in this section.
|
|
|
|
The moments of inertia are originally calculated about the origin of the
|
|
coordinate system and then transferred to the centroid using the
|
|
parallel-axis theorem. The mass and the moments of inertia about the
|
|
origin of the coordinate system are given by the following integrals:
|
|
\begin{eqnarray}
|
|
M &=& \int_V \rho dV \label{V}\\
|
|
I_x &=& \int_V \rho\left(y^2 + z^2\right)\,dV \label{IX}\\
|
|
I_y &=& \int_V \rho\left(x^2 + z^2\right)\,dV \label{IY}\\
|
|
I_z &=& \int_V \rho\left(x^2 + y^2\right)\,dV \label{IZ}\\
|
|
I_{xy} &=& \int_V \rho xy\,dV \label{IXY}\\
|
|
I_{xz} &=& \int_V \rho xz\,dV \label{IXZ}\\
|
|
I_{yz} &=& \int_V \rho yz\,dV \label{IYZ}
|
|
\end{eqnarray}
|
|
|
|
where $M$ is the mass, $\rho$ is the density, $I$ is the mass moment
|
|
of inertia, and the subscripts $x$, $y$, and $z$ denote the axes about
|
|
which the moment is measured. The double subscripts indicate products
|
|
of inertia. Note that the product of inertia with respect to any two
|
|
orthogonal axes is zero if either of the axes is an axis of symmetry.
|
|
|
|
\paragraph{Axisymmetric Two-dimensional Body:}
|
|
For an axisymmetric two-dimensional body, the integrals are written in
|
|
cylindrical coordinates using the radius $r$ and the angle $\theta$,
|
|
where $x = r\cos\theta$ and $z = r\sin\theta$. The $y$-axis is assumed
|
|
to be the axis of revolution. The infinitesimal volume $dV$ is equal to
|
|
$r\,dA\,d\theta$ where $dA$ is an infinitesimal area equal to $dr\,dy$.
|
|
Rewriting Equations \eref{V} through~\eref{IZ} in terms of
|
|
$r$ and $\theta$, and performing the theta integration from $-\pi$ to
|
|
$\pi$ gives:
|
|
\begin{eqnarray}
|
|
M &=& 2\pi\rho\int_A r\,dA \\
|
|
I_y &=& 2\pi\rho\int_A r^3\,dA \\
|
|
I_x = I_z &=& 2\pi\rho\int_A r y^2\,dA + \pi\rho \int_A r^3\,dA\nonumber \\
|
|
&=& 2\pi\rho\int_A r y^2\,dA + {I_y\over2}
|
|
\end{eqnarray}
|
|
The products of inertia $I_{xy}$, $I_{xz}$, and $I_{yz}$ are zero since
|
|
all three axes are symmetry axes.
|
|
|
|
\paragraph{Two-dimensional Planar Body:}
|
|
For a two-dimensional planar body, area moments of inertia are
|
|
calculated; the depth in the $z$-direction is ignored. The integrals
|
|
simplify as follows:
|
|
\begin{eqnarray}
|
|
I_x &=& \rho\int_A y^2\,dA \\
|
|
I_y &=& \rho\int_A x^2\,dA \\
|
|
I_z &=& \rho\int_A \left(x^2 + y^2\right)\,dA = I_x + I_y \\
|
|
I_{xy} &=& \rho\int_A xy\,dA
|
|
\end{eqnarray}
|
|
The products of inertia $I_{xz}$ and $I_{yz}$ are both zero.
|
|
|
|
\paragraph*{Evaluation of Integrals:} The integrals are evaluated using
|
|
the isoparametric element formulation and Gaussian Quadrature. Details
|
|
of this process can be found in most books on finite element
|
|
methodology. In \numbers, two options are available for integration of
|
|
the equations. The two-dimensional equations can be integrated with
|
|
either 1- or 4-point quadrature, and the three-dimensional equations
|
|
with either 1- or 8-point quadrature. The mass moments of inertia for
|
|
bodies with non-rectangular elements are calculated more accurately with
|
|
the higher-order integration; volumes and areas are integrated exactly
|
|
with either integration option. The second-order quadrature rule is
|
|
also useful for calculating the section properties of a non-standard
|
|
shape. For this purpose, the discretization of the body is only refined
|
|
enough to capture the essential details of the shape since a structural
|
|
analysis will not be performed.
|
|
|
|
\paragraph{Calculation of Centroid Location:} The location of the
|
|
centroid is calculated using the first mass moments about each of the
|
|
three coordinate axes. The mass moments are summed in each of the three
|
|
coordinate directions over the range of the elements. The centroid
|
|
location is then given by the quotient of the mass moment sums divided
|
|
by the total mass of the body. For a two-dimensional axisymmetric body,
|
|
$x_c$ and $z_c$ (the $x$ and $z$ coordinates of the centroid) are zero;
|
|
for a two-dimensional planar body, $z_c$ is zero.
|
|
|
|
\section{Locate Utility}\label{sec:locate}
|
|
|
|
The locate utility outputs the numbers of all nodes or elements that are
|
|
within a specified distance from a user-defined point, line, or plane.
|
|
This information is often required for plotting results at a specified
|
|
location in the model, for example, the acceleration or velocity at the
|
|
centerline of a body during an impact analysis. The equations used to
|
|
calculate the distances from a node or element centroid to the point,
|
|
line, or plane are defined in the following subsections. All equations
|
|
are defined in terms of a three-dimensional body; for a two-dimensional
|
|
body the $z$ coordinates are deleted.
|
|
|
|
Note that the point location procedure is also a circle (2D) and sphere
|
|
(3D) location procedure and the line location procedure is also a
|
|
cylinder (3D) location procedure since the search interval distance from
|
|
the point and line can be specified.
|
|
|
|
In the location utility, the distance for an element is defined to be
|
|
the distance to the element geometric center. The location of the
|
|
element center is calculated by summing the four or eight nodal
|
|
coordinates in each coordinate direction and dividing by the number of
|
|
nodes.
|
|
|
|
\subsection{Point Location}\label{sec:plocate}
|
|
The point location utility outputs all nodes or elements that are a
|
|
specified distance from a user-specified point. The distance $d_r$ from
|
|
the node or element to the point ($x_0$, $y_0$, $z_0$) is given by:
|
|
\begin{equation}
|
|
d_r = \sqrt{ (x_0-x_n)^2 + (y_0-y_n)^2 + (z_0-z_n)^2}
|
|
\end{equation}
|
|
where $x_n$, $y_n$, and $z_n$ are the coordinates of the node or
|
|
element. The distance is calculated for each node or element and
|
|
compared to the user-specified distance and tolerance. If the node or
|
|
element is within this range, its number and coordinates are output. The
|
|
angles $\theta$ and $\phi$ are also calculated. The angle $\theta$ is
|
|
the angle between the $x$ axis and the projection of the line from the
|
|
point to the node onto the $x$--$z$ plane. The angle $\phi$ is the
|
|
angle between the $y$ axis and the line from the point to the node. In
|
|
two dimensions, $\theta$ is the angle between the line and the $x$ axis.
|
|
Figure~\ref{f:theta} illustrates the definitions of $\theta$ and $\phi$.
|
|
|
|
\begin{figure}
|
|
\centering
|
|
\includegraphics[scale=0.65]{figures/Angles.png}
|
|
\caption{Illustration of the Angles $\theta$ and $\phi$
|
|
for the Locate Point Utility}\label{f:theta}
|
|
\end{figure}
|
|
|
|
\subsection{Line Location}\label{sec:llocate}
|
|
The line location utility outputs all nodes or elements that are within
|
|
a specified distance from a user-specified line. The distance is
|
|
measured normal to the line. The parametric representation of the line
|
|
from $P_1$($x_1$, $y_1$, $z_1$) to $P_2$($x_2$, $y_2$, $z_2$) is $P(t) =
|
|
P_1 + (P_2 - P_1)t$. The components of this line are:
|
|
\begin{equation}
|
|
\begin{array}{ccccc}
|
|
x &=& x_1 + (x_2 - x_1) t &=& x_1 + at \\
|
|
y &=& y_1 + (y_2 - y_1) t &=& y_1 + bt \\
|
|
z &=& z_1 + (z_2 - z_1) t &=& z_1 + ct \\
|
|
\end{array}
|
|
\end{equation}
|
|
The minimum distance $d_t$ from the line to the point ($x_n$, $y_n$, $z_n$)
|
|
is
|
|
\begin{equation}
|
|
d_t^2 = (x_1+at-x_n)^2 +(y_1+bt-y_n)^2 +(z_1+ct-z_n)^2
|
|
\end{equation}
|
|
where the parameter $t$ is
|
|
\begin{equation}
|
|
t = -\frac{a(x_1-x_n) + b(y_1-y_n) +
|
|
c(z_1-z_n)}{a^2+b^2+c^2}\label{parametric}
|
|
\end{equation}
|
|
|
|
\subsection{Plane Location}\label{sec:slocate}
|
|
The plane location utility outputs all nodes or elements that are within
|
|
a specified distance from a user-specified plane. The distance is
|
|
measured normal to the plane. A unique plane can be defined by a
|
|
specified point and a normal vector to the plane. Given the point
|
|
($x_0$, $y_0$, $z_0$) and the unit vector $\vec{n} = a\vec{i} + b\vec{j} +
|
|
c\vec{k}$, the equation of the plane is:
|
|
\begin{eqnarray}
|
|
0 &=& ax + by + cz + d \label{plane} \\
|
|
d &=& -( ax_0 + by_0 + cz_0 )
|
|
\end{eqnarray}
|
|
The normal distance $d_n$ from the plane to a node or
|
|
element center is:
|
|
\begin{equation}
|
|
d_n = \frac{\left| a x_n + b y_n + c z_n - d\right|}%
|
|
{\sqrt{a^2 + b^2 + c^2}}
|
|
\end{equation}
|
|
where the subscript $n$ refers to the coordinates of the node or
|
|
element. The normal distance is calculated for each node or element and
|
|
compared to the user-specified distance and tolerance. If the node or
|
|
element is within this range, its number, coordinates, normal distance,
|
|
and radial distance are output. The radial distance is the same
|
|
distance calculated in the point location utility.
|
|
|
|
\subsection{Sort Algorithm}
|
|
|
|
Although sort is not a location option, it is used in the location
|
|
utility to order the output. \numbers\ uses the {\em heapsort} routine
|
|
which has been recommended in Reference~\cite{Press:nr} as a good
|
|
routine for a variety of sorting applications. It is an ``in-place''
|
|
sort requiring no auxiliary storage. It is an $N\log_2N$ process, not
|
|
only on average, but also for worst-case order of input data. A FORTRAN
|
|
listing of the sort subroutine is given in Appendix~\ref{a:sort}. One
|
|
disadvantage of the sort routine is that it is not ``stable.'' This
|
|
means that sorting the data a second time on a different field will
|
|
destroy the order of the first sort. A method for sorting on two or
|
|
more fields simultaneously is being investigated and will be implemented
|
|
in a later version of \numbers.
|
|
|
|
\subsection{Sort Fields}\label{sortfields}
|
|
|
|
The output from the location utility can be sorted on any of the
|
|
calculated quantities or ``fields.'' The table below lists the fields
|
|
that are defined for each of the location options; these are defined
|
|
following the table.
|
|
|
|
\begingroup\small
|
|
\tabcolsep=3pt
|
|
\begin{center}
|
|
%\begin{tabular}{|>{\sf}l|c| *{8}{>{\sf}l}| }\hline
|
|
\begin{tabular}{|l|c| *{8}{l}| }\hline
|
|
\rm Option &2D/3D &\multicolumn{8}{|c|}{\rm Valid \param{sort\_fields}}\\
|
|
\hline\hline
|
|
POINT & 2D & X & Y & & & DISTANCE & & THETA & \\
|
|
POINT & 3D & X & Y & Z & & DISTANCE & & THETA & PHI \\
|
|
LINE & 2D & X & Y & & T & DISTANCE & PARAMETRIC & & \\
|
|
LINE & 3D & X & Y & Z & T & DISTANCE & PARAMETRIC & & \\
|
|
PLANE & 3D & X & Y & Z & & DISTANCE & & RADIUS& \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\endgroup
|
|
|
|
\def\descriptionlabel #1{\sf #1:\hfil}
|
|
\begin{description}
|
|
\item[X, Y, {\rm or} Z] The \cmd{x}, \cmd{y}, or \cmd{z} coordinate
|
|
of the located node or element center.
|
|
\item[T] The parametric distance from the initial point of the line to
|
|
the located node or element center as defined in
|
|
Equation~\eref{parametric}. The initial point of the line is located at
|
|
\cmd{T} = 0; the final point is located at \cmd{T} = 1.
|
|
\item[PARAMETRIC] The same quantity as \cmd{T}.
|
|
\item[DISTANCE] The distance from the node or element center to the
|
|
location point, line, or plane. See the respective sections above for
|
|
the definition of distance for each of the location options.
|
|
\item[RADIUS] The shortest distance from the plane definition point (see
|
|
Section~\ref{sec:slocate}) to the located node or element center.
|
|
\item[THETA] For three-dimensional bodies, \cmd{THETA} is the angle
|
|
between the $x$ axis and the projection of the line from the point to
|
|
the node or element center onto the $x$--$z$ plane (see
|
|
Section~\ref{sec:plocate}). For two-dimensional bodies, \cmd{theta} is
|
|
the angle between the line from the point to the node or element center
|
|
and the $x$ axis.
|
|
\item[PHI] The angle between the $y$ axis and the line from the point to
|
|
the located node or element center.
|
|
\end{description}
|
|
|
|
\section{Cavity Volume Utility}\label{sec:cavity}
|
|
The cavity volume utility calculates the volume and change in volume of
|
|
a cavity or hole in a body. The boundary of the cavity is defined by
|
|
side set flags in the \exo\ file. Two separate calculations are
|
|
involved in this utility; the first is the calculation of the
|
|
cavity volume, and the second is the calculation of the change in
|
|
volume.
|
|
|
|
The cavity volume is calculated by forming triangles (2D) or
|
|
pentahedrons (3D) for each segment of the cavity boundary. The apex of
|
|
the triangles or pentahedrons are at a user-specified point. The bases
|
|
of the triangles or pentahedrons are the segments of the cavity boundary
|
|
side set. The segments are element faces; in two-dimensions, the faces
|
|
are lines; in three-dimensions, the faces are four-node quadrilaterals.
|
|
The faces are assumed to be planar. The volume of each triangle or
|
|
pentahedron is calculated and the sum of the volumes is, for certain
|
|
geometries, the volume of the cavity.
|
|
|
|
Figure~\ref{cvol2d} is an example of this process for a two-dimensional
|
|
cavity with three boundary segments: 1--2, 2--3, and 3--4.
|
|
\begin{figure}
|
|
\centering
|
|
\includegraphics[scale=0.75]{figures/Cavity.png}
|
|
\caption{Illustration of Cavity Volume Determination for
|
|
a Two-Dimensional Cavity}\label{cvol2d}
|
|
\end{figure}
|
|
The area is calculated by summing the areas of the three triangles
|
|
{\sf012}, {\sf023}, and {\sf034}, where the three numbers refer to the
|
|
points defining the triangle and point {\sf0} is the apex or center
|
|
point. A similar process is used for three-dimensional cavities except
|
|
that pentahedral volumes are calculated instead of triangular areas. The
|
|
volume $V$ of a pentahedron with the apex at the point $(x_c,y_c,z_c)$
|
|
and the base formed by a boundary segment is~\cite{flanagan}:
|
|
\begin{eqnarray}
|
|
V = &\frac{1}{12}&\{
|
|
((2y_c - y_3) z_{42} + y_2 (z_{c3} + z_{c4}) - y_4 (z_{c3} + z_{c2})) x_1 \nonumber \\
|
|
&+& \phantom{\{}((y_4 - 2y_c) z_{31} + y_3 (z_{c4} + z_{c1}) - y_1 (z_{c4} + z_{c3})) x_2 \nonumber \\
|
|
&+& \phantom{\{}((y_1 - 2y_c) z_{42} + y_4 (z_{c1} + z_{c2}) - y_2 (z_{c4} + z_{c1})) x_3 \nonumber \\
|
|
&+& \phantom{\{}((2y_c - y_2) z_{31} + y_1 (z_{c2} + z_{c3}) - y_3 (z_{c2} + z_{c1})) x_4 \nonumber \\
|
|
&+& \phantom{\{}(y_{24} z_{31} + y_{31} z_{42}) 2 x_c\}
|
|
\end{eqnarray}
|
|
where the numerical subscript refers to the sequence of the node of the
|
|
boundary segment, the $c$ subscript refers to the center location, and
|
|
the double subscript $z_{ij}$ is defined as $z_i-z_j$.
|
|
|
|
The planar area $V_P$ of a triangle with the apex at the point
|
|
$(x_c,y_c)$ and the base formed by a boundary segment is:
|
|
\begin{equation}
|
|
V_P = \sfrac{1}{2}[(y_1-y_c) (x_2-x_c) - (y_2-y_c) (x_1-x_c)]
|
|
\end{equation}
|
|
where the subscript refers to the first and second node of the boundary
|
|
segment, and $y_c$ is the approximate vertical geometric center of the
|
|
cavity. It is calculated by summing the $y$ coordinates and dividing by
|
|
the total number of nodes on the boundary.
|
|
|
|
If the body is axisymmetric, the volume $V_A$ is calculated as:
|
|
\begin{eqnarray}
|
|
x_c &=& \sfrac{1}{3}(x_1 + x_2) \nonumber \\
|
|
V_A &=& 2\pi x_c V_P
|
|
\end{eqnarray}
|
|
where $V_P$ is the area calculated for the plane strain cavity.
|
|
|
|
The above method correctly calculates the volume of cavities defined by
|
|
a closed boundary. However, many cavities are bounded on one or more
|
|
sides by symmetry planes which are not included in the cavity boundary
|
|
definition. In two dimensions, the correct volume will be calculated if
|
|
the triangle apex is on the axis of symmetry. In three dimensions, the
|
|
correct volume will be calculated if the apex of the pentahedron is on
|
|
the symmetry plane, or if it is on the intersection of two or more
|
|
symmetry planes. If the apex point is not specified by the user, it is
|
|
set to the point $(0,0,0)$ for three-dimensional bodies, and the point
|
|
$(0,y_c)$ for two-dimensional bodies, where $y_c$ is the approximate
|
|
vertical geometric center of the cavity.
|
|
|
|
\paragraph*{Cavity Volume Change:}
|
|
The change in cavity volume is calculated by calculating the volume of
|
|
the hexahedron formed by the original element face and the displaced
|
|
element face. This is repeated for each element face on the cavity
|
|
boundary and the total volume change is the sum of the element face
|
|
volume changes. Note that this calculation is correct for all cavities
|
|
even if they are bounded by symmetry planes.
|
|
|
|
For a three-dimensional cavity, the volume change $\Delta V$ for each
|
|
element on the cavity boundary is given by the following sequence of
|
|
calculations~\cite{PRONTO3D}.
|
|
\begin{equation}
|
|
\Delta V = \sfrac{1}{12}\sum_{i=1}^8 x_i B_i
|
|
\end{equation}
|
|
where $x_i$ for $i\le 4$ is the $x$ coordinate of a node on the element
|
|
face and $x_i$ for $5 \le i\le 8$ is the displaced coordinate of node
|
|
$i-4$. The $B_i$ values are given by:
|
|
\begin{eqnarray*}
|
|
B_{1} &=& y_2 (z_{63}-z_{45}) + y_3 z_{24} + y_4 (z_{38}-z_{52})
|
|
+ y_5 (z_{86}-z_{24}) + y_6 z_{52} + y_8 z_{45} \\
|
|
B_{2} &=& y_3 (z_{74}-z_{16}) + y_4 z_{31} + y_1 (z_{45}-z_{63})
|
|
+ y_6 (z_{57}-z_{31}) + y_7 z_{63} + y_5 z_{16} \\
|
|
B_{3} &=& y_4 (z_{81}-z_{27}) + y_1 z_{42} + y_2 (z_{16}-z_{74})
|
|
+ y_7 (z_{68}-z_{42}) + y_8 z_{74} + y_6 z_{27} \\
|
|
B_{4} &=& y_1 (z_{52}-z_{38}) + y_2 z_{13} + y_3 (z_{27}-z_{81})
|
|
+ y_8 (z_{75}-z_{13}) + y_5 z_{81} + y_7 z_{38} \\
|
|
B_{5} &=& y_8 (z_{47}-z_{61}) + y_7 z_{86} + y_6 (z_{72}-z_{18})
|
|
+ y_1 (z_{24}-z_{86}) + y_4 z_{18} + y_2 z_{61} \\
|
|
B_{6} &=& y_5 (z_{18}-z_{72}) + y_8 z_{57} + y_7 (z_{83}-z_{25})
|
|
+ y_2 (z_{31}-z_{57}) + y_1 z_{25} + y_3 z_{72} \\
|
|
B_{7} &=& y_6 (z_{25}-z_{83}) + y_5 z_{68} + y_8 (z_{54}-z_{36})
|
|
+ y_3 (z_{42}-z_{68}) + y_2 z_{36} + y_4 z_{83} \\
|
|
B_{8} &=& y_7 (z_{36}-z_{54}) + y_6 z_{75} + y_5 (z_{61}-z_{47})
|
|
+ y_4 (z_{13}-z_{75}) + y_3 z_{47} + y_1 z_{54}
|
|
\end{eqnarray*}
|
|
where $y_i$ and $z_i$ are defined in the same way as $x_i$, and $z_{ij}$
|
|
is equal to $z_i - z_j$.
|
|
|
|
For a two-dimensional, planar cavity, the volume change $\Delta V_P$ for
|
|
each element on the cavity boundary is equal to
|
|
\begin{equation}
|
|
\Delta V_P = \sfrac{1}{2}\left[x_{12} (\Delta y_2 + \Delta y_1) -
|
|
y_{12} (\Delta x_2 + \Delta x_1) +
|
|
\Delta x_1 \Delta y_2 -
|
|
\Delta x_2 \Delta y_1\right]
|
|
\end{equation}
|
|
where $x$ and $y$ are the original coordinates of the face nodes and
|
|
$\Delta x$ and $\Delta y$ are the $x$ and $y$ displacements of the
|
|
nodes.
|
|
|
|
For an axisymmetric cavity, the volume change $\Delta V_A$ for each
|
|
element on the cavity boundary is equal to
|
|
\begin{equation}
|
|
\Delta V_A = 2\pi x_c \Delta V_P
|
|
\end{equation}
|
|
where $x_c$ is the $x$ coordinate of the geometric center which is equal
|
|
to
|
|
\begin{equation}
|
|
x_c = \frac{(\Delta x_2 + \Delta x_1)}{4} +
|
|
\frac{(x_2 + x_1)}{2}
|
|
\end{equation}
|
|
|
|
\section{Overlap Utility}\label{sec:overlap}
|
|
|
|
The overlap utility is intended to assist the analyst in the generation
|
|
of a mesh with valid contact surfaces. One of the most difficult tasks
|
|
in generating a valid contact surface occurs when the contact surface is
|
|
curved with different discretizations on the two surfaces. In this
|
|
case, a small gap must be inserted between the surfaces to prevent
|
|
penetration. Figure~\ref{f:overlap} illustrates the problem that can
|
|
occur if the gap is not large enough or nonexistent. Note that the nodes
|
|
on the more refined side of the contact surface penetrate the elements
|
|
on the other side of the surface. This is a somewhat contrived example
|
|
to illustrate the problem; in actual finite element meshes it is very
|
|
difficult to notice the overlap unless the mesh is examined element by
|
|
element. However, if an analysis is run with overlapping contact
|
|
surfaces, the problem manifests itself in a sudden increase in kinetic
|
|
energy or by excessive deformations and velocities in the overlapped
|
|
portion of the mesh since the code will separate the contact surface in
|
|
one timestep. Currently, the utility only checks for penetration of the
|
|
master surface by the slave surface; however, other checks for valid
|
|
contact surfaces, such as continuity or other requirements imposed by
|
|
analysis codes, can be added if there is a need.
|
|
|
|
\begin{figure}
|
|
\centering
|
|
\includegraphics[scale=0.5]{figures/Overlap.png}
|
|
\caption{Illustration of Contact Surface Overlap due to
|
|
Discretization Mismatch on Curved Contact Surfaces}
|
|
\label{f:overlap}
|
|
\end{figure}
|
|
|
|
Many times, the most efficient method to determine whether the contact
|
|
surfaces overlap is to run the analysis for a very short period of time,
|
|
and then examine the results to see if the kinetic energy has increased
|
|
suddenly, or if the mesh has been ``blown'' apart where the analysis
|
|
code detects an overlapping contact surface and separates it in one
|
|
timestep---both symptoms indicate that a slideline overlap exists in the
|
|
original mesh.
|
|
|
|
The overlap utility was written to provide an efficient means of
|
|
determining whether an overlap exists prior to running an analysis. The
|
|
algorithm is logically broken into three separate steps. In the first
|
|
step, a ``bounding box'' is defined for each element on the master
|
|
surface. The bounding box contains the coordinate ranges in each of the
|
|
coordinate directions. Secondly, for each element on the master
|
|
surface, each node on the slave surface is tested to determine if it is
|
|
within the bounding box. This test is a simple comparison of the slave
|
|
node coordinates with the coordinates of the bounding box. Finally, if
|
|
a node is within an element's bounding box, the more computationally
|
|
expensive calculation of determining whether the node penetrates the
|
|
element is performed. To determine if the node penetrates the element,
|
|
four triangles (two-dimensional body) or six pentahedrons
|
|
(three-dimensional body) are formed with the slave node as the apex and
|
|
each element face as the base. The volume of each triangle or
|
|
pentahedron is calculated; if all of the volumes are positive, the node
|
|
is inside the element; if a volume is equal to zero, the node is on
|
|
the face. If the node is inside the element, its node number and the
|
|
number and connectivity of the penetrated element are output. At the
|
|
end of the calculation, the total number of nodes penetrating the
|
|
surface and the number of nodes on the surface are output.
|
|
|
|
The volume $V_P^i$ of the three-dimensional pentahedron formed by
|
|
slave node $s$ and the element face $i$ is equal
|
|
to~\cite{flanagan}:
|
|
\begin{eqnarray}
|
|
12V_P^i &=& \phantom{{}+{}}x_A[(2y_S - y_C) z_{DB} + y_B (z_{SC} + z_{SD}) -
|
|
y_D (z_{SC} + z_{SB})] \nonumber \\
|
|
&\ & {} + x_B[(y_D - 2y_S) z_{CA} + y_C (z_{SD} + z_{SA})-
|
|
y_A (z_{SD} + z_{SC})] \nonumber \\
|
|
&\ & {} + x_C[(y_A - 2y_S) z_{DB} + y_D (z_{SA} + z_{SB})-
|
|
y_B (z_{SD} + z_{SA})] \nonumber \\
|
|
&\ & {} + x_D[(2y_S - y_B) z_{CA} + y_A (z_{SB} + z_{SC})-
|
|
y_C (z_{SB} + z_{SA})] \nonumber \\
|
|
&\ & {} + 2x_S[y_{BD} z_{CA} + y_{CA} z_{DB} ]
|
|
\end{eqnarray}
|
|
where the subscript $S$ refers to the slave node, and the subscripts
|
|
$A$, $B$, $C$, and $D$ refer to the nodes on an element face (assumed to
|
|
be planar) as given in Table~\ref{t:nodes}.
|
|
|
|
\begin{table}
|
|
\parbox[t]{3.0in}{
|
|
\begin{center}
|
|
\begin{tabular}{l|cccccc}
|
|
\multicolumn{7}{c}{Hexahedron} \\
|
|
\multicolumn{7}{c}{\ } \\
|
|
& \multicolumn{6}{c}{Face} \\
|
|
& 1 & 2 & 3 & 4 & 5 & 6 \\ \hline
|
|
A & 1 & 6 & 6 & 5 & 4 & 1 \\
|
|
B & 2 & 7 & 5 & 1 & 3 & 5 \\
|
|
C & 3 & 3 & 8 & 4 & 7 & 6 \\
|
|
D & 4 & 2 & 7 & 8 & 8 & 2 \\
|
|
\end{tabular}
|
|
\end{center}}\hfil
|
|
\parbox[t]{3.0in}{
|
|
\begin{center}
|
|
\begin{tabular}{l|cccc}
|
|
\multicolumn{5}{c}{Quadrilateral} \\
|
|
\multicolumn{5}{c}{\ } \\
|
|
& \multicolumn{4}{c}{Face} \\
|
|
& 1 & 2 & 3 & 4 \\ \hline
|
|
A & 1 & 2 & 3 & 4 \\
|
|
B & 2 & 3 & 4 & 1 \\
|
|
\end{tabular}
|
|
\end{center}}
|
|
\caption{Numbering of Face Nodes on an Eight-Node Hexahedral Element and
|
|
a Four-Node Quadrilateral Element}\label{t:nodes}
|
|
\end{table}
|
|
|
|
The volume $V_T^i$ of the two-dimensional triangle formed by the
|
|
slave node $s$ and the element face $i$ is equal to:
|
|
\begin{equation}
|
|
2V_T^i = x_A (y_B - y_S) + x_B (y_S - y_A) + x_S (y_A - y_B)
|
|
\end{equation}
|
|
where the subscript $S$ refers to the slave node, and the subscripts
|
|
$A$ and $B$ refer to the nodes on an element face as given in
|
|
Table~\ref{t:nodes}.
|
|
|
|
\section{Time Step Estimation Utility}\label{sec:timestep}
|
|
|
|
Explicit integration is used in most large-deformation, nonlinear,
|
|
transient dynamics finite element codes, for example
|
|
\code{PRONTO}~\cite{PRONTO2D,PRONTO3D}. This utility provides an
|
|
estimate of the time step size which will be used in the explicit
|
|
integration in these codes.
|
|
|
|
The stable time step $\Delta t$ for the central difference operator
|
|
commonly used in transient dynamic analysis codes is given
|
|
by~\cite{Cook}
|
|
\begin{equation}
|
|
\Delta t \leq {2\over \omega_{\max}} \left(\sqrt{1+\epsilon^2} -
|
|
\epsilon\right)
|
|
\end{equation}
|
|
where $\omega_{\max}$ is the maximum frequency of the mesh, and
|
|
$\epsilon$ is the fraction of critical damping in the highest element
|
|
mode. In a explicit integration finite element code, the linear bulk
|
|
viscosity term is an estimate of $\epsilon$~\cite{PRONTO2D}. The default
|
|
value of $\epsilon$ is 0.06 which is the default value of the linear
|
|
bulk viscosity used in \code{PRONTO2D} and \code{PRONTO3D}.
|
|
|
|
Flanagan and Belytschko~\cite{flanagan} have derived simple
|
|
formulas for bounding the maximum eigenvalues for the uniform strain
|
|
eight-node hexahedron and four-node quadrilateral which can be used to
|
|
provide conservative estimates of the maximum frequency. The maximum
|
|
frequency estimate for a rectangular quadrilateral element is
|
|
\begin{equation}
|
|
\hat\omega_{\max}^2 = {4(\lambda + 2\mu)\over\rho}\left({1\over s_1^2} +
|
|
{1\over s_2^2}\right)
|
|
\end{equation}
|
|
where $s_1$ and $s_2$ are the lengths of the sides of the rectangle,
|
|
$\lambda$ and $\mu$ are Lame's constants, $\rho$ is the density, and
|
|
$\hat\omega_{\max}$ is the predicted value for the maximum frequency.
|
|
Similarly, for a rectangular parallelepiped hexahedron,
|
|
\begin{equation}
|
|
\hat\omega_{\max}^2 = {4(\lambda + 2\mu)\over\rho}\left({1\over s_1^2} +
|
|
{1\over s_2^2}+{1\over s_3^2}\right)
|
|
\end{equation}
|
|
|
|
Substituting the maximum frequency equation into the stable time step
|
|
equation gives the following estimate for the stable time step size:
|
|
\begin{equation}
|
|
\Delta\hat t\le \sqrt{\frac{\rho}{\lambda+2\mu}}
|
|
\left(\sum_{i=1}^{n_D}\frac{1}{s_i^2}\right)^{-1/2}
|
|
\left(\sqrt{1+\epsilon^2} - \epsilon\right)
|
|
\end{equation}
|
|
where $\Delta\hat t$ is the estimate of the stable time step, and $n_D$
|
|
is the number of dimensions. The first quantity on the right-hand side
|
|
of the inequality is the inverse of the dilatational wave speed which is
|
|
input by the user. The second quantity is calculated by \numbers\ with
|
|
the assumption that the element is rectangular.
|
|
|
|
The output from this utility includes the calculated time step, the
|
|
element with the minimum time step, and the number of time steps per
|
|
millisecond of analysis time for each element block.
|
|
|
|
The number of time steps per millisecond can be used to estimate the
|
|
computer time required to perform an analysis. Most explicit transient
|
|
dynamics codes output the average CPU time required to perform the
|
|
calculations for one element for one time step. Although this quantity
|
|
varies for different constitutive models and the number of contact
|
|
surfaces (slidelines), the average value is usually relatively constant
|
|
and well known. The CPU time per millisecond of analysis time can be
|
|
estimated using the formula
|
|
\begin{equation}
|
|
{CPU\over ms} = \left(10^{-3}\over \Delta\hat t\right)
|
|
({\sf Speed})({\sf NUMEL})
|
|
\end{equation}
|
|
where {\sf NUMEL} is the number of elements, {\sf Speed} is the CPU time
|
|
per element per timestep, and $(10^{-3}/\Delta\hat t)$ is the number of
|
|
time steps per millisecond.
|
|
|
|
\section{Gap Utility}\label{sec:gap}
|
|
|
|
The gap utility is used to determine the distance between nodes on two
|
|
surfaces. One surface is called the ``master'' surface and the other
|
|
surface is the ``slave'' surface. For each node on the master surface,
|
|
a normal vector is calculated as shown below. A matching process is
|
|
then performed to determine the ``closest'' slave node to each master
|
|
node, where closeness can be defined either as closest to the master
|
|
node normal vector, or closest in absolute distance. Figure~\ref{f:gap}
|
|
illustrates the two closeness measures. In this figure, Node~$M$ is the
|
|
master node and nodes $S_1$ and~$S_2$ are two slave nodes. If the
|
|
absolute distance is used, node~$S_1$ will be the matching node; if the
|
|
distance to the normal vector is used, node~$S_2$ will be the matching
|
|
node.
|
|
|
|
\begin{figure}
|
|
\centering
|
|
\includegraphics[scale=0.65]{figures/Gap.png}
|
|
\caption{Illustration of Closeness Measures Used in the Gap Utility}
|
|
\label{f:gap}
|
|
\end{figure}
|
|
|
|
After all of the nodes on the master surface have been matched to a node
|
|
on the slave surface, the normal and tangential distances, measured in
|
|
the coordinate frame of the normal vector, are determined for the
|
|
undeformed geometry and for each of the selected timesteps in the
|
|
database. This utility is normally used to calculate the change in
|
|
distance between two surfaces, for example, the closure of a drift in a
|
|
geomechanics problem or the slip (tangential movement) along a contact
|
|
surface.
|
|
|
|
The normal for a node is defined to be the average normal of the element
|
|
faces for all elements connected to the node. For a three-dimensional
|
|
body, a technique developed by Newell~\cite{Rogers:pefcg} gives the
|
|
exact normal for planar faces and a ``best'' approximation for almost
|
|
planar faces. The coefficients $a$, $b$, and $c$ of the normal vector
|
|
for an element face $\vec{n} = a\vec{i} + b\vec{j} + c\vec{k}$ are given by:
|
|
\begin{eqnarray}
|
|
a &=& \sum_{i=1}^n (y_i - y_j)(z_i + z_j) \nonumber\\
|
|
b &=& \sum_{i=1}^n (z_i - z_j)(x_i + x_j) \label{3dnorm}\\
|
|
c &=& \sum_{i=1}^n (x_i - x_j)(y_i + y_j) \nonumber
|
|
\end{eqnarray}
|
|
where $n$ is the number of nodes per face, and $j = 1$ if $i=n$, or
|
|
$j=i+1$ if $i\ne n$. The vector is then normalized and added to the
|
|
direction cosine matrix for each node on the face. After all of the
|
|
element normals have been computed and added to the direction cosine
|
|
matrix, the average direction cosine unit vector for each node is
|
|
determined by normalizing each entry in the direction cosine matrix.
|
|
|
|
The procedure is similar for a two-dimensional body, except that the
|
|
normal vector for an element face $\vec{n} = a\vec{i} + b\vec{j}$ is given by:
|
|
\begin{eqnarray}
|
|
r &=& \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2} \nonumber \\
|
|
a &=& (x_i - x_j) / r \label{2dnorm}\\
|
|
b &=& (y_i - y_j) / r \nonumber
|
|
\end{eqnarray}
|
|
where $x_i$ and $x_j$ are the $x$ coordinates of the two face nodes, and
|
|
$y_i$ and $y_j$ are the $y$ coordinates of the two face nodes.
|
|
|
|
After the average nodal normals have been calculated, the node matching
|
|
process is performed. For each node on the master surface, the {\em
|
|
closest} node on the slave surface is determined. There are two
|
|
criteria for determining closeness: radial distance and tangential
|
|
distance. The radial distance $d_r$ between two nodes is simply
|
|
\begin{equation}
|
|
d_r = \sqrt{(x_s - x_m)^2 + (y_s - y_m)^2 + (z_s - z_m)^2}\label{distr}
|
|
\end{equation}
|
|
where $x$, $y$, and $z$ are the nodal coordinates and the subscripts $m$
|
|
and $s$ refer to the master and slave nodes, respectively.
|
|
|
|
The tangential distance is the distance from the master node's normal
|
|
vector to the slave node. The distance is given by~\cite{Rogers:pefcg}:
|
|
\begin{eqnarray}
|
|
d_t &=& \sqrt{d_r^2 - d_n^2}\label{distt} \\
|
|
d_n &=& -\left(a(x_m - x_s) + b(y_m - y_s)+c(z_m-z_s)\right)\label{distn}
|
|
\end{eqnarray}
|
|
where $d_r$ is the radial distance given in Equation~\eref{distr}, $d_n$
|
|
is the distance to the slave node measured in the direction of the
|
|
normal vector, and $a$, $b$, and $c$ are the components of the unit
|
|
normal vector determined in Equations \eref{3dnorm} or~\eref{2dnorm}.
|
|
|
|
\section{Limits Utility}
|
|
|
|
The limits utility provides the basic function of determining the
|
|
minimum, maximum, and range of the coordinates for each of the material
|
|
blocks. No special algorithms are used in this utility and there are no
|
|
inherent limitations or assumptions in its implementation. The utility
|
|
simply examines the coordinates of each element in each element block
|
|
and saves the minimum and maximum values. After all of the elements
|
|
have been processed, the minimum and maximum values are subtracted to
|
|
determine the coordinate range of the data.
|
|
|