#MATLAB有限元编程思路

>总体上分为三部分:1.前处理 2.计算 3.后处理

##1.前处理

前处理中,网格化后,单元的个数,以及每个单元有哪些节点组成,以及各个节点的坐标,必须提取出。

单元的个数和节点个数,节点坐标密切相关,而对单元的个数来说,模型的整体尺寸是确定的,那么单元的尺寸的大小,决定了单元的个数。

最大的问题是,就是用什么样的矩阵去存储他们,调用的效率最高。当单元的个数m和n确定下来后,那么单元的尺寸就可以确定,那么面对的第一个问题就是编号!!节点编号、单元编号。

>实际上,利用矩阵的行号就可以确定出单元的顺序,没有必要利用单独的矩阵去表示。因为关键的信息是单元有哪些节点组成!

* **单元信息**

这里定义**单元矩阵**,它所存储的信息是每个单元有哪些节点所组成,自然的矩阵的行号就可以代表单元的号,每一行的元素,二维CST就只有3个节点,这个矩阵是一个(m*n)行,3列的矩阵。**此外,为了存储单元矩阵时,高效地利用内存,应该使每个单元内的节点的编号(这里指的是全局的标号)的差值越小越好,为了达到这样的目的可以采用先沿着边长较短的一边进行节点编号,然后再进行长边的编号。(这里其实已经涉及到了节点编号的问题)**

* **节点信息**

在前处理中,节点的信息提取,就是指节点坐标的获取,如1号节点的x和y坐标,2号的坐标。利用节点矩阵来存储这些信息。这里会遇到两个需要思考的问题,第一个是,节点如何编号;第二个是,对应的给定节点的坐标值

**问题1:**

>节点的编号,当m和n确定下来后,对于每一条线来说,该线上的节点个数要比单元格数多1,也就是说,节点的总个数为(m+1)*(n+1)个。按照最小差值的原则,从短方向开始。编号其实利用矩阵的行号就可以表示出来。索引矩阵的行号是个需要注意的问题。

**问题2:**

>节点坐标,利用几何上的特性,依据确定的单元的尺寸,依次循环得出每个节点的坐标值,按照短方向优先的原则进行,定义**节点矩阵**,这个矩阵中的元素为坐标值x和y,利用行号来表示节点号,对二维的问题来说,是一个2列的矩阵。

* **两中矩阵的相互关系**

单元由节点组成,而节点又有着坐标信息,假设CST单元来说,为了获得某个单元的组成信息和位置,那么可以对element矩阵进行索引,它的每一行都存储着组成该单元的三个节点的号,用element(k,:)这个切片来表达。node矩阵为节点矩阵,包含着位置信息,node的第一列为x值,第二列为y值,这样就可以获得单元、节点的信息,为下一步的单元分析作准备。

你可能感兴趣的:(#MATLAB有限元编程思路)