有限元C++编程实践
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于有限元算法的编程实践
学号:2011043010031姓名:廖校毅
电子科技大学物理电子学院
【摘要】本文就有限元算法在电磁场分析中的应用展开研究与实践,从电磁场的Maxwell方程出发,根据电磁场的边值问题及变分公式建立了有限元方程组。具体在实践中,将这些知识运用到C++语言和Matlab中,并将这两种语言有机结合,编程并实现二维FEM。程序最后通过计算含两种介质的电位槽电位分布来验证其正确性。
关键词: 有限元变分法C++ Matlab
The Programming Practice Based on The Finite Element Algorithm Student ID:2011043010031Name:Liao Xiaoyi University of Electronic Science and technology &School of Physical
Electronics
Abstract In this paper, we take the application of finite element method in electromagnetic field analysis into research and practice. Starting from Maxwell equations of electromagnetic field, the electromagnetic field boundary value problems and variational formula established the finite element equations. In specific practice, this knowledge will be applied to the C++ language and Matlab, and the organic combination of two languages, programming and implementation of two-dimensional FEM. Finally, through the program to verify the validity of the calculation of potential distribution in channel potential containing two kinds of medium.
Key words The finite element method The variational method C++ Matlab
一、前言
在数学中,有限元法(FEM,Finite Element Method)是一种为求得偏微分方程边值问题近似解的数值技术。它通过变分方法[1],使得误差函数达到最小值并产生稳定解。类比于连接多段微小直线逼近圆
的思想,有限元法包含了一切可能的方法,这些方法将许多被称为有限元的小区域上的简单方程联系起来,并用其去估计更大区域上的复杂方程。它将求解域看成是由许多称为有限元的小的互连子域组成,对每一单元假定一个合适的(较简单的)近似解,然后推导求解这个域总的满足条件(如结构的平衡条件),从而得到问题的解。这个解不是准确解,而是近似解,因为实际问题被较简单的问题所代替。由于大多数实际问题难以得到准确解,而有限元不仅计算精度高,而且能适应各种复杂形状,因而成为行之有效的工程分析手段。因其理论依据的普遍性,作为一种声誉很高的数值分析方法,,已被普遍推广并成功地用来解决各种结构工程、热传导、渗流、流体力学、空气动力学、土壤力学、机械零件强度分析、电磁工程
问题等,并且大量可靠的基于有限元算法的软件如ANSYS 被开发和使用。
有限元法有以下特点:一,离散化过程保持了明显的物理意义。因为变分原理描述了支配物理现象的物理学中的最小作用原理(如力学中的最小势能原理、静电学中的汤姆逊定理等),基于问题固有的物理特性而予以离散化处理,列出计算公式,是保证方法的正确性、数值解的存在与稳定性等前提要素。二,优异的解题能力。与其他数值方法相比较,有限元法在适应场域边界几何形状及媒质物理性质变异情况的复杂问题求解上,有突出优点:不受几何形状和媒质分布的复杂程度限制;不同媒质分界面上的边界条件是自动满足的;不必单独处理第二、三类边界条件;离散点配置比较随意,通过控制有限单元剖分密度和单元插值函数的选取,可以充分保证所需的数值计算精度。
二、 算法原理
2.1 变分基本原理: 对于一般的问题,可以给出下列对应于一
个自变量x 的简单形式的泛函
2
1
[](,,')x x J y F x y y dx =⎰
函数y 稍有变化时:
2
1
[](,,'')x x J y y F x y y y y dx δδδ+=++⎰
2
1[][]
[(,,)(,,)]d x x J J y y J y F x y y y y F x y y x
δδδ∆=+-'''=++-⎰
上式用多元函数的泰勒公式加以展开:
22
222
22231{[][()2d 2
()]}F
F F F y y y y y y
J x
F
y y y y y y J J J J
δδδδδδδδδδ∂∂∂'++'∂∂∂∆=∂∂''+++''
∂∂∂=+++
≈
⎰
称为泛函的一阶变分。泛函同一般函数
的极值特性相似,泛函的取极值的条件是泛函的一阶变分为零,泛函值为拐点的条件是二阶变分为零。 所以,根据一阶变分为零,有下式成立:
22
1
1-0'[](,,')0
'x x x x F d F y dx y J y F x y y dx F e h y ⎧⎛⎫
∂∂=⎪ ⎪∂∂⎝⎭⎪=⇔⎨⎡⎤
∂⎪=⎢⎥⎪∂⎣
⎦⎩⎰
2.2 有限元算法基本原理[2]:
2.2.1 有限元网格划分的基本原则
鉴于实际应用中三角形的网格剖分方
式比较常见,下面以三角形网格剖分为例,
介绍有限元网格划分基本原则:
1.不同媒质的分界线,不容许跨越分界线的三角元
2.三角元的边逼近边界
3.三角形要求不要太尖或太钝
4.顶点编号相差不能太悬殊,对多区域的编号,按区域连续编号,
5.三角形节点编号按逆时针顺序编号
图 2 网格划分示意图
J δ