稀疏矩阵线性解析库SPOOLES的简单应用.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
稀疏矩阵线性解析库SPOOLES的简单应用 ysm cleverysm@ SPOOLES的全称是SParse Object Oriented Linear Equations Solver,中文名大概就是面向对象的稀疏线性等式解析器。顾名思义,就是可以用来解稀疏矩阵为参数的线性方程组的数学函数库。所谓面向对象是指的应用了面向对象的封装思想,但实际上SPOOLES是用非面向对象的C语言来写的。 SPOOLES的主页是/linalg/spooles/spooles.2.2.html ,最新版是2.2,支持单线程,多线程和MPI三种计算模式。主页上的文档也比较齐全,对SPOOLES的使用介绍的也很清晰,仔细看看用不了很长时间就能解自己的方程组。如果说只是拿来用的话,Install.ps.gz ,ReferenceManual.ps.gz ,LinSol.ps.gz , AllInOne.ps.gz 这四个文档就足够用了,Install.ps.gz 不用多说是安装指南,ps格式,down下来转换成pdf看就行,其他几个也一样。ReferenceManual.ps.gz 是SPOOLES的功能参考手册,AllInOne.ps.gz 是比较详细的介绍了在单线程,多线程和MPI环境下应用SPOOLES解线性方程AX=Y的步骤,包括LU和QR两种因式分解的方法。不过AllInOne.ps.gz 里的解决方法步骤比较多,调用的函数也多了一点,所以就有人作了一个LinSol的库,也就是LinSol.ps.gz 中介绍的库。我在本文中介绍的也是应用LinSol的解决方法。 Spooles的安装 首先是安装SPOOLES。从网站的down下来,解压到某文件夹下,比如我们就解压缩到/home/mpi/spooles下。编译代码之前要修改一下Make.inc文件的某些内容,Make.inc这个文件会在makefile里include进去。需要改的地方有设定编译器,比如设为CC = gcc,MPI_INSTALL_DIR为mpi安装的路径,如在我的机器上是MPI_INSTALL_DIR = /home/mpi/mpich2,mpi的库位置MPI_LIB_PATH,如MPI_LIB_PATH = -L$(MPI_INSTALL_DIR)/lib,mpi的库MPI_LIBS可以按照自己需要修改,mpi的头文件地址,MPI_INCLUDE_DIR = -I$(MPI_INSTALL_DIR)/include。然后就可以编译程序了。 如果需要使用单线程的spooles库,只需在存放spooles的根目录下,make lib,这个命令将编译所需要的代码在spooles的根目录下生成一个spooles.a的静态库。不过make lib需要使用一个perl脚本,所以机器上需要安装了perl。如果机器没有perl的话,可以使用make global。不过在我的机器上make global没有成功,而且官方的安装文档也说make global不太保险。如果需要多线程版的spooles的话,就需要到MT/src目录下,make spoolesMT.a,就可以在这个目录下生成库文件spoolesMT.a,如果想把多线程库编译到根目录的spooles.a中的话,可以用,make makeLib。但是,官方安装文档中推荐使用第一种方式。MPI版的情况与多线程的类似,存放目录是在MPI/src中。 不过,直接使用spooles的api来计算的话相对来说有点烦琐,需要调用的函数和各种参数比较繁杂一点,所以在spooles的发行版中还附带了一个封装好了的辅助库,代码放在在LinSol目录下,叫做Wrapper Objects for Spooles,或者也称作是一种spooles的bridge,我就是用的这个工具。同样的也分为单线程,多线程和MPI版,分别在LinSol目录下的srcST,srcMT和srcMPI目录下。我们只需要在LinSol目录下make lib就可以分别编译生成这三个版本对应的静态库文件,以单线程版为例,就是Bridge.a。 解方程 简单的讲,用spooles的LinSol解一个AX=B方程可分为四个基本的步骤,初始化,因式分解,解出结果,释放资源。 初始化 初始化的过程首先要构造矩阵A,B矩阵和X。系数矩阵A是按照稀疏矩阵的模式来存储的,也就是仅仅保存非零元素既可,而B和X则是稠密矩阵。 a) 构造矩阵A 矩阵A使用InpMtx对象来存储。代码如下。 InpMtx *mtxA; mtxA = InpMtx_new() ; InpMtx_init(mtxA, coordType, inputMode, 0, 0) ; 参数coordType是i

您可能关注的文档

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档