New results on mesh refinement Benoît Hudson, CMU Joint work with

advertisement
New results on
mesh refinement
Benoît Hudson, CMU
Joint work with
Gary Miller and Todd Phillips
Papers available at
http://www.cs.cmu.edu/~bhudson
CAD model
Will it work?
Equations
Navier-Stokes:
Heat transfer:
Run simulations!
Mesh
Partial Diff. Eqs.
Weak form
CAD model
Solve
Visualize
Input
Points
Segments
Polygons
Input
Points
Segments
Polygons
‘P’ courtesy of Shewchuk
Output
‘P’ courtesy of Shewchuk
Simpler Input
Two possible meshes
Which is better?
Example:
f(x,y) = 1-x2
This is a bad mesh
f(x,y) = 1-x2
0
At mesh vertices:
0
• read the value
At other points p:
• Find t that contains p 0
• Weighted average of
points of t
0
1
1
1
0
0
0
0
This is a better mesh
Still bad at boundary
0
f(x,y) = 1-x2
At mesh vertices:
0
• read the value
At other points p:
• Find t that contains p 0
• Weighted average of
points of t
0
1
1
1
0
0
0
0
Good aspect ratio  good
interpolation
R
Good aspect ratio if:
r
Equivalent: all angles  a
Aspect ratio
Bad aspect ratio if:
R
r
Equivalent: some angle < a
This is a better mesh
Still bad at boundary
0
This mesh is Delaunay:
best possible
0
for those points
0
0
1
1
1
0
0
0
0
This is a good mesh
Add Steiner points
This is a good mesh
Formal problem
• Input:
– Piecewise Linear Complex (PLC)
• points, segments, polygons, …
– quality bound: angle  a
• Output:
– quality triangulation (angle  a)
– all features appear (perhaps subdivided)
– O(mopt) vertices
Good aspect ratio
 bounded degree
Big features
Big triangles
Grading
Good aspect ratio
 good grading
Small feature
Small triangles
Grade linearly
away from small
feature
Outline
• Two older methods
– quadtree refinement
– Delaunay refinement
• Our algorithm: SVR as a hybrid
• Parallel SVR
Dynamic meshing: too much for this
talk. See me afterwards.
Older Solutions
• 1950-now: construct mesh by hand!
– Takes days to months.
• Automatic methods: ca. 1980-now
– no quality, size, or time bounds
• BEG90: quality and size in O(n lg n + m)
(buggy proof, fixed in BET93)
• Rup92: smaller in practice, no time bound.
Simpler input
Just points for now
Quadtree refinement
[BEG90, MV92, BET93]

Quadtree rules
Crowded
• two points
in cell, or
• one point in
cell, one in
neighbour
Unbalanced
• Neighbor is small
Quadtree
Quadtree
Quadtree
Quadtree in a word
• Quality mesh (17)
• O(mopt) output size
• O(n lg n + m) runtime
(think: binary search tree)
• General approach: top-down
Delaunay Refinement
[Rup92, She97]
Add a bounding box
Triangulate (use Delaunay)
Identify skinny triangle
Find circumcenter
Insert, retriangulate
Find more skinny triangles
Find more skinny triangles
Find more skinny triangles
Find more skinny triangles
Find more skinny triangles
Find more skinny triangles
Ruppert’s algorithm in a word
• Quality mesh (any a  20.7)
• O(mopt) output size
• O(n2 + m) runtime worst case
– works fast in practice
• General approach: bottom-up
In practice, 35
often works.
Compare and contrast
35 triangles, 30
69 triangles, 17
Ruppert’s algorithm in a word
• Quality mesh
• O(mopt) output size
– smaller than quadtree in practice
• O(n2 + m) runtime worst case
– works fast in practice
• General approach: bottom-up
Restrictions
• Ruppert’s algorithm handles segments only
at 60 angles to each other.
• 3d extensions [She97, MPW02]:
segment segment 60
segment face ~70
face
face
90
Smaller angles
may cause
infinite loops
Meshing well, quickly
Hudson, Miller, Phillips 2006
Sparse Voronoi Refinement
15th International Meshing Roundtable
The Goal
Ruppert’s small meshes
Quadtree’s fast runtime
In dimension 3+!
The intuition
Quadtree’s fast time: slowly zero in on small
features, keep mesh good quality always. Large
size: warp to input too late.
SVR: always good quality, resolve when necessary
Ruppert’s small size: immediately resolve all
features. Ruppert’s bad timing: allow horrid
mesh quality.
SVR
Add a bounding box
Triangulate just the box!
Triangles keep
track of points
Apply splitting rules
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
Apply splitting rules
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
Split
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
Split(t)
1. Draw circle
2. Shrink by k
3. Choose a point
4. Insert it, retriangulate
Apply splitting rules
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
Split(t)
1. Draw circle
2. Shrink by k
3. Choose a point
4. Insert it, retriangulate
Apply splitting rules
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
Apply splitting rules
1. If a triangle is skinny,
split it.
2. If a triangle contains
input, split it.
General flavour
Like quadtree, refine
top-down
Like Ruppert, use input
points and circumcenters
L: largest distance
s: smallest distance
L/s  spread
Normally:
 poly(n)
EarlyL/s
evidence:
lgindistinguishable
L/s  lg n
from Ruppert’s
SVR in a word
• Quality mesh
• O(mopt) output size
• O(n lg L/s + m) runtime worst case
• General approach: hybrid
Overall Comparison
SVR [HMP06]
Quadtree [BEG90]
Ruppert [Rup92]
hybrid
top-down
bottom-up
Octtree [MV92]
Shewchuk [She97]
top-down
bottom-up
any d O(n lg L/s + m)
2d
O(n lg “n” + m)
2d
O(mn)
3d
3d
O(mn)
W(n2), O(m2n)
n: number of input points, segments, …
m: number of output points
[HPU05]:
L/s: spread
of the input
[Miller04]:
lg L/sL/s+ m)poly(n)
lg “n”:O(n
assumes
O((n lg G + m) lg m)
on point sets
O(n lg “n” + m)
Overall
Comparison
on point sets
SVR [HMP06]
Quadtree [BEG90]
Ruppert [Rup92]
hybrid
top-down
bottom-up
Octtree [MV92]
Shewchuk [She97]
top-down
bottom-up
any d O(n lg L/s + m)
2d
O(n lg “n” + m)
2d
O(mn)
3d
3d
O(mn)
W(n2), O(m2n)
n: number of input points, segments, …
W(n2) even
m: number of output points
L/s: spread of the input
on point sets
lg “n”: assumes L/s  poly(n)
In practice
n/2 points
along line
n/2 points
around circle
Delaunay has
n2/4 tets
In practice: n=2000
Algorithm Max #tets Output #tets Max degree
SVR
81K
81K
39
Shewchuk 1.014M
87K
~1,000
n/2 points
around circle
n/2 points
along line
In practice: n=20000
SVR: outputs 774K tets in 8 minutes
Shewchuk: thrashes, ^c after 4 hours
n/2 points
around circle
n/2 points
along line
(Calculate: Pyramid
needs 108 tets, each
tet is 8 pointers 
~ 3.2 GB)
Parallel SVR
Hudson, Miller, Phillips 2007
Sparse Parallel Delaunay Refinement
To appear, SPAA.
Why parallel?
• Low-end desktops have dual-core CPUs.
• Understanding the dependencies:
– Helps with constant factors in sequential case
– Helps with out-of-core, distributed,
compression, dynamic case, …
Parallel Comparison
Depth
SVR [HMP07]
Quadtree [BET93]
Ruppert [STU02]
any d O(lg (L/s) lg(m))
2d
O(lg “n”)
2d, 3d O(polylog(L/s))
Work
O(n lg L/s + m)
O(n lg “n” + m)
O( ??? )
n: number of input points, segments, …
m: number of output points
L/s: spread of the input
lg “n”: assumes L/s  poly(n)
A sample work set
What can we
do in parallel?
Conflict
Block
Moot
Independent events
The algorithm: parallel
• Build a bounding box
• While workset not empty
–
–
–
–
Compute conflicts, blocking, mooting
Defer blocked moves to later
Colour the conflict graph in colours {1..d}
for 1..d
• perform all the moves in parallel
• remove mooted moves
• collect new moves for next round
Why does it work?
• No move is blocked more than O(1) rounds
– either it happens
– or it gets mooted
• Proof:
–
–
–
–
If a break move blocks, there is a clean move nearby.
Clean moves don’t block.
By packing, only O(1) clean moves can be nearby.
QED.
Summary
• No move is blocked long
• Break moves are discovered quickly
• Thus the time bound of O(lg L/s) rounds
– And O(lg m) per round overhead
• In practice: we can use any number of
shared-memory processors
Conclusions: SVR
• O(n lg (L/s) + m) time
–
–
–
–
Matches best 2d bound
First sub-quadratic 3d time bound
First 4+d mesh refinement algorithm
Practical
• Parallelizes!
Open problems
(1) Constrained Delaunay
Refinement
• SVR meshes tiny gap.
• Gap is exterior: how
can we ignore it?
• Traditional method:
Constrained Delaunay
Triangulation.
• Hope: CDT/SVR
(2) Slivers
• Points almost coplanar
• Good radius/edge ratio
• Bad solid angles
 numerically bad
• Best proofs
guarantee 0.00…1
• In practice get ~10
(3) Small(ish) angles
• SVR needs  90
angles between faces
• 80? 60? 30?
(4) Small angles
• What if angle is 1?
– What’s a legal output?
• MPS07: guarantee no
large angles in 2d
– Extends to 3d?
(5) Curves
• CAD models use
curves, curved
surfaces
• No good theoretical
bounds on refining
curved surfaces
(6) Laundry list
• Dynamic meshing
– (my thesis topic)
•
•
•
•
Moving meshes
Streaming
Distributed-memory
CAD cleaning
• Handling large spread
• Non-Euclidian metrics
• Better constant bounds
Bibliography
[BEG90]: Bern, Eppstein, Gilbert “Provably good mesh generation”, 1994
[MV92]: Mitchell, Vavasis “Quality mesh generation …”, 2000
[Rup92]: Ruppert “A Delaunay refinement algorithm for …”, 1995
[BET93]: Bern, Eppstein, Teng “Parallel construction …”, 1999
[She97]: Shewchuk “Delaunay refinement mesh generation”, 1997
[MPW02]: Miller, Pav, Walkington “Fully incremental …”, 2002
[STU02]: Spielman, Teng, Ungor “Parallel Delaunay …”, 2002
[Mil04]: Miller, “A time-efficient Delaunay Refinement …”, 2004
[HPU05]: Har-Peled, Ungor, “A time-optimal Delaunay …”, 2005
[HMP06]: Hudson, Miller, Phillips, “Sparse Voronoi Refinement”, 2006
[HMP07]: ~, “Sparse Parallel Delaunay Refinement”, 2007
[MPS07]: Miller, Phillips, Sheehy, “Size competitive …”, submitted
[HA07]: Hudson, Acar, “Dynamic quad-tree mesh refinement”, submitted
Download