Celeritas
0.5.0-56+6b053cd
|
#include <cmath>
#include "corecel/Macros.hh"
#include "corecel/cont/Array.hh"
#include "corecel/math/Algorithms.hh"
#include "corecel/math/Turn.hh"
#include "geocel/Types.hh"
Classes | |
struct | celeritas::matrix::TransposePolicy |
Namespaces | |
celeritas::matrix | |
Policy tags for matrix operations. | |
Functions | |
template<class T , size_type N> | |
CELER_FUNCTION Array< T, N > | celeritas::gemv (T alpha, SquareMatrix< T, N > const &a, Array< T, N > const &x, T beta, Array< T, N > const &y) |
Naive generalized matrix-vector multiply. More... | |
template<class T , size_type N> | |
CELER_FUNCTION Array< T, N > | celeritas::gemv (matrix::TransposePolicy, T alpha, SquareMatrix< T, N > const &a, Array< T, N > const &x, T beta, Array< T, N > const &y) |
Naive transposed generalized matrix-vector multiply. More... | |
template<class T > | |
T | celeritas::determinant (SquareMatrix< T, 3 > const &mat) |
Calculate the determiniant of a 3x3 matrix. | |
template<class T > | |
T | celeritas::trace (SquareMatrix< T, 3 > const &mat) |
Calculate the trace of a 3x3 matrix. More... | |
template<class T , size_type N> | |
SquareMatrix< T, N > | celeritas::gemm (SquareMatrix< T, N > const &a, SquareMatrix< T, N > const &b) |
Naive square matrix-matrix multiply. More... | |
template<class T , size_type N> | |
SquareMatrix< T, N > | celeritas::gemm (matrix::TransposePolicy, SquareMatrix< T, N > const &a, SquareMatrix< T, N > const &b) |
Naive square matrix-matrix multiply with the first matrix transposed. More... | |
template<class T , size_type N> | |
void | celeritas::orthonormalize (SquareMatrix< T, N > *mat) |
Normalize and orthogonalize a small, dense matrix. More... | |
Mat3 | celeritas::make_rotation (Real3 const &ax, Turn theta) |
Create a C-ordered rotation matrix from an arbitrary rotation. More... | |
Mat3 | celeritas::make_rotation (Axis ax, Turn theta) |
Create a C-ordered rotation matrix. | |
Mat3 | celeritas::make_rotation (Axis ax, Turn theta, Mat3 const &other) |
Rotate a C-ordered rotation matrix. More... | |
SquareMatrixReal3 | celeritas::make_transpose (SquareMatrixReal3 const &mat) |
Construct a transposed matrix. More... | |
template<class T , size_type N> | |
CELER_FUNCTION Array< T, N > | celeritas::gemv (SquareMatrix< T, N > const &a, Array< T, N > const &x) |
template<class T , size_type N> | |
CELER_FUNCTION Array< T, N > | celeritas::gemv (matrix::TransposePolicy, SquareMatrix< T, N > const &a, Array< T, N > const &x) |
Variables | |
constexpr TransposePolicy | celeritas::matrix::transpose {} |
Indicate that the input matrix is transposed. | |
SquareMatrix< T, N > celeritas::gemm | ( | matrix::TransposePolicy | , |
SquareMatrix< T, N > const & | a, | ||
SquareMatrix< T, N > const & | b | ||
) |
Naive square matrix-matrix multiply with the first matrix transposed.
\[ C \gets A^T * B \]
SquareMatrix< T, N > celeritas::gemm | ( | SquareMatrix< T, N > const & | a, |
SquareMatrix< T, N > const & | b | ||
) |
Naive square matrix-matrix multiply.
\[ C \gets A * B \]
This should be equivalent to BLAS' GEMM without the option to transpose, use strides, or multiply by constants. All matrix orderings are C-style: mat[i][j] is for row i, column j .
Note that this uses celeritas::fma
which supports types other than floating point.
|
inline |
Apply a matrix or its transpose to an array, without scaling or addition
|
inline |
Naive transposed generalized matrix-vector multiply.
\[ z \gets \alpha A^T x + \beta y \]
This should be equivalent to BLAS' GEMV with the 't' option. All matrix orderings are C-style: mat[i][j] is for row i, column j .
|
inline |
Apply a matrix or its transpose to an array, without scaling or addition
|
inline |
Naive generalized matrix-vector multiply.
\[ z \gets \alpha A x + \beta y \]
This should be equivalent to BLAS' GEMV without transposition. All matrix orderings are C-style: mat[i][j] is for row i, column j .
Rotate a C-ordered rotation matrix.
This applies the new axis + turn as a rotation operator to the left of the matrix.
For example, to rotate first by 135 degrees about the Z axis, then 90 degrees about the X axis:
Create a C-ordered rotation matrix from an arbitrary rotation.
This is equation (38) in "Rotation Matrices in Two, Three, and Many Dimensions", Physics 116A, UC Santa Cruz, http://scipp.ucsc.edu/~haber/ph116A/.
ax | Axis of rotation (unit vector) |
theta | Rotation |
SquareMatrixReal3 celeritas::make_transpose | ( | SquareMatrixReal3 const & | mat | ) |
Construct a transposed matrix.
This should only be used for preprocessing. Prefer methods that transpose on the fly.
void celeritas::orthonormalize | ( | SquareMatrix< T, N > * | mat | ) |
Normalize and orthogonalize a small, dense matrix.
This is used for constructing rotation matrices from user-given matrices that may only have a few digits of precision (e.g. were read from an XML file). It uses the modified Gram-Schmidt orthogonalization algorithm.
If debug assertions are enabled, the normality of the resulting matrix will be checked. A singular matrix will fail.
T celeritas::trace | ( | SquareMatrix< T, 3 > const & | mat | ) |
Calculate the trace of a 3x3 matrix.
The trace is just the sum of the diagonal elements.