有限元矩阵装配中的CSR方法

计算科学 有限元 matlab 稀疏矩阵
2021-12-17 15:08:37

我已经在 MATLAB 中使用有限元法和单纯形三角元求解了 2D Poisson 方程。

pdetool首先,我在 Matlab 中生成了三角形网格,它给了我三个矩阵:(p每个节点的位置)、t(具有三个顶点的元素)和e. 然后,我像这样推导出局部刚度矩阵,

for I=1:i_elems
 
  conec(i_elem,1)=t(1,i_elem);
  conec(i_elem,2)=t(2,i_elem);
  conec(i_elem,3)=t(3,i_elem);
    
  node_1=conec(i_elem,1);
  node_2=conec(i_elem,2);
  node_3=conec(i_elem,3);

    NN_e(1,1)=(1/6) * elem_area(i_elem);
    NN_e(1,2)=(1/12)* elem_area(i_elem);
    NN_e(1,3)=(1/12)* elem_area(i_elem);
    NN_e(2,1)=(1/12)* elem_area(i_elem);
    NN_e(2,2)=(1/6) * elem_area(i_elem);
    NN_e(2,3)=(1/12)* elem_area(i_elem);
    NN_e(3,1)=(1/12)* elem_area(i_elem);
    NN_e(3,2)=(1/12)* elem_area(i_elem);
    NN_e(3,3)=(1/6) * elem_area(i_elem);

% and then I assembled that like this,

    NN(node_1,node_1)=NN(node_1,node_1)+NN_e(1,1);
    NN(node_1,node_2)=NN(node_1,node_2)+NN_e(1,2);
    NN(node_1,node_3)=NN(node_1,node_3)+NN_e(1,3);
    NN(node_2,node_1)=NN(node_2,node_1)+NN_e(2,1);
    NN(node_2,node_2)=NN(node_2,node_2)+NN_e(2,2);
    NN(node_2,node_3)=NN(node_2,node_3)+NN_e(2,3);
    NN(node_3,node_1)=NN(node_3,node_1)+NN_e(3,1);
    NN(node_3,node_2)=NN(node_3,node_2)+NN_e(3,2);
    NN(node_3,node_3)=NN(node_3,node_3)+NN_e(3,3);

end

NN矩阵将是一个稀疏矩阵。我只是想使用 csr 技术并提高组装过程的效率,但我不知道如何以这种方式组装全局刚度矩阵。如果有人可以帮助我,我将不胜感激。

0个回答
没有发现任何回复~