0

C++プログラムをAGMGライブラリのfortrandagmg.f90ルーチンにリンクしました。最初にスパース行列はEigenライブラリによってCRS形式で作成され、次にそれをfortranルーチンに必要な形式に変換します。AGMGが実行され、ゼロ以外の数が計算され、未知数の数が表示されます。しかし、その後、突然セグメンテーション違反が表示されます。その背後にある理由がわかりません。

    int jatest[NNZ];
int iatest[nodes+1];
double bftest[nodes];
double VXtest[nodes];
// code to convert Af into a, ja, ia vectors for AGMG
double *aptr; int* japtr; int* iaptr;
aptr = Af.valuePtr();
japtr = Af.innerIndexPtr();
iaptr = Af.outerIndexPtr();
for (i = 0; i < NNZ ; i++ ){
  atest[i] = aptr[i];
  jatest[i] = japtr[i] + 1;
 // cout << atest[i] << "\t" << japtr[i] << endl;
}
for ( i = 0; i <= nodes; i++){
  iatest[i] = iaptr[i] + 1;
   }
 dagmg_(nodes,atest,jatest,iatest,bftest,VXtest,ijob,iprint,nrest,iter,tol);

出力は次のようになります。

* ENTERING AGMG * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * **

未知数の数:17 ** 非ゼロ:51(行あたり:3.00)

セグメンテーション違反

なぜ私はこの障害を起こしているのですか?

4

1 に答える 1

1

問題が解決しました :

実際の問題は、最も粗いレベルを直接解決するためにAGMGによって呼び出されるLAPACK関数にありました。AGMGにリンクされているlapackライブラリを変更すると、このセグメンテーション違反の問題が解決されます。

参考までに:

g++ *.o ~/lapack-3.4.1/liblapack.a ~/CLAPACK-3.2.1/lapack_LINUX.a ~/mylibs/blas_LINUX.a ~/CLAPACK-3.2.1/blas_LINUX.a ~/CLAPACK-3.2.1/F2CLIBS/libf2c.a ~/lapack-3.4.1/liblapack.a -o myexe -lgfortran
于 2012-08-30T10:30:48.013 に答える