BELFEM 0.9.3
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_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_MATRIX_HPP
13#define BELFEM_CL_MATRIX_HPP
14
15/*
16 * The contract of belfem::Matrix with either backend:
17 *
18 * - Storage is column-major ( BLAS/LAPACK order ). Column j is contiguous
19 * and row i is strided, so an inner loop varies the row index.
20 * - data() returns the raw storage, which may include padding. spacing()
21 * is its inter-column stride: Blaze pads it for SIMD alignment,
22 * Armadillo does not.
23 * - Element access goes through A( i, j ). An offset computed by hand
24 * must use spacing(), never n_rows(). The length of a whole-matrix
25 * transfer ( BLAS, LAPACK, MPI ) is spacing() * n_cols(), never
26 * capacity().
27 * - data() of an empty matrix is well-defined and may be nullptr.
28 */
29
30#include "cl_Vector.hpp"
31
32// include implementation
33#ifdef BELFEM_ARMADILLO
34#include "cl_AR_Matrix.hpp"
36#elif BELFEM_BLAZE
37#include "cl_BZ_Matrix.hpp"
39#endif
40
41#include "op_MatrixPlus.hpp"
42#include "op_MatrixMinus.hpp"
43#include "op_MatrixTimes.hpp"
44#endif //BELFEM_CL_MATRIX_HPP