问题标签 [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 回答
90 浏览

mpi - 在子通信器上调用 PetscInitialize 的优势

我想知道是否有人知道为什么在子通信器上调用 PetscInitialize 可能是有利的?例如,我有一个问题,我在 4 个内核上运行,但其中只有两个需要使用 Petsc。我可以通过设置在仅包括这两个进程的子通信器上调用 PetscInitialize

PETSC_COMM_WORLD=mySubCommunicator

但我不能只初始化它MPI_COMM_WORLD并只在子通信器上调用 Petsc 例程吗?我问的原因是它会简化我的代码来初始化MPI_COMM_WORLD,但我不想因此遭受任何负面后果。感谢您的任何评论。

0 投票
0 回答
235 浏览

c - 使用 PETSc 实现预处理共轭梯度

我正在编写一些 C 代码来在大约 4000 万个观测值的大型数据集上运行 OLS。我对使用不完全 Cholesky (ICC) 分解来获得预处理器的预处理共轭梯度算法 (PCG) 很感兴趣。我有一个 MATLAB 代码可以正确执行相同的操作,并将其用作基准以确保 C 脚本正确。简而言之,我想使用 C 复制 MATLAB 的“ichol”和“pcg”程序。

目前我正在为 PCG 和 ICC 使用 PETSc C 库。我使用 R 读入数据集并计算 X'X 和 X'Y,并将两者都输出到文本文件以供 C 使用。矩阵采用坐标稀疏格式(3 个向量 - 一个带有行索引,一个带有列索引,和一个具有所有非零矩阵条目的值)。完整矩阵的大小约为 800 万乘 800 万,其中包含约 1.66 亿个非零条目。

我在 C 中读入文件,构造矩阵和向量,并使用 PETSc 的程序 KSPSolve 运行 PCG,将线性系数 b 的向量输出到文本文件。代码顺利完成,但我得到的解决方案是荒谬的 - 系数约为 200 万,而我应该得到 2 或 3 之类的东西(通过运行 MATLAB 代码)。

但是,当我将数据集限制为较小的子样本(例如,前 300,000 个观察值)时,C 代码和 MATLAB 代码的结果非常吻合。经过反复试验,我确定结果一致,直到达到非常特定的样本大小 (363,855),此时 C 代码结果开始出现差异。分歧并不是突然爆发的——起初 C 代码和 MATLAB 代码之间的最大绝对差值在 700 左右,但很快增长到上面提到的 200 万。我查看了 PETSc 的内部收敛监控统计数据,程序本身似乎认为真实残差 (X'YX'Xb) 的范数下降到相当低的水平(10^(-3) 的顺序),而如果我计算使用 C 的输出在 MATLAB 中手动计算残差,不出所料,我得到了非常大的数字。

我正在寻找关于这里可能出现什么问题以及采取哪些步骤来诊断/修复它的建议。我对C相当陌生,所以基本错误绝对是可能的。

代码的相关部分粘贴在下面:

0 投票
1 回答
715 浏览

intel - 使用英特尔工具构建 PETSc

我想用英特尔编译器、OpenMP、MPI、MKL 安装 PETSc 库。我不确定如何正确创建配置文件。我的电脑上安装了 intel parallel studio xe 2017。我检查了 PETSc 目录中的 ./configure --help 选项,但有很多选项。我不应该如何将它与Intel-mkl-link-line-advisor匹配。以前有人这样做过吗?

0 投票
1 回答
716 浏览

compilation - 使用 cygwin 编译错误

在 cygwin 上安装 petsc 库后,我正在编译开源代码。我试图制作该文件,但出现以下错误:

$ 制作 TopOpt

我使用的make文件如下:

我认为有些东西可能没有联系。任何人都见过类似的东西并知道如何解决?谢谢谢谢!

0 投票
1 回答
522 浏览

cmake - 不能将 petsc 与 cmake 一起使用

我试图建立一个使用 PETSc 的项目。为此,我从https://github.com/jedbrown/cmake-modules下载了 cmake 模块。当我尝试构建项目时,我收到以下错误消息:

我已经下载了 openMPI(cygwin 包)并使用以下方法构建了 Petsc:

"--prefix="where_petsc_will_be_installed" --with-clanguage=C --with-mpi --with-cc=mpicc --with-cxx=0 --with-fc=0 --download-f2cblaslapack --with-调试=是”

并使用以下方式导出路径:

为什么我会收到这些错误以及如何解决它们?

0 投票
1 回答
192 浏览

python - 无法并行调用基于 PETSc/MPI 的外部代码 OpenMDAO

我正在编写一个 OpenMDAO 问题,它调用并行组中的一组外部代码。这些外部代码之一是基于 PETSc 的 fortran FEM 代码。我意识到这可能存在问题,因为 OpenMDAO 也使用 PETSc。目前,我正在使用 python 的子进程调用组件中的外部代码。

如果我串行运行我的 OpenMDAO 问题(即 python2.7 omdao_problem.py),一切,包括外部代码,都可以正常工作。但是,当我尝试并行运行它时(即 mpirun -np 4 python2.7 omdao_problem.py),它会一直运行到子进程调用,此时我收到错误:

我不能对此做太多,但对我来说,问题来自使用基于 MPI 的 python 代码调用另一个启用 MPI 的代码似乎是合理的。我尝试在外部代码的位置使用非 mpi“hello world”可执行文件,并且可以由并行 OpenMDAO 代码调用而不会出错。我不需要外部代码实际并行运行,但我确实需要使用 PETSc 求解器等,因此对 MPI 的固有依赖。(我想我可以考虑同时使用支持 MPI 和不支持 MPI 的 PETSc 构建?如果可能的话,我宁愿不这样做,因为我可以看到这很快就会变得一团糟。)

我发现这个讨论似乎提出了一个类似的问题(并进一步指出,正如我所做的那样,在 MPI 代码中使用子进程是一个禁忌)。在这种情况下,看起来使用 MPI_Comm_spawn 可能是一种选择,即使它不适合该用途。知道这是否可以在 OpenMDAO 的上下文中工作吗?寻求使其发挥作用的其他途径?非常感谢任何想法或建议。

0 投票
0 回答
201 浏览

macos - 无法使用 f2py 链接大型 PETSc/SLEPc Fortran 代码

我正在尝试使用 f2py 为我的同时使用 PETSc 和 SLEPc 的 Fortran 代码创建一个 python 模块(这个问题与这篇文章密切相关,但是那里的讨论无法解决我的问题——请参阅底部的评论邮政)。代码由许多文件和子程序组成,但我只需要访问 python 中最外层的 main/driver 函数。我采取的第一步是使用 SLEPc 提供的 makefile 模板来生成所有目标文件(最终链接失败,因为外部函数现在是子程序而不是主程序,但我现在不用担心,因为我'就在目标文件之后)。

从那里,我尝试了两种方法。首先是简单地调用f2py如下:

这似乎可行,但在尝试导入 python 时,找不到 SLEPc(并且,我认为是 PETSc)对象/函数:

第二种方法假设我也需要链接到 SLEPc/PETSc 库。因此,我在 makefile 中添加了一行:

运行“make modname.so”后f2py,无法完全运行。这是输出:

在链接到 PETSc 的 fortran 代码上使用 f2py的 OP表明他能够通过将环境变量设置为 PETSc 库来绕过使用-Wl,-rpath标志,这在此处似乎也是一个问题。LD_LIBRARY_PATH但是,如果我做同样的事情(设置为 SLEPc 库,我相信这也意味着 PETSc 库),这两种方法都对我没有帮助。有人可以建议我可能使用的方法吗?

更新-Wl,rpath:要求提供有关错误及其来源的更多信息。据我了解,这些标志来自使用 SLEPc/PETSc 链接。因此,在我的 makefile 中,它们来自${SLEPC_EPS_LIB}变量。解释时,完整的命令非常长,但无论如何我都会包含它,以防可以从那里挖掘某些东西。请记住,我在上面的示例中没有使用实际的文件名——为了清楚起见,我只是简化了。下面的文件名会有所不同。

f2py -c -m iga_blade_py run_analysis.f90 modules.o force.o param.o cname.o curve_input_nrb_mc.o shell_input_nrb_mp.o shell_reduce_node.o shell_input_nrb.o material_input.o material_calculate.o shell_laminate2.o iosol.o shell_gp_info.o shell_profile_vector。 o shell_genIEN_INN.o shell_genSparStruc.o shell_genGP_GW.o shell_eval_SHAPE.o shell_dersbasisfuns.o shell_e3LRhs_KLShell.o shell_e3LRhs_KLShell_pen_disp.o shell_e3LRhs_KLShell_pen_rot.o shell_KL_geo.o cross_prod.o shell_BCLhs_3D.o shell_FillSparseMat_3D.o shell_SparseMatLoc_3D.o shell_SparseCG.o shell_skyline.o shell_SparseProd.o shell_IntElmAss_post2 .o shell_e3LRhs_KLShell_post.o curve_element_project.o shell_mnrb_find_search_locs.o shell_nrb_find_point.o patch_point_proj.o petsc_genSparStruc.o viz_read_mesh_points.o driver.o input_shell.o solflow.o shell_IntElmAss.o petsc_fillMat。o shell_IntElmAss_pen.o petsc_prepSolve.o shell_allocate_LRhs.o petsc_rank.o solflow_lin_buck.o solflow_vibr.o shell_IntElmAss_mass.o -Wl,-rpath,/usr/local/Cellar/slepc/3.7.3_4/real/lib -L/usr/local /Cellar/slepc/3.7.3_4/real/lib -lslepc -Wl,-rpath,/usr/local/opt/arpack/lib -L/usr/local/opt/arpack/lib -lparpack -larpack -Wl,- rpath,/usr/local/Cellar/petsc/3.7.5/real/lib -L/usr/local/Cellar/petsc/3.7.5/real/lib -lpetsc -L/usr/local/opt/superlu_dist/lib -lsuperlu_dist -Wl,-rpath,/usr/local/opt/mumps/libexec/lib -L/usr/local/opt/mumps/libexec/lib -lcmumps -ldmumps -lsmumps -lzmumps -lmumps_common -lpord -Wl,- rpath,/usr/local/opt/parmetis/lib -L/usr/local/opt/parmetis/lib -lparmetis -Wl,-rpath,/usr/local/opt/metis/lib -L/usr/local/opt /metis/lib -lmetis -Wl,-rpath,/usr/local/opt/hypre/lib -L/usr/local/opt/hypre/lib -lHYPRE -Wl,-rpath,/usr/local/opt/libevent/lib -L/usr/local/opt/libevent/lib -Wl,-rpath,/usr/local/Cellar/open-mpi/2.0.2/lib -L/usr/local /Cellar/open-mpi/2.0.2/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib -Wl,-rpath,/System/Library/Frameworks/OpenGL.framework/Versions /Current/Libraries -L/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries -Wl,-rpath,/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang /8.0.0/lib/darwin -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/lib/darwin -lclang_rt.osx -lc++ -Wl,- rpath,/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin -L/Applications/Xcode.app/Contents/Developer/工具链/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin -lclang_rt。osx -Wl,-rpath,/usr/local/opt/scalapack/lib -L/usr/local/opt/scalapack/lib -lscalapack -Wl,-rpath,/usr/local/opt/suite-sparse/lib - L/usr/local/opt/suite-sparse/lib -lumfpack -lklu -lcholmod -lbtf -lccolamd -lcolamd -lcamd -lamd -lsuitesparseconfig -Wl,-rpath,/usr/local/opt/sundials/lib -L/ usr/local/opt/sundials/lib -lsundials_cvode -lsundials_nvecserial -lsundials_nvecparallel -llapack -lblas -Wl,-rpath,/usr/local/opt/netcdf/lib -L/usr/local/opt/netcdf/lib -lnetcdf - wl,-rpath,/usr/local/opt/hdf5/lib -L/usr/local/opt/hdf5/lib -lhdf5_hl -lhdf5 -Wl,-rpath,/usr/local/opt/hwloc/lib -L/ usr/local/opt/hwloc/lib -lhwloc -Wl,-rpath,/usr/local/opt/fftw/lib -L/usr/local/opt/fftw/lib -lfftw3_mpi -lfftw3 -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh - lgfortran -Wl,-rpath,/usr/local/Cellar/gcc/6.3.0_1/lib/gcc/6/gcc/x86_64-apple-darwin15.6.0/6.3。0 -L/usr/local/Cellar/gcc/6.3.0_1/lib/gcc/6/gcc/x86_64-apple-darwin15.6.0/6.3.0 -Wl,-rpath,/usr/local/Cellar/gcc/ 6.3.0_1/lib/gcc/6 -L/usr/local/Cellar/gcc/6.3.0_1/lib/gcc/6 -lgfortran -lgcc_ext.10.5 -lquadmath -lm -lclang_rt.osx -lc++ -lclang_rt.osx - wl,-rpath,/usr/local/opt/libevent/lib -L/usr/local/opt/libevent/lib -Wl,-rpath,/usr/local/Cellar/open-mpi/2.0.2/lib - l/usr/local/Cellar/open-mpi/2.0.2/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib -Wl,-rpath,/System/Library/Frameworks/ OpenGL.framework/Versions/Current/Libraries -L/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries -ldl -lmpi -lSystem -Wl,-rpath,/Applications/Xcode.app/Contents/Developer/工具链/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../ lib/clang/8.0.0/lib/darwin -lclang_rt.osx -ldl

已解决:我最终能够找到几种不同的方法来解决这个问题。最直接的方法与我描述的第二种(基于makefile)方法基本相同,但我手动从变量中删除了每个-Wl,rpath命令。SLEPC_EPS_LIB此外,我通过 PETSc 邮件列表了解到,可以仅使用 f2py 来生成必需的 .c、.f90 和 .pyc 文件。然后,您可以自己编译,链接必要的库。显然这涉及更多,但它也是一种选择。

0 投票
0 回答
113 浏览

mpi - 具有多个进程的 Slepc shell 矩阵

我目前对具有特征值 lambda 和特征向量 $X$ 的 $AX = \lambda BX$ 形式的广义特征值方程使用显式矩阵存储。$A$ 和 $B$ 是由块组成的五对角线,Hermitian 并且每个块也是 Hermitian。

问题在于,对于大型模拟,内存使用会失控。因此,我想切换到 Shell 矩阵。一个额外的好处是,我可以避免大量信息的重复,因为 A 和 B 都是通过有限差分填充的。即函数 X 的一阶导数可以近似为 $X_i' = \frac{X_{i+1}-X_{i-1}}{\Delta}$,使得同一条信息出现在两个地方。对于更高的订单,情况会变得更糟。

当我尝试在 Fortran 中实现这一点时,使用多个 MPI 进程,每个进程都包含 $A$ 和 $B$ 行的一部分,我偶然发现了以下问题:要执行矩阵乘法,需要 $X 的向量信息由于 $A$ 和 $B$ 的非对角元素,$ 在每个等级的间隔结束时来自其他等级。

我通过使用 MPI all to all 命令找到了一个概念性解决方案,这些命令将信息从这些“幻影”区域传递到隔壁的行列。但是,我担心这可能不是最便携的,也不是太优雅。

有什么方法可以自动化从 Petsc / Slepc 中的幽灵区域获取信息的过程?

0 投票
1 回答
378 浏览

c++ - PETSc 的通用 Makefile

我正在使用如下通用makefile:

目录结构如下所有.cpp文件都包含在目录src/中,相应的头文件( .h)文件存在于目录includes/中。现在我想向它添加 PETSc 库。我怎么做?

0 投票
0 回答
178 浏览

parallel-processing - mpirun 模式下的 PETSC 时间步进


亲爱的,我是学习 PETSC 的大一新生。我基于 PETSC 库编写了一个非常简单的一维扩散问题代码(只是简单的 FDM 代码)。我想在每个时间步中使用 PETSC 的并行求解器。这是伪代码:

这段代码在顺序模式下工作得很好(矩阵和向量都基于 MPI 类型),但是当我尝试使用 mpirun -np 4 ./a.out 时,结果完全错误。我猜 mpirun 使时间步长循环也并行,但我不确定。

所以,我的问题是:

  1. 如何在循环中使用 PETSC 的并行求解器,或者换句话说,如何在顺序时间步长中使用并行求解器或 mpirun?

  2. 我是否可以使用mpirun -np 4 ./myapp并行求解器,但对于时间步进和结果输出,它们仍然是顺序的?在仿真中,时间步长和结果输出必须一一执行,所以我只需要并行求解器,而不是整个程序。

谢谢!