回答:
マトリックスマーケットは、並列読み取り用のひどいフォーマットなので、より良い並列フォーマットに前処理することをお勧めします。マトリックスのサイズは非常に小さいため、パフォーマンスは問題になりませんが、最も簡単で最も一般的なことは、PythonまたはMatlab / Octaveを使用して、マトリックスマーケットファイルをPETScバイナリ形式で書き込むことMatLoad()
です。たとえば、あなたが前処理のために、このPythonコードを使用することができます(追加$PETSC_DIR/bin/pythonscripts
あなたにPYTHONPATH
)
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)
この時点でファイルにベクトルを書き込むこともできます。システムを読み取って解決したいだけの場合は、src/ksp/ksp/examples/tutorials/ex10.c
(-f petscmatrix
先ほど書いたバイナリファイルを読み取るオプションを使用して)使用できます。
実際のアプリケーションでは、任意の形式でファイルをディスクに書き込むワークフローを回避する必要があります。問題のドメイン分解表現を使用して、行列を並列に組み立てることがはるかに優れています。PETScのほとんどの例はこのように書かれています。