Tatooine
constant_vectorfield.h
Go to the documentation of this file.
1#ifndef TATOOINE_CONSTANT_VECTORFIELD_H
2#define TATOOINE_CONSTANT_VECTORFIELD_H
3//==============================================================================
4#include "field.h"
5//==============================================================================
6namespace tatooine {
7//==============================================================================
9template <typename Real, size_t N>
10struct constant_vectorfield : field<constant_vectorfield<Real, N>, Real, N, N> {
11 //============================================================================
12 // typedefs
13 //============================================================================
16 using typename parent_type::pos_type;
17 using typename parent_type::tensor_type;
18 //============================================================================
19 // members
20 //============================================================================
22 //============================================================================
23 // ctors
24 //============================================================================
25 private:
26 template <size_t... Is>
27 constexpr constant_vectorfield(std::index_sequence<Is...> /*is*/)
28 : m_vector{1, ((void)Is, 0)...} {}
29
30 public:
32 : constant_vectorfield{std::make_index_sequence<N - 1>{}} {}
33 //----------------------------------------------------------------------------
34 constexpr constant_vectorfield(const vec<Real, N>& vector)
35 : m_vector{vector} {}
36 //----------------------------------------------------------------------------
38 : m_vector{std::move(vector)} {}
39 //============================================================================
40 // methods
41 //============================================================================
42 constexpr tensor_type evaluate(const pos_type& /*x*/, Real /*t*/) const {
43 return m_vector;
44 }
45 //----------------------------------------------------------------------------
46 constexpr bool in_domain(const pos_type& /*x*/, Real /*t*/) const {
47 return true;
48 }
49};
50//==============================================================================
51} // namespace tatooine
52//==============================================================================
53#endif
Definition: algorithm.h:6
constant vectorfield
Definition: constant_vectorfield.h:10
constexpr constant_vectorfield(const vec< Real, N > &vector)
Definition: constant_vectorfield.h:34
const tensor_type m_vector
Definition: constant_vectorfield.h:21
constexpr constant_vectorfield()
Definition: constant_vectorfield.h:31
constexpr constant_vectorfield(std::index_sequence< Is... >)
Definition: constant_vectorfield.h:27
constexpr constant_vectorfield(vec< Real, N > &&vector)
Definition: constant_vectorfield.h:37
constexpr bool in_domain(const pos_type &, Real) const
Definition: constant_vectorfield.h:46
constexpr tensor_type evaluate(const pos_type &, Real) const
Definition: constant_vectorfield.h:42
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