📄 meshdemo.asv
字号:
7.4195041 0.5826584
7.4810256 0.4262426
7.6622000 0.4606821
7.7339418 0.4903887
7.6927729 0.5946095
7.6199031 0.5913803
7.5788199 0.6956243
7.4649955 0.7967085
7.4604098 0.9025555
7.6668095 1.1767640
7.7709460 1.2875089
7.7298813 1.3917132
7.6707366 1.4951115
7.6356734 1.4670289
7.6246141 1.3074531
7.5532118 1.2777792
7.5280861 1.4357493
7.5345391 1.7011603
7.7131429 1.7621690
7.8603274 1.7158544
7.9228745 1.9308907
7.7348899 2.0813402
7.3713821 2.1182087
7.2698318 1.9547751
7.1885795 2.1633926
7.1152657 2.1868122
7.0441691 2.1573400
6.9336956 2.2058041
6.9676141 2.2602054
7.0648074 2.5292990
7.0897106 2.7954185
7.2917362 3.1221593
7.3230152 3.2295634
7.2074219 3.4101256
7.0987913 3.4319941
7.0562590 3.5892427
6.8349672 3.7390777
6.5426013 3.8863685
6.3538119 4.1440578
6.6493349 4.7917061
6.5385166 4.8932842
6.7052993 5.1650313
6.7009764 5.2708721
5.7441174 5.2345817
5.5686945 5.1755508
4.7886070 5.1509481
4.4636817 5.3536511
4.2075761 5.6646354
3.6075780 7.1858876
3.3873644 7.6576363
3.2804384 7.7613007
3.1762847 7.7327191
3.0381962 7.6506117
2.8286881 7.6467634
2.8598071 7.8590921
2.6845531 7.9089847
2.5468001 7.8008409
2.4437671 7.6933492
2.3390419 7.6917801
2.1983122 7.7691861
2.1616242 7.9010276
2.0918985 7.9000964
2.0235167 7.7933405
1.9540682 7.7660064
1.5705080 7.7353016
1.5002116 7.7875578
1.2547448 7.9442315
0.7309650 8.1526824
0.4522013 8.2575018
0.1738657 8.3098811
-0.0694533 8.5215153
-0.1737495 8.4157382
-0.2084645 8.4422444
-0.3476150 8.3630957
-0.4518238 8.3898231
-0.5558115 8.4695476
-0.5215963 8.3106439
-0.5221188 8.1518584
-0.4879606 7.9400337
-0.2092654 7.8335660
-0.2097517 7.4630660
-0.5257651 7.0403597
-0.5604465 7.1463352
-0.7716285 6.9354925
-0.9473082 6.8835005
-0.9833619 6.7249256
-1.1593398 6.6731632
-1.2287946 6.7795396
-1.1574372 6.9378046
-0.6994015 7.4115277
-0.5933112 7.7286747
-0.6973173 7.8878837
-0.9759166 7.9422776
-1.1175557 7.6256239
-1.1194069 7.3609825
-1.2951661 7.2564438
-1.5483098 6.4117610
-1.9366363 6.3100700
-1.8637764 6.5209552
-1.7582839 6.5197737
-1.7202965 6.7840348
-1.5427314 6.9939696
-1.5417155 7.0998256
-1.5762336 7.1530937
-1.9985176 6.9989869
-2.3506579 6.8978706
-2.5645144 6.6893724
-2.5351899 6.3183276
-2.7562921 5.7395724
-3.7980607 5.0191439
-4.3373509 4.7676755
-4.9834948 4.5740477
-5.9256532 4.1282314
-7.0382285 3.1643631
-7.4517045 2.7580044
-8.2033903 2.1245258
-8.7235361 1.8639192
];
p2=[
-6.0222359 1.4026510
-5.9152018 1.5578835
-5.8726343 1.5299217
-5.7920161 1.5536639
-5.8345898 1.5816055
-5.8318773 1.6609928
-5.6635570 1.7083083
-5.5966615 1.7590827
-5.6808641 1.8413432
-5.7929717 1.7391469
-6.0818599 1.5637339
-6.0865686 1.4314222
];
p3=[
-5.7324455 1.9225485
-5.5683675 1.9594866
-5.5335991 1.9159672
-5.5318777 1.9688923
-5.4498160 2.0457126
-5.4914569 2.1000333
-5.7297704 2.0019357
-5.7677013 1.9502324
];
p4=[
-5.2706487 2.2254789
-5.2257103 2.2770640
-5.2196558 2.3563407
-5.1911650 2.4614151
-5.2924029 2.4539566
-5.3166868 2.3699543
-5.3193455 2.2852741
-5.3444930 2.1748120
];
p5=[
-2.6285090 4.8904087
-2.5231726 4.8093509
-2.4524965 4.7818143
-2.1664250 4.9101487
-1.8814086 4.9860466
-2.0588911 4.9881727
-2.0937130 5.0415487
-1.9150532 5.1452403
-1.7011793 5.2487523
-1.5239785 5.2470098
-1.1676824 5.5087407
-1.2022868 5.6148538
-0.9185046 5.7718016
-0.8828910 5.8245348
-0.9532116 5.8778612
-1.3075201 5.7215257
-1.5563954 5.5649116
-1.6276655 5.5126727
-1.7340945 5.4872998
-1.8405570 5.4619959
-2.0900008 5.3326514
-2.3756722 5.1777288
-2.5904890 5.0486276
];
p6=[
-0.1745905 7.6482740
-0.1048759 7.4629629
-0.0174793 7.4629295
-0.0349355 7.5687895
0.0349007 7.7275752
0.2267794 7.7806613
0.3839078 7.7280333
0.5583180 7.7550129
0.6632222 7.7024853
0.8201638 7.7296796
0.7325480 7.8086476
0.6273773 7.9405222
0.4880418 7.9135694
0.1393711 7.9922753
0.0348428 7.9922181
-0.1743299 7.8864526
];
p7=[
4.5964504 4.4039327
4.8814214 4.4120893
4.9866866 4.4681990
5.1274771 4.5254771
5.1614199 4.5795088
5.0886198 4.6302255
4.9818982 4.6269721
4.8364965 4.7285905
4.5535316 4.6675729
4.3785074 4.5569131
4.3813116 4.4510625
];
n1 = size(p1,1);
n2 = size(p2,1);
n3 = size(p3,1);
n4 = size(p4,1);
n5 = size(p5,1);
n6 = size(p6,1);
n7 = size(p7,1);
c1 = [(1:n1-1)', (2:n1)'; n1, 1];
c2 = [(1:n2-1)', (2:n2)'; n2, 1];
c3 = [(1:n3-1)', (2:n3)'; n3, 1];
c4 = [(1:n4-1)', (2:n4)'; n4, 1];
c5 = [(1:n5-1)', (2:n5)'; n5, 1];
c6 = [(1:n6-1)', (2:n6)'; n6, 1];
c7 = [(1:n7-1)', (2:n7)'; n7, 1];
node = [p1; p2; p3; p4; p5; p6; p7];
cnect = [
c1
c2+n1
c3+n2+n1
c4+n3+n2+n1
c5+n4+n3+n2+n1
c6+n5+n4+n3+n2+n1
c7+n6+n5+n4+n3+n2+n1
];
% Make mesh
[p,t] = mesh2d(node,cnect);
answer = input(['The following shows the influence of gradient limiting on the size function. \n' ...
'The value dhmax is reduced to 0.1 \n' ...
'\n' ...
'Continue [y/n] \n'],'s');
if ~strcmp(answer,'y')
return
end
close all
% Solver options
options.dhmax = 0.1;
% Make mesh
[p,t] = mesh2d(node,cnect,[],options);
%save('D:\1.mat','p','t');
% User defined size functions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
answer = input(['The following example shows how the element size can be controlled using the \n' ...
'various settings in HDATA. \n' ...
'\n' ...
'Continue [y/n] \n'],'s');
if ~strcmp(answer,'y')
return
end
close all
hdata = [];
options.output = false;
node = [0 0; 1 0; 1 1; 0 1]; % Simple square example
[p,t] = mesh2d(node,[],[],options); % Auto size fun only
figure
subplot(2,2,1)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off;
title('Automatic size fun only')
hdata.hmax = 0.1; % Global size of 0.1
[p,t] = mesh2d(node,[],hdata,options);
subplot(2,2,3)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off;
title('Global size fun with h0=0.1')
hdata.hmax = 0.1; % Global size of 0.1
hdata.edgeh = [1,0.05]; % Boundary layer on bottom edge
[p,t] = mesh2d(node,[],hdata,options);
subplot(2,2,2)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off;
title('Additional boundary layer function on bottom edge')
hdata = [];
hdata.fun = @hfun1;
[p,t] = mesh2d(node,[],hdata,options);
subplot(2,2,4)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off; hold on;
title('User defined funcion centred at [0.25,0.75]')
% Refinement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
answer = input(['The following example shows how an existing mesh can be refined using the \n' ...
'REFINE function. This avoids doing expensive retriangulation. \n' ...
'\n' ...
'Continue [y/n] \n'],'s');
if ~strcmp(answer,'y')
return
end
close all
hdata = [];
options.output = false;
hdata.hmax = 0.1;
node = [0 0; 1 0; 1 1; 0 1]; % Simple square example
[p,t] = mesh2d(node,[],hdata,options); % Auto size fun only
figure
subplot(2,2,1)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off; hold on;
title('Uniform mesh from MESH2D')
node = [0.3,0.3; 0.7,0.3; 0.7,0.7; 0.3,0.7];
in = inpoly(p,node);
ti = sum(in(t),2)>0;
[p,t] = refine(p,t,ti);
subplot(2,2,2)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off; hold on;
title('Mesh refined in centre region using REFINE')
[p,t] = smoothmesh(p,t);
subplot(2,2,3)
patch('faces',t,'vertices',p,'facecolor','none','edgecolor','b');
axis equal off; hold on;
title('Smoothed mesh using SMOOTHMESH')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function p = move(p,xm,ym)
% Move a node set p by [xm,ym]
n = size(p,1);
p = p + [xm*ones(n,1), ym*ones(n,1)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function p = rotate(p,A)
% Rotate a node set p by A degrees.
A = A*pi/180;
T = [ cos(A), sin(A)
-sin(A), cos(A)];
p = (T*p')';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function h = hfun1(x,y)
% User defined size function for square
h = 0.01 + 0.1*sqrt( (x-0.5).^2+(y-0.5).^2 );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function h = hfun2(x,y)
% User defined size function for cylinder
h1 = inf*ones(size(x));
in = (x>=0)&(x<=25)&(y>=-3)&(y<=3);
h1(in) = 0.2;
r = sqrt(x.^2+y.^2);
h2 = inf*h1;
h2(r<=3) = 0.02 + 0.05*r(r<=3);
h = min(h1,h2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -