oILAB
Loading...
Searching...
No Matches
Function.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 7/9/23.
3//
4
5#ifndef OILAB_POLYNOMIAL_H
6#define OILAB_POLYNOMIAL_H
7
8#include <deque>
9#include <cmath>
10#include "Eigen/Dense"
11#include "unsupported/Eigen/CXX11/Tensor"
12#include <array>
13
14namespace gbLAB {
15
16 template<typename Scalar, int dim>
17 class LatticeFunction;
18
19 template<typename Scalar, int dim>
20 class PeriodicFunction;
21
22 template<typename Derived, typename Scalar>
23 class Function {
24 using dcomplex= std::complex<double>;
25 private:
26 const Derived& derivedFunction;
27 public:
28 double domainSize;
29 explicit Function(double _domainSize = std::numeric_limits<double>::infinity());
30 Scalar operator()(const Eigen::Vector<double,Eigen::Dynamic>& vec) const;
31
32 /*
33 template<int dim>
34 LatticeFunction<dcomplex,dim> fft(const std::array<Eigen::Index,dim>& n, const Eigen::Matrix<double,Eigen::Dynamic,dim>& basisVectors) const;
35 */
36 };
37
38 /* ******************************************** */
39 class Exponential : public Function<Exponential,std::complex<double>>
40 {
41 private:
42 const Eigen::Vector<double,Eigen::Dynamic>& x;
43 public:
44 explicit Exponential(const Eigen::Vector<double,Eigen::Dynamic>& _x);
45 std::complex<double> operator()(const Eigen::Vector<double,Eigen::Dynamic>& vec) const;
46 };
47
48 /* ******************************************** */
49 // it is a 2d scalar function that takes 3d input
50 template<typename T, typename Scalar>
51 class Shift : public Function<Shift<T,Scalar>, Scalar>
52 {
53 public:
55 Eigen::Vector<double,Eigen::Dynamic> t;
56 Shift(const Eigen::Vector<double,Eigen::Dynamic>& t, const Function<T,Scalar>& fun);
57 Scalar operator()(const Eigen::Vector<double,Eigen::Dynamic>& y) const;
58 };
59}
60
62#endif //OILAB_POLYNOMIAL_H
std::complex< double > operator()(const Eigen::Vector< double, Eigen::Dynamic > &vec) const
const Eigen::Vector< double, Eigen::Dynamic > & x
Definition Function.h:42
Scalar operator()(const Eigen::Vector< double, Eigen::Dynamic > &vec) const
const Derived & derivedFunction
Definition Function.h:26
double domainSize
Definition Function.h:28
std::complex< double > dcomplex
Definition Function.h:24
const Function< T, Scalar > & fun
Definition Function.h:54
Scalar operator()(const Eigen::Vector< double, Eigen::Dynamic > &y) const
Eigen::Vector< double, Eigen::Dynamic > t
Definition Function.h:55