ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
fourierprod.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * HF/DFT from Hel
7  *
8  * Written by Susi Lehtola, 2010-2011
9  * Copyright (c) 2010-2011, Susi Lehtola
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  */
16 
17 
18 #ifndef ERKALE_FOURIERPROD
19 #define ERKALE_FOURIERPROD
20 
21 #include "bfprod.h"
22 #include <complex>
23 #include "../global.h"
24 #include <armadillo>
25 
27 typedef struct {
29  int l;
31  int m;
33  int n;
34 
36  std::complex<double> c;
38 
40 bool operator<(const prod_fourier_contr_t & lhs, const prod_fourier_contr_t & rhs);
42 bool operator==(const prod_fourier_contr_t & lhs, const prod_fourier_contr_t & rhs);
43 
45 typedef struct {
47  double xp;
49  double yp;
51  double zp;
52 
54  double zeta;
55 
57  std::vector<prod_fourier_contr_t> c;
59 
61 bool operator<(const prod_fourier_t & lhs, const prod_fourier_t & rhs);
63 bool operator==(const prod_fourier_t & lhs, const prod_fourier_t & rhs);
64 
65 class prod_fourier {
67  std::vector<prod_fourier_t> p;
68 
69  void add_term(const prod_fourier_t & t);
70  void add_contr(size_t ind, const prod_fourier_contr_t & t);
71 
72  public:
73  prod_fourier();
75  ~prod_fourier();
76 
78  prod_fourier conjugate() const;
79 
81  prod_fourier operator*(const prod_fourier & rhs) const;
83  prod_fourier operator*(double fac) const;
85  prod_fourier & operator+=(const prod_fourier & rhs);
86 
88  std::vector<prod_fourier_t> get() const;
89 
91  std::complex<double> eval(double px, double py, double pz) const;
92 
94  void print() const;
95 };
96 
98 std::vector<prod_fourier> fourier_transform(const std::vector<prod_gaussian_3d> & prod);
99 
101 arma::cx_mat momentum_transfer(const std::vector<prod_fourier> & fprod, size_t Nbf, const arma::vec & q);
102 
103 #endif
std::vector< prod_fourier_t > p
Product Gaussians.
Definition: fourierprod.h:67
Definition: fourierprod.h:65
Structure for contraction in transform.
Definition: fourierprod.h:27
prod_fourier conjugate() const
Get complex conjugate.
Definition: fourierprod.cpp:140
std::complex< double > c
Contraction coefficient.
Definition: fourierprod.h:36
prod_fourier & operator+=(const prod_fourier &rhs)
Addition operator.
Definition: fourierprod.cpp:214
Three dimensional product.
Definition: bfprod.h:112
int m
py exponent
Definition: fourierprod.h:31
void print() const
Print out expansion.
Definition: fourierprod.cpp:132
int l
px exponent
Definition: fourierprod.h:29
std::vector< prod_fourier_contr_t > c
Contraction.
Definition: fourierprod.h:57
double xp
x coordinate of center (phase factor)
Definition: fourierprod.h:47
int n
pz exponent
Definition: fourierprod.h:33
double zeta
Exponent.
Definition: fourierprod.h:54
double zp
z coordinate of center (phase factor)
Definition: fourierprod.h:51
double yp
y coordinate of center (phase factor)
Definition: fourierprod.h:49
Structure for Fourier transform of product of basis functions.
Definition: fourierprod.h:45
std::complex< double > eval(double px, double py, double pz) const
Evaluate at p=(px,py,pz)
Definition: fourierprod.cpp:266
prod_fourier operator*(const prod_fourier &rhs) const
Multiplication operator.
Definition: fourierprod.cpp:160