王超
(重庆交通大学 土木工程学院,重庆400041)
有限元法全称有限单元法(Finite Element Method,FEM)[1]。有限元分析程序涉及力学、应用数学和计算机科学三个不同学科的理论和方法,因而其编制工作十分复杂,且程序庞大易错[2]。面向对象方法是一种强有力的工具,采用面向对象方法开发大型有限元分析软件是一种非常有效的方法,与传统的有限元程序相比,面向对象有限元程序更易于编写、更易于维护和扩充,程序代码的可重用成分更大[3]。
本文将通过研究设计及编程实践,讨论应用面向对象的程序设计方法进行有限元程序设计的基本思想及采用C++语言进行有限元分析程序编制的基本方法。最后将程序计算结果与有限元软件(Abaqus)的计算结果以及问题的理论值进行比较,从而验证程序以及问题模型建立的正确性。
在有限元分析过程中,主要应用了结构、载荷、节点、单元、自由度、矩阵、材料、高斯积分点、边界条件、求解和辅助计算等物理概念。因此,根据面向对象程序设计方法可确定有限元分析过程的对象为:结构对象、载荷对象、节点对象、单元对象、自由度对象、矩阵对象、材料对象、截面对象、边界条件对象、求解对象和辅助计算对象等。根据确定的有限元分析过程的对象和所标识的对象间的关联,便形成了一个由单元类、节点类、自由度类、载荷类、材料类、边界条件类、结构类、求解类以及矩阵类和截面类等组成的有限元分析类库。对整个结构进行处理,包括对节点自由度的划分,单元刚度矩阵和荷载向量的组装,以及利用约束信息对总刚度矩阵进行划0 置1,最后利用整体结构的平衡方程求出各个节点的位移解[4]。
本文的基本力学模型为端部受集中荷载的悬臂梁,在有限元计算原理的基础上,利用Visual Studio 进行程序设计,以求解此离散化力学模型的各个节点的位移和转角,本程序中包括节点类、约束类、力的类、对象基类,其中截面和材料信息统一放到了单元类中。因此,视单元类为抽象基类,并添加对象基类,采用public 关键字以便其派生类能够存取有关数据,采用virtual 关键字以实现多态性。这样就构筑了类之间的层次和体系结构,形成了继承关系。然后,结构类接受用户输入的节点位置、单元、载荷、边界条件等信息后,读取信息并构造具体节点类、单元类、约束类、荷载类。最后由结构类、具体单元类中的各个计算公式的函数体的实现,从而完成一个结构的有限元分析过程。
2.1 对此悬臂梁进行离散化如图1 所示,得到两个单元三个节点的离散结构。
图1 矩形悬臂钢梁离散结构图
2.2 根据虚功原理,考虑到虚位移的任意性,可得到平面坐标系下的单元平衡方程[4]:
2.3 根据单元的虚变形能,可得到单元刚度矩阵为[4]:
结构类接受用户输入的节点位置、单元、载荷、边界条件等信息后,发送消息并构造具体节点类、单元类、约束类、荷载类,然后对整个结构进行处理,包括对节点自由度的初始化,单元刚度矩阵和荷载向量的组装,以及利用约束信息对总刚度矩阵进行划0 置1,最后利用整体结构的平衡方程求出各个节点的位移解[4]。
表1 节点信息表
表2 单元信息表
表3 约束信息表
表4 力信息表
表5 程序计算节点位移
表6 Abaqus 计算节点位移
在完成结构离散化之后,建立输入文本信息如表1、2、3、4所示。
运行该程序后,即得到该离散化力学模型各个节点的位移解计算结果,经整理后制成如表5 所示。
经过Abaqus 建模分析该算例,得到各个节点的位移解计算结果,经整理后制成如表6 所示。
通过对比有限元软件与C++程序的分析计算结果,我们可以看出二者各节点转角值相同,各节点x 与y 方向位移也几乎接近,从而验证了本文有限元程序的正确性,并且通过本文更加直观的了解了有限元法的一般思路和步骤,为进一步开发通用的面向对象的有限元分析软件提供了可靠的参考。通过典型算例,更加深入的理解了计算力学程序设计的思想和方法。