次は私のコードの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という場所を読み取るアクセス違反。
この例外のハンドラがある場合、プログラムは安全に続行される可能性があります。