04 AM_12_Chapter 33D 几何网格划分方法
- 格式:pdf
- 大小:2.03 MB
- 文档页数:34
众所周知,对于有限元分析来说,网格划分是其中最关键的一个步骤,网格划分的好坏直接影响到解算的精度和速度。
在ANSYS中,大家知道,网格划分有三个步骤:定义单元属性(包括实常数)、在几何模型上定义网格属性、划分网格。
在这里,我们仅对网格划分这个步骤所涉及到的一些问题,尤其是与复杂模型相关的一些问题作简要阐述。
一、自由网格划分自由网格划分是自动化程度最高的网格划分技术之一,它在面上(平面、曲面)可以自动生成三角形或四边形网格,在体上自动生成四面体网格。
通常情况下,可利用ANSYS的智能尺寸控制技术(SMARTSIZE命令)来自动控制网格的大小和疏密分布,也可进行人工设置网格的大小(AESIZE、LESIZE、KESIZE、ESIZE等系列命令)并控制疏密分布以及选择分网算法等(MOPT命令)。
对于复杂几何模型而言,这种分网方法省时省力,但缺点是单元数量通常会很大,计算效率降低。
同时,由于这种方法对于三维复杂模型只能生成四面体单元,为了获得较好的计算精度,建议采用二次四面体单元(92号单元)。
如果选用的是六面体单元,则此方法自动将六面体单元退化为阶次一致的四面体单元,因此,最好不要选用线性的六面体单元(没有中间节点,比如45号单元),因为该单元退化后为线性的四面体单元,具有过刚的刚度,计算精度较差;如果选用二次的六面体单元(比如95号单元),由于其是退化形式,节点数与其六面体原型单元一致,只是有多个节点在同一位置而已,因此,可以利用TCHG命令将模型中的退化形式的四面体单元变化为非退化的四面体单元,减少每个单元的节点数量,提高求解效率。
在有些情况下,必须要用六面体单元的退化形式来进行自由网格划分,比如,在进行混合网格划分(后面详述)时,只有用六面体单元才能形成金字塔过渡单元。
对于计算流体力学和考虑集肤效应的电磁场分析而言,自由网格划分中的层网格功能(由LESIZE命令的LAYER1和LAYER2域控制)是非常有用的。
三维⽹格细分算法(Catmull-ClarksubdivisionLoopsubdivis。
转载:下图描述了细分的基本思想,每次细分都是在每条边上插⼊⼀个新的顶点,可以看到随着细分次数的增加,折线逐渐变成⼀条光滑的曲线。
曲⾯细分需要有⼏何规则和拓扑规则,⼏何规则⽤于计算新顶点的位置,拓扑规则⽤于确定新顶点的连接关系。
下⾯介绍两种⽹格细分⽅法:Catmull-Clark细分和Loop细分。
Catmull-Clark subdivision: Catmull-Clark细分是⼀种四边形⽹格的细分法则,每个⾯计算⽣成⼀个新的顶点,每条边计算⽣成⼀个新的顶点,同时每个原始顶点更新位置。
下图为Catmull-Clark细分格式的细分掩膜,对于新增加的顶点位置以及原始顶点位置更新规则如下:1.⽹格内部F-顶点位置: 设四边形的四个顶点为v0、v1、v2、v3,则新增加的顶点位置为v = 1/4*(v0 + v1 + v2 + v3)。
2.⽹格内部V-顶点位置: 设内部顶点v0的相邻点为v1、v2,…,v2n,则该顶点更新后位置为,其中α、β、γ分别为α = 1 - β -γ。
3.⽹格边界V-顶点位置: 设边界顶点v0的两个相邻点为v1、v2,则该顶点更新后位置为v = 3/4*v0 + 1/8*(v1 + v2)。
4.⽹格内部E-顶点位置: 设内部边的两个端点为v0、v1,与该边相邻的两个四边形顶点分别为v0、v1、v2、v3和v0、v1、v4、v5,则新增加的顶点位置为v = 1/4* (v0 + v1 + v f1 + v f2) = 3/8*(v0 + v1) + 1/16*(v2 + v3 + v4 + v5)。
5.⽹格边界E-顶点位置: 设边界边的两个端点为v0、v1,则新增加的顶点位置为v = 1/2*(v0 + v1)。
效果:function [VV, FF, S] = CC_subdivision(V, F, iter)% Catmull_Clark subdivisionif ~exist('iter','var')iter = 1;endVV = V;FF = F;for i = 1:iternv = size(VV,1);nf = size(FF,1);O = outline(FF);original = 1:nv;boundary = O(:,1)';interior = original(~ismember(original, boundary));no = length(original);nb = length(boundary);ni = length(interior);%% SvEtmp = sort([FF(:,1) FF(:,2);FF(:,2) FF(:,3);FF(:,3) FF(:,4);FF(:,4) FF(:,1)],2);[E, ~, idx] = unique(Etmp, 'rows');Aeven = sparse([E(:,1) E(:,2)], [E(:,2) E(:,1)], 1, no, no);Aodd = sparse([FF(:,1) FF(:,2)], [FF(:,3) FF(:,4)], 1, no, no);Aodd = Aodd + Aodd';val_even = sum(Aeven,2);beta = 3./(2*val_even);val_odd = sum(Aodd,2);gamma = 1./(4*val_odd);alpha = 1 - beta - gamma;Sv = sparse(no,no);Sv(interior,:) = ...sparse(1:ni, interior, alpha(interior), ni, no) + ...bsxfun(@times, Aeven(interior,:), beta(interior)./val_even(interior)) + ...bsxfun(@times, Aodd(interior,:), gamma(interior)./val_odd(interior));Sboundary = ...sparse([O(:,1);O(:,2)],[O(:,2);O(:,1)],1/8,no,no) + ...sparse([O(:,1);O(:,2)],[O(:,1);O(:,2)],3/8,no,no);Sv(boundary,:) = Sboundary(boundary,:);%% SfSf = 1/4 .* sparse(repmat((1:nf)',1 ,4), FF, 1);i0 = no + (1:nf)';%% Seflaps = sparse([idx;idx], ...[FF(:,3) FF(:,4);FF(:,4) FF(:,1);FF(:,1) FF(:,2);FF(:,2) FF(:,3)], ...1);onboundary = (sum(flaps,2) == 2);flaps(onboundary,:) = 0;ne = size(E,1);Se = sparse( ...[1:ne 1:ne]', ...[E(:,1); E(:,2)], ...[onboundary;onboundary].*1/2 + ~[onboundary;onboundary].*3/8, ...ne, ...no) + ...flaps*1/16;%% new faces & new verticesi1 = no + nf + (1:nf)';i2 = no + 2*nf + (1:nf)';i3 = no + 3*nf + (1:nf)';i4 = no + 4*nf + (1:nf)';FFtmp = [i0 i4 FF(:,1) i1; ...i0 i1 FF(:,2) i2; ...i0 i2 FF(:,3) i3; ...i0 i3 FF(:,4) i4];reidx = [(1:no)'; no+(1:nf)'; no+nf+idx];FF = reidx(FFtmp);S = [Sv; Sf; Se];VV = S*VV;endendLoop subdivision: Loop细分是⼀种三⾓形⽹格的细分法则,它按照1-4三⾓形分裂,每条边计算⽣成⼀个新的顶点,同时每个原始顶点更新位置。
第3章网格划分技术及技巧-图文创建几何模型后,必须生成有限元模型才能分析计算,生成有限元模型的方法就是对几何模型进行网格划分,网格划分主要过程包括三个步骤:⑴定义单元属性单元属性包括单元类型、实常数、材料特性、单元坐标系和截面号等。
⑵定义网格控制选项★对几何图素边界划分网格的大小和数目进行设置;★没有固定的网格密度可供参考;★可通过评估结果来评价网格的密度是否合理。
⑶生成网格★执行网格划分,生成有限元模型;★可清除已经生成的网格并重新划分;★局部进行细化。
3.1定义单元属性3.1.1单元类型1.定义单元类型命令:ET,ITYPE,Ename,KOP1,KOP2,KOP3,KOP4,KOP5,KOP6,INOPRITYPE---用户定义的单元类型的参考号。
KOP1~KOP6---单元描述选项,此值在单元库中有明确的定义,可参考单元手册。
也可通过命令KEYOPT进行设置。
INOPR---如果此值为1则不输出该类单元的所有结果。
例如:et,1,link8!定义LINK8单元,其参考号为1;也可用ET,1,8定义et,3,beam4!定义BEAM4单元,其参考号为3;也可用ET,3,4定义2.单元类型的KEYOPT命令:KEYOPT,ITYPE,KNUM,VALUEITYPE---由ET命令定义的单元类型参考号。
KNUM---要定义的KEYOPT顺序号。
VALUE---KEYOPT值。
该命令可在定义单元类型后,分别设置各类单元的KEYOPT参数。
例如:et,1,beam4!定义BEAM4单元的参考号为1et,3,beam189!定义BEAM189单元的参考号为3keyopt,1,2,1!BEAM4单元考虑应力刚度时关闭一致切线刚度矩阵keyopt,3,1,1!考虑BEAM189的第7个自由度,即翘曲自由度!当然这些参数也可在ET命令中一并定义,如上述四条命令与下列两条命令等效:et,1,beam4,,1et,3,beam189,13.自由度集命令:DOF,Lab1,Lab2,Lab3,Lab4,Lab5,Lab6,Lab7,Lab8,Lab9,Lab104.改变单元类型命令:ETCHG,Cnv5.单元类型的删除与列表删除命令:ETDELE,ITYP1,ITYP2,INC列表命令:ETLIST,ITYP1,ITYP2,INC3.1.2实常数1.定义实常数命令:R,NSET,R1,R2,R3,R4,R5,R6续:RMORE,R7,R8,R9,R10,R11,R12NSET---实常数组号(任意),如果与既有组号相同,则覆盖既有组号定义的实常数。
3D网格的划分例一,这个例子主要讲的是模型的拆分技巧和方法,以及一些划分3D网格的方法。
在一般情况下都要讲模型进行拆分,否则是不能进行划分的。
1,划分网格前个几何整理1,调入几何模型,qtrpisp.igs,如下图2,点击Geom页面下的lines面板3,进入create line字面板,作如下的一条直线4,点击return,退出这个面板5,点击Geom页面下的surface edit面板6,进入trim with line子面板,点击黄色的surf键选择下图中的三个面7,点击黄色的lines键,选择刚刚制作的那条线8,在sweep trim lines下面的指针中选择,along a vector9,在to trim through下面的指针中选择entire surface10,在下面的选择集中选择,z-axis,点击trim,结果如下在选择的三个面中出现绿色的线,这三个面被拆分11,同样在这个子面板中,surfs选择下图中的面,12,点击黄色的lines,选择下图中的线结果如下13,仍然在trim with lines 子面板中,surfs选择下图中的面线选择下图中的线,在sweep trim lines下面的指针中选择norm to surface点击trim,结果如下。
14,用同样的方法,将下面的面切开,过程和结果如下。
15,点击进入surface edit面板下面的trim with nodes子面板,分割如下的面点击两个端点,结果如下2,开始划分网格1,点击进入collcetors面板,创建以下几个compShell_1,shell_2,shell_3,shell_4,solid_1solid_2,solid_3,solid_4,分别赋予相应的颜色1,1对下面的划分有两种方法,下面是第一种方法1,点击进入2D页面下的automesh,面板2,进入create mesh子面板,在旁边的选择集中选择surf,点击下图中的面点击mesh,3,在elements size=后面的输入框中,输入2.5,点击左边的reclae all,点击mesh 4,点击图中的中子数,左键点击为加,右键点击为减,结果如下图5,点击return,形成网格1.2划分的第二种方法1,点击进入永久菜单中的global面板,使shell_1成为当前comp2,点击进入Geom 页面下的surface edet面板3,进入trim with nodes子面板,将曲面分成如下的三部分4,点击进入2D页面下的spline面板,使用mesh ,w/o,surf,创建如下的网格(如果一边的种子点很少,一边很多的话,就用鼠标左键按住种子点向上拖是增加,向下拖是减少)划分完之后比较两者的优劣(以下接第二种方法)6,点击进入Geom页面下的distance面板,测量一下图中的线的距离图中的线的距离为7.57,点击永久菜单中的global面板,在element size=后面的输入框中输入2,点击return 退出这个面板8,点击Geom页面下的geom cleanup面板,在左边的子面板中选edges,在下面的三个子面板中选则toggele,(大家也可以试试跳过这一步,看看结果)9,点击途中的两条线,这两条线变成蓝色,被抑制10,使solid_1为当前的comp11,点击3D页面下的solid map面板12,在source geom.的选择集中选在surf,点击网格所在的面13,在destination geom.的选择集中选择lines,点击图中的几条线,along geom选择none,elem选择shell_1的网格14,点击mesh结果如下15,点击这个面板右下角的equiv/faces键,结果如下16,点击disp观察生成的faces comp17,点击organize面板,选择底面上的网格,移到shell_2中18,删掉faces这个comp结果如下19,进入3D页面下的solid map面板,在source geom.的选择集中选择包围shell_2的几条边线,在destination geom.的选择集中选择底面,along geom.选择none,elems 选择shell_2,在density=后面的输入框中输入5,生成如下的网格(设置也如下图)20,删掉shell_2 的网格,但不要删掉shell_2这个comp21,使shell_2成为当前的comp,创建如下的网格21,创建网格,当前comp为shell_3,如下图22,点击进入3D面板中的solid map面板,创建如下的网格23.1在下图的面上创建如下的网格(从这步起可以有两种方法)方法一2,点击3D页面下的spin面板3,进入spin elems子面板,选择刚才创建的elems4,在下面的方向选择器中,选择y-axis,base点选择外圆的圆心点,在angle后面的输入框中输入90,on spin=后面的输入框中输入26,点击spin+,结果如下图可以使用line drag,方法如下:1,点击3D面板下面的line drag面板,进入drag elems子面板,drag后面的elems按键高亮,选择shell_42,点击along旁边的line list按键,选择一条圆周线,如下图在on drag=后面的输入框中输入26,点击drag,如果如下这两种方法虽然可以做出来网格,但是在圆心的部分的网格的质量很差,如下图所以在圆心的部分不用这样的方法,看另外一种方法。
三维几何模型分割和对齐算法三维几何模型分割和对齐算法是在三维计算机视觉领域中的一种重要技术,主要用于处理三维模型的分割和对齐任务。
三维模型分割是将一个三维模型划分成多个部分或物体的过程,而三维模型对齐是将多个三维模型以一定的准则对齐到同一个坐标系中的过程。
本文将详细介绍三维几何模型分割和对齐算法的原理、方法以及在实际应用中的一些应用案例。
一、三维几何模型分割算法1.数据预处理:对三维模型进行预处理,包括去噪、平滑等操作,以减少后续算法的误差和噪声。
2.特征提取:从三维模型中提取出特征信息,如曲率、法向量等。
这些特征信息对于分割算法非常关键,可以用来判断分割边界和区域。
3.区域生长:根据预定义的条件和阈值,从特征点开始,逐步生长出一个个区域。
区域的生长过程可以基于邻域信息,也可以基于一定的几何约束。
4.分割验证:对生长出的区域进行验证,剔除不符合条件的区域。
这一步骤通常需要根据应用场景和模型特点进行适当的调整。
5.后处理:对分割结果进行平滑处理,修复边界,减少噪声。
这一步骤可以使用一些图像处理或曲面重建的技术。
二、三维几何模型对齐算法1.数据预处理:对多个三维模型进行预处理,包括去噪、平滑等操作,以减少后续算法的误差和噪声。
2.特征提取:从每个三维模型中提取出特征信息,如特征点、特征曲线等。
这些特征信息对于对齐算法非常关键,可以用来匹配和对齐不同模型之间的相同部分。
3.特征匹配:将特征信息进行匹配,找到多个模型之间的对应关系。
匹配可以基于特征点、特征曲线等信息进行。
4.刚体变换:根据特征匹配的结果,计算出刚体变换矩阵,将不同模型对齐到同一个坐标系中。
5.优化调整:对刚体变换进行优化调整,以进一步提高对齐的准确性。
这一步可以使用一些优化算法,如最小二乘法等。
三维几何模型对齐算法在许多领域都有广泛应用,如三维建模、医学图像处理、机器人导航等。
例如,在机器人导航中,对齐算法可以将多个传感器采集到的三维地图对齐到同一个坐标系中,以提供一致的地图信息,便于机器人进行导航和路径规划。