1#ifndef TATOOINE_SPACETIME_VECTORFIELD_H
2#define TATOOINE_SPACETIME_VECTORFIELD_H
4#include <tatooine/available_libraries.h>
12 :
vectorfield<spacetime_vectorfield<V>, field_real_type<V>,
13 field_num_dimensions<V> + 1> {
21 static constexpr auto num_dimensions() -> std::size_t {
return field_num_dimensions<V> + 1; }
57 requires is_pointer<V>
60 template <std::convertible_to<V> W>
62 requires(!is_pointer<V>)
71 spatial_position(i) = x(i);
75 auto const sample =
v()(spatial_position, temporal_position);
86 requires is_pointer<V>
92 requires is_pointer<V>
98 requires is_pointer<V>
112 auto v() const -> auto const& {
121template <
typename V,
typename Real, std::
size_t N>
125template <
typename Real, std::
size_t N>
132#if TATOOINE_GINAC_AVAILABLE
135template <
typename Real, std::
size_t N>
150 for (std::size_t i = 0; i < N - 1; ++i) {
160template <
typename Real, std::
size_t N>
165template <
typename V,
typename Real, std::
size_t N>
170template <
typename V,
typename Real, std::
size_t N>
175template <
typename V,
typename Real, std::
size_t N>
static auto constexpr t
Definition: index.h:24
auto ev(const GiNaC::ex &expr, Relations &&... relations)
substitudes expression with relations
Definition: symbolic.h:35
Definition: algorithm.h:6
auto spacetime(vectorfield< V, Real, N > const &vf)
Definition: spacetime_vectorfield.h:166
static constexpr auto is_pointer
Definition: type_traits.h:22
typename std::decay_t< std::remove_pointer_t< std::decay_t< Field > > >::tensor_type field_tensor_type
Definition: field_type_traits.h:14
Real real_type
Definition: field.h:17
vec< real_type, NumDimensions > pos_type
Definition: field.h:20
Tensor tensor_type
Definition: field.h:18
auto as_derived() -> auto &
Definition: field.h:161
spacetime_vectorfield(field< symbolic::field< Real, N - 1 > const, Real, N - 1 > &v)
Definition: spacetime_vectorfield.h:147
Definition: spacetime_vectorfield.h:13
V m_v
Definition: spacetime_vectorfield.h:29
auto operator=(spacetime_vectorfield &&other) noexcept -> spacetime_vectorfield &=default
auto v() -> auto &
Definition: spacetime_vectorfield.h:104
auto set_field(polymorphic::vectorfield< real_type, num_dimensions() - 1 > const *v)
Definition: spacetime_vectorfield.h:97
spacetime_vectorfield(spacetime_vectorfield &&other) noexcept=default
auto set_field(polymorphic::vectorfield< real_type, num_dimensions() - 1 > const &v)
Definition: spacetime_vectorfield.h:91
auto set_field(vectorfield< W, real_type, num_dimensions() - 1 > const &v)
Definition: spacetime_vectorfield.h:85
virtual ~spacetime_vectorfield()=default
constexpr spacetime_vectorfield(vectorfield< W, real_type, num_dimensions() - 1 > const &w)
Definition: spacetime_vectorfield.h:61
static constexpr auto holds_field_pointer
Definition: spacetime_vectorfield.h:20
auto operator=(spacetime_vectorfield const &other) -> spacetime_vectorfield &=default
spacetime_vectorfield(spacetime_vectorfield const &other)=default
static constexpr auto num_dimensions() -> std::size_t
Definition: spacetime_vectorfield.h:21
auto v() const -> auto const &
Definition: spacetime_vectorfield.h:112
Real real_type
Definition: field.h:17
constexpr auto evaluate(pos_type const &x, real_type const) const -> tensor_type
Definition: spacetime_vectorfield.h:67
constexpr spacetime_vectorfield()
Definition: spacetime_vectorfield.h:51
constexpr spacetime_vectorfield(polymorphic::vectorfield< real_type, num_dimensions() - 1 > const *v)
Definition: spacetime_vectorfield.h:55
Definition: symbolic_field.h:16
tensor< GiNaC::ex, TensorDims... > symtensor_type
Definition: symbolic_field.h:22
auto constexpr x() const -> auto const &requires(N >=1)
Definition: vec.h:102