- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
I'm trying to solve eigenvalue problem for large sparse matrices using dfeast_scsrgv function. The function works fine for small problems (ex: 8*8 sparse matrix) but it gives System.StackOverflowException error for larger problems( ex: 200*200 sparse matrix) . I'm using Visual Studio 2008 and MKL version 11 with most recent updates installed. My system is windows 64 bit and the programming language is C++. Following I provided the eigenvalue solver code that I'm using. In debug mode when I reach dfeast_scsrgv line it gives me Stack Overflow error. I do not think I am using any infinite loop or unnecessary large arrays. I would appreciate if someone can help me to fix the problem. Thanks!
[cpp]
//Convert stiffness and mass matrix to CSR format - Seldon library
int NumStiff = M_GStiff.GetDataSize();
Vector<double> V_GStiffVal (NumStiff);
Vector<int> V_GStiffColInd(NumStiff);
Vector<int> V_GStiffRowPtr(PrbDim+1);
ConvertToCSR(M_GStiff, prop, V_GStiffRowPtr, V_GStiffColInd, V_GStiffVal);
int NumMass = M_GMass.GetDataSize();
Vector<double> V_GMassVal (NumMass);
Vector<int> V_GMassColInd(NumMass);
Vector<int> V_GMassRowPtr(PrbDim+1);
ConvertToCSR(M_GMass, prop, V_GMassRowPtr, V_GMassColInd, V_GMassVal);
//Release memory
M_GStiff.Clear();
M_GMass.Clear();
//Convert Seldon format to typical C array
double* a = V_GStiffVal.GetData();
int* ia = V_GStiffRowPtr.GetData();
int* ja = V_GStiffColInd.GetData();
double* b = V_GMassVal.GetData();
int* ib = V_GMassRowPtr.GetData();
int* jb = V_GMassColInd.GetData();
// Convert matrix from 0-based C-notation to Fortran 1-based
int nnz = ia[PrbDim];
for (int i = 0; i < PrbDim+1; i++) ia += 1;
for (int i = 0; i < nnz; i++) ja += 1;
for (int i = 0; i < PrbDim+1; i++) ib += 1;
for (int i = 0; i < nnz; i++) jb += 1;
// Initialize variables for the solver
double Error = 0;
int Loop = 0;
int NumMode = 10;
double Emin = 0;
double Emax = pow(10.0,10.0);
int Flag = 0;
char MTyp = 'U';
int NumEigen = NumMode;
vector<int> V_FPM (128,0);
vector<double> V_Eigen(NumMode,0);
vector<double> V_Res (NumMode,0);
V_FPM[0] = 1;
V_FPM[1] = 8;
V_FPM[2] = 12;
V_FPM[3] = 20;
V_FPM[4] = 0;
V_FPM[5] = 0;
V_FPM[6] = 5;
V_FPM[13] = 0;
V_FPM[63] = 0;
int* P_FPM = &V_FPM[0];
double* P_Eigen = &V_Eigen[0];
double* P_Res = &V_Res[0];
double dDum;
// Call Eigenvalue Solver
dfeast_scsrgv (&MTyp, &PrbDim, a, ia, ja, b, ib, jb,
P_FPM, &Error, &Loop, &Emin, &Emax, &NumMode, P_Eigen, &dDum, &NumEigen, P_Res, &Flag);
[/cpp]
コピーされたリンク
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
Can you give the reproducer which we can compile and debug the problem on our side?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
I see the failure on my side with ml v.11.1. We will debug the code and will back in the case any update.
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
Thanks Gennady. Would you please let me know approximately how long it will take to fix the problem and make the new update? Thank you again for your help and time.
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
it would also make sense to notice the output results I have on my side:
Intel MKL Extended Eigensolvers: double precision driver
Intel MKL Extended Eigensolvers: List of input parameters fpm(1:64)-- if different from default
Intel MKL Extended Eigensolvers: fpm(1)=1
Intel MKL Extended Eigensolvers: fpm(11)=0
Search interval [0.000000000000000e+000;1.000000000000000e+003]
Intel MKL Extended Eigensolvers: Size subspace 3
#Loop | #Eig | Trace | Error-Trace | Max-Residual
Intel MKL Extended Eigensolvers: Resize subspace 1
0,1,1.749966841512209e+000,1.000000000000000e+000,6.859928113611897e-015
Intel MKL Extended Eigensolvers have successfully converged (to desired tolerance).
dfeast_scsrgv PASSED
1.74997
END!
