BELFEM 0.9.3
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_AR_Matrix.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_CL_AR_MATRIX_HPP
13#define BELFEM_CL_AR_MATRIX_HPP
14
15#include "typedefs.hpp"
16#include "assert.hpp"
17
18namespace belfem
19{
27 template< typename T >
28 class Matrix
29 {
30//------------------------------------------------------------------------------
31 public :
32//------------------------------------------------------------------------------
33
34 typedef arma::Mat<T> MatrixType;
35
36//------------------------------------------------------------------------------
37 private :
38//------------------------------------------------------------------------------
39
40 // member class of underlying vector implementation
41 MatrixType mMatrix;
42
43//------------------------------------------------------------------------------
44 public :
45//------------------------------------------------------------------------------
46
47 Matrix() = default;
48
49// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
50
51 Matrix( const size_t aNumRows,
52 const size_t aNumCols ) :
53 mMatrix( aNumRows, aNumCols ) {}
54
55// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
56
57 Matrix( const size_t aNumRows,
58 const size_t aNumCols,
59 const T aValue ) :
60 mMatrix( aNumRows, aNumCols )
61 {
62 this->fill( aValue );
63 }
64
65// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
66
67 Matrix( const std::initializer_list<std::initializer_list<T> > & aInitList )
68 : mMatrix( aInitList )
69 {
70
71 }
72
73// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
74
75 Matrix( const MatrixType & aExpression )
76 : mMatrix( aExpression ) {}
77
78// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
79
80 template< typename ET, typename OP >
81 Matrix( const arma::Op<ET, OP> & aExpression )
82 : mMatrix( aExpression ) {}
83
84//------------------------------------------------------------------------------
85
89 Matrix( const Matrix< T > & aMatrix ) :
90 mMatrix( aMatrix.mMatrix )
91 {}
92
96 Matrix( Matrix< T > && aMatrix ) noexcept :
97 mMatrix( std::move( aMatrix.mMatrix ) )
98 {}
99
100
101//------------------------------------------------------------------------------
102
106 virtual ~Matrix() = default;
107
108//------------------------------------------------------------------------------
109// MEMORY
110//------------------------------------------------------------------------------
111
112
115 inline T *
117 {
118 return mMatrix.memptr();
119 }
120
121// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
122
123 inline const T *
124 data() const
125 {
126 return mMatrix.memptr();
127 }
128
129//------------------------------------------------------------------------------
130
131 /*
132 * expose the underlying matrix implementation ( writable version )
133 */
134 inline MatrixType &
136 {
137 return mMatrix;
138 }
139
140// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
141
142 /*
143 * expose the underlying matrix implementation ( const version )
144 */
145 inline const MatrixType &
147 {
148 return mMatrix;
149 }
150
151//------------------------------------------------------------------------------
152// UTILITIES
153//------------------------------------------------------------------------------
154
155 inline void
156 fill( const T & aValue )
157 {
158 mMatrix.fill( aValue );
159 }
160
161//------------------------------------------------------------------------------
162
163 inline void
164 set_size( const size_t aNumRows, const size_t aNumCols )
165 {
166 mMatrix.set_size( aNumRows, aNumCols );
167 }
168
169// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
170
171 inline void
172 set_size( const size_t aNumRows, const size_t aNumCols, const T & aValue )
173 {
174 this->set_size( aNumRows, aNumCols );
175 this->fill( aValue );
176 }
177
178//------------------------------------------------------------------------------
179// SIZE CHECKS
180//------------------------------------------------------------------------------
181
182 inline size_t
183 n_rows() const
184 {
185 return mMatrix.n_rows;
186 }
187
188//------------------------------------------------------------------------------
189
190 inline size_t
191 n_cols() const
192 {
193 return mMatrix.n_cols;
194 }
195
196//------------------------------------------------------------------------------
197
201 inline size_t
202 capacity() const
203 {
204 return mMatrix.n_elem;
205 }
206
207//------------------------------------------------------------------------------
208
213 inline size_t
214 spacing() const
215 {
216 return mMatrix.n_rows;
217 }
218
219//------------------------------------------------------------------------------
220// OPERATORS
221//------------------------------------------------------------------------------
222
227 operator=( Matrix< T > && aMatrix ) noexcept
228 {
229 if ( this != & aMatrix )
230 {
231 mMatrix = std::move( aMatrix.mMatrix );
232 }
233 return *this;
234 }
235
240 operator=( const Matrix< T > & aMatrix )
241 {
242 if ( this != &aMatrix )
243 {
244 mMatrix = aMatrix.mMatrix;
245 }
246 return *this;
247 }
248
249
250//------------------------------------------------------------------------------
251
255 inline T &
256 operator()( const size_t aRowIndex, const size_t aColIndex )
257 {
258 BELFEM_ASSERT( aRowIndex< this->n_rows(),
259 "Row index %lu out of bounds, which must be smaller than %lu.",
260 ( long unsigned int ) aRowIndex,
261 ( long unsigned int ) this->n_rows() );
262
263 BELFEM_ASSERT( aColIndex< this->n_cols(),
264 "Col index %lu out of bounds, which must be smaller than %lu.",
265 ( long unsigned int ) aColIndex,
266 ( long unsigned int ) this->n_cols() );
267
268 return mMatrix( aRowIndex, aColIndex );
269 }
270
271// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
272
276 virtual inline const T &
277 operator()( const size_t aRowIndex, const size_t aColIndex ) const
278 {
279 BELFEM_ASSERT( aRowIndex< this->n_rows(),
280 "Row index %lu out of bounds, which must be smaller than %lu.",
281 ( long unsigned int ) aRowIndex,
282 ( long unsigned int ) this->n_rows() );
283
284 BELFEM_ASSERT( aColIndex< this->n_cols(),
285 "Col index %lu out of bounds, which must be smaller than %lu.",
286 ( long unsigned int ) aColIndex,
287 ( long unsigned int ) this->n_cols() );
288
289 return mMatrix( aRowIndex, aColIndex );
290 }
291
292//------------------------------------------------------------------------------
293// Cols and Rows
294//------------------------------------------------------------------------------
295
296 inline auto
297 row( const size_t aRowIndex )
298 ->decltype( mMatrix.row( aRowIndex ) )
299 {
300 BELFEM_ASSERT( aRowIndex < this->n_rows(),
301 "Row index %lu out of bounds, which must be less than %lu.",
302 ( long unsigned int ) aRowIndex,
303 ( long unsigned int ) this->n_rows() );
304
305 return mMatrix.row( aRowIndex );
306 }
307
308// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
309
310 inline auto
311 row( const size_t aRowIndex ) const
312 ->decltype( mMatrix.row( aRowIndex ) )
313 {
314 BELFEM_ASSERT( aRowIndex < this->n_rows(),
315 "Row index %lu out of bounds, which must be less than %lu.",
316 ( long unsigned int ) aRowIndex,
317 ( long unsigned int ) this->n_rows() );
318
319 return mMatrix.row( aRowIndex );
320 }
321
322//------------------------------------------------------------------------------
323
324 inline auto
325 col( const size_t aColIndex )
326 ->decltype( mMatrix.col( aColIndex ) )
327 {
328 BELFEM_ASSERT( aColIndex < this->n_cols(),
329 "Col index %lu out of bounds, which must be less than %lu.",
330 ( long unsigned int ) aColIndex,
331 ( long unsigned int ) this->n_cols() );
332
333 return mMatrix.col( aColIndex );
334 }
335
336// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
337
338 inline auto
339 col( const size_t aColIndex ) const
340 ->decltype( mMatrix.col( aColIndex ) )
341 {
342 BELFEM_ASSERT( aColIndex < this->n_cols(),
343 "Col index %lu out of bounds, which must be less than %lu.",
344 ( long unsigned int ) aColIndex,
345 ( long unsigned int ) this->n_cols() );
346
347 return mMatrix.col( aColIndex );
348 }
349
350//------------------------------------------------------------------------------
351
352 inline auto
353 submat( const size_t aFirstRow,
354 const size_t aFirstCol,
355 const size_t aLastRow,
356 const size_t aLastCol )
357 -> decltype( mMatrix.submat( aFirstRow, aFirstCol, aLastRow, aLastCol ) )
358 {
359 BELFEM_ASSERT( aFirstRow < this->n_rows(),
360 "First row index %lu out of bounds, which must be less than %lu.",
361 ( long unsigned int ) aFirstRow,
362 ( long unsigned int ) this->n_rows() );
363
364 BELFEM_ASSERT( aLastRow < this->n_rows(),
365 "Last row index %lu out of bounds, which must be less than %lu.",
366 ( long unsigned int ) aLastRow,
367 ( long unsigned int ) this->n_rows() );
368
369 BELFEM_ASSERT( aFirstCol < this->n_cols(),
370 "First col index %lu out of bounds, which must be less than %lu.",
371 ( long unsigned int ) aFirstCol,
372 ( long unsigned int ) this->n_cols() );
373
374 BELFEM_ASSERT( aLastCol < this->n_cols(),
375 "Last col index %lu out of bounds, which must be less than %lu.",
376 ( long unsigned int ) aLastCol,
377 ( long unsigned int ) this->n_cols() );
378
379 return mMatrix.submat( aFirstRow, aFirstCol, aLastRow, aLastCol );
380 }
381
382// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
383
384 inline auto
385 submat( const size_t aFirstRow,
386 const size_t aFirstCol,
387 const size_t aLastRow,
388 const size_t aLastCol ) const
389 -> decltype( mMatrix.submat( aFirstRow, aFirstCol, aLastRow, aLastCol ) )
390 {
391 BELFEM_ASSERT( aFirstRow < this->n_rows(),
392 "First row index %lu out of bounds, which must be less than %lu.",
393 ( long unsigned int ) aFirstRow,
394 ( long unsigned int ) this->n_rows() );
395
396 BELFEM_ASSERT( aLastRow < this->n_rows(),
397 "Last row index %lu out of bounds, which must be less than %lu.",
398 ( long unsigned int ) aLastRow,
399 ( long unsigned int ) this->n_rows() );
400
401 BELFEM_ASSERT( aFirstCol < this->n_cols(),
402 "First col index %lu out of bounds, which must be less than %lu.",
403 ( long unsigned int ) aFirstCol,
404 ( long unsigned int ) this->n_cols() );
405
406 BELFEM_ASSERT( aLastCol < this->n_cols(),
407 "Last col index %lu out of bounds, which must be less than %lu.",
408 ( long unsigned int ) aLastCol,
409 ( long unsigned int ) this->n_cols() );
410
411 return mMatrix.submat( aFirstRow, aFirstCol, aLastRow, aLastCol );
412 }
413
414//------------------------------------------------------------------------------
415
416 inline void
417 set_row( const size_t aRowIndex, const Vector <T> & aVector )
418 {
419 // make sure that length is correct
420 BELFEM_ASSERT( aVector.length() == this->n_cols(),
421 "Wrong length of vector : %lu ( expect %lu )",
422 ( long unsigned int ) aVector.length(),
423 ( long unsigned int ) this->n_cols() );
424
425 this->row( aRowIndex ) = arma::trans( aVector.vector_data() );
426 }
427
428 template < typename ET >
429 inline void
430 set_row( const size_t aColIndex, const ET & aExpression )
431 {
432 this->row( aColIndex ) = aExpression;
433 }
434
435//------------------------------------------------------------------------------
436
437 inline void
438 set_col( const size_t aColIndex, const Vector <T> & aVector )
439 {
440 // make sure that length is correct
441 BELFEM_ASSERT( aVector.length() == this->n_rows(),
442 "Wrong length of vector : %lu ( expect %lu )",
443 ( long unsigned int ) aVector.length(),
444 ( long unsigned int ) this->n_rows() );
445
446 this->col( aColIndex ) = aVector.vector_data();
447 }
448
449 template < typename ET >
450 inline void
451 set_col( const size_t aColIndex, const ET & aExpression )
452 {
453 this->col( aColIndex ) = aExpression;
454 }
455
456
457//------------------------------------------------------------------------------
458// internal operators
459//------------------------------------------------------------------------------
460
465 operator=( const T & aValue )
466 {
467 this->fill( aValue );
468 return *this;
469 }
470
471// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
472
476 template < typename ET >
478 operator=( const ET & aExpression )
479 {
480 mMatrix = aExpression;
481 return *this;
482 }
483
484//------------------------------------------------------------------------------
485// ADD OPERATORS
486//------------------------------------------------------------------------------
487
489 operator+=( const T & aValue )
490 {
491 mMatrix += aValue;
492 return *this;
493 }
494
496 operator+=( T & aValue )
497 {
498 mMatrix += aValue;
499 return *this;
500 }
501
502// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
503
505 operator+=( const Matrix< T > & aMatrix )
506 {
507 mMatrix += aMatrix.matrix_data();
508 return *this;
509 }
510
511// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
512
514 operator+=( const MatrixType & aExpression )
515 {
516 mMatrix += aExpression;
517 return *this;
518 }
519
520//------------------------------------------------------------------------------
521// SUBTRACT OPERATORS
522//------------------------------------------------------------------------------
523
525 operator-=( const T & aValue )
526 {
527 mMatrix -= aValue;
528 return *this;
529 }
530
531// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
532
534 operator-=( const Matrix< T > & aMatrix )
535 {
536 mMatrix -= aMatrix.matrix_data();
537 return *this;
538 }
539
540// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
541
543 operator-=( const MatrixType & aExpression )
544 {
545 mMatrix -= aExpression;
546 return *this;
547 }
548
549//------------------------------------------------------------------------------
550// MULTIPLY OPERATORS
551//------------------------------------------------------------------------------
552
554 operator*=( const T & aValue )
555 {
556 mMatrix *= aValue;
557 return *this;
558 }
559
560// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
561
563 operator*=( const Matrix< T > & aMatrix )
564 {
565 mMatrix *= aMatrix.matrix_data();
566 return *this;
567 }
568
569// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
570
572 operator*=( const MatrixType & aExpression )
573 {
574 mMatrix *= aExpression;
575 return *this;
576 }
577
578//------------------------------------------------------------------------------
579// DIVIDE OPERATORS
580//------------------------------------------------------------------------------
581
583 operator/=( const T & aValue )
584 {
585 mMatrix /= aValue;
586 return *this;
587 }
588
589//------------------------------------------------------------------------------
590// PRINT OPERATION
591//------------------------------------------------------------------------------
592
593 inline void
594 print( const std::string aLabel="Matrix" ) const;
595
596//------------------------------------------------------------------------------
597 };
598
599//------------------------------------------------------------------------------
600// turn off annoying waning
601#ifdef BELFEM_GCC
602#pragma GCC diagnostic push
603#pragma GCC diagnostic ignored "-Wformat"
604#endif
605 template < typename T > void
606 Matrix< T >::print( const std::string aLabel ) const
607 {
608 FILE * tOutFile = stdout;
609
610 fprintf( tOutFile, "%s = [ ... \n", aLabel.c_str() );
611
612 // get a ref of this
613 const Matrix< T > & tThis = *this;
614
615 uint tRows = tThis.n_rows();
616 uint tCols = tThis.n_cols();
617
618 for( uint i=0; i< tRows; ++i )
619 {
620 for( uint j=0; j< tCols; ++j )
621 {
622 if( j < tCols-1 )
623 {
624 fprintf( tOutFile, "%d, ", ( int ) tThis( i, j ) );
625 }
626 else
627 {
628 fprintf( tOutFile, "%d; ", ( int ) tThis( i, j ) );
629 }
630 }
631
632 if( i < tRows-1 )
633 {
634 fprintf( tOutFile, "...\n" );
635 }
636 else
637 {
638 fprintf( tOutFile, "];\n" );
639 }
640 }
641 }
642
643// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
644
645 template <>
646 inline void
647 Matrix<real>::print( const std::string aLabel ) const
648 {
649 FILE * tOutFile = stdout;
650
651 fprintf( tOutFile, "%s = [ ... \n", aLabel.c_str() );
652
653 const Matrix< real > & tThis = *this;
654
655 uint tRows = tThis.n_rows();
656 uint tCols = tThis.n_cols();
657
658 for( uint i=0; i< tRows; ++i )
659 {
660 for( uint j=0; j< tCols; ++j )
661 {
662 if( j < tCols-1 )
663 {
664 fprintf( tOutFile, "%+.15e, ", ( double ) tThis( i, j ) );
665 }
666 else
667 {
668 fprintf( tOutFile, "%+.15e; ", ( double ) tThis( i, j ) );
669 }
670 }
671
672 if( i < tRows-1 )
673 {
674 fprintf( tOutFile, "...\n" );
675 }
676 else
677 {
678 fprintf( tOutFile, "];\n" );
679 }
680 }
681 }
682
683
684#ifdef BELFEM_GCC
685#pragma GCC diagnostic pop
686#endif
687}
688#endif //BELFEM_CL_AR_MATRIX_HPP
#define BELFEM_ASSERT(aCheck,...)
Definition assert.hpp:244
Dense column-major matrix.
Definition cl_BZ_Matrix.hpp:28
Matrix< T > & operator=(Matrix< T > &&aMatrix) noexcept
move assignment operator
Definition cl_AR_Matrix.hpp:227
size_t spacing() const
inter-column stride of the data container ( the leading dimension in BLAS terms; here always n_rows )
Definition cl_AR_Matrix.hpp:214
Matrix< T > & operator+=(const T &aValue)
Definition cl_AR_Matrix.hpp:489
auto col(const size_t aColIndex) const -> decltype(mMatrix.col(aColIndex))
Definition cl_AR_Matrix.hpp:339
void set_size(const size_t aNumRows, const size_t aNumCols, const T &aValue)
Definition cl_AR_Matrix.hpp:172
virtual ~Matrix()=default
empty destructor
auto col(const size_t aColIndex) -> decltype(mMatrix.col(aColIndex))
Definition cl_AR_Matrix.hpp:325
auto submat(const size_t aFirstRow, const size_t aFirstCol, const size_t aLastRow, const size_t aLastCol) const -> decltype(mMatrix.submat(aFirstRow, aFirstCol, aLastRow, aLastCol))
Definition cl_AR_Matrix.hpp:385
const MatrixType & matrix_data() const
Definition cl_AR_Matrix.hpp:146
void fill(const T &aValue)
Definition cl_AR_Matrix.hpp:156
auto submat(const size_t aFirstRow, const size_t aFirstCol, const size_t aLastRow, const size_t aLastCol) -> decltype(mMatrix.submat(aFirstRow, aFirstCol, aLastRow, aLastCol))
Definition cl_AR_Matrix.hpp:353
auto row(const size_t aRowIndex) -> decltype(mMatrix.row(aRowIndex))
Definition cl_AR_Matrix.hpp:297
Matrix< T > & operator/=(const T &aValue)
Definition cl_AR_Matrix.hpp:583
Matrix(const size_t aNumRows, const size_t aNumCols)
Definition cl_AR_Matrix.hpp:51
void set_row(const size_t aRowIndex, const Vector< T > &aVector)
Definition cl_AR_Matrix.hpp:417
MatrixType & matrix_data()
Definition cl_AR_Matrix.hpp:135
size_t capacity() const
The logical element count n_rows() * n_cols() ( Armadillo's n_elem ).
Definition cl_AR_Matrix.hpp:202
Matrix< T > & operator-=(const T &aValue)
Definition cl_AR_Matrix.hpp:525
Matrix(const MatrixType &aExpression)
Definition cl_AR_Matrix.hpp:75
Matrix< T > & operator-=(const MatrixType &aExpression)
Definition cl_AR_Matrix.hpp:543
Matrix(const arma::Op< ET, OP > &aExpression)
Definition cl_AR_Matrix.hpp:81
void set_size(const size_t aNumRows, const size_t aNumCols)
Definition cl_AR_Matrix.hpp:164
size_t n_rows() const
Definition cl_AR_Matrix.hpp:183
void set_col(const size_t aColIndex, const Vector< T > &aVector)
Definition cl_AR_Matrix.hpp:438
Matrix(const Matrix< T > &aMatrix)
copy constructor
Definition cl_AR_Matrix.hpp:89
Matrix< T > & operator=(const Matrix< T > &aMatrix)
copy assignment operator
Definition cl_AR_Matrix.hpp:240
T & operator()(const size_t aRowIndex, const size_t aColIndex)
access operator ( writable version )
Definition cl_AR_Matrix.hpp:256
void set_row(const size_t aColIndex, const ET &aExpression)
Definition cl_AR_Matrix.hpp:430
arma::Mat< T > MatrixType
Definition cl_AR_Matrix.hpp:34
Matrix< T > & operator=(const T &aValue)
Fill with value.
Definition cl_AR_Matrix.hpp:465
Matrix< T > & operator-=(const Matrix< T > &aMatrix)
Definition cl_AR_Matrix.hpp:534
Matrix()=default
virtual const T & operator()(const size_t aRowIndex, const size_t aColIndex) const
access operator ( const version )
Definition cl_AR_Matrix.hpp:277
size_t n_cols() const
Definition cl_AR_Matrix.hpp:191
Matrix(Matrix< T > &&aMatrix) noexcept
move constructor
Definition cl_AR_Matrix.hpp:96
Matrix(const std::initializer_list< std::initializer_list< T > > &aInitList)
Definition cl_AR_Matrix.hpp:67
Matrix< T > & operator+=(T &aValue)
Definition cl_AR_Matrix.hpp:496
Matrix< T > & operator*=(const MatrixType &aExpression)
Definition cl_AR_Matrix.hpp:572
Matrix< T > & operator+=(const MatrixType &aExpression)
Definition cl_AR_Matrix.hpp:514
Matrix< T > & operator*=(const Matrix< T > &aMatrix)
Definition cl_AR_Matrix.hpp:563
Matrix< T > & operator*=(const T &aValue)
Definition cl_AR_Matrix.hpp:554
const T * data() const
Definition cl_AR_Matrix.hpp:124
void print(const std::string aLabel="Matrix") const
Definition cl_AR_Matrix.hpp:606
Matrix(const size_t aNumRows, const size_t aNumCols, const T aValue)
Definition cl_AR_Matrix.hpp:57
T * data()
Returns a borrowed raw buffer under the layout contract stated in cl_Matrix.hpp; may be nullptr when ...
Definition cl_AR_Matrix.hpp:116
Matrix< T > & operator+=(const Matrix< T > &aMatrix)
Definition cl_AR_Matrix.hpp:505
Matrix< T > & operator=(const ET &aExpression)
Fill with expression.
Definition cl_AR_Matrix.hpp:478
void set_col(const size_t aColIndex, const ET &aExpression)
Definition cl_AR_Matrix.hpp:451
auto row(const size_t aRowIndex) const -> decltype(mMatrix.row(aRowIndex))
Definition cl_AR_Matrix.hpp:311
size_t length() const
get the length of the vector
Definition cl_AR_Vector.hpp:235
VectorType & vector_data()
expose the underlying matrix implementation ( writable version )
Definition cl_AR_Vector.hpp:182
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30