Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 :
8 : #include "DataStructures/Tensor/Tensor.hpp"
9 : #include "Utilities/Gsl.hpp"
10 :
11 : /// @{
12 : /*!
13 : * \brief Convert between Cartesian and spherical coordinates (r, theta, phi)
14 : *
15 : * In 2D the order is (r, phi), and in 3D the order is (r, theta, phi), as
16 : * defined by `Frame::Spherical`. The conventions for the angles are as follows:
17 : *
18 : * - phi is the azimuthal angle (-pi, pi], measuring the angle from the x-axis
19 : * - theta is the polar angle [0, pi], measuring the angle from the z-axis
20 : */
21 : template <typename DataType, size_t Dim, typename CoordsFrame>
22 1 : void cartesian_to_spherical(
23 : gsl::not_null<tnsr::I<DataType, Dim, Frame::Spherical<CoordsFrame>>*>
24 : result,
25 : const tnsr::I<DataType, Dim, CoordsFrame>& x);
26 :
27 : template <typename DataType, size_t Dim, typename CoordsFrame>
28 1 : tnsr::I<DataType, Dim, Frame::Spherical<CoordsFrame>> cartesian_to_spherical(
29 : const tnsr::I<DataType, Dim, CoordsFrame>& x);
30 :
31 : template <typename DataType, size_t Dim, typename CoordsFrame>
32 1 : void spherical_to_cartesian(
33 : gsl::not_null<tnsr::I<DataType, Dim, CoordsFrame>*> result,
34 : const tnsr::I<DataType, Dim, Frame::Spherical<CoordsFrame>>& x);
35 :
36 : template <typename DataType, size_t Dim, typename CoordsFrame>
37 1 : tnsr::I<DataType, Dim, CoordsFrame> spherical_to_cartesian(
38 : const tnsr::I<DataType, Dim, Frame::Spherical<CoordsFrame>>& x);
39 : /// @}
|