您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 有限元设计软件生成网格的PAVING算法
有限元设计软件生成网格的PAVING算法一、简介使用有限元软件分析计算几何体的物理性质,其计算的过程可以划分为几个大的模块,输入几何体区域→为该区域生成一个网格→对生成的网格施加一个干扰→从受到干扰的网格开发分析数据→确定几何体的物理行为。分析计算流程图如图1所示。InputthegeometricregionGenereateameshfortheregionApplyastimulusTothegeneratedmeshAnalysethestimulatedmeshDevelopanalysisdatafromthestimulatedmeshDeterminethephysicalbehaviorofthegeometricregion图1有限元分析的模块在有限元分析的前处理模块中,网格生成时很重要的一个步骤。生成网格的质量会影响后处理计算结果的精度。当前,行业内流行多种网格生成的算法,各有各自的特点,该部分内容在本文国内外研究现状一节中已经详细阐述。其中paving算法健壮性良好,计算速度快,而且生成的网格质量好。本节主要阐述采用C++语言实现paving算法的实现过程。如图2所示,采用paving算法生成网格的算法流程图,从输入边界数据到最后输出划分好的网格,其中主要有生成新行,平滑处理,缝合处理,边界相交处理等几个子模块。InputboundarySmoothrowSeamboundaryAnyintersections?ConnectoverlapsChooserowAddrowportionSeamboundaryIsrowcompletedAdjustrowAnyintersections?closureCleanupmeshConnectoverlapsSeamboundaryyesNOYESNONOYESYESNO图2Flowchartofpavingalgorithm为了清晰理解上述paving算法的流程,以图3所示为例,图a当中为输入的原始外边界数据,围成待划分网格的区域。选择边界上的一行节点为基础,添加生成一行新的浮动节点,生成顺序为沿着外边界按逆时针方向进行。对新生成的浮动节点进行平滑处理,使节点围成的单元的internalangle以及aspectratio变得更为合理,单元更趋近于规则四边形。对剩余的待划分网格区域进行缝合,检查单元是否相交,对相交的单元进行处理,对单元进行调整,直到整个区域生成高质量的网格为止。图3paving算法铺筑单元示意图依据图2所示流程图,生成相应的伪代码:DoRowchoiseWhileaddrowisnotcompleteAddrowportionSmoothrowportionSeamboundaryIfintersectionoccursthenConnectoverlapsSeamboundaryEndifRowadjustmentIfintersectionoccursConnectoverlapsSeamboundaryEndifWhile(closurecheckisnegative)Clean-upmesh二、分部详细说明1.输入边界数据根据算法的流程图中,首先要输入待划分网格的边界数据,确定区域的内边界和外边界。明确得到边界节点数据之后,逐个对每个节点进行分析对对其进行分类,计算流程如图7所示。对节点分类的依据是该节点的内角,如图6所示。根据节点内角的大小,将其划分为四类,分别为边节点,角节点,回转节点和端节点。图5平面区域的内边界和外边界图6节点相关的几个概念IdentifyeachpavingnodeDeterminetheanglestatusofthenodeClassifythenodeDeterminewhetherasimpleorprimitiveshapeexistsPropagatesuccessivelyinwardfromthepermanentboundariesRepeatforeachnode图7获取边界节点信息计算流程依据上图所示流程图,可以得到获取边界节点信息的伪代码:fstreamfread(boundary.txt);do{GetnodeinnerangleInputangletolerancea1a2a3a4a4a6Classifythenode3}While(nodeclassifyisnotcompleted)DeterminewhetherasimpleorprimitiveshapeexistPropagatesuccessivelyinwardfromthepermanentboundaries2.闭合检查每次确定待划分的面域之后都要对该面域进行一次闭合检查。检查区域边界上的节点总数;边界节点总数是否大于6,如果大于6,则选择一行节点,分别对每一行边界接点进行生成新节点;如果等于6,则对面域进行闭合,根据待闭合面域的形状形成两个、三个或者四个四边形单元;如图8所示;如果等于4,则插入一个四边形单元对面域进行闭合如果等于2,进行一次缝合,即可将面域闭合如果等于0,铺筑工作结束图8六个节点面域的闭合方法闭合检查的计算流程图如图所示:determinethenumberofnodesremaininginthepavingboundaryif0nodesif2nodesif4nodesif6nodespavingiscompletecompletepavingwithasimpleseamaddoneadditionalquadrilateralelementtoclosetheboundaryform2,3or4newquadrilateralelementsbasedonthenodeconfigurationClosurecheck图9检查闭合的计算流程根据图9所示的流程图,可以生成其伪代码:GetthenumberofnodesremaininginthepavingboundarySwitchnodenumber{Case0PavingiscompleteBreakCase2SeamtheboundaryBreakCase4InsertaquadrilateralelementbreakCase6Form2,3,4newquadrilateralelementsBreak}3.新增行接口:上面一步进行闭合检查,如果待划分的面域,边界上的节点数大于6,则进行生成新行节点。首先选定的一行固定边界节点,根据该行节点分类,生成新的一行节点。具体生成新行节点的计算流程图如图10所示.identifyeachboundarynodedeterminenodeclassificationdeterminethedistancebetweensubsequentandpreceedingnodesnodeterminationperformnodeprojectionsrepeatforeachnode图10生成新的浮动边界节点的计算流程根据其计算流程图,可以生成的伪代码为:选择一行已知的内边界或者外边界,该行以两个端节点结束确定一个端节点作为起始点,Do{选中下一个节点,判断节点类型Case2调用矢量对象的生成矢量方法生成一个矢量jV;如图11所示;矢量长度为|jV|=12()/2sin(/2)dda;调用矢量对象的求解矢量端点方法,求解出该矢量的箭尾端点;调用节点对象的生成节点方法,将箭尾端点生成节点;将新生成的节点编号;将新生成的节点标志为浮动节点;Break;图11由边节点生成一个新节点Case3调用矢量对象的生成矢量方法生成三个矢量jV,|kV,lV;如图12所示;矢量长度分别为|jV|=12()/2sin(/3)dda;||2||kjVV;||||ljVV;调用矢量对象的求解矢量端点方法,求解出该矢量的箭尾端点;调用节点对象的生成节点方法,将箭尾端点生成节点;将新生成的节点编号;将新生成的节点标志为浮动节点;Break;图12由角节点生成三个浮动节点Case4调用矢量对象的生成矢量方法生成五个矢量jV,kV,lV,mV,nV;如图13所示;矢量长度分别为|jV|=12()/2sin(/4)dda;||2||kjVV;||||ljVV;||||mkVV;||||njVV;调用矢量对象的求解矢量端点方法,求解出该矢量的箭尾端点;调用节点对象的生成节点方法,将箭尾端点生成节点;将新生成的节点编号;将新生成的节点标志为浮动节点;Break;图13由转角节点生成五个浮动节点Case1不再生成新节点连接两个相邻节点即可,如图14所示该行结束Break;图14端节点不生成新的浮动节点}while(该行下一个节点不为空)新的一行边界生成完毕,新生成的节点都是浮动节点,需要进行平滑处理。4.平滑网格生成中要保证新生成的单元的质量,单元的好坏从几个指标进行衡量,单元的内角没有过大或者过小的现象,单元边长的长宽比不宜过大。如果单元有角度大小不合适或者单元尺寸相差悬殊等情况,则需要进行平滑。平滑就是要恢复和维持单元的单元的尺寸、垂直度和总的铺筑边界和网格的平滑。smoothing类型,分为三类分别是:(1)boundaryNodeSmoothing(2)InteriorNodeSmoothing(3)Localizationofsmoothing;三个平滑类型分别对应三个平滑器。Smoother的三个平滑器:amodifiedisoparametricsmoother;modifiedlength-weightLaplatiansmoother;以及Localizedsmoother。首先modifiedisoparametricsmoother的具体计算步骤:进行矢量的加减运算,如下式:'11()nimjmlmkmVVVVn'AiiVV如果该节点不是连接两个单元,则该修正到处结束;图15新生成边界上节点长度调整示意图如果该节点仅连接两个单元,则继续调用矢量对象的加减方法进行如下各式的计算:()*DBjiAijAlVVVVl2||2QDBllPifDlQl2||BDPlotherwise2cBiPP2Bci图16行节点上角度调整示意图其次对于InteriorNodeSmoothing采用modifiedlength-weightLaplatiansmoother方法,其具体步骤是:调用矢量对象的加减运算,求模运算方法,进行如下各式的计算:jjCjCV11||*||njjjinjjCCC图17内部浮动节点的调整示意图通过以上计算得到的修正矢量,对原来的定位矢量进行修正,生成新的节点坐标,用新的节点坐标替代原来的节点坐标。根据以上叙述,节点平滑的计算流程图如图18所示。identifyeachnodeclassifythenodedeterminetheinteriorangleofthenodedeterminethenumberofattachedelementstothenodedeterminewhetherthenodeisafixednoderepeatforeachnodeperformpavingboundarysmoothtofloatingnodesonthepavingboundaryinteriorsmoothperformedtoallfloatingnodesnotonthepavingboundary图18节点平滑的计算流程图依据节点平滑的方法和其流程图生成的伪代码:Do{IdentifyanodeGettheinteriorangleofthenodeGetthenumberofattachedelementstothenodeJudgewhetherthenodeisafixednode}While(thenewrowis!NULL)Foreverynodeonthenewrow{Ca
本文标题:有限元设计软件生成网格的PAVING算法
链接地址:https://www.777doc.com/doc-8061861 .html