2012-08-29 40 views
0

我已將C++程序與AGMG庫中的fortran dagmg.f90例程鏈接起來。最初,稀疏矩陣由CRS格式的Eigen庫構建,然後將其轉換爲fortran例程所需的格式。 AGMG運行並計算非零的數量並顯示未知數量。但之後它突然顯示分段故障。我無法弄清楚背後的原因。運行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)

分段故障

爲什麼我得到這個錯誤?

回答

1

問題解決了:

其實這個問題是與LAPACK功能通過AGMG被稱爲直接解決了粗水平。在更改鏈接到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 
+0

+1爲參考提供了答案。 – Spudley