在Matlab中生成自由度指标矩阵以进行有限元分析

时间:2019-09-19 05:27:06

标签: matrix linear-algebra discrete-mathematics finite-element-analysis

美好的一天。我正在编写一份在Matlab中对有限元方法进行编程的指南,并且发现了各种不同的方法来生成与元素相关的DOF矩阵,这非常引人注目,我们现在将其称为elemDOF

这个elemDOF矩阵是什么?好吧,我们将从基础开始!每个FEM模型都以空间(Nodes on a plane)中的一组节点开始。这些节点随后由一组元素连接。每个元素都有一组与其关联的节点。根据域的不同,节点可以具有一到几个自由度。自由度或 DOF 代表一个变量,我们希望在节点上求解该变量,然后在元素内进行插值,可以是温度,位移甚至电压。

但这只是一个旁注,我会追逐。 elemDOF是一个矩阵,具有与模型中的元素一样多的行。每行包含对应于元素的有序DOF。 elemDOF应该从elements矩阵和Num_DOF_per_node或每个节点的自由度数中获得。为了简单起见,我们假定所有节点具有相同数量的DOF。

elements包含与该元素关联的每个节点的列(与元素中的节点数一样多的列)。如果事情仍然没有太大意义,请举一个例子: Example discretization!

看到方形灰色框包含元素标签,其余为节点编号:elements矩阵将为

elements = [1 2 5 4
        2 3 6 5
        5 6 8 7
        6 9 10 8]; % Clockwise numbering

我的elemDOF矩阵取决于DOF的数量。假设Num_DOF_per_node=3,elemDOF将这样映射与元素相关的DOF:

Num_DOF_per_node=3; % Ergo:
elemDOF = [  1     2     3     4     9    10     7     8
             3     4     5     6    11    12     9    10
             9    10    11    12    15    16    13    14
            11    12    17    18    19    20    15    16 ];

可以创建一个for循环并遍历元素和元素节点……这不是我的功课。有人可能会说,bsxfun的一些手工使用可以解决此问题,但是我还没有找到一种不会使新手挠头的方法。

这是迄今为止我能想到的最好的方法((在1D元素和2D(每个节点2自由度并选择3D元素)的情况下效果很好)

node2dof = @(n) [n*3 - 2; n*3-1; n*3]; % 3 DOF per node example
aux = node2dof(reshape(elements',[],1)');
elemDOF = reshape(aux,size(aux'))';

问题在于上面的示例失败,每个节点3 DOF。它还需要编写一个非通用的匿名函数,这样可能会更好。

0 个答案:

没有答案