MESH2D
Automatic 2D Mesh Generation
MESH2D
is a MATLAB program which generates
and unstructured meshes in 2D,
by Darren Engwirda.
The code is relatively simple, flexible and powerful. The user is able to define
a variety of geometric shapes, and desired mesh densities.
MESH2D is most useful because it allows a user to specify
a shape or region, which the program will then fill with a triangular mesh.
The density of the triangular mesh can be uniform, or the user can request
that smaller triangles be used near certain features of the region. The
program relies heavily on the features of the Delaunay triangulation,
which chooses, among all possible triangulations of a set of points, that
triangulation which best avoids small angles.
Interested users should probably refer to the copy of MESH2D
that is made available through the MATLAB Central File Exchange.
This copy is essentially my personal working copy, to which I may
have added comments, small coding changes, and extra tests and examples.
Usage:
[ p, t ] = mesh2d ( vertices, edge, hdata, options );
where:
-
vertices, required input, a V by 2 list of (X,Y) coordinates of
vertices of the boundary. If vertices is the only input argument,
then it must be the case that the vertices are listed consecutively.
Otherwise, assuming edge is supplied, the vertices can be given
in any order.
-
edge, optional input, a V by 2 list of pairs of indices in the
vertices array that constitute the edges of the polygonal boundary.
If vertices is actually already in order, then edge, if specified,
would contain the values [1,2; 2,3; 3,4; ... ; V,1].
-
hdata, optional input, a structure containing element size information
(see below).
-
options, optional input that allows the user to modify the default
behavior of the solver (see below).
-
p, (output), an N by 2 list of node coordinates. The number of
nodes generated, N, is determined in part by the size of the edges
along the boundary, and by other user input such as the maximum element
size, and the user size function, if supplied.
-
t, (output), an M by 3 list of node indices, forming counterclockwise
triangles. The number of triangles created depends on the number of nodes
created.
hdata, the element size information. This structure, if supplied,
can include the following information:
-
hdata.hmax, the maximum allowable global element size.
-
hdata.edgeh, an array of element sizes on specified geometry
edges, where e1 is an index into the edge array. The
edgeh component would have the form [e1,h1; e2,h2; ...], where
the user has specified a certain number of sizes.
-
hdata.fun, the name of a function preceded by an AT sign,
which is the user-defined size function. fun must have the form
h = fun ( x, y, args{} )
where x and y are vectors of point coordinates, and args
is an optional addition set of input set in hdata.args.
The function returns the user-desired elementsize at the given points.
-
hdata.args = {arg1, arg2, ...} contains additional arguments,
if any, for hdata.fun.
options allows the user to modify the default behavior of the solver.
This structure, if supplied, can include the following information:
-
options.mlim is the convergence tolerance. The maximum relative
change in edge length per iteration must be less than this value, which
defaults to 0.02.
-
options.maxit, the maximum allowable number of iterations,
which defaults to 20.
-
options.dhmax, the maximum allowable (relative) gradient in the size
function, which defaults to 0.3.
-
options.output, a "logical" variable which displays the mesh
and the mesh statistics upon completion, and defaults to "TRUE", that is, 1.
Licensing:
Copyright (c) 2009, Darren Engwirda
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the distribution
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Related Data and Programs:
DISTMESH,
a MATLAB library which
carries out triangular or tetrahedral mesh generation,
by Per-Olof Persson and Gilbert Strang.
MESH2D_WRITE,
a MATLAB program which
demonstrates how node and element data from MESH2D can be written to files.
TEST_TRIANGULATION,
a MATLAB library which
defines some test regions for triangulation.
TRIANGLE,
a C program which
computes a triangulation of a geometric region,
by Jonathan Shewchuk.
TRIANGULATION,
a MATLAB library which
performs various operations on order 3 ("linear") or order 6 ("quadratic") triangulations.
Author:
Darren Engwirda
Source Code:
-
checkgeometry.m
checks a geometry input for MESH2D.
-
circumcircle.m
computes the center and radius of the circumcircle of a triangle.
-
connectivity.m
assembles connectivity data for a triangular mesh, including
the unique mesh edges, the triangle neighbors, and the boundary edges.
-
dist2poly.m
finds the distance between a point and a polygon.
-
findedge.m
locates the edges that contain a sequence of points.
-
fixmesh.m
checks a triangular mesh for consistency.
-
inpoly.m
determines whether a point is inside a polygon.
-
mesh2d.m
generates a triangular mesh for a polygon, which
can include cavities.
-
meshfaces.m
generates a triangular mesh for a polygonal region which
can include cavities.
-
meshpoly.m
used by MESH2D or MESHFACES to mesh a region.
-
mydelaunayn.m
computes the Delaunay triangulation of a set of points.
-
mytsearch.m
finds a triangle which encloses a set of points in the plane.
-
quadtree.m
decomposes a polygonal region using a quadtree.
-
quality.m
determines the "quality" of a triangle.
-
refine.m
refines a triangular mesh.
-
smoothmesh.m
uses Laplacian smoothing on a triangular mesh.
-
tinterp.m
carries out linear interpolation at points within a triangle, given
function values at the vertices.
-
triarea.m
computes the area of one or more triangles, assuming their
vertices are given in counterclockwise order.
-
tsearch_mex.c
a C file, which must be compiled within MATLAB (once) using the command
"mex tsearch_mex", which carries out a search of the triangulation.
Examples and Tests:
ELL_DEMO demonstrates features of MESH2D for the L-shaped region.
-
ell_demo.m
the source code.
-
ell_mesh1.png
the mesh created with the simplest input.
-
ell_mesh2.png
the mesh created when we specify two small segments on the boundary.
-
ell_mesh3.png
the mesh created when we specify a maximum element size.
-
ell_mesh4.png
the mesh created when we specify a size function that requests
small elements near the reentrant corner.
-
ell_mesh5.png
the mesh created we call refine() on the first mesh;
-
ell_mesh6.png
the mesh created when we call smoothmesh() on the second mesh.
ICAM_DEMO demonstrates features of MESH2D for the first floor
of the Wright House.
OBSTACLE_DEMO demonstrates features of MESH2D for a channel with
a square obstacle.
You can go up one level to
the MATLAB source codes.
Last revised on 25 April 2012.