12#include <autodiff/forward/real.hpp>
24 static_assert(Coordinates::dim == 1,
"TexLinearInterpolator1D requires 1D coordinates");
60 if (!
owner)
throw std::runtime_error(
"Cannot update data of non-owner interpolator");
62 if constexpr (std::is_same_v<NT2, autodiff::real>)
89 if constexpr (std::is_same_v<ReturnType, autodiff::real>)
92 else if constexpr (std::is_same_v<ReturnType, float>)
96 idx = std::max(0.f, std::min(idx,
static_cast<float>(
size - 1)));
97 if constexpr (std::is_same_v<ReturnType, autodiff::real>)
98 return std::array<double, 2>{{
m_data[
uint(std::floor(idx))] * (1.f - idx + std::floor(idx)) +
99 m_data[
uint(std::ceil(idx))] * (idx - std::floor(idx)),
100 m_data_AD[
uint(std::floor(idx))] * (1.f - idx + std::floor(idx)) +
102 else if constexpr (std::is_same_v<ReturnType, float>)
103 return m_data[
uint(std::floor(idx))] * (1.f - idx + std::floor(idx)) +
104 m_data[
uint(std::ceil(idx))] * (idx - std::floor(idx));
A linear interpolator for 1D data, using texture memory on the GPU and floating point arithmetic on t...
Definition tex_linear_interpolation_1D.hh:23
std::shared_ptr< float[]> m_data
Definition tex_linear_interpolation_1D.hh:122
~TexLinearInterpolator1D()
TexLinearInterpolator1D(const Coordinates &coordinates)
Construct a TexLinearInterpolator1D with internal, zeroed data and a coordinate system.
TexLinearInterpolator1D(const TexLinearInterpolator1D &other)
Construct a copy of a TexLinearInterpolator1D object.
void update(const NT2 *data)
Definition tex_linear_interpolation_1D.hh:58
const bool owner
Definition tex_linear_interpolation_1D.hh:130
std::vector< cudaArray_t > device_array
Definition tex_linear_interpolation_1D.hh:123
std::vector< cudaArray_t > device_array_AD
Definition tex_linear_interpolation_1D.hh:127
std::shared_ptr< float[]> m_data_AD
Definition tex_linear_interpolation_1D.hh:126
__device__ __host__ ReturnType operator()(const float x) const
Interpolate the data at a given point.
Definition tex_linear_interpolation_1D.hh:86
typename internal::__TLITypes< NT >::ReturnType ReturnType
Definition tex_linear_interpolation_1D.hh:78
ReturnType & operator[](const uint i)
cudaTextureObject_t texture[max_device_count]
Definition tex_linear_interpolation_1D.hh:124
TexLinearInterpolator1D(const NT *data, const Coordinates &coordinates)
Construct a TexLinearInterpolator1D object from a pointer to data and a coordinate system.
const Coordinates coordinates
Definition tex_linear_interpolation_1D.hh:120
cudaTextureObject_t texture_AD[max_device_count]
Definition tex_linear_interpolation_1D.hh:128
TexLinearInterpolator1D(const std::vector< NT > &data, const Coordinates &coordinates)
Construct a TexLinearInterpolator1D object from a vector of data and a coordinate system.
const uint size
Definition tex_linear_interpolation_1D.hh:119
int n_devices
Definition tex_linear_interpolation_1D.hh:131
static constexpr int max_device_count
Definition tex_linear_interpolation_1D.hh:26
const ReturnType & operator[](const uint i) const
const Coordinates & get_coordinates() const
Get the coordinate system of the data.
Definition tex_linear_interpolation_1D.hh:116
Definition complex_math.hh:14
unsigned int uint
Definition utils.hh:22