OGS
CoordinateSystem.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <Eigen/Core>
14#include <array>
15#include <vector>
16
17namespace ParameterLib
18{
19template <typename T>
20struct Parameter;
21class SpatialPosition;
22} // namespace ParameterLib
23
24namespace ParameterLib
25{
48struct CoordinateSystem final
49{
56 explicit CoordinateSystem(Parameter<double> const& unit_direction);
57
59
61 Parameter<double> const& e1,
62 Parameter<double> const& e2);
63
64 template <int Dimension>
65 Eigen::Matrix<double, Dimension, Dimension> transformation(
66 SpatialPosition const& pos) const;
67
68 Eigen::Matrix<double, 3, 3> transformation_3d(
69 SpatialPosition const& pos) const;
70
71 template <int Dimension>
72 Eigen::Matrix<double, Dimension, Dimension> rotateTensor(
73 std::vector<double> const& values, SpatialPosition const& pos) const;
74
75 template <int Dimension>
76 Eigen::Matrix<double, Dimension, Dimension> rotateDiagonalTensor(
77 std::vector<double> const& values, SpatialPosition const& pos) const;
78
79private:
80 std::array<Parameter<double> const*, 3> _base;
82
83 Eigen::Matrix<double, 3, 3> transformationFromSingleBase_3d(
84 SpatialPosition const& pos) const;
85};
86
87extern template Eigen::Matrix<double, 2, 2> CoordinateSystem::rotateTensor<2>(
88 std::vector<double> const& values, SpatialPosition const& pos) const;
89extern template Eigen::Matrix<double, 3, 3> CoordinateSystem::rotateTensor<3>(
90 std::vector<double> const& values, SpatialPosition const& pos) const;
91extern template Eigen::Matrix<double, 2, 2>
92CoordinateSystem::rotateDiagonalTensor<2>(std::vector<double> const& values,
93 SpatialPosition const& pos) const;
94extern template Eigen::Matrix<double, 3, 3>
95CoordinateSystem::rotateDiagonalTensor<3>(std::vector<double> const& values,
96 SpatialPosition const& pos) const;
97} // namespace ParameterLib
A local coordinate system used for tensor transformations.
std::array< Parameter< double > const *, 3 > _base
Eigen::Matrix< double, Dimension, Dimension > transformation(SpatialPosition const &pos) const
Eigen::Matrix< double, 3, 3 > transformationFromSingleBase_3d(SpatialPosition const &pos) const
Eigen::Matrix< double, 3, 3 > transformation_3d(SpatialPosition const &pos) const
Eigen::Matrix< double, Dimension, Dimension > rotateTensor(std::vector< double > const &values, SpatialPosition const &pos) const
Eigen::Matrix< double, Dimension, Dimension > rotateDiagonalTensor(std::vector< double > const &values, SpatialPosition const &pos) const
CoordinateSystem(Parameter< double > const &unit_direction)