<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>D06 Chapter Introduction : NAG Library, Mark 22</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="chap" href="d06conts.xml">D06 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/D06/d06intro.pdf">D06 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Chapter Introduction<br/><br/>D06 &#8211; Mesh Generation</h1><div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#scope">1&#160;&#160;<b>Scope of the Chapter</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background">2&#160;&#160;<b>Background to the Problems</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocavailable');"><span class="htmltocplus" id="tocavailableplus">+</span><span class="htmltocminus" id="tocavailableminus">&#8722;</span></span>
<a class="htmltoc" href="#available">3&#160;&#160;<b>Recommendations on Choice and Use of Available Routines</b></a>
<div class="htmltocitem" id="tocavailable">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#available1">3.1&#160;&#160;<b>Boundary Mesh Generation</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#available2">3.2&#160;&#160;<b>Interior Mesh Generation</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#available7">3.3&#160;&#160;<b>Mesh Management and Utility Routines</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#tutorial">4&#160;&#160;<b>Example of Use in the Solution of a Partial Differential Equation</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#index">5&#160;&#160;<b>Index</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#withdrawn">6&#160;&#160;<b>Routines Withdrawn or Scheduled for Withdrawal</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">7&#160;&#160;<b>References</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>
<div class="paramtext">This chapter is concerned with automatic mesh generation
<ul class="listind"><li class="listind">with line segments, over the boundary of a closed two-dimensional connected polygonal domain;</li><li class="listind">with triangles, over a given two-dimensional region using only its boundary mesh.</li></ul>
</div><h2 class="standard"><a class="sec" name="background" id="background"/>2&#160;&#160;Background to the Problems</h2>
<div class="paramtext">An important area of scientific computing in engineering is the solution of partial differential equations of various type (for solid mechanics, fluid mechanics, thermal modelling, <m:math><m:mo>&#8230;</m:mo></m:math>) by means of the finite element method.  In essence, the finite element method is a numerical technique which solves the governing equations of a complicated system through a discretization process.  You may wish to consult <a class="ref" href="#ref709">Cheung <span class="italic">et al.</span> (1996)</a> to see an application of the finite element method to solid mechanics and field problems.</div><div class="paramtext">A key requirement of the Finite Element method is a mesh, which subdivides the region on which the partial differential equations are defined.  Note that such meshes are also essential to other discretization processes, such as the Finite Volume method.  However, for the purpose this description we focus (without loss of generality) on the Finite Element method.  Thus, meshing algorithms are of crucial importance in every numerical simulation based on the finite element method.  In particular, the accuracy and even the validity of a solution is strongly tied to the properties of the underlying mesh of the domain under consideration.</div><div class="paramtext">In this chapter, the Delaunay constrained <m:math><m:mrow><m:mn>2</m:mn><m:mi>D</m:mi></m:mrow></m:math>&#160;triangulation (see <a class="ref" href="#ref698">George and Borouchaki (1998)</a> or Chapter 7 of <a class="ref" href="#ref709">Cheung <span class="italic">et al.</span> (1996)</a>) is considered and routines are provided to triangulate a closed polygonal domain of <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>, given a mesh of its boundary (in a later Mark of the Library, software for the <m:math><m:mrow><m:mn>3</m:mn><m:mi>D</m:mi></m:mrow></m:math>&#160;case will be available).  A domain in <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>&#160;is given via a discretization of its boundary.  The boundary is described as a list of segments, with given end point co-ordinates.  Then an incremental method is used to generate the set of interior vertices.</div><div class="paramtext">Let <m:math><m:mi>&#937;</m:mi></m:math>&#160;be a closed bounded domain in <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>&#160;or <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>3</m:mn></m:msup></m:math>.  The question is how to construct a triangulation (mesh) of this domain suitable for a finite element framework.  Following the definition in <a class="ref" href="#ref698">George and Borouchaki (1998)</a>:
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="script">T</m:mi></m:math>&#160;is a mesh of <m:math><m:mi>&#937;</m:mi></m:math>&#160;if
 <ul class="listind"><li class="listind"><m:math><m:mi>&#937;</m:mi><m:mo>=</m:mo><m:msub><m:mo>&#8899;</m:mo><m:mrow><m:mi>K</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="script">T</m:mi></m:mrow></m:msub><m:mi>K</m:mi><m:mtext>.</m:mtext></m:math></li></ul></li><li class="listind">Every element <m:math><m:mi>K</m:mi></m:math>&#160;in <m:math><m:mi mathvariant="script">T</m:mi></m:math>&#160;is non-empty.</li><li class="listind">The intersection of the interior of any two elements is empty.</li><li class="listind">The intersection of any two elements in <m:math><m:mi mathvariant="script">T</m:mi></m:math>&#160;is either,
 <ul class="listind"><li class="listind">the empty set,</li><li class="listind">a vertex,</li><li class="listind">an edge,</li><li class="listind">a face (in <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>3</m:mn></m:msup></m:math>).</li></ul></li></ul>
</div><div class="paramtext">In the finite element method, the meshes are in general denoted <m:math><m:mi mathvariant="script">T</m:mi></m:math>&#160;or <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mi>h</m:mi></m:msub></m:math>, where the index <m:math><m:mi>h</m:mi></m:math>&#160;refers to a measure of the diameter (length of the longest edge) of the elements in the mesh.  A triangulation is a set of entities described in a suitable manner by picking an adequate data structure.  The algorithm for triangulation construction creates a table of elements in the triangulation as well as the neighbourhood relationships between the elements.  Those elements are meant to satisfy the so-called &#8216;empty sphere criterion&#8217; which means that the open ball associated with the element (the circumcircle of the triangle in <m:math><m:mrow><m:mn>2</m:mn><m:mi>D</m:mi></m:mrow></m:math>, and the circumsphere of the tetrahedron in <m:math><m:mrow><m:mn>3</m:mn><m:mi>D</m:mi></m:mrow></m:math>) does not contain any vertices (while the closed ball contains the vertices of the element in consideration only).  This criterion is a characterisation of the Delaunay triangulation.</div><div class="paramtext">Given <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;the Delaunay triangulation of the convex hull of the first <m:math><m:mi>i</m:mi></m:math>&#160;points, the purpose of <b>the incremental method</b> (which is the main method to generate nodes and elements inside the domain) is to obtain <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;the Delaunay triangulation which includes an <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced></m:math>th point <m:math><m:mi>P</m:mi></m:math>&#160;as an element vertex.  To this end, one can introduce a procedure referred to as the &#8216;Delaunay kernel&#8217; construction.  This kernel is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi mathvariant="script">T</m:mi><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>=</m:mo><m:msub><m:mi mathvariant="script">T</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi mathvariant="script">C</m:mi><m:mi>P</m:mi></m:msub><m:mo>+</m:mo><m:msub><m:mi mathvariant="script">B</m:mi><m:mi>P</m:mi></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi mathvariant="script">B</m:mi><m:mi>P</m:mi></m:msub></m:math>&#160;is the ball associated with <m:math><m:mi>P</m:mi></m:math>&#160;and <m:math><m:msub><m:mi mathvariant="script">C</m:mi><m:mi>P</m:mi></m:msub></m:math>&#160;is the associated cavity.  The ball associated with a given point <m:math><m:mi>P</m:mi></m:math>&#160;is the set of elements in the triangulation including <m:math><m:mi>P</m:mi></m:math>&#160;as a vertex, while the cavity is the set of elements whose circumcircles or circumballs enclose the point <m:math><m:mi>P</m:mi></m:math>.  One can prove that, given <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;a Delaunay triangulation of a convex hull of the first <m:math><m:mi>i</m:mi></m:math>&#160;points, then <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;is a Delaunay triangulation of the hull that includes <m:math><m:mi>P</m:mi></m:math>&#160;as the <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced></m:math>th vertex.  The completion of a Delaunay triangulation relies on applying the Delaunay kernel procedure to every point.</div><div class="paramtext">The problems here are
<ul class="listind"><li class="listind">to choose the input data <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;of the incremental method, and</li><li class="listind">to generate at each iteration this <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced></m:math>th point, such that <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;is still a Delaunay triangulation of the convex hull of the <m:math><m:mfenced separators=""><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced></m:math>&#160;points.</li></ul>
</div><div class="paramtext">For a finite element application, it is required to construct a mesh of the domain <m:math><m:mi>&#937;</m:mi></m:math>&#160;whose elements are as close to equilateral as possible.</div><div class="paramtext">The mesh generation methods include an initial creation stage resulting in a mesh <m:math><m:msub><m:mi mathvariant="script">T</m:mi><m:mn>0</m:mn></m:msub></m:math>, without internal points, except for any specified interior points (see <a class="ref" href="#ref698">George and Borouchaki (1998)</a> for more details).  Such a mesh is referred to as the &#8216;empty mesh&#8217;.  This mesh consists of a box which includes the whole geometry plus some vertices on the edge of that box.  From here the methods differ in how the required internal points are created.</div><div class="paramtext">The general principle of interior mesh generation is to either create a point and insert it immediately by means of the Delaunay method (the so-called Delaunay kernel), repeating the process as long as points can be created, or to generate a series of points, insert this series and iterate the process as long as a non-empty series is created.  At this stage it is quite useful to define the notion of a control space to govern the internal point creation.  The &#8216;ideal&#8217; control is the input of a function defined analytically at any point of <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>&#160;and which specifies the size and the direction features that must be conformed to anywhere in the space.</div><div class="paramtext">To construct such a function, one can consider several approaches.  For our purpose in this chapter, this control function computes, from data, the local step sizes (the desired distance between two points) related to the given points.  A generalized interpolation then enables us to obtain the function everywhere.  This process is purely geometric in the sense that it relies only on the geometric data properties: boundary edge lengths, and so on.  You are advised to consult <a class="ref" href="#ref698">George and Borouchaki (1998)</a> for more details about this strategy, especially about the other approaches which can be considered to construct the control function.</div><h2 class="standard"><a class="sec" name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Routines</h2><h3 class="standard"><a class="sec" name="available1" id="available1"/>3.1&#160;&#160;Boundary Mesh Generation</h3>
<div class="paramtext">The first step to mesh any domain of <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>&#160;or <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>3</m:mn></m:msup></m:math>&#160;is to generate a mesh of the domain boundary.  In this chapter, since only the <m:math><m:mrow><m:mn>2</m:mn><m:mi>D</m:mi></m:mrow></m:math>&#160;case is considered, the relevant routine is <a class="rout" href="../D06/d06baf.xml">D06BAF</a>.  This routine meshes with segments a boundary of a closed connected polygonal domain of <m:math><m:msup><m:mi>&#8477;</m:mi><m:mn>2</m:mn></m:msup></m:math>, given a set of characteristic points and characteristic lines which define the shape of the frontier.  The boundary has to be partitioned into geometrically simple lines.  Each line segment may be a straight line, a curve defined by an equation of the type <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>y</m:mi></m:mfenced><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, or simply a polygonal curve, delimited by characteristic points (end points of the lines).  Then, you can assemble those lines into connected components of the domain boundary.</div><h3 class="standard"><a class="sec" name="available2" id="available2"/>3.2&#160;&#160;Interior Mesh Generation</h3>
<div class="paramtext">In this chapter three routines are provided to mesh a domain given a discretization of its boundary with optionally specified interior points.
<ul class="listind"><li class="listind"><a class="rout" href="../D06/d06abf.xml">D06ABF</a> uses an internal point construction method along the internal edges. Using the control function, a small number of points are generated along each edge.</li><li class="listind"><a class="rout" href="../D06/d06acf.xml">D06ACF</a> uses a point creation method based on an advancing front point placement strategy, starting from the &#8216;empty mesh&#8217;.</li><li class="listind"><a class="rout" href="../D06/d06aaf.xml">D06AAF</a> uses a simple incremental method based on a control function given analytically via the argument <a class="arg" href="../D06/d06aaf.xml#POWER">POWER</a>.</li></ul>
</div><div class="paramtext">Any point construction method results in a set of points.  These points are then inserted by means of the Delaunay kernel.</div><div class="paramtext">The point insertion process is completed by successive waves.  The first wave results from the empty mesh edge analysis (edge method) or from the empty mesh front analysis (advancing front method).  Subsequent waves correspond to the analysis of the edges of the previous mesh.  For the advancing front strategy, the waves follow the analysis of the front associated with the current mesh.</div><div class="paramtext">One can propose a general scheme for a mesh generation method.  Seven steps can be identified as follows.
<ul class="listind"><li class="listind">Preparation step.
 <ul class="listind"><li class="listind">Data input: point co-ordinates, boundary edges and internal edges (if any),</li><li class="listind">construction of the bounding box,</li><li class="listind">meshing of this box by means of a few triangles.</li></ul></li><li class="listind">Construction of the box mesh.
 <ul class="listind"><li class="listind">Insertion of the given points in the box mesh using the Delaunay kernel.</li></ul></li><li class="listind">Construction of the empty mesh.
 <ul class="listind"><li class="listind">Search for the missing specified edges,</li><li class="listind">enforcement of these edges,</li><li class="listind">definition of the connected components of the domain.</li></ul></li><li class="listind">Internal point creation and point insertion.
 <ul class="listind"><li class="listind">Control space definition,</li><li class="listind"><m:math><m:mfenced separators=""><m:mn>1</m:mn></m:mfenced></m:math>&#160;internal edge analysis, point creation along these edges,</li><li class="listind">point insertion via the Delaunay kernel and return to <m:math><m:mfenced separators=""><m:mn>1</m:mn></m:mfenced></m:math>.</li></ul></li><li class="listind">Domain definition.
 <ul class="listind"><li class="listind">Removal of the elements exterior to the domain,</li><li class="listind">classification of the elements with respect to the connected components.</li></ul></li><li class="listind">Optimization.
 <ul class="listind"><li class="listind">edge swapping,</li><li class="listind">point relocation, <m:math><m:mo>&#8230;</m:mo></m:math></li></ul></li><li class="listind">File output.</li></ul>
</div><div class="paramtext">When using the advancing front approach described earlier, one has to replace the step denoted by <m:math><m:mfenced separators=""><m:mn>1</m:mn></m:mfenced></m:math>&#160;of the general scheme.  The analysis of the edges of the current mesh is then replaced by the front analysis.</div><div class="paramtext">Due to the fact that the particular mesh generated by <a class="rout" href="../D06/d06aaf.xml">D06AAF</a>, <a class="rout" href="../D06/d06abf.xml">D06ABF</a> and <a class="rout" href="../D06/d06acf.xml">D06ACF</a> may be sensitive to the platform being used; there may be differences between generated nodal co-ordinates and connectivities.  However all meshes generated should be expected to satisfy the &#8216;empty sphere criterion&#8217;.</div><h3 class="standard"><a class="sec" name="available7" id="available7"/>3.3&#160;&#160;Mesh Management and Utility Routines</h3>
<div class="paramtext">In addition to meshing routines, management and utility routines are also available in this chapter.</div><div class="paramtext">A mesh smoother routine <a class="rout" href="../D06/d06caf.xml">D06CAF</a>, is provided to improve mesh triangle quality.</div><div class="paramtext">Since the Finite Element framework includes a requirement to solve matrices based on meshes, the routine <a class="rout" href="../D06/d06cbf.xml">D06CBF</a> generates the sparsity pattern of such a matrix.  Due to the fact that the numbering of unknowns in a linear system could be crucial in term of storage and performance issues, a vertex renumbering routine <a class="rout" href="../D06/d06ccf.xml">D06CCF</a> is provided.  This routine also returns the new sparsity pattern based on the renumbered mesh.</div><div class="paramtext">To mesh a complicated geometry, it is sometimes better to partition the whole geometry into a set of geometrically simpler ones.  Some geometry could also be deducted from another geometry by an affine transformation and <a class="rout" href="../D06/d06daf.xml">D06DAF</a> could be used for that purpose.  <a class="rout" href="../D06/d06dbf.xml">D06DBF</a> is provided to join all the simple geometry meshes.  This routine can also handle the joining of two adjacent as well as overlapping meshes, which may be useful in a domain decomposition framework.</div><h2 class="standard"><a class="sec" name="tutorial" id="tutorial"/>4&#160;&#160;Example of Use in the Solution of a Partial Differential Equation</h2>
<div class="paramtext">The use of <a class="chap" href="../D06/d06conts.xml">Chapter D06</a> mesh generation routines, together with sparse solver routines from <a class="chap" href="../F11/f11conts.xml">Chapter F11</a> to solve partial differential equations with the finite element method is described in a NAG Technical Report (see <a class="ref" href="#ref714">Bouhamou (2001)</a>).  This report, and accompanying source code, is available from the NAG web site, or by contacting one of the NAG Response Centres.</div><h2 class="standard"><a class="sec" name="index" id="index"/>5&#160;&#160;Index</h2>
<div>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Boundary&#160;mesh&#160;generation,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;boundary mesh generation</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06baf.xml">D06BAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Interior&#160;mesh&#160;generation,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh generation using advancing front method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06acf.xml">D06ACF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh generation using a simple incremental method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06aaf.xml">D06AAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh generation using Delaunay-Voronoi method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06abf.xml">D06ABF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Mesh&#160;Management&#160;and&#160;Utility&#160;routine,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh smoother using a barycentering technique</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06caf.xml">D06CAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh transformer by an affine transformation</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06daf.xml">D06DAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;<span><span><span>2</span><i>D</i></span></span>&#160;mesh vertex renumbering</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06ccf.xml">D06CCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;finite&#160;Element&#160;matrix&#160;sparsity&#160;pattern&#160;generation</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06cbf.xml">D06CBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;joins&#160;together&#160;two&#160;given&#160;adjacent&#160;(possibly&#160;overlapping)&#160;meshes</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../D06/d06dbf.xml">D06DBF</a></nobr></td></tr></table></div><h2 class="standard"><a class="sec" name="withdrawn" id="withdrawn"/>6&#160;&#160;Routines Withdrawn or Scheduled for Withdrawal</h2>
<div class="paramtext">None.</div><h2 class="standard"><a class="sec" name="references" id="references"/>7&#160;&#160;References</h2><div class="paramtext"><a name="ref714" id="ref714"/>Bouhamou N (2001)  The use of NAG mesh generation and sparse solver routines for solving partial differential equations <i>NAG Technical Report TR 1/01</i> NAG Ltd, Oxford </div>
<div class="paramtext"><a name="ref709" id="ref709"/>Cheung Y K, Lo S H and Leung A Y T (1996)  <i>Finite Element Implementation</i> Blackwell Science </div>
<div class="paramtext"><a name="ref698" id="ref698"/>George P L and Borouchaki H (1998)  <i>Delaunay Triangulation and Meshing: Application to Finite Elements</i> Editions HERMES, Paris </div>
<div class="paramtext"><a name="ref710" id="ref710"/>Quarteroni A and Valli A (1997)  Numerical Approximation of Partial Differential Equations <i>Comp. Maths.</i> <b>23</b> </div><hr/><div><a class="chap" href="d06conts.xml">D06 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/D06/d06intro.pdf">D06 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2009</a></div></body></html>
