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 gbLAB {
13
14 template<typename Derived, typename Scalar>
15 class Function;
16
17 template<typename Scalar, int dim>
18 class PeriodicFunction;
19
20 template<typename Scalar, int dim>
22 using dcomplex= std::complex<double>;
23 public:
24 const Eigen::Matrix<double, Eigen::Dynamic, dim> basisVectors;
25 Eigen::Tensor<Scalar, dim> values;
26 explicit LatticeFunction(const Eigen::array<Eigen::Index, dim>& n,
27 const Eigen::Matrix<double, Eigen::Dynamic, dim>& _basisVectors);
28
29 template<typename T, typename=T, typename=T, int dm = dim, typename = std::enable_if_t<dm == 1>>
30 LatticeFunction(const Eigen::array<Eigen::Index, dim> &n,
31 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
32 const Function<T,Scalar>& fun);
33
34 template<typename T, typename=T, int dm = dim, typename = std::enable_if_t<dm == 2>>
35 LatticeFunction(const Eigen::array<Eigen::Index, dim> &n,
36 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
37 const Function<T, Scalar> &fun);
38
39 template<typename T, int dm = dim, typename = std::enable_if_t<dm == 3>>
40 LatticeFunction(const Eigen::array<Eigen::Index, dim> &n,
41 const Eigen::Matrix<double, Eigen::Dynamic, dim> &_basisVectors,
42 const Function<T, Scalar> &fun);
43
44 std::complex<double> dot(const LatticeFunction<std::complex<double>,dim>& other) const;
45
47 };
48
49 template<typename Scalar, int dim>
51}
52
54
55#endif //OILAB_LATTICEFUNCTION_H
Eigen::Tensor< Scalar, dim > values
PeriodicFunction< dcomplex, dim > ifft() const
const Eigen::Matrix< double, Eigen::Dynamic, dim > basisVectors
std::complex< double > dcomplex
std::complex< double > dot(const LatticeFunction< std::complex< double >, dim > &other) const
LatticeVector< dim > operator*(const typename LatticeVector< dim >::IntScalarType &scalar, const LatticeVector< dim > &L)