首页| JavaScript| HTML/CSS| Matlab| PHP| Python| Java| C/C++/VC++| C#| ASP| 其他|
购买积分 购买会员 激活码充值

您现在的位置是:虫虫源码 > 其他 > C++面向对象的有限元程序设计

C++面向对象的有限元程序设计

  • 资源大小:0.36M
  • 上传时间:2021-08-31
  • 下载次数:0次
  • 浏览次数:0次
  • 资源积分:1积分
  • 标      签: 一般编程问题

资 源 简 介

C++面向对象的有限元程序设计,空间8结点等参元的分析计算第二章有限元分析计算的理论基础(空间8结点等参元)有限元法进行的前提是满足四个假定:连续性假定、完全弹性假定、均匀与各向同性假定、小变形和小位移假定。有限元法是建立在弹性力学的基础之上的。它是以平衡微分方程(数学上)、变形协调方程(几何方程)、本构方程(物理方程)作为基本的理论方程,同时又有圣维南原理、基于能量形式的虚位移原理作为解决问题的手段。有限元法是依照弹性力学的基本解法进行求解的,不论有限元法的哪种单元类型,在求解的过程和步骤上都是一样的,只不过求解的具体方法和细节处理有所不同。本文就以空间8结点等参元的求解的过程为例来进行编程,别的单元类型可以自己开发。而且,有了面向对象的于段,许多单元类型可以用继承的方式加以实现。2.1自然坐标系与位移模式自然坐标系与直角坐标系,如图(-1,-1,1)58(-1,1,1)X(1,-1,1)67(1,1,14(-1s3(1.1,1)局部自然坐标系与整体直角坐标系之间的关系(2-1)其屮N是关于三个自然坐标系变量;.,t的矩阵,x,y1,21,x2,…,zs是六面体的八个顶点(结点)在直角坐标系下的位置坐标,它们是已知的,xy,z与;s,t就有了对应的关系。N被称为形函数矩阵,N100N0N=0N100NNI小(22)其中N1=N(r,s,t)=(+m)1+.+t11≤i≤8(2-3)整体直角坐标与局部自然坐标的关系又可以表达成:x∑Ny∑N偎定结点间的位移变化是线性的,则位移模式可以表达为:(2-5)其中1,V1,w1,u2,…,ws是八个顶点(结点)的位移。2.2应变与位移间的关系根据变形协调方程,有:OulozAEou Ov(2-6)6×16×24vOw cu其中[B=[B1BB(2-7)ONON0aNB1≤i<8(2-8)6×3ON. ON0ay axON. aNaNaN要求出[B,需要按照以下步骤推导求出:由于aNaN, ax an ay ON azONOx ar ay ar az oraxANaNaN ay ONON(2-9)OSoVNaN Ox aN, ay aN aaNatOx ot ayaz at其中[为雅克比矩阵,OXON∑ON∑OIOXaNaNx∑ON∑∑(2-10)asas aax av aONN∑∑|y∑ONat at atXataNr(+s:1+m1)Ns、(+r)1(1+r)1+)(2Or8aNONXCIaM由式(2-9)可知ON小]1{∞,由此可求,即可得到BaNON2.3应力与应变间的关系σ=[D]6,其中[D是弹性矩阵,它是由弹性模量E和泊松比A确定的6×16×62.4单元刚度矩阵的求解K(o]=SIB]IDIBI(2-12)由于[B是关于自然坐标系;s,t的矩阵,上式的积分变量就是;s,t,所以dv=dxdydz= det[J drdsdt(2-13)这样= [B]LD[]det[ ] drdsdt(2-14)利用数值积分中两点的高斯积分,可得kx"]∑∑∑(Dle(2-15)其中;;,t分别只能取得对应的两个值,即R1=S1=T1=-0.5735,R2=S2=T22=0.57352.5整体刚度矩阵组装整体刚度矩阵是由所有的单元刚度矩阵组装而成的,在组装过程中采取人家熟知的“对号入座”的原则和方法。对于空间8结点的单元刚度矩阵为24行24列的矩阵,可以分为8×8的子块,每个子块是3行3列的矩阵;找到每个结点在本单元中的局部编号(从1至8之间)和对应的整体编号(从1至n之间,n为整体的单元总数),整体刚度矩阵是一个3n行3n列的矩阵,同样可以分为nxn的子块,每个子块同样是3行3列的矩阼。设在单元刚度矩阵中有子块k,其中动为局部编号,其对应的整体编号为pq,则应该填入整体刚度矩阵的k。子块中。在整体刚度矩阵中的同一个子块中可能填入多个单元的单元刚度矩阵子块,这些子块应该先求和再填入整体刚度矩阵。将所有的单元刚度矩阵如此“对号入座”,便组装成整体刚度矩阵。整体刚度矩阵是个稀疏矩阵(0元素占绝人多数)、带状对称矩阵(非0元素只对称分布于主对角线周围的狭窄的区域内)、奇异矩阵。2.6通过边界条件求解对于满足胡克定律的线弹性物体来说,有K3n×13n×3n3n×1其中[为载荷向量,[为位移向量。=[F2丁(2-17)[F为所有结点的各个方向的载荷的结合,它是其中所有元素是已知的;]为所有结点的在各个方向的位移,它是部分已知、部分未知的,我们要求解的就是那些未知量,已知的部分就是所谓的约束由于整体刚度矩阵[K是奇异矩阵,就要通过这些约束将其修改为非奇异矩阵,再来求解。修改方法如下将[K]中主对角线上与已知约束同行的元素乘上一个大数,如103,同时将[F同行的元素换成已知约束的位移值与该大数的成积。如,给定了w1,就将[K中的对角元素k3乘以105,同时将F1×k3×103。至此,便可以求解方程(2-16)了,通常用到稀疏矩阵和带状方程的求解器。2.7求出单元的应力应变通过以上的步骤已经求得了每个结点的位移,将每个单元中对应结点的位移代入(2-6)屮,再通过数值高斯积分就可以得出应变,有了应变,根据2.3节屮的关系算出应力。根据本章对空间8结点等参元的分析计算的理论叙述,我们就可以利用面向对象的方法进行编程了。其中还运用了大量数值分析的算法,在此不再详细说明。第三章面向对象的程序设计前面讲述了结构有限元法的基本原理,本章就是讲述简单的面向对象的有限元程序设计的原理。面向对象的程序设计主要包括面向对象的分析(OOA)和面向对象的设计(OOD)3.1面向对象分析面向对象的分析是重要的建模过程,它包括对象的识别、对象关系的确定、对象的属性和方法的确定。3.1.1对象的识别对象的识别考虑的是在一个面向对象的程序系统中识别出对象。我们很容易了解到在有限元分析计算中的模型是由若干个单元组成的,在本例中是空间8结点等参元,每一个单元又是由若干个节点组成的。这就使我们至少抽象出三个对象:Entity(实体类)、 Element(单元类)、Node(结点类)对有限元的分析过程进行归纳整理,识别出了一个通用的数学对象:Matrix(矩阵类)由于本文只是简单的对模型进行分析,有些构造大型有限元分析的类并没有加以认定,如 ElemMng(单元管理类)、 Nodemng(结点管理类)、Load(载荷类)、Constraint(约束类)、 LoadIng(载荷管理类)、 ConstrMng(约束管理类)等。未加认定的对象在程序中均未实现。而单元的管理操作交给了实体类管理,结点的管理操作也分给了实体类和单元类来管理3.1.2对象关系的确定对于有限元这个复杂的系统来说,类/对象之间的关系的确定最为重要类之间的关系主要有两种:绊承关系和关联关系。(1)继承关系继承关系就是特殊与一般的关系,我们又形象地称为is-a的关系。继承关系在本文这个简单的模型中最名显的体现是单元类,因为有限元分析中的单元类型有很多,但它们都拥有一般单元的性质和操作方法,所以无论哪一种单元类型都可以从通用的单元类中继承。本文的空间8结点等参元就是从单元类中继承出来的。以UML图表示的继承关系如下图所示ElementHexahedron图3-1空间8结点等参元是通用单元的继承(2)关联关系关联关系是指类之间通过某种方式发生联系。最主要的有聚合和委托关系。聚合关系是指一个聚合类由其他若干个被聚合类组成,这些被聚合类作为聚合的属性而存在,我们通常称为has-a关系。本例中的实体是由若干个单元和结点组成的,而单元又是由8个结点组成的,这构成了最为明显的聚合关系。以UML图表示的聚合关系如下图:EntityElementNode图3-2实体包含单元和结点,单元也包含结点委托关系是指两个类木无任何联系,一个类通过一定的方式委托另一个类执行部分的工作,最后完成自己的工作。有限元分析计算的过程中用到大量的数学数值运算和关于矩阵、向量的运算,它需要委托这些数学对象进行运算,帮助其解决问题。在此例中,由于实体的部分计算操作和单元的计算操作都是由关于矩阵的运算操作,这些类就当委托类的角色,矩阵就是被委托的类。以UML图表示的委托关系如下图ElementMatrixEntity图3-3单元类和实体类委托矩阵类进行运算本例中的矩阵类实现也委托了一个链表类。对于本例中的所有类,总体的关系如下图:EntitNodeMatrixElementLinklistHexahearorListnode图3-4总体对象间关系3.1.3对象的属性和方法的确定在确定了对象的关系以后就可以确定对象的属性和方法了。下面的表只列举重要的类的属性和方法:
VIP VIP
0.173982s