将使用 SLEPc 获得的特征向量写入 C 中的文件

问题描述 投票:0回答:1

我最近开始使用

SLEPc
对角化大型稀疏矩阵,利用
MPI
。一切正常,除了最后我想将特征向量写入文件时。我这样做:

PetscViewerASCIIOpen(PETSC_COMM_WORLD, "./data/eigvecs.txt", &viewer);
PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_PYTHON);
EPSVectorsView(eps, viewer);

我用

mpiexec -n 3 ./app
运行我的代码。生成的文件
eigvecs.txt
看起来像这样:

Vec Object: Xr0_EPS_0x84000004_0 3 MPI processes
 type: mpi
Process [0]
-0.909229
0.415619
Process [1]
-0.00206267
0.00410161
Process [2]
0.0145993
0.01813
Vec Object: Xi0_EPS_0x84000004_0 3 MPI processes
 type: mpi
Process [0]
0.
0.
Process [1]
0.
0.
Process [2]
0.
0.

所以每个特征向量的分量是并行打印的,不同的特征向量之间用一串0隔开,也是并行打印的。

我的问题:有没有更好的方法来做到这一点?因为稍后我想在

python
julia
中读取此文件并进行一些计算。如果不是,以
python
julia
阅读此文件的最佳方式是什么?

谢谢!

python c mpi petsc
1个回答
0
投票

不是转储到 ascii 并在输入时解析它,而是使用

PETSCVIEWERHDF5
转储 hdf5 文件,并使用 python 的 hdf5 模块读取文件。这样会更快,并且不会产生转换损失。

© www.soinside.com 2019 - 2024. All rights reserved.