Linux系统下用Code::Blocks配置Petsc

安装Petsc

Petsc的安装比较方便了,可以查看官网命令安装
官网地址:https://www.mcs.anl.gov/petsc/index.html

1.下载安装包
2.解压
3.编译安装
On systems where MPI and BLAS/LAPACK are installed.

./configure
make all test

Or to specify compilers and have PETSc download and install MPI and BLAS/LAPACK (when they are not already on your machine)

./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-mpich --download-fblaslapack
make all test

配置Code::Blocks

Settings->Compiler->Search directories
compiler选项中添加:(petsc安装目录)/include 例如:/home/username/petsc-3.10.3/include
linker选项中添加:(petsc安装目录)/arch-linux2-c-debug/lib 例如:/home/username/petsc-3.10.3/arch-linux2-c-debug/lib

Settings->Compiler->Linker settings
link libraries选项中添加:(petsc安装目录)/arch-linux2-c-debug/lib/libpetsc.so
例如:/home/username/petsc-3.10.3/arch-linux2-c-debug/arch-linux2-c-debug/lib/libpetsc.so

测试代码

自带的示例文件
(petsc安装目录)/src/ksp/ksp/examples/tests


static char help[] = "Solves a tridiagonal linear system.  Designed to compare SOR for different Mat impls.\n\n";

#include <petscksp.h>

int main(int argc,char **args)
{
  KSP            ksp;      /* linear solver context */
  Mat            A;        /* linear system matrix */
  Vec            x,b;      /* approx solution, RHS */
  PetscInt       Ii,Istart,Iend;
  PetscErrorCode ierr;
  PetscScalar    v[3] = {-1./2., 1., -1./2.};
  PetscInt       j[3];
  PetscInt       k=15;
  PetscInt       M,m=420;

  ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr;
  ierr = PetscOptionsGetInt(NULL,NULL,"-k",&k,NULL);CHKERRQ(ierr);
  ierr = PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL);CHKERRQ(ierr);

  ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);
  ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
  ierr = KSPGetOperators(ksp,&A,NULL);CHKERRQ(ierr);

  ierr = MatSetSizes(A,m,m,PETSC_DETERMINE,PETSC_DETERMINE);CHKERRQ(ierr);
  ierr = MatSetFromOptions(A);CHKERRQ(ierr);
  ierr = MatSetUp(A);CHKERRQ(ierr);
  ierr = MatGetOwnershipRange(A,&Istart,&Iend);CHKERRQ(ierr);
  ierr = MatGetSize(A,&M,NULL);CHKERRQ(ierr);
  for (Ii=Istart; Ii<Iend; Ii++) {
    j[0] = Ii - k;
    j[1] = Ii;
    j[2] = (Ii + k) < M ? (Ii + k) : -1;
    ierr = MatSetValues(A,1,&Ii,3,j,v,INSERT_VALUES);CHKERRQ(ierr);
  }
  ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatCreateVecs(A,&x,&b);CHKERRQ(ierr);

  ierr = VecSetFromOptions(b);CHKERRQ(ierr);
  ierr = VecSet(b,1.0);CHKERRQ(ierr);
  ierr = VecSetFromOptions(x);CHKERRQ(ierr);
  ierr = VecSet(x,2.0);CHKERRQ(ierr);

  ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr);

  ierr = VecDestroy(&b);CHKERRQ(ierr);
  ierr = VecDestroy(&x);CHKERRQ(ierr);
  ierr = KSPDestroy(&ksp);CHKERRQ(ierr);

  ierr = PetscFinalize();
  return ierr;
}

完成编译

Build Log信息:

mpicc -Wall -g -I/home/username/petsc-3.10.3/include -c /home/username/workspace/testpetsc/main.c -o obj/Debug/main.o
mpicxx -L/home/username/petsc-3.10.3/arch-linux2-c-debug/lib -o bin/Debug/testpetsc obj/Debug/main.o   /home/username/petsc-3.10.3/arch-linux2-c-debug/lib/libpetsc.so
Output file is bin/Debug/testpetsc with size 148.62 KB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))

写在最后

看不懂以上的可以看一下这篇文章以及文章里面的链接文章:https://blog.csdn.net/qq_34563294/article/details/85920491

版本3.2-p7 并行可扩展科学计算工具箱(PETSc)   Portable, ExtensibleToolkit for Scientific Computation科学计算可移植扩展工具包。   PETSc(Portable, Extensible Toolkit for Scientific Computation) 是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,由Argonne国家实验室开发的可移植可扩展科学计算工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc所有消息传递通信均采用MPI标准实现。   PETSc用C语言开发,遵循面向对象设计的基本特征,用户基于PETSc对象可以灵活开发应用程序。目前,PETSc支持Fortran 77/90、C和C++编写的串行和并行代码。   PETSc是系列软件和库的集合,三个基本组件SLES、SNES和TS本身基于BLAS、LAPACK、MPI 等库实现,同时为TAO、ADIC/ADIFOR、Matlab、ESI 等工具提供数据接口或互操作功能,并具有极好的可扩展性能。PETSc为用户提供了丰富的Krylov子空间迭代方法和预条件子,并提供错误检测、性能统计和图形打印等功能。   线性方程组求解器是PETSc的核心组件之一,PETSc几乎提供了所有求解线性方程组的高效求解器,既有串行求解也有并行求解,既有直接法求解也有迭代法求解。对于大规模线性方程组, PETSc提供了大量基于Krylov子空间方法和各种预条件子的成熟而有效的迭代方法,以及其他通用程序和用户程序的接口。PETSc具有一般库软件所具备的高性能、可移植等优点,而且面向对象技术使得PETSc内部功能部件的使用非常方便,接口简单而又适用面广,可以缩短开发周期,减少工作量。   如今,越来越多的应用程序在PETSc环境上开发,并逐渐显示出PETSc在高效求解大规模数值模拟问题方面的优势和威力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值