Fortran Coder

查看: 3400|回复: 7
打印 上一主题 下一主题

[求助] Fortran如何合并具有相同的性质的两列,并删除列

[复制链接]

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
楼主
发表于 2022-7-22 20:25:15 | 显示全部楼层
不知所云,你这和稀疏矩阵有啥关系啊。再说稀疏矩阵的稀疏格式又不是一种,coo,csr,csc,格式不一样三元组的含义不同。然后你稀疏矩阵不会和Fortran有啥关系啊。

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
沙发
发表于 2022-7-25 09:53:39 | 显示全部楼层
本帖最后由 zjk0112 于 2022-7-25 10:21 编辑
zjk0112 发表于 2022-7-22 20:25
不知所云,你这和稀疏矩阵有啥关系啊。再说稀疏矩阵的稀疏格式又不是一种,coo,csr,csc,格式不一样三元 ...

你想要两个5阶的矩阵相加?只是这两个矩阵是稀疏的。是这个意思不?
做加法就行了。就用到for循环就可以了。

A=[1,2,3,*,*
      *,3,4,5,*
      *,*,5,6,7
      *,*,*,7,8
      *,*,*,*,9]
对应的COO格式三元组(1-based)就是IA=(/1,1,1,2,2,2,3,3,3,4,4,5/),JA=(/1,2,3,2,3,4,3,4,5,4,5,5/),VA=(/1.0,2.0,3.0,3.0,4.0,5.0,5.0,6.0,7.0,7.0,8.0,9.0/)

B=[1,*,*,*,*
      *,2,*,*,*
      *,*,3,*,*
      *,*,*,4,*
      *,*,*,*,5]
对应的COO格式三元组 IB=(/1,2,3,4,5/) JB=(/1,2,3,4,5/) VB=(/1.0,2.0,3.0,4.0,5.0/)

A+B伪代码
!nnz为非零元个数,n为矩阵阶数,
n=5, nnzA=12, nnzB=5
do i=1, nnzA
    do j=1,nnzB
       if(IA(i)==IB(j) .and. JA(i)==JB(j)) then
       C(IA(i),JA(i)) = VA(i)+VB(j)
    end do
end do

我没理解错的,大概就这样呗,不难吧。有啥不会的呢?

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
板凳
发表于 2022-7-27 11:06:23 | 显示全部楼层
jiangweiwu 发表于 2022-7-26 17:00
首先谢谢你的代码。不过不是两个稀疏矩阵相加。是有u,v,a三个一维数组,只不过这其中的u,v有相同值得 ...

算的是刚度矩阵对吧。从我的角度来看,你的问题不出在稀疏矩阵和Fortran,你的有限元理论没弄清楚。你先弄局部刚度矩阵如何assemble到全局刚度矩阵,你的问题就有答案了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-14 14:21

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表