2017-09-27 4 views
0

Ce qui suit est une classe dans mon code qui résout problème FEM. La matrice de coefficients du système linéaire d'équations est une matrice clairsemée. J'utilise donc le intel mkl direct solver for sparse matrices pour résoudre ce système.en utilisant la bibliothèque intel mkl pour résoudre le système linéaire en utilisant solveur direct, le dss_create donne exception levée

La classe est utilisée pour résoudre le système linéaire et je l'ai déjà essayé pour un problème simple et cela fonctionne bien en comparant les résultats avec matlab. Je suis sûr que tous les liens sont corrects et la configuration est configurée pour être 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; 
} 

Lorsque j'utilise la classe pour l'ensemble du code, il me donne le message suivant à la commande « dss_create »:

Exception levée à 0x000000007750F7E7 (ntdll.dll) dans top88_class.exe: 0xC0000005: Emplacement de lecture de violation d'accès 0x00000E0111350228.

S'il existe un gestionnaire pour cette exception, le programme peut continuer à en toute sécurité.

Répondre

0

J'ai trouvé le problème. Il y avait une erreur dans une déclaration dans une autre classe qui affecte cette classe, je ne sais pas pourquoi.