标签: petsc

PETSc用ksp指南求解线性系统

我开始使用PETSc库来并行求解线性方程组.我已经安装了所有软件包,构建并成功运行了petsc/src/ksp/ksp/examples/tutorials /文件夹中的示例,例如ex.c

但我无法理解如何通过从文件中读取矩阵来填充矩阵A,X和B.

这里我提供了ex2.c文件中的代码:

/* Program usage:  mpiexec -n <procs> ex2 [-help] [all PETSc options] */ 

static char help[] = "Solves a linear system in parallel with KSP.\n\
Input parameters include:\n\
  -random_exact_sol : use a random exact solution vector\n\
  -view_exact_sol   : write exact solution vector to stdout\n\
  -m <mesh_x>       : number of mesh points in x-direction\n\
  -n <mesh_n>       : number of mesh points in y-direction\n\n";

/*T
   Concepts: KSP^basic parallel example;
   Concepts: KSP^Laplacian, 2d
   Concepts: Laplacian, 2d
   Processors: n
T*/

/* …
Run Code Online (Sandbox Code Playgroud)

parallel-processing linear-equation mpi petsc

6
推荐指数
1
解决办法
3838
查看次数

scipy稀疏矩阵作为petsc4py的输入

我似乎无法找到一种方法如何有效地将scipy稀疏矩阵加载csr_matrix到例如petsc4py矩阵中PETSc.Mat().createAIJ.我找到了这个帖子,但是我无法应用它.

我也很欣赏这个东西实际记录的指针.demo目录中的示例 只解释了一个部分,我看不到任何文档字符串.

python scipy petsc

6
推荐指数
1
解决办法
2111
查看次数

如何使用PETSc可扩展非线性方程求解器设置三维有限元求解器?

在3.3他们有一个炉排新闻 - 在GPU上仅使用PETC SNES进行FEM解决的一个例子.我是PETSc的新手并且有一个问题 - 我需要在3d空间中创建一个球体并对其施加力...所以我需要一个三维有限元模块(如果可能的话,在GPU上,我的情况下不需要MPI).然而,当我看到他们提供的简单例子时,我有点伤痕累累:

static const char help[] = "Testbed for FEM operations on the GPU.\n\n";

#include<petscdmplex.h>
#include<petscsnes.h>

#define NUM_FIELDS 1
PetscInt spatialDim = 0;

typedef enum {LAPLACIAN = 0, ELASTICITY} OpType;

typedef struct {
  PetscFEM      fem;               /* REQUIRED to use DMPlexComputeResidualFEM() */
  DM            dm;                /* The solution DM */
  PetscInt      debug;             /* The debugging level */
  PetscMPIInt   rank;              /* The process rank */
  PetscMPIInt   numProcs;          /* The number of processes */
  PetscInt …
Run Code Online (Sandbox Code Playgroud)

c 3d petsc

5
推荐指数
1
解决办法
1040
查看次数

do..while(0)c2hs中类似函数的C宏包装器

我想在C函数中包装一个类似函数的C宏(然后用一个{#fun ... #}块将它包装在Haskell中),但是c2hs预处理器会在do.. while(0)语法上扼杀; 这是代码:

module TestMacro where
#c

#define TestF1(n) do{if n==0 return 0;else return 1; } while(0)

int c_testF1(int x)
{ return ( TestF1(x) ); }

#endc
Run Code Online (Sandbox Code Playgroud)

这是错误:

c2hs TestMacro.chs
c2hs: C header contains errors:

TestMacro.chs.h:6: (column 12) [ERROR]  >>> Syntax error !
  The symbol `do' does not fit here.

make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我的目标是包装CHKERRQPETSc库的宏,定义如下petscerror.h(为了便于阅读,分成多行):

#define CHKERRQ(n)             
    do {if (PetscUnlikely(n)) 
        return PetscError(PETSC_COMM_SELF,__LINE__,PETSC_FUNCTION_NAME,__FILE__,n,PETSC_ERROR_REPEAT," ");} 
    while (0)
Run Code Online (Sandbox Code Playgroud)

c haskell c-preprocessor c2hs petsc

3
推荐指数
2
解决办法
190
查看次数

逗号在下面的陈述中的作用是什么?

当我在C/C++中使用这种语法时,正在阅读PETSc:

PetscInt i, n = 10, col[3], its;
PetscScalar neg_one = -1.0, one = 1.0, value[3];
Run Code Online (Sandbox Code Playgroud)

我不明白这里逗号的含义.它与元组有关吗?或者有什么东西超载?

c c++ syntax petsc

2
推荐指数
1
解决办法
104
查看次数

PETSc中"ASCII"和"二进制"格式的区别

我想知道二进制格式和ASCII格式之间的区别.问题是我需要使用PETSc进行一些矩阵操作,我的所有矩阵都存储在文本文件中.

PETSc有不同的规则来处理这些格式.我不知道这些格式是什么,更不用说我的文本文件是什么格式了.

有没有办法将一种格式转换为另一种格式?

这是一个基本问题; 详细的答案将真正帮助我理解这一点.

ascii file-format binaryfiles petsc

0
推荐指数
1
解决办法
8803
查看次数