Проблема с noalias () при использовании шагов - PullRequest
1 голос
/ 24 марта 2020

Я использую Eigen для приложения вычислительной гидродинамики, и я заметил то, что кажется ошибкой. Я абстрагировал код, чтобы каждый мог его воспроизвести. Я использую Eigen 3.3.7.

Следующий код воспроизводит проблему

#include <cmath>
#include <iostream>
#include "Eigen/Eigen"
using namespace std;
using namespace Eigen;

int main() {
    const int dim = 3;
    const int nb = pow(3, dim);
    const int nq = pow(2, dim);

    vector<double> A(dim*nb);
    for (uint i=0; i<A.size(); i++) A[i] = i;

    vector<double> D(dim*nq*nb);
    for (uint i=0; i<D.size(); i++) D[i] = 2*i;

    vector<double> C(dim*dim*nq, 0.);

    Map< const Matrix<double, dim, Dynamic, RowMajor> >  mat_A(A.data(), dim, nb);

    Map< const Matrix<double, dim, Dynamic, RowMajor>, 0, OuterStride<> >
        mat_B(D.data(), dim, nb, OuterStride<> (nq*nb));

    Map< Matrix<double, dim, Dynamic, RowMajor>, 0, InnerStride<>>
        mat_C(C.data(), dim, dim, InnerStride<> (nq));

    mat_C.noalias() = mat_A * mat_B.transpose();
    cout << mat_C << endl << endl;

    mat_C = mat_A * mat_B.transpose();
    cout << mat_C << endl << endl;
}

Вывод кода:

12402     0     0
31356     0     0
50310     0     0

      12402      164034      315666
      31356      497916      964476
      50310      831798 1.61329e+06

Результаты должны быть одинаковыми , Я что-то здесь не так делаю?

1 Ответ

1 голос
/ 24 марта 2020

Насколько мне известно, эта проблема была решена путем извлечения основной ветки из репозитория gitlab. Это может быть связано с этой проблемой . Спасибо за вашу помощь.

...