In this section, we define the data structures used to specify
the domain
as a triangulation.
Let
denote the triangulation, consisting of
NTF triangles
.
Let the triangulation
have NVF
vertices
and NBF edges
.
Triangles may have curved edges, which are approximated by arcs of
circles.
The centers of the circles are given by
.
Curved edges may lie either on the
boundary or interior of the region
.
Figure: Clockwise, from upper left: example domain; triangle numbers;
vertex numbers; curved edges; edge numbers.
For example, consider the circle of radius one with a crack
along the positive x-axis.
This domain can be triangulated using
8 triangles, 10 vertices, and 10 edges, 8 of which are curved,
as illustrated in Figure
.
Vertices
and
have the same
(x,y) coordinates, but
is ``above''
the crack, and
``below.'' Similarly, edge
is the top of the
crack, while edge
is the bottom.
The ordering of vertices, triangles, and edges is arbitrary.
The arrays VX
and VY
are of length NVF, and
contain as their I-th entries the x and y
coordinates of
, illustrated
for this example in Table
.
If a triangle has a curved edge,
that edge
is approximated by a circular arc passing through
the endpoints of the edge, with the center of the circle located at one
of the points
.
Because there are generally two such
arcs for every pair of endpoints, the shorter arc is taken to be the
correct edge; therefore, one should specify curved edges that
subtend (strictly) less than
of arc;
is a reasonable
upper bound.
The centers for the various circles
used in specifying curved edges are given in
the arrays XM
and YM
of length NCF, which contain as their I-th entries the x and
y coordinates of the center
.
The data for our example is shown in Table
.
| I | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| VX(I) | 0 | 1 | | 0 | | -1 | | 0 | | 1 |
| VY(I) | 0 | 0 | | 1 | | 0 | | -1 | | 0 |
| XM(I) | 0 | |||||||||
| YM(I) | 0 |
The VX, VY, XM and YM arrays. NVF=10 and NCF=1.
| I | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| IBNDRY(1,I) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| IBNDRY(2,I) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 1 |
| IBNDRY(3,I) | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| IBNDRY(4,I) | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
| IBNDRY(5,I) | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
The IBNDRY array. NBF=10.
| I | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| ITNODE(1,I) | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| ITNODE(2,I) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| ITNODE(3,I) | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| ITNODE(4,I) | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
The ITNODE array. NTF=8.
To simplify data entry, we provide the routine CENTRE for
computing the center of a circle given three points on its boundary.
CENTRE
is called using the statement:
Call CENTRE( X1, Y1, X2, Y2, X3, Y3, XC, YC )
Here (X1,Y1) and (X2,Y2) are the endpoints of an arc of the circle, and
(X3,Y3) is a third point on the arc (e.g., the midpoint). CENTRE
returns the center of the circle in (XC,YC).
A given triangle
is specified
by giving an accounting of its three vertices, and
by specifying an integer label or tag.
Such labels are provided strictly for the
convenience of the user, and can be used to
identify differing regions or material properties associated with
the element.
The array ITNODE
is a
integer
array whose I-th column contains information
about
. The first three entries of
ITNODE contain the three vertex numbers of triangle
. ITNODE(J,I)=K, for
, means (VX(K),VY(K)) is
the J-th vertex of
.
The ordering of the vertices of a given triangle
is arbitrary and independent of the other
triangles.
The fourth entry of column I of ITNODE contains the label for
triangle I. In our example, we choose to label each element by the
quadrant in the Euclidean plane in which it lies.
The ITNODE array for our example is shown in Table
.
The array IBNDRY
is a
integer
array whose I-th column contains information
about
. The first two entries of IBNDRY contain
the indices of the endpoints of the interval (pointers to the
VX and VY arrays).
IBNDRY(J,I)=K,
, means (VX(K),VY(K))
is an endpoint of
.
Ordering of vertices is arbitrary.
The third entry
of the I-th column contains the index for the circle center for
the edge (pointer to the XM and YM arrays).
IBNDRY(3,I)=K means (XM(K),YM(K)) is
the circle center for edge
.
If the edge is straight, IBNDRY(3,K) should be set to 0.
The fourth entry defines the boundary type for edge
.
There are four possibilities for edge type.
If IBNDRY(4,I)=2, then
is a
boundary edge on which Dirichlet boundary conditions are imposed.
If IBNDRY(4,I)=1, then
is a
boundary edge on which natural boundary conditions are imposed.
If IBNDRY(4,I)=0, then
is an internal edge.
There are two reasons to include internal edges in a triangulation.
First, if the internal edge is curved, it must be specified in IBNDRY in
order to be treated properly.
Second, the set
in equation (
)
is taken as the set edges defined in IBNDRY. Thus internal edges which are
part of
must be defined in IBNDRY.
An important restriction on internal edges of a triangulation is that they must
lie on an internal interface. That is, the two triangles sharing
must have different labels as their fourth entries in ITNODE.
The fourth type of edge is a linked edge. Linked edges occur only in pairs.
If
and
are a pair of linked edges, then
IBNDRY(4,I)=-J and IBNDRY(4,J)=-I.
Linked edges
and
must be geometrically congruent. That is,
must be mapped to
using only a translation, an orthogonal rotation,
and a refection.
Continuity of the solution
and weak continuity of
is imposed on linked
edge pairs. Thus if
and
are boundary edges, this is equivalent to
imposing periodic boundary conditions.
The fifth entry in column I of IBNDRY contains an integer
label for the edge, similar to the fourth entry of ITNODE; this label
can be used to distinguish uniquely a particular edge,
or to associate some property with the edge.
The IBNDRY array for our example
is shown in Table
.
In our example, we impose Dirichlet boundary conditions on the outer boundary of the circle, and also along the top of the crack, and Neumann boundary conditions on the bottom of the crack. The outer boundary of the circle is labeled 0, the top of the crack 2, and the bottom of the crack 1.
In the case of a singular Neumann problem (e.g.,
,
,
, and
in (
)),
the solution u is determined only up to an arbitrary constant. To make such
a solution unique, the user may select a distinguished vertex where u
will be specified. The parameter IDBC ,
where
, denotes the vertex number. In other situations,
one should set IDBC=0.