Tatooine
sinuscosinus.h
Go to the documentation of this file.
1#ifndef TATOOINE_ANALYTICAL_NUMERICAL_SINUSCOSINUS_H
2#define TATOOINE_ANALYTICAL_NUMERICAL_SINUSCOSINUS_H
3//==============================================================================
4#include <tatooine/field.h>
5#include <boost/math/constants/constants.hpp>
6#include <cmath>
7//==============================================================================
9//==============================================================================
10template <typename Real>
11struct cosinussinus : vectorfield<cosinussinus<Real>, Real, 2> {
14 using typename parent_type::pos_type;
15 using typename parent_type::tensor_type;
16 //============================================================================
18 //============================================================================
19 constexpr cosinussinus(Real const r = 1) noexcept : m_radius{r} {}
20 //----------------------------------------------------------------------------
21 constexpr auto set_radius(Real r) { m_radius = r; }
22 //----------------------------------------------------------------------------
23 [[nodiscard]] constexpr auto evaluate(const pos_type& /*x*/, Real t) const
24 -> tensor_type {
25 return {gcem::cos(t) * m_radius, gcem::sin(t) * m_radius};
26 }
27};
28//==============================================================================
29template <typename Real>
30struct sinuscosinus : vectorfield<sinuscosinus<Real>, Real, 2> {
33 using typename parent_type::pos_type;
34 using typename parent_type::tensor_type;
35 //============================================================================
37 //============================================================================
38 constexpr sinuscosinus(Real const r = 1) noexcept : m_radius{r} {}
39 //----------------------------------------------------------------------------
40 constexpr auto set_radius(Real r) { m_radius = r; }
41 //----------------------------------------------------------------------------
42 [[nodiscard]] constexpr auto evaluate(const pos_type& /*x*/, Real t) const
43 -> tensor_type {
44 return {std::sin(t) * m_radius, std::cos(t) * m_radius};
45 }
46};
47//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50//==============================================================================
51} // namespace tatooine::analytical::numerical
52//==============================================================================
53#endif
Definition: abcflow.h:7
constexpr auto set_radius(Real r)
Definition: sinuscosinus.h:21
constexpr auto evaluate(const pos_type &, Real t) const -> tensor_type
Definition: sinuscosinus.h:23
Real m_radius
Definition: sinuscosinus.h:17
constexpr cosinussinus(Real const r=1) noexcept
Definition: sinuscosinus.h:19
Real m_radius
Definition: sinuscosinus.h:36
constexpr auto set_radius(Real r)
Definition: sinuscosinus.h:40
constexpr auto evaluate(const pos_type &, Real t) const -> tensor_type
Definition: sinuscosinus.h:42
constexpr sinuscosinus(Real const r=1) noexcept
Definition: sinuscosinus.h:38
Definition: field.h:134
vec< real_type, NumDimensions > pos_type
Definition: field.h:20
Tensor tensor_type
Definition: field.h:18
Definition: vec.h:12