2017-09-27 10 views
0

次は私のコードのFEM問題を解決するクラスです。インテリジェントなmklライブラリを使ってダイレクトソルバーを使って線形システムを解くと、dss_createは例外をスローします

式の線形システムの係数行列は疎なので、このシステムを解くにはintel mkl direct solver for sparse matricesを使用しています。

クラスは線形システムを解くために使用されています。私は簡単な問題のためにこれを試しましたが、結果をmatlabと比較することでうまく動作します。私はすべてのリンクが正しいことを確信していると私はコード全体のクラスを使用する場合の設定は、それが「dss_create」コマンドで私に次のようなメッセージを与えるのx64に

#pragma once 
#include <iostream> 
#include <mkl.h> 
using namespace std; 

class Solution 
{ 
private: 
    int *row, *col, nelx, nely; 
    double *K, *b; 
public: 
    Solution(double *x, double* xx, int* y, int* z, int ll, int nn) 
    { 
     K = x; 
     b = xx; 
     row = y; 
     col = z; 
     nelx = ll; 
     nely = nn; 
    } 
    double* f(); 
}; 

double* Solution::f() 
{ 
    int n = (nelx + 1)*(nely + 1) * 2, m = 868, l=1; 
    double *sol = new double[n]; 
    int *perm = new int[n]; 
    _MKL_DSS_HANDLE_t handle; 

    MKL_INT opt = MKL_DSS_ZERO_BASED_INDEXING; 
    dss_create(handle, opt); 

    // dss_define_structure 
    opt = MKL_DSS_NON_SYMMETRIC; 
    dss_define_structure(handle, opt, row, n, n, col, m); 

    // dss_reorder 
    opt = MKL_DSS_AUTO_ORDER; 
    dss_reorder(handle, opt, perm); 

    // dss_factor_real, dss_factor_complex 
    opt = MKL_DSS_POSITIVE_DEFINITE; 
    dss_factor_real(handle, opt, K); 

    // dss_solve_real, dss_solve_complex 
    opt = MKL_DSS_REFINEMENT_ON; 
    dss_solve_real(handle, opt, b, l, sol); 

    return sol; 
} 

に設定されている:

top88_class.exeの0x000000007750F7E7(ntdll.dll)でスローされた例外: 0xC0000005:0x00000E0111350228という場所を読み取るアクセス違反。

この例外のハンドラがある場合、プログラムは安全に続行される可能性があります。

答えて

0

私は問題を把握しました。 このクラスに影響を及ぼす別のクラスの宣言に間違いがありましたが、その理由はわかりません。

関連する問題