Mercurial > fem-fenics-eugenio
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 } |