回 帖 发 新 帖 刷新版面

主题:推荐一款比较好的大型稀疏方程组直接法求解器


本人在有限元计算中采用过几款开源的稀疏线性方程组直接法求解器如superlu,mumps等,但比较下来,认为mumps较好,特向大家推荐。感兴趣的可以到其主页下载。

http://graal.ens-lyon.fr/MUMPS/index.html

回复列表 (共17个回复)

沙发

赞楼主的经验共享

我也在做有限元方面的研究 不过问题计算量小 所以一直没用到稀疏矩阵 不过这方面也很关心

板凳

Thanks for recommendation, buddy.

3 楼

哦,谢谢啊。。。呵呵

4 楼

Parallel factorization and solve phases 
(uniprocessor version also available);
超赞! 我的毕业设计阿,当时怎么没有找到!
…………………………

5 楼

楼主是怎么用的啊?我现在也急需这个程序,楼主可不可以给我个完整的可运行的例子啊?
我的QQ是251745281

6 楼


以下是我在程序中调用mumps的子程序,供参考。mumps的文档中也有例子。

subroutine cmumps_solver(s,x,nd,nc,nnd,nnc,logfile,errinfo)
  implicit none
  include 'mpif.h'
  include 'cmumps_struc.h'
  integer                :: nnd,nnc,i,j,num,logfile,errinfo
  integer,   allocatable :: nd(:),nc(:)
  complex(8),allocatable :: s(:),x(:)
  character(len=30)      :: str
  type(cmumps_struc)     :: id
  str=' successfully.'
  write(logfile,'(a30)')'....the direct solver started.'
  write(logfile,*)
  id%sym=2
  id%par=1
  id%job=-1
  call cmumps(id)
  id%icntl(1)=logfile; id%icntl(2)=logfile; id%icntl(3)=logfile
  id%icntl(7)=4
  id%icntl(22)=10
  id%cntl(1)=0.0
    
  id%n=nnd
  id%nz=nnc
  allocate(id%irn(nnc),id%jcn(nnc))
  id%irn(1)=1
  id%jcn(1)=1
  num=1
  do i=2,nnd
    do j=nd(i-1)+1,nd(i)
      num=num+1
      id%irn(num)=i
      id%jcn(num)=nc(j)
    end do 
  end do
  deallocate(nd,nc)
  allocate(id%a(nnc))
  id%a=s
  deallocate(s)
  allocate(id%rhs(nnd))
  id%rhs=x
  id%job=6
  call cmumps(id)
  x=id%rhs
  deallocate(id%irn,id%jcn,id%a,id%rhs)
  if(id%infog(1)<0)then
    errinfo=1
    str=' with error occured.'
  end if    
  id%job=-2
  call cmumps(id)
  write(logfile,*)
  write(logfile,'(1x,a50)')'....the direct solver finished'//trim(str)
end subroutine cmumps_solver

7 楼


我用的是串行版本,否则在程序中还要有相关的mpi调用的语句。其文档中有详细介绍。

8 楼


楼主有源程序吗

9 楼


在其网站上有,可以自己去下载。

10 楼


楼主,请问一下在网上下载的mumps不是需要安装吗,而且即使是串行的,上面的说明还要调用blas库。能不能讲一下具体怎么弄,或者是给一个能够直接运行的例子?谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册