1#ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_source_pw_HAMILT_PWDFT_KERNELS_CUDA_VNL_TOOLS_CU_HPP
2#define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_source_pw_HAMILT_PWDFT_KERNELS_CUDA_VNL_TOOLS_CU_HPP
4#include <thrust/complex.h>
6#include <cuda_runtime.h>
9#include <hip/hip_runtime.h>
15template <
typename FPTYPE>
21 const FPTYPE& table_interval,
24 const FPTYPE position = x / table_interval;
25 const int iq =
static_cast<int>(position);
27 const FPTYPE x0 = position -
static_cast<FPTYPE
>(iq);
28 const FPTYPE x1 = 1.0 - x0;
29 const FPTYPE x2 = 2.0 - x0;
30 const FPTYPE x3 = 3.0 - x0;
31 const FPTYPE y = table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0] * x1 * x2 * x3 / 6.0
32 + table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 1] * x0 * x2 * x3 / 2.0
33 - table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 2] * x1 * x0 * x3 / 2.0
34 + table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 3] * x1 * x2 * x0 / 6.0;
39template <
typename FPTYPE>
45 const FPTYPE& table_interval,
48 const FPTYPE position = x / table_interval;
49 const int iq =
static_cast<int>(position);
51 const FPTYPE x0 = position -
static_cast<FPTYPE
>(iq);
52 const FPTYPE x1 = 1.0 - x0;
53 const FPTYPE x2 = 2.0 - x0;
54 const FPTYPE x3 = 3.0 - x0;
55 const FPTYPE y = (table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0] * (-x2 * x3 - x1 * x3 - x1 * x2) / 6.0
56 + table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 1] * (+x2 * x3 - x0 * x3 - x0 * x2) / 2.0
57 - table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 2] * (+x1 * x3 - x0 * x3 - x0 * x1) / 2.0
58 + table[(dim1 * tab_2 + dim2) * tab_3 + iq + 0 + 3] * (+x1 * x2 - x0 * x2 - x0 * x1) / 6.0)
__device__ FPTYPE _polynomial_interpolation(const FPTYPE *table, const int &dim1, const int &dim2, const int &tab_2, const int &tab_3, const FPTYPE &table_interval, const FPTYPE &x)
Definition vnl_tools_cu.hpp:16
__device__ FPTYPE _polynomial_interpolation_nl(const FPTYPE *table, const int &dim1, const int &dim2, const int &tab_2, const int &tab_3, const FPTYPE &table_interval, const FPTYPE &x)
Definition vnl_tools_cu.hpp:40