-
Notifications
You must be signed in to change notification settings - Fork 5
/
meshdemo2d.m
64 lines (50 loc) · 2.11 KB
/
meshdemo2d.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
%MESHDEMO2d Distmesh2d examples.
% Copyright (C) 2004-2012 Per-Olof Persson. See COPYRIGHT.TXT for details.
rand('state',1); % Always the same results
set(gcf,'rend','z');
fstats=@(p,t) fprintf('%d nodes, %d elements, min quality %.2f\n', ...
size(p,1),size(t,1),min(simpqual(p,t)));
fprintf('Uniform Mesh on Unit Circle\n');
echo on
fd=@(p) sqrt(sum(p.^2,2))-1;
[p,t]=distmesh2d(fd,@huniform,0.2,[-1,-1;1,1],[]);
echo off
fstats(p,t);
fprintf('(press any key)\n\n'); pause
fprintf('Rectangle with circular hole, refined at circle boundary\n');
fd=@(p) ddiff(drectangle(p,-1,1,-1,1),dcircle(p,0,0,0.5));
fh=@(p) 0.05+0.3*dcircle(p,0,0,0.5);
[p,t]=distmesh2d(fd,fh,0.05,[-1,-1;1,1],[-1,-1;-1,1;1,-1;1,1]);
fstats(p,t);
fprintf('(press any key)\n\n'); pause
fprintf('Polygon\n');
pv=[-0.4 -0.5;0.4 -0.2;0.4 -0.7;1.5 -0.4;0.9 0.1;
1.6 0.8;0.5 0.5;0.2 1;0.1 0.4;-0.7 0.7;-0.4 -0.5];
[p,t]=distmesh2d(@dpoly,@huniform,0.1,[-1,-1; 2,1],pv,pv);
fstats(p,t);
fprintf('(press any key)\n\n'); pause
fprintf('Ellipse\n');
fd=@(p) p(:,1).^2/2^2+p(:,2).^2/1^2-1;
[p,t]=distmesh2d(fd,@huniform,0.2,[-2,-1;2,1],[]);
fstats(p,t);
fprintf('(press any key)\n\n'); pause
fprintf('Square, with size function point and line sources\n');
fd=@(p) drectangle(p,0,1,0,1);
fh=@(p) min(min(0.01+0.3*abs(dcircle(p,0,0,0)), ...
0.025+0.3*abs(dpoly(p,[0.3,0.7; 0.7,0.5]))),0.15);
[p,t]=distmesh2d(fd,fh,0.01,[0,0;1,1],[0,0;1,0;0,1;1,1]);
fstats(p,t);
fprintf('(press any key)\n\n'); pause
fprintf('NACA0012 airfoil\n');
hlead=0.01; htrail=0.04; hmax=2; circx=2; circr=4;
a=.12/.2*[0.2969,-0.1260,-0.3516,0.2843,-0.1036];
fd=@(p) ddiff(dcircle(p,circx,0,circr),(abs(p(:,2))-polyval([a(5:-1:2),0],p(:,1))).^2-a(1)^2*p(:,1));
fh=@(p) min(min(hlead+0.3*dcircle(p,0,0,0),htrail+0.3*dcircle(p,1,0,0)),hmax);
fixx=1-htrail*cumsum(1.3.^(0:4)');
fixy=a(1)*sqrt(fixx)+polyval([a(5:-1:2),0],fixx);
fix=[[circx+[-1,1,0,0]*circr; 0,0,circr*[-1,1]]'; 0,0; 1,0; fixx,fixy; fixx,-fixy];
box=[circx-circr,-circr; circx+circr,circr];
h0=min([hlead,htrail,hmax]);
[p,t]=distmesh2d(fd,fh,h0,box,fix);
fstats(p,t);
fprintf('(press any key)\n\n'); pause