问题标签 [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.
c - Petsc - 将分布式向量组合成局部向量
我正在使用 Petsc,我想组合一个分布式 Vec,以便每个进程都有一个完整的 Vec 副本。我有一个最小的例子,它从一个数据数组开始,从中构造一个 MPI Vec,然后尝试使用 VecScatter 来组合来自多个进程的向量。当我这样做时,本地向量只接收存储在第 0 个进程上的值,它不接收来自其他进程的信息。如何组合分布式向量以生成完整的局部向量?
输出:
fortran - 使用 PETSc 高效地顺序求解小型系统?
我需要解决一大组(独立的)Ax = b线性问题。这不能并行化(或者更具体地说,这是每个处理器的责任)。
Ax = b集合很小(最多说 10x10)但很密集(通常所有项都不为零),并且 A 矩阵和 RHS 向量都是完全不同且独立的。
使用 PETSc 解决大量小 Ax=b 问题的最有效/实用的方法是什么?
即,始终修改单个A矩阵和单个b向量并为每个系统求解的成本是多少?
fortran - 尽管分配和释放正确,但堆损坏
这是一个有趣的问题,似乎没有明显的解决方案。在将指针分配为 16 元素长PetscReal
向量、用数据填充它并从中提取数据后,deallocate()
抛出此错误:
我完全不知道这个错误是如何出现的,因为设置了数组崩溃的方式。
以下是与此问题相关的所有代码片段:
几件事:
/li>adj_local_area
被正确填充并且其边界不会被覆盖。如果您打印出填充数组的行的文字值,您会看到:其他几个数组以相同的方式分配、填充和释放。没有问题。如果我注释掉
deallocate(adj_local_area)
,代码运行良好,直到它尝试退出子例程并清除堆 - 它崩溃并显示相同的消息。我最初认为这是一个类型的事情(例如,
real*8
被写入real*4
向量中),但是放入数组中的值都是PetscReal
,与向量本身的类型相同(我相信PetscReal
是按照我的配置编译real*4
的)。
有任何想法吗?如果您需要更多代码,请告诉我,我可以提供。
petsc - 如何仅从根处理器调用 PetscFinalize?
在我的 Fortran 程序中,我只在根处理器调用外部函数。我进行了一些检查以确保该功能正常工作。如果它不起作用,那么我stop
程序并调用PetscFinalize
. 例如:
但是,我注意到在运行时,如果出现错误external_function
,程序会挂起并且没有正确完成。
我的问题是:在根处理器处终止程序的适当方法是什么?
python - Ubuntu 中 PETsc 的“内存不足”问题
我正在运行一个使用 2 个并行组的 OpenMDAO 代码。我已经在虚拟 python 环境中安装了 PETSc4py 和 mpi4py。运行代码时出现以下错误。错误如下:“内存不足。分配:0,由进程使用:236814336”这是完整的错误消息:
我使用以下代码调用该过程:
下面是 IDF 优化的代码:
IDF 优化的 MDA 在这里:
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
. 有人有想法吗?谢谢您的帮助!
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 的开发人员)可以做些什么来让智能感知工作吗?
例子:
在此示例中,当尝试使用Vec
petsc4py 中的对象时,doingu_p.duplicate()
找不到函数,建议只是重复之前的函数。但是,使用array
from numpy,u_n.copy()
效果很好。
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
文件:
python - 从 _DMDA_Vec_array 到 Vec 的 petsc4py 映射以在 TS 中使用
我已经初始化ts = PETSc.TS().create()
并尝试通过一些初始分布来解决ts.setSolution(u)
并得到一个类型错误。
似乎它想要该类型Vec
,但作为_DMDA_Vec_array
.
设置如下:
- 创造
dmda = PETSc.DMDA().create(<...>)
- 创建一个全局向量
x = dmda.createGlobalVec()
- 得到我们的 IC 向量:
ic = dmda.getVecArray(x)
- 填充 IC 矢量
- 尝试
ts.setSolution(ic)
但它不喜欢那ic
是一个_DMDA_Vec_array
对象
到目前为止,我发现了两件事:
ic = dmda.getVecArray(x)
正在做它应该做的——创建一个_DMDA_Vec_array
对象- 在常规 PETSc 中,等效于使用该函数
DMDAVecGetArray()
,然后在填充值后,运行该函数DMDAVecRestoreArray()
将对象转换_DMDA_Vec_array
回.Vec
ts
_DMDA_Vec_array
Python 中用于Vec
键入的等效协议/工作流是什么?
python - 将 ascii 文件中的稀疏矩阵读入 python
我有一个使用并行 PETSc 稀疏矩阵格式的 Fortran 代码mpiaij
。
我想对这些矩阵进行一些分析,所以我想将它们读入 python。
我尝试了 Fortran 中的二进制输出和 petsc4py 中的二进制输入,但显然它们不兼容。Petsc HDF5 输出会创建不可读的 HDF5 文件,因此我现在只能使用 ASCII 格式。
在 ascii 中,矩阵如下所示:
有没有一种优雅的方法可以将它解析成 python?