铺砌法生成有限元网格模型Word下载.docx
《铺砌法生成有限元网格模型Word下载.docx》由会员分享,可在线阅读,更多相关《铺砌法生成有限元网格模型Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
对剩余的待划分网格区域进行缝合,检查单元是否相交,对相交的单元进行处理,对单元进行调整,直到整个区域生成高质量的网格为止。
图3paving算法铺筑单元示意图
依据图2所示计算流程图,生成相应铺砌法的伪代码:
Do
Rowchoise
Whileaddrowisnotcomplete
Addrowportion
Smoothrowportion
Seamboundary
Ifintersectionoccursthen
Connectoverlaps
Endif
Rowadjustment
Ifintersectionoccurs
While(closurecheckisnegative)
Clean-upmesh
三、分部详细说明铺砌法
1.输入边界数据
根据算法的流程图中,首先要输入待划分网格的边界数据,确定区域的内边界和外边界。
明确得到边界节点数据之后,逐个对每个节点进行分析对对其进行分类,计算流程如图7所示。
对节点分类的依据是该节点的内角,如图6所示。
根据节点内角的大小,将其划分为四类,分别为边节点,角节点,回转节点和端节点。
图5平面区域的内边界和外边界
图6节点相关的几个概念
图7获取边界节点信息计算流程
依据上图所示流程图,可以得到获取边界节点信息的伪代码:
fstream
fread(boundary.txt);
do
{
Getnodeinnerangle
Inputangletolerancea1a2a3a4a4a6
Classifythenode3
}While(nodeclassifyisnotcompleted)
Determinewhetherasimpleorprimitiveshapeexist
Propagatesuccessivelyinwardfromthepermanentboundaries
2.闭合检查
每次确定待划分的面域之后都要对该面域进行一次闭合检查。
检查区域边界上的节点总数;
边界节点总数是否大于6,
如果大于6,那么选择一行节点,分别对每一行边界接点进行生成新节点;
如果等于6,那么对面域进行闭合,根据待闭合面域的形状形成两个、三个或者四个四边形单元;
如图8所示;
如果等于4,那么插入一个四边形单元对面域进行闭合
如果等于2,进行一次缝合,即可将面域闭合
如果等于0,铺筑工作结束
图8六个节点面域的闭合方法
闭合检查的计算流程图如下图:
图9检查闭合的计算流程
根据图9所示的计算流程图,可以生成闭合检查的伪代码:
Getthenumberofnodesremaininginthepavingboundary
Switchnodenumber
{
Case0
Pavingiscomplete
Break
Case2
Seamtheboundary
Case4
Insertaquadrilateralelement
break
Case6
Form2,3,4newquadrilateralelements
}
3.新增行接口:
上面一步进行闭合检查,如果待划分的面域,边界上的节点数大于6,那么进行生成新行节点。
首先选定的一行固定边界节点,根据该行节点分类,生成新的一行节点。
具体生成新行节点的计算流程图如图10所示.
图10生成新的浮动边界节点的计算流程
根据生成新的浮动边界节点的计算流程图,可以生成相应的伪代码为:
选择一行的内边界或者外边界,该行以两个端节点结束
确定一个端节点作为起始点,
选中下一个节点,判断节点类型
调用矢量对象的生成矢量方法生成一个矢量;
如图11所示;
矢量长度为||=;
调用矢量对象的求解矢量端点方法,求解出该矢量的箭尾端点;
调用节点对象的生成节点方法,将箭尾端点生成节点;
将新生成的节点编号;
将新生成的节点标志为浮动节点;
Break;
图11由边节点生成一个新节点
Case3
调用矢量对象的生成矢量方法生成三个矢量,,;
如图12所示;
矢量长度分别为||=;
;
图12由角节点生成三个浮动节点
调用矢量对象的生成矢量方法生成五个矢量,,,,;
如图13所示;
图13由转角节点生成五个浮动节点
Case1
不再生成新节点
连接两个相邻节点即可,如图14所示
该行结束
Break;
图14端节点不生成新的浮动节点
}while(该行下一个节点不为空)
新的一行边界生成完毕,新生成的节点都是浮动节点,需要进行平滑处理。
4.平滑
铺砌法网格生成中要保证新生成的单元的质量,单元的好坏从几个指标进行衡量,单元的内角没有过大或者过小的现象,单元边长的长宽比不宜过大。
如果单元有角度大小不适宜或者单元尺寸相差悬殊等情况,那么需要进行平滑。
平滑就是要恢复和维持单元的单元的尺寸、垂直度和总的铺筑边界和网格的平滑。
平滑类型,可以分为三类,他们分别是:
〔1〕boundaryNodeSmoothing〔2〕InteriorNodeSmoothing〔3〕Localizationofsmoothing;
三个平滑类型分别对应三个平滑器。
Smoother的三个平滑器分别为:
amodifiedisoparametricsmoother;
modifiedlength-weightLaplatiansmoother;
以及Localizedsmoother。
首先modifiedisoparametricsmoother的具体计算步骤:
进行矢量的加减运算,如下式:
如果该节点不是连接两个单元,那么该修正到处结束;
如图15所示。
图15新生成边界上节点长度调整示意图
如果该节点仅连接两个单元,那么要继续进行角度的调整,如图16所示,调用矢量对象的加减方法进行如下各式的计算:
if>
otherwise
图16行节点上角度调整示意图
其次对于InteriorNodeSmoothing采用modifiedlength-weightLaplatiansmoother方法,如图17所示,其具体步骤是:
调用矢量对象的加减运算,求模运算方法,进行如下各式的计算:
图17内部浮动节点的调整示意图
通过以上计算得到的修正矢量,对原来的定位矢量进行修正,生成新的节点坐标,用新的节点坐标替代原来的节点坐标。
根据以上表达,节点平滑的计算流程图如图18所示。
图18节点平滑的计算流程图
依据节点平滑的方法和计算流程图,可以生成节点平滑的伪代码:
Identifyanode
Gettheinteriorangleofthenode
Getthenumberofattachedelementstothenode
Judgewhetherthenodeisafixednode
}
While(thenewrowis!
NULL)
Foreverynodeonthenewrow
{
CalculateitsΔa
Ifthenumberofattachedelementstothenodeisnot2
Adjustthenode’spositionaccordingtoΔa
Elseifthenumberequals2
CalculateΔb
CalculateΔc
CalculateΔi
Adjustthenode’spositionaccordingtoΔi
Foreveryinteriorfloatingnode
5.缝合
在区域边界上,如果某个顶点的两条网格线的夹角过小,那么对该节点的网格进行缝合。
按照待缝合的节点类型不同(节点全部是浮动节点、要缝合的节点中涉及到固定节点),缝合可分为InteriorNodeSeams和FixedNodeSeams以及TransitionSeams;
首先介绍InteriorNodeSeams
是否需要缝合的判断条件:
根据节点的内角α的大小和节点连接的单元数量来判断:
当连接到节点的单元边界数量>
=5时,其内角α<
ε1时需要缝合
当连接到节点的单元边界数量<
=4时,其内角α<
ε2时需要缝合
如果某个节点需要缝合,缝合的方法:
combinethenodeandintoasingleNode
删除两个节点,生成一个新节点,新节点的位置位于两个原来节点的中心
其次介绍FixedNodeSeams
当外边界形成较小的夹角时候,要进行该种类型的缝合。
解决方法:
仅仅是通过延迟裂缝的缝合。
如果右边需要缝合,但它是固定边界,那么分两种情况:
(1)左端点是固定点,忽略缝合
(2)左端点是浮动点,那么又可分三种情况
(1)下一边界点