oILAB
Loading...
Searching...
No Matches
LatticeFunction.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 5/26/24.
3//
4
5#ifndef OILAB_LATTICEFUNCTION_H
6#define OILAB_LATTICEFUNCTION_H
7
8#include <Eigen/Dense>
9#include <unsupported/Eigen/CXX11/Tensor>
10
11// Lattice function defined on the lattice points
12namespace oILAB {
13
14template <typename Derived, typename Scalar> class Function;
15
16template <typename Scalar, int dim> class PeriodicFunction;
17
18template <typename Scalar, int dim> class LatticeFunction {
19 using dcomplex = std::complex<double>;
20
21public:
22 const Eigen::Matrix<double, Eigen::Dynamic, dim> basisVectors;
23 Eigen::Tensor<Scalar, dim> values;
24 explicit LatticeFunction(
25 const Eigen::array<Eigen::Index, dim> &n,
26 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors);
27
28 template <typename T, typename = T, typename = T, int dm = dim,
29 typename = std::enable_if_t<dm == 1>>
31 const Eigen::array<Eigen::Index, dim> &n,
32 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
33 const Function<T, Scalar> &fun);
34
35 template <typename T, typename = T, int dm = dim,
36 typename = std::enable_if_t<dm == 2>>
38 const Eigen::array<Eigen::Index, dim> &n,
39 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
40 const Function<T, Scalar> &fun);
41
42 template <typename T, int dm = dim, typename = std::enable_if_t<dm == 3>>
44 const Eigen::array<Eigen::Index, dim> &n,
45 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
46 const Function<T, Scalar> &fun);
47
48 std::complex<double>
49 dot(const LatticeFunction<std::complex<double>, dim> &other) const;
50
52 };
53
54 template<typename Scalar, int dim>
56 } // namespace oILAB
57
59
60#endif //OILAB_LATTICEFUNCTION_H
std::complex< double > dot(const LatticeFunction< std::complex< double >, dim > &other) const
Eigen::Tensor< Scalar, dim > values
const Eigen::Matrix< double, Eigen::Dynamic, dim > basisVectors
std::complex< double > dcomplex
PeriodicFunction< dcomplex, dim > ifft() const
LatticeVector< dim > operator*(const typename LatticeVector< dim >::IntScalarType &scalar, const LatticeVector< dim > &L)