anonymous_namespace{skew_symmetric_matrix3.cpp} Namespace Reference

Functions

template<typename Scalar >
void constructors ()
 
template<typename Scalar >
void assignments ()
 
template<typename Scalar >
void plusMinus ()
 
template<typename Scalar >
void multiplyScale ()
 
template<typename Matrix >
void skewSymmetricMultiplication (const Matrix &m)
 
template<typename Scalar >
void traceAndDet ()
 
template<typename Scalar >
void transpose ()
 
template<typename Scalar >
void exponentialIdentity ()
 
template<typename Scalar >
void exponentialOrthogonality ()
 
template<typename Scalar >
void exponentialRotation ()
 

Function Documentation

◆ assignments()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::assignments ( )
38  {
40  typedef Matrix<Scalar, 3, 3> SquareMatrix;
41 
42  const Vector v = Vector::Random();
43 
44  // assign to square matrix
45  SquareMatrix sq;
46  sq = v.asSkewSymmetric();
47  VERIFY(sq.isSkewSymmetric());
48 
49  // assign to skew symmetric matrix
51  sk = v.asSkewSymmetric();
52  VERIFY_IS_APPROX(v, sk.vector());
53 }
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
Represents a 3x3 skew symmetric matrix with its storage.
Definition: SkewSymmetricMatrix3.h:183
EIGEN_DEVICE_FUNC const SkewSymmetricVectorType & vector() const
Definition: SkewSymmetricMatrix3.h:198
Matrix< Type, Size, 1 > Vector
\cpp11 SizeƗ1 vector of type Type.
Definition: Eigen/Eigen/src/Core/Matrix.h:515
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
#define VERIFY(a)
Definition: main.h:362

References v, Eigen::SkewSymmetricMatrix3< Scalar_ >::vector(), VERIFY, and VERIFY_IS_APPROX.

Referenced by ProblemParameters::edge_sign_setup(), TestProblem::edge_sign_setup(), and Global_Physical_Variables::edge_sign_setup().

◆ constructors()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::constructors ( )
13  {
15  const Vector v = Vector::Random();
16  // l-value
18  const Vector& v1 = s1.vector();
20  VERIFY(s1.cols() == 3);
21  VERIFY(s1.rows() == 3);
22 
23  // r-value
24  const SkewSymmetricMatrix3<Scalar> s2(std::move(v));
25  VERIFY_IS_APPROX(v1, s2.vector());
26  VERIFY_IS_APPROX(s1.toDenseMatrix(), s2.toDenseMatrix());
27 
28  // from scalars
29  SkewSymmetricMatrix3<Scalar> s4(v1(0), v1(1), v1(2));
30  VERIFY_IS_APPROX(v1, s4.vector());
31 
32  // constructors with four vectors do not compile
33  // Matrix<Scalar, 4, 1> vector4 = Matrix<Scalar, 4, 1>::Random();
34  // SkewSymmetricMatrix3<Scalar> s5(vector4);
35 }
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9;Map< RowVectorXf > v1(M1.data(), M1.size())

References Eigen::SkewSymmetricBase< Derived >::cols(), Eigen::SkewSymmetricBase< Derived >::rows(), Eigen::SkewSymmetricBase< Derived >::toDenseMatrix(), v, v1(), Eigen::SkewSymmetricMatrix3< Scalar_ >::vector(), VERIFY, and VERIFY_IS_APPROX.

◆ exponentialIdentity()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::exponentialIdentity ( )
144  {
146  const Vector v1 = Vector::Zero();
147  VERIFY(v1.asSkewSymmetric().exponential().isIdentity());
148 
149  Vector v2 = Vector::Random();
150  v2.normalize();
151  VERIFY((2 * EIGEN_PI * v2).asSkewSymmetric().exponential().isIdentity());
152 
153  Vector v3;
154  const auto precision = static_cast<Scalar>(1.1) * NumTraits<Scalar>::dummy_precision();
155  v3 << 0, 0, precision;
156  VERIFY(v3.asSkewSymmetric().exponential().isIdentity(precision));
157 }
#define EIGEN_PI
Definition: MathFunctions.h:16
Map< RowVectorXf > v2(M2.data(), M2.size())
SCALAR Scalar
Definition: bench_gemm.cpp:45
double Zero
Definition: pseudosolid_node_update_elements.cc:35
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217

References EIGEN_PI, v1(), v2(), VERIFY, and oomph::PseudoSolidHelper::Zero.

◆ exponentialOrthogonality()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::exponentialOrthogonality ( )
160  {
162  typedef Matrix<Scalar, 3, 3> SquareMatrix;
163  const Vector v = Vector::Random();
164  SquareMatrix sq = v.asSkewSymmetric().exponential();
165  VERIFY(sq.isUnitary());
166 }

References v, and VERIFY.

◆ exponentialRotation()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::exponentialRotation ( )
169  {
171  typedef Matrix<Scalar, 3, 3> SquareMatrix;
172 
173  // rotation axis is invariant
174  const Vector v1 = Vector::Random();
175  const SquareMatrix r1 = v1.asSkewSymmetric().exponential();
176  VERIFY_IS_APPROX(r1 * v1, v1);
177 
178  // rotate around z-axis
179  Vector v2;
180  v2 << 0, 0, Scalar(EIGEN_PI);
181  const SquareMatrix r2 = v2.asSkewSymmetric().exponential();
182  VERIFY_IS_APPROX(r2 * (Vector() << 1, 0, 0).finished(), (Vector() << -1, 0, 0).finished());
183  VERIFY_IS_APPROX(r2 * (Vector() << 0, 1, 0).finished(), (Vector() << 0, -1, 0).finished());
184 }
bool finished
Definition: MergeRestartFiles.py:79

References EIGEN_PI, MergeRestartFiles::finished, v1(), v2(), and VERIFY_IS_APPROX.

◆ multiplyScale()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::multiplyScale ( )
87  {
89  typedef Matrix<Scalar, 3, 3> SquareMatrix;
90 
91  const Vector v1 = Vector::Random();
92  SquareMatrix sq1;
93  sq1 = v1.asSkewSymmetric();
95  sk1 = v1.asSkewSymmetric();
96 
97  const Scalar s1 = internal::random<Scalar>();
98  VERIFY_IS_APPROX(SkewSymmetricMatrix3<Scalar>(sk1 * s1).vector(), sk1.vector() * s1);
99  VERIFY_IS_APPROX(SkewSymmetricMatrix3<Scalar>(s1 * sk1).vector(), s1 * sk1.vector());
100  VERIFY_IS_APPROX(sq1 * (sk1 * s1), (sq1 * sk1) * s1);
101 
102  const Vector v2 = Vector::Random();
103  SquareMatrix sq2;
104  sq2 = v2.asSkewSymmetric();
106  sk2 = v2.asSkewSymmetric();
107  VERIFY_IS_APPROX(sk1 * sk2, sq1 * sq2);
108 
109  // null space
110  VERIFY((sk1 * v1).isZero());
111  VERIFY((sk2 * v2).isZero());
112 }

References v1(), v2(), Eigen::SkewSymmetricMatrix3< Scalar_ >::vector(), VERIFY, and VERIFY_IS_APPROX.

◆ plusMinus()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::plusMinus ( )
56  {
58  typedef Matrix<Scalar, 3, 3> SquareMatrix;
59 
60  const Vector v1 = Vector::Random();
61  const Vector v2 = Vector::Random();
62 
63  SquareMatrix sq1;
64  sq1 = v1.asSkewSymmetric();
65  SquareMatrix sq2;
66  sq2 = v2.asSkewSymmetric();
67 
69  sk1 = v1.asSkewSymmetric();
71  sk2 = v2.asSkewSymmetric();
72 
73  VERIFY_IS_APPROX((sk1 + sk2).toDenseMatrix(), sq1 + sq2);
74  VERIFY_IS_APPROX((sk1 - sk2).toDenseMatrix(), sq1 - sq2);
75 
76  SquareMatrix sq3 = v1.asSkewSymmetric();
77  VERIFY_IS_APPROX(sq3 = v1.asSkewSymmetric() + v2.asSkewSymmetric(), sq1 + sq2);
78  VERIFY_IS_APPROX(sq3 = v1.asSkewSymmetric() - v2.asSkewSymmetric(), sq1 - sq2);
79  VERIFY_IS_APPROX(sq3 = v1.asSkewSymmetric() - 2 * v2.asSkewSymmetric() + v1.asSkewSymmetric(), sq1 - 2 * sq2 + sq1);
80 
81  VERIFY_IS_APPROX((sk1 + sk1).vector(), 2 * v1);
82  VERIFY((sk1 - sk1).vector().isZero());
83  VERIFY((sk1 - sk1).toDenseMatrix().isZero());
84 }

References v1(), v2(), VERIFY, and VERIFY_IS_APPROX.

Referenced by Eigen::EulerSystem< _AlphaAxis, _BetaAxis, _GammaAxis >::CalcEulerAngles_imp().

◆ skewSymmetricMultiplication()

template<typename Matrix >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::skewSymmetricMultiplication ( const Matrix m)
115  {
117  const Vector v = Vector::Random();
118  const Matrix m1 = Matrix::Random(m.rows(), m.cols());
119  const SkewSymmetricMatrix3<typename Matrix::Scalar> sk = v.asSkewSymmetric();
120  VERIFY_IS_APPROX(m1.transpose() * (sk * m1), (m1.transpose() * sk) * m1);
121  VERIFY((m1.transpose() * (sk * m1)).isSkewSymmetric());
122 }
Matrix3d m1
Definition: IOFormat.cpp:2
int * m
Definition: level2_cplx_impl.h:294

References m, m1, v, VERIFY, and VERIFY_IS_APPROX.

Referenced by EIGEN_DECLARE_TEST().

◆ traceAndDet()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::traceAndDet ( )
125  {
127  const Vector v = Vector::Random();
128  // this does not work, values larger than 1.e-08 can be seen
129  // VERIFY_IS_APPROX(sq.determinant(), static_cast<Scalar>(0));
130  VERIFY_IS_APPROX(v.asSkewSymmetric().determinant(), static_cast<Scalar>(0));
131  VERIFY_IS_APPROX(v.asSkewSymmetric().toDenseMatrix().trace(), static_cast<Scalar>(0));
132 }

References v, and VERIFY_IS_APPROX.

◆ transpose()

template<typename Scalar >
void anonymous_namespace{skew_symmetric_matrix3.cpp}::transpose ( )
135  {
137  const Vector v = Vector::Random();
138  // By definition of a skew symmetric matrix: A^T = -A
139  VERIFY_IS_APPROX(v.asSkewSymmetric().toDenseMatrix().transpose(), v.asSkewSymmetric().transpose().toDenseMatrix());
140  VERIFY_IS_APPROX(v.asSkewSymmetric().transpose().vector(), (-v).asSkewSymmetric().vector());
141 }

References v, and VERIFY_IS_APPROX.

Referenced by Eigen::CompleteOrthogonalDecomposition< MatrixType_, PermutationIndex_ >::_solve_impl_transposed(), Eigen::CompleteOrthogonalDecomposition< MatrixType_, PermutationIndex_ >::applyZOnTheLeftInPlace(), Eigen::internal::assign_sparse_to_sparse(), oomph::SuperLUSolver::backsub_serial(), oomph::SuperLUSolver::backsub_transpose_serial(), block(), check_indexed_view(), oomph::CRComplexMatrix::clean_up_memory(), oomph::CCComplexMatrix::clean_up_memory(), oomph::SuperLUSolver::clean_up_memory(), comparisons(), Eigen::RefBase< Derived >::construct(), Eigen::internal::dhs_cpack< Scalar, DataMapper, Packet, PacketC, StorageOrder, Conjugate, PanelMode, UseLhs >::dhs_cblock(), Eigen::BDCSVD< MatrixType_, Options_ >::divide(), EIGEN_DECLARE_TEST(), oomph::SuperLUSolver::factorise_serial(), integer_type_tests(), Eigen::MatrixBase< Derived >::isSkewSymmetric(), oomph::CRComplexMatrix::lubksub(), oomph::CCComplexMatrix::lubksub(), oomph::CRComplexMatrix::ludecompose(), oomph::CCComplexMatrix::ludecompose(), product(), Eigen::internal::solve_assertion< Transpose< Derived > >::run(), run_nesting_ops_2(), selfadjointeigensolver_essential_check(), symm(), and trmm().