wrtobin / las

Zero-overhead interfaces to Linear Algebraic data structures and Solvers
1 stars 1 forks source link

Dense Matrix Get #25

Closed kumargp closed 6 years ago

kumargp commented 6 years ago

I am not able to get values from dense matrix. All the values are 0's. Could you check the methods used. ?.

#include <iostream>
#include <cassert>
#include <utility>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <ctime>
#include <set>
#include <utility>
#include <map>

#include "las.h"
#include "lasSparse.h"
#include "lasDense.h"
#include "lasCSRBuilder.h"
#include "lasSparseDense.h"

int main()
{
  int nr = 4;
  int nc = 3;
  double darr[] = {1., 2., 3.,
                  1., 1., 1.,
                  2., 2., 2.,
                  3., 3., 3.,
                  4., 4., 4.,};

  las::LasCreateMat *dens_fct =las::getMatBuilder<las::dense>(0);
  las::Mat *mDens = dens_fct->create(0, 0, las::createDensity(nr, nc, darr), MPI_COMM_SELF);
  auto *dOps = las::getLASOps<las::dense>();
  assert(mDens && dOps);

  std::vector <int> rows(nc, 0);
  std::vector <int> columns(nr, 0);

  for(int i=0; i< nr; ++i)
    rows[i] = i;

  for(int j=0; j<nc; ++j)
     columns[j] = j;

  double *val = nullptr;

  for(int i=0; i<nr; ++i)
  {
    for(int j=0; j<nc; ++j)
    {
       dOps->get(mDens, 1, &rows[i], 1, &columns[j], &val);
       std::cout << *val << "  | " << darr[i*nc+j] << "\n";
    }
  }

  delete[] val;

  return 0;
}

//The output is

0  | 1
0  | 2
0  | 3
0  | 1
0  | 1
0  | 1
0  | 2
0  | 2
0  | 2
0  | 3
0  | 3
0  | 3
wrtobin commented 6 years ago

Fixed in commit 0ff50956e075375eaf15c292c3e9bf0b1cf1ac78 and merged into master, along with adding a test case for the dense backend.