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