comparison 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
comparison
equal deleted inserted replaced
267:53039ac90368 268:61830a4f9ab9
15 this program; if not, see <http://www.gnu.org/licenses/>. 15 this program; if not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #include "uBLAS_factory.h" 18 #include "uBLAS_factory.h"
19 19
20 femfenics_base_factory const& 20 femfenics_base_factory const &
21 uBLAS_factory::instance (void) 21 uBLAS_factory::instance (void)
22 { 22 {
23 static uBLAS_factory const theinstance; 23 static uBLAS_factory const theinstance;
24 return theinstance; 24 return theinstance;
25 } 25 }
26 26
27 octave_value 27 octave_value
28 uBLAS_factory::matrix (dolfin::Matrix const& A) const 28 uBLAS_factory::matrix (dolfin::Matrix const & A) const
29 { 29 {
30 octave_value retval; 30 octave_value retval;
31 31
32 // Get capacity of the dolfin sparse matrix 32 // Get capacity of the dolfin sparse matrix
33 boost::tuples::tuple<const std::size_t*, 33 boost::tuples::tuple <const std::size_t *,
34 const std::size_t*, 34 const std::size_t *,
35 const double*, int> 35 const double *, int>
36 aa = A.data (); 36 aa = A.data ();
37 37
38 int nnz = aa.get<3> (); 38 int nnz = aa.get<3> ();
39 std::size_t nr = A.size (0), nc = A.size (1); 39 std::size_t nr = A.size (0), nc = A.size (1);
40 std::vector<double> data_tmp; 40 std::vector<double> data_tmp;
41 std::vector<std::size_t> cidx_tmp; 41 std::vector<std::size_t> cidx_tmp;
42 42
43 dim_vector dims (nnz, 1); 43 dim_vector dims (nnz, 1);
44 octave_idx_type nz = 0, ii = 0; 44 octave_idx_type nz = 0, ii = 0;
45 Array<octave_idx_type> 45 Array<octave_idx_type> ridx (dims, 0), cidx (dims, 0);
46 ridx (dims, 0), 46 Array<double> data (dims, 0);
47 cidx (dims, 0);
48 Array<double> data (dims, 0);
49 47
50 octave_idx_type* orow = ridx.fortran_vec (); 48 octave_idx_type * orow = ridx.fortran_vec ();
51 octave_idx_type* oc = cidx.fortran_vec (); 49 octave_idx_type * oc = cidx.fortran_vec ();
52 double* ov = data.fortran_vec (); 50 double * ov = data.fortran_vec ();
53 51
54 for (std::size_t i = 0; i < nr; ++i) 52 for (std::size_t i = 0; i < nr; ++i)
55 { 53 {
56 A.getrow (i, cidx_tmp, data_tmp); 54 A.getrow (i, cidx_tmp, data_tmp);
57 nz += cidx_tmp.size (); 55 nz += cidx_tmp.size ();
58 56
59 for (octave_idx_type j = 0; 57 for (octave_idx_type j = 0;
60 j < cidx_tmp.size (); ++j) 58 j < cidx_tmp.size (); ++j)
61 { 59 {
62 orow [ii + j] = i; 60 orow[ii + j] = i;
63 oc [ii + j] = cidx_tmp [j]; 61 oc[ii + j] = cidx_tmp[j];
64 ov [ii + j] = data_tmp [j]; 62 ov[ii + j] = data_tmp[j];
65 } 63 }
66 64
67 ii = nz; 65 ii = nz;
68 } 66 }
69 67
70 dims(0) = ii; 68 dims(0) = ii;
71 ridx.resize (dims); 69 ridx.resize (dims);
72 cidx.resize (dims); 70 cidx.resize (dims);
73 data.resize (dims); 71 data.resize (dims);
74 72
75 SparseMatrix sm (data, ridx, cidx, nr, nc); 73 SparseMatrix sm (data, ridx, cidx, nr, nc);
76 retval = sm; 74 retval = sm;
77 75
78 return retval; 76 return retval;
79 } 77 }
80 78
81 octave_value 79 octave_value
82 uBLAS_factory::vector (dolfin::Vector const& b) const 80 uBLAS_factory::vector (dolfin::Vector const & b) const
83 { 81 {
84 octave_value retval; 82 octave_value retval;
85 83
86 dim_vector dims; 84 dim_vector dims;
87 dims.resize (2); 85 dims.resize (2);
88 dims(0) = b.size (); 86 dims(0) = b.size ();
89 dims(1) = 1; 87 dims(1) = 1;
90 Array<double> myb (dims); 88 Array<double> myb (dims);
91 89
92 for (std::size_t i = 0; i < b.size (); ++i) 90 for (std::size_t i = 0; i < b.size (); ++i)
93 myb.xelem (i) = b[i]; 91 { myb.xelem (i) = b[i]; }
94 92
95 retval = myb; 93 retval = myb;
96 94
97 return retval; 95 return retval;
98 } 96 }