ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
bfprod.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_BFPROD
19 #define ERKALE_BFPROD
20 
21 #include <vector>
22 #include <cstdlib>
23 class BasisSet;
24 
26 typedef struct {
28  int m;
30  double c;
32 
34 bool operator<(const prod_gaussian_1d_contr_t & lhs, const prod_gaussian_1d_contr_t & rhs);
36 bool operator==(const prod_gaussian_1d_contr_t & lhs, const prod_gaussian_1d_contr_t & rhs);
37 
39 typedef struct {
41  double xp;
43  double zeta;
45  std::vector<prod_gaussian_1d_contr_t> c;
47 
49 bool operator<(const prod_gaussian_1d_t & lhs, const prod_gaussian_1d_t & rhs);
51 bool operator==(const prod_gaussian_1d_t & lhs, const prod_gaussian_1d_t & rhs);
52 
56  std::vector<prod_gaussian_1d_t> p;
57 
58  void add_term(const prod_gaussian_1d_t & t);
59  void add_contr(size_t ind, const prod_gaussian_1d_contr_t & t);
60 
61  public:
62  prod_gaussian_1d(double xa, double xb, int la, int lb, double zetaa, double zetab);
64 
65  prod_gaussian_1d operator+(const prod_gaussian_1d & rhs) const;
66  prod_gaussian_1d & operator+=(const prod_gaussian_1d & rhs);
67 
68  void print() const;
69  std::vector<prod_gaussian_1d_t> get() const;
70 };
71 
73 typedef struct {
75  int l;
77  int m;
79  int n;
80 
82  double c;
84 
86 bool operator<(const prod_gaussian_3d_contr_t & lhs, const prod_gaussian_3d_contr_t & rhs);
88 bool operator==(const prod_gaussian_3d_contr_t & lhs, const prod_gaussian_3d_contr_t & rhs);
89 
91 typedef struct {
93  double xp;
95  double yp;
97  double zp;
98 
100  double zeta;
101 
103  std::vector<prod_gaussian_3d_contr_t> c;
105 
107 bool operator<(const prod_gaussian_3d_t & lhs, const prod_gaussian_3d_t & rhs);
109 bool operator==(const prod_gaussian_3d_t & lhs, const prod_gaussian_3d_t & rhs);
110 
114  std::vector<prod_gaussian_3d_t> p;
115 
116  void add_term(const prod_gaussian_3d_t & t);
117  void add_contr(size_t ind, const prod_gaussian_3d_contr_t & t);
118 
119  public:
121  ~prod_gaussian_3d();
122 
123  prod_gaussian_3d(double xa, double xb, double ya, double yb, double za, double zb, int la, int lb, int ma, int mb, int na, int nb, double zetaa, double zetab);
124 
125  prod_gaussian_3d operator+(const prod_gaussian_3d & rhs) const;
126  prod_gaussian_3d & operator+=(const prod_gaussian_3d & rhs);
127 
128  prod_gaussian_3d operator*(double fac) const;
129 
131  void clean();
132 
134  double integral() const;
135 
137  std::vector<prod_gaussian_3d_t> get() const;
138 
139  void print() const;
140 };
141 
142 // Compute product of bfs on shells i and j
143 std::vector<prod_gaussian_3d> compute_product(const BasisSet & bas, size_t is, size_t js);
144 // Transform computed product into spherical basis
145 std::vector<prod_gaussian_3d> spherical_transform(const BasisSet & bas, size_t is, size_t js, std::vector<prod_gaussian_3d> & res);
146 
147 // Compute product bfs
148 std::vector<prod_gaussian_3d> compute_products(const BasisSet & bas);
149 
150 #endif
int m
y exponent
Definition: bfprod.h:77
double integral() const
Compute the integral over . When has been computed, one can check this against . ...
Definition: bfprod.cpp:352
double zp
z coordinate of center
Definition: bfprod.h:97
Structure for contraction in 1d product.
Definition: bfprod.h:26
Three dimensional product.
Definition: bfprod.h:112
double c
Expansion coefficient.
Definition: bfprod.h:30
std::vector< prod_gaussian_3d_contr_t > c
Contraction.
Definition: bfprod.h:103
std::vector< prod_gaussian_1d_contr_t > c
Contraction.
Definition: bfprod.h:45
double yp
y coordinate of center
Definition: bfprod.h:95
double zeta
Exponent.
Definition: bfprod.h:100
void clean()
Clean out terms with zero contribution.
Definition: bfprod.cpp:343
int m
Exponent in Fourier transform.
Definition: bfprod.h:28
One dimensional product.
Definition: bfprod.h:54
Basis set.
Definition: basis.h:187
int n
z exponent
Definition: bfprod.h:79
int l
x exponent
Definition: bfprod.h:75
Structure for 1d product.
Definition: bfprod.h:39
double zeta
Reduced exponent.
Definition: bfprod.h:43
std::vector< prod_gaussian_3d_t > p
Product Gaussians.
Definition: bfprod.h:114
double xp
Center of product Gaussian.
Definition: bfprod.h:41
Structure for contraction in 3d product.
Definition: bfprod.h:73
std::vector< prod_gaussian_1d_t > p
Product Gaussians.
Definition: bfprod.h:56
Structure for 3d product.
Definition: bfprod.h:91
double c
Contraction coefficient.
Definition: bfprod.h:82
double xp
x coordinate of center
Definition: bfprod.h:93