问题标签 [petsc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
535 浏览

c - Petsc - 将分布式向量组合成局部向量

我正在使用 Petsc,我想组合一个分布式 Vec,以便每个进程都有一个完整的 Vec 副本。我有一个最小的例子,它从一个数据数组开始,从中构造一个 MPI Vec,然后尝试使用 VecScatter 来组合来自多个进程的向量。当我这样做时,本地向量只接收存储在第 0 个进程上的值,它不接收来自其他进程的信息。如何组合分布式向量以生成完整的局部向量?

输出:

0 投票
3 回答
170 浏览

fortran - 使用 PETSc 高效地顺序求解小型系统?

我需要解决一大组(独立的)Ax = b线性问题。这不能并行化(或者更具体地说,这是每个处理器的责任)。

Ax = b集合很小(最多说 10x10)但很密集(通常所有项都不为零),并且 A 矩阵和 RHS 向量都是完全不同且独立的。

使用 PETSc 解决大量小 Ax=b 问题的最有效/实用的方法是什么?

即,始终修改单个A矩阵和单个b向量并为每个系统求解的成本是多少?

0 投票
0 回答
199 浏览

fortran - 尽管分配和释放正确,但堆损坏

这是一个有趣的问题,似乎没有明显的解决方案。在将指针分配为 16 元素长PetscReal向量、用数据填充它并从中提取数据后,deallocate()抛出此错误:

我完全不知道这个错误是如何出现的,因为设置了数组崩溃的方式。

以下是与此问题相关的所有代码片段:

几件事:

  1. adj_local_area被正确填充并且其边界不会被覆盖。如果您打印出填充数组的行的文字值,您会看到:

    /li>
  2. 其他几个数组以相同的方式分配、填充和释放。没有问题。如果我注释掉deallocate(adj_local_area),代码运行良好,直到它尝试退出子例程并清除堆 - 它崩溃并显示相同的消息。

  3. 我最初认为这是一个类型的事情(例如,real*8被写入real*4向量中),但是放入数组中的值都是PetscReal,与向量本身的类型相同(我相信PetscReal是按照我的配置编译real*4的)。

有任何想法吗?如果您需要更多代码,请告诉我,我可以提供。

0 投票
1 回答
31 浏览

petsc - 如何仅从根处理器调用 PetscFinalize?

在我的 Fortran 程序中,我只根处理器调用外部函数。我进行了一些检查以确保该功能正常工作。如果它不起作用,那么我stop程序并调用PetscFinalize. 例如:

但是,我注意到在运行时,如果出现错误external_function,程序会挂起并且没有正确完成。

我的问题是:在根处理器处终止程序的适当方法是什么?

0 投票
0 回答
248 浏览

python - Ubuntu 中 PETsc 的“内存不足”问题

我正在运行一个使用 2 个并行组的 OpenMDAO 代码。我已经在虚拟 python 环境中安装了 PETSc4py 和 mpi4py。运行代码时出现以下错误。错误如下:“内存不足。分配:0,由进程使用:236814336”这是完整的错误消息:

我使用以下代码调用该过程:

下面是 IDF 优化的代码:

IDF 优化的 MDA 在这里:

0 投票
1 回答
1611 浏览

ubuntu - 如何在 WSL 中的 PETSc 编译期间解决“致命错误:mpi.h:没有这样的文件或目录”

我正在尝试在 windows 的 windows 子系统中运行的 Ubuntu 上安装 PETSc,但官方网页上详述的步骤导致编译错误。

首先,我克隆了 PETSc 存储库并运行了配置命令:./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-openmpi --download-fblaslapack,它起作用了。(我之前已经安装了 OpenMPI,但是如果没有--download-openmpi开关,configure 命令不起作用。)然后我执行了 ./configure 代码(make PETSC_DIR=/mnt/c/Stuff/Petsc/petsc PETSC_ARCH=arch-linux2-c-debug all)输出的 make 命令并得到了这个错误:

(完整的 make 输出在这里,上面的错误只是一小部分。)显然 PETSc make 例程找不到 MPI,但我已经安装了它:运行which mpicc给出了预期的/usr/bin/mpicc. 有人有想法吗?谢谢您的帮助!

0 投票
1 回答
301 浏览

python - 带有 python C 扩展模块的 VSCode Itellisense (petsc4py)

我目前正在使用一个名为 petsc4py ( https://pypi.org/project/petsc4py/ ) 的 python 模块。我的主要问题是,典型的智能感知功能似乎都不适用于这个模块。

我猜这可能与它是一个 C 扩展模块有关,但我不确定为什么会发生这种情况。我最初认为智能感知无法查看“.so”文件,但似乎 numpy 能够对array对象执行此操作,在我的情况下,该对象位于一个名为的文件multiarray.cpython-37m-x86_64-linux-gnu中(查看下面的示例)。

有谁知道为什么我在 petsc4py 模块中看到这种行为。我(或 petsc4py 的开发人员)可以做些什么来让智能感知工作吗?

例子:

在此示例中,当尝试使用Vecpetsc4py 中的对象时,doingu_p.duplicate()找不到函数,建议只是重复之前的函数。但是,使用arrayfrom numpy,u_n.copy()效果很好。

petsc4py 示例 以 numpy 为例

0 投票
0 回答
107 浏览

c - Petsc 代码在 2990WX 平台上没有并行加速

当我在旧的 Intel Xeon 平台(X5650@2.67GHz)上运行我的代码时,并行效率似乎不错,80%~95% 的速度提高了两倍的处理器使用率。但是,当我在 AMD 2990WX 平台上运行相同的代码时,我无法通过任何数量的线程获得任何加速。

我很困惑,为什么我的新 AMD 平台的并行效率如此糟糕,我几乎不知道我的代码中的错误设置在哪里。

我有一个基于 PetSc 库的 C 代码来求解一个非常大的稀疏线性方程,我代码中的并行部分由 PetSc 提供,它自动涉及 MPI(我只是将矩阵构建任务安排到每个进程中,不添加任何其他通信程序)。

计算平台系统均为Centos7,MPI库版本均为MPICH3,PetSc版本均为3.11。XEON 平台上的 BLAS 包含在 MKL 中,而 AMD 平台上的 BLAS 包含在 BLIS 库中。

当程序在AMD平台上运行时,我用它top来检查处理器的运行情况,发现CPU使用率实际上随着运行设置的不同而不同:

对于 32 个进程:

对于 64 个进程:

至强平台:

mac8文件:

0 投票
0 回答
58 浏览

python - 从 _DMDA_Vec_array 到 Vec 的 petsc4py 映射以在 TS 中使用

我已经初始化ts = PETSc.TS().create()并尝试通过一些初始分布来解决ts.setSolution(u)并得到一个类型错误。

似乎它想要该类型Vec,但作为_DMDA_Vec_array.

设置如下:

  1. 创造dmda = PETSc.DMDA().create(<...>)
  2. 创建一个全局向量x = dmda.createGlobalVec()
  3. 得到我们的 IC 向量:ic = dmda.getVecArray(x)
  4. 填充 IC 矢量
  5. 尝试ts.setSolution(ic)但它不喜欢那ic是一个_DMDA_Vec_array对象

到目前为止,我发现了两件事:

  1. ic = dmda.getVecArray(x)正在做它应该做的——创建一个_DMDA_Vec_array对象
  2. 在常规 PETSc 中,等效于使用该函数DMDAVecGetArray(),然后在填充值后,运行该函数DMDAVecRestoreArray()将对象转换_DMDA_Vec_array回.Vects

_DMDA_Vec_arrayPython 中用于Vec键入的等效协议/工作流是什么?

0 投票
2 回答
246 浏览

python - 将 ascii 文件中的稀疏矩阵读入 python

我有一个使用并行 PETSc 稀疏矩阵格式的 Fortran 代码mpiaij

我想对这些矩阵进行一些分析,所以我想将它们读入 python。

我尝试了 Fortran 中的二进制输出和 petsc4py 中的二进制输入,但显然它们不兼容。Petsc HDF5 输出会创建不可读的 HDF5 文件,因此我现在只能使用 ASCII 格式。

在 ascii 中,矩阵如下所示:

有没有一种优雅的方法可以将它解析成 python?