Mercurial > fem-fenics-eugenio
view src/uBLAS_factory.cc @ 268:61830a4f9ab9
Improve formatting
author | Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> |
---|---|
date | Thu, 14 Aug 2014 12:26:55 +0200 |
parents | 8ca45824938e |
children |
line wrap: on
line source
/* Copyright (C) 2014 Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>. */ #include "uBLAS_factory.h" femfenics_base_factory const & uBLAS_factory::instance (void) { static uBLAS_factory const theinstance; return theinstance; } octave_value uBLAS_factory::matrix (dolfin::Matrix const & A) const { octave_value retval; // Get capacity of the dolfin sparse matrix boost::tuples::tuple <const std::size_t *, const std::size_t *, const double *, int> aa = A.data (); int nnz = aa.get<3> (); std::size_t nr = A.size (0), nc = A.size (1); std::vector<double> data_tmp; std::vector<std::size_t> cidx_tmp; dim_vector dims (nnz, 1); octave_idx_type nz = 0, ii = 0; Array<octave_idx_type> ridx (dims, 0), cidx (dims, 0); Array<double> data (dims, 0); octave_idx_type * orow = ridx.fortran_vec (); octave_idx_type * oc = cidx.fortran_vec (); double * ov = data.fortran_vec (); for (std::size_t i = 0; i < nr; ++i) { A.getrow (i, cidx_tmp, data_tmp); nz += cidx_tmp.size (); for (octave_idx_type j = 0; j < cidx_tmp.size (); ++j) { orow[ii + j] = i; oc[ii + j] = cidx_tmp[j]; ov[ii + j] = data_tmp[j]; } ii = nz; } dims(0) = ii; ridx.resize (dims); cidx.resize (dims); data.resize (dims); SparseMatrix sm (data, ridx, cidx, nr, nc); retval = sm; return retval; } octave_value uBLAS_factory::vector (dolfin::Vector const & b) const { octave_value retval; dim_vector dims; dims.resize (2); dims(0) = b.size (); dims(1) = 1; Array<double> myb (dims); for (std::size_t i = 0; i < b.size (); ++i) { myb.xelem (i) = b[i]; } retval = myb; return retval; }