编写程序,对下图几何区域按有限元法进行网格划分,确定单元中结点数目及位置,并对单元和结点分别进行编号。
二、程序思路
基于MATLAB软件平台,首先画出几何图形,然后对几何区域按照有限元法思想进行三角形网格剖分,最后按顺序依次输出单元及结点编号和坐标。
三、编写源程序:
clear;
%第一步:画出几何区域%为按逆时针顺序绘制几何区域x_up=[3.5,0];y_up=[2,2]; x_l=[0,0];y_l=[2,0]; x_low=[0,2.5];y_low=[0,0]; n=9; c=linspace(pi,pi/2,n);r=1; x_c=r*cos(c)+3.5;
y_c=r*sin(c); x_r=[3.5,3.5];y_r=[1,2]; x=[x_low,x_c ,x_r,x_up,x_l]; y=[y_low,y_c ,y_r,y_up,y_l]; plot(x,y, 'm'); xlabel('x轴');ylabel('y轴');title('几何区域');hold on
l=k*(pi/2)*r;
x_up(3)=3.5-l;
%上固体边界数组
%入流左边界数组
%下固体边界数组%圆弧等分变量n%圆弧半径变量r
%三角函数表示圆柱左上部分 %出流右边界数组 %整体边界X坐标数组
%整体边界Y坐标数组 %绘制几何区域
y_up(3)=2;
cut_point=[x_up(3), y_up(3)]; x_up(3)=x_up(2);y_up(3)=y_up(2);
x_up(2)= cut_point(1); y_up(2)= cut_point(2); %将上边界点坐标按顺序重排x_cutline=[ x_up(2),x_low(2)];
y_cutline=[ y_up(2),y_low(2)]; %分割线数组plot(x_cutline, y_cutline); %绘制分割线n1=6; %上边界左半部分n1等分变量x_upcp1=linspace(x_up(2),x_up(3),n1+1); %上边界左半部分n1等分y_upcp1=linspace(y_up(2),y_up(3),n1+1);
x_lowcp1=linspace(x_low(2),x_low(1),n1+1); %下边界n1等分y_lowcp1=linspace(y_low(2),y_low(1),n1+1);
x_upcp2=linspace(x_up(1),x_up(2),n+1); %上边界右半部分n等分y_upcp2=linspace(y_up(1),y_up(2),n+1);x_upper=[ x_upcp2,x_upcp1]; %上固体边界坐标数组y_upper=[ y_upcp2,y_upcp1];
c1=linspace(pi*3/2,pi,n+1); x_c1=cos(c1)+3.5; y_c1=abs(sin(c1)) ;
x_lower=[x_c1,x_lowcp1]; y_lower=[y_c1,y_lowcp1];for i=1:n1+n+2 %画竖线plot([x_upper(i) x_lower(i)],[ y_upper(i) y_lower(i)],'m');end
m=7;
for i=n+n1+2:-1:1
plot([x_upper(i) x_lower(i)],[ y_upper(i) y_lower(i)],'m');%绘制竖线 x1(i,:)=linspace(x_upper(i),x_lower(i),m+1); %竖线m等分 y1(i,:)=linspace(y_upper(i),y_lower(i),m+1); end
for i=1:m
for j=n+n1+2:-1:2
plot([x1(j,i) x1(j-1,i)],[y1(j,i) y1(j-1,i)],'m');% plot([x1(j,i) x1(j-1,i+1)],[y1(j,i) y1(j-1,i+1)],'m'); endend
for j=1:n+n1 for i=1:m
p1=i+(j-1)*(m+1);p2=i+1+j*(m+1);p3=i+j*(m+1);
end
t=2*i+2*(j-1)*m;p4=i+(j-1)*(m+1);p5=i+1+(j-1)*(m+1);p6=i+1+j*(m+1);e(t-1,:)=[p1,p2,p3]; e(t,:)=[p4,p5,p6];end
%整体编号与局部编号关系
四、程序各步运行结果:
具体程序如上所写第一步:画出几何区域