ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
basis.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * 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 #ifndef ERKALE_BASIS
18 #define ERKALE_BASIS
19 
20 #include "global.h"
21 
22 #include <armadillo>
23 #include <vector>
24 #include <string>
25 #include <cfloat>
26 
28 class Settings;
29 
30 #include "xyzutils.h"
31 
33 const char shell_types[]={'S','P','D','F','G','H','I','J','K','L','M','N','O','Q','R'};
35 const int max_am=sizeof(shell_types)/sizeof(shell_types[0])-1;
36 
38 typedef struct {
40  int l;
42  int m;
44  int n;
46  double relnorm;
47 } shellf_t;
48 
50 typedef struct {
52  double x;
54  double y;
56  double z;
57 } coords_t;
58 
59 arma::vec coords_to_vec(const coords_t & c);
60 coords_t vec_to_coords(const arma::vec & v);
61 
62 // Forward declaration
63 class GaussianShell;
64 
66 typedef struct {
68  size_t ind;
72  bool bsse;
73 
75  std::string symbol;
77  int Z;
79  int Q;
80 
82  std::vector<const GaussianShell *> shells;
83 } nucleus_t;
84 
86 bool operator==(const nucleus_t & lhs, const nucleus_t & rhs);
87 
89 typedef struct {
91  size_t is;
93  size_t i0;
95  int li;
96 
98  size_t js;
100  size_t j0;
102  int lj;
103 } shellpair_t;
104 
106 bool operator<(const shellpair_t & lhs, const shellpair_t & rhs);
107 
109 struct eripair_t {
111  size_t is;
113  size_t i0;
115  size_t Ni;
116 
118  size_t js;
120  size_t j0;
122  size_t Nj;
123 
125  double eri;
126 };
127 
129 bool operator<(const struct eripair_t & lhs, const struct eripair_t & rhs);
130 
131 // Forward declaration
132 class BasisSetLibrary;
133 class ElementBasisSet;
134 
136 bool exponent_compare(const GaussianShell & lhs, const GaussianShell & rhs);
137 
139 bool operator==(const coords_t & lhs, const coords_t & rhs);
141 coords_t operator-(const coords_t & lhs, const coords_t & rhs);
143 coords_t operator+(const coords_t & lhs, const coords_t & rhs);
145 coords_t operator/(const coords_t & lhs, double fac);
147 coords_t operator*(const coords_t & lhs, double fac);
148 
150 inline double normsq(const coords_t & r) {
151  return r.x*r.x + r.y*r.y + r.z*r.z;
152 }
153 
155 inline double norm(const coords_t & r) {
156  return sqrt(normsq(r));
157 }
158 
160 typedef struct {
162  double c;
164  double z;
165 } contr_t;
167 bool operator<(const contr_t & lhs, const contr_t & rhs);
169 bool operator==(const contr_t & lhs, const contr_t & rhs);
170 
171 #include "basislibrary.h"
172 
173 
186 class BasisSet {
189  std::vector<nucleus_t> nuclei;
191  std::vector<GaussianShell> shells;
192 
194  bool uselm;
195 
197  arma::mat nucleardist;
199  std::vector<shellpair_t> shellpairs;
200 
202  std::vector<double> shell_ranges;
203 
205  bool same_geometry(const BasisSet & rhs) const;
207  bool same_shells(const BasisSet & rhs) const;
208 
209  public:
211  BasisSet();
213  BasisSet(size_t Nat, const Settings & set);
215  ~BasisSet();
216 
226  BasisSet density_fitting(double fsam=1.5, int lmaxinc=1) const;
227 
236  BasisSet exchange_fitting() const;
237 
239  BasisSet decontract(arma::mat & m) const;
240 
242  void add_nucleus(const nucleus_t & nuc);
244  void add_shell(size_t nucind, const GaussianShell & sh, bool sort=true);
246  void add_shell(size_t nucind, int am, bool uselm, const std::vector<contr_t> & C, bool sort=true);
248  void add_shells(size_t nucind, ElementBasisSet el, bool sort=true);
249 
251  void sort();
253  void check_numbering();
256 
257  /* Finalization routines */
258 
261 
263  void form_unique_shellpairs();
265  std::vector<shellpair_t> get_unique_shellpairs() const;
266 
268  std::vector<eripair_t> get_eripairs(arma::mat & screen, double thr, double omega=0.0, double alpha=1.0, double beta=0.0, bool verbose=false) const;
269 
271  void convert_contractions();
273  void convert_contraction(size_t ish);
274 
276  void normalize(bool coeffs=true);
278  void coulomb_normalize();
279 
281  void finalize(bool convert=false, bool normalize=true);
282 
284  double nuclear_distance(size_t i, size_t j) const;
286  arma::mat nuclear_distances() const;
287 
289  int get_am(size_t shind) const;
291  int get_max_am() const;
293  size_t get_max_Ncontr() const;
294 
296  size_t get_last_ind() const;
298  size_t get_first_ind(size_t shind) const;
300  size_t get_last_ind(size_t shind) const;
301 
303  size_t find_shell_ind(size_t find) const;
304 
306  std::vector<GaussianShell> get_shells() const;
308  GaussianShell get_shell(size_t shind) const;
310  size_t get_shell_center_ind(size_t shind) const;
312  coords_t get_shell_center(size_t shind) const;
313 
315  std::vector<contr_t> get_contr(size_t ind) const;
317  std::vector<contr_t> get_contr_normalized(size_t ind) const;
319  std::vector<shellf_t> get_cart(size_t ind) const;
320 
322  bool is_lm_default() const;
324  bool lm_in_use(size_t ind) const;
326  void set_lm(size_t ind, bool lm);
327 
329  arma::mat get_trans(size_t ind) const;
330 
332  void fill_sph_transmat();
333 
335  size_t get_Nbf() const;
337  size_t get_Ncart() const;
339  size_t get_Nlm() const;
340 
342  size_t get_Nshells() const;
344  size_t get_Nbf(size_t ind) const;
346  size_t get_Ncart(size_t ind) const;
347 
356  void compute_shell_ranges(double eps=1e-10);
358  std::vector<double> get_shell_ranges() const;
360  std::vector<double> get_shell_ranges(double eps) const;
361 
363  std::vector<double> get_nuclear_distances(size_t inuc) const;
364 
366  size_t get_Nnuc() const;
368  nucleus_t get_nucleus(size_t inuc) const;
370  std::vector<nucleus_t> get_nuclei() const;
371 
373  arma::mat get_nuclear_coords() const;
375  void set_nuclear_coords(const arma::mat & coords);
376 
378  coords_t get_nuclear_coords(size_t inuc) const;
380  int get_Z(size_t inuc) const;
382  std::string get_symbol(size_t inuc) const;
384  std::string get_symbol_hr(size_t inuc) const;
385 
387  std::vector<GaussianShell> get_funcs(size_t inuc) const;
389  std::vector<size_t> get_shell_inds(size_t inuc) const;
390 
392  arma::vec eval_func(double x, double y, double z) const;
394  arma::mat eval_grad(double x, double y, double z) const;
396  arma::mat eval_hess(double x, double y, double z) const;
397 
399  arma::vec eval_func(size_t ish, double x, double y, double z) const;
401  arma::mat eval_grad(size_t ish, double x, double y, double z) const;
403  arma::vec eval_lapl(size_t ish, double x, double y, double z) const;
405  arma::mat eval_hess(size_t ish, double x, double y, double z) const;
407  arma::mat eval_laplgrad(size_t ish, double x, double y, double z) const;
408 
410  void print(bool verbose=false) const;
411 
413  arma::mat cart_to_sph_trans() const;
415  arma::mat sph_to_cart_trans() const;
416 
418  arma::mat overlap() const;
420  arma::mat coulomb_overlap() const;
422  arma::mat overlap(const BasisSet & rhs) const;
424  arma::mat coulomb_overlap(const BasisSet & rhs) const;
426  arma::mat kinetic() const;
428  arma::mat nuclear() const;
430  arma::mat potential(coords_t r) const;
431 
433  arma::mat eri_screening(double omega=0.0, double alpha=1.0, double beta=0.0) const;
434 
436  arma::vec nuclear_pulay(const arma::mat & P) const;
438  arma::vec nuclear_der(const arma::mat & P) const;
440  arma::vec kinetic_pulay(const arma::mat & P) const;
442  arma::vec overlap_der(const arma::mat & W) const;
444  arma::vec nuclear_force() const;
445 
447  std::vector<arma::mat> moment(int mom, double x=0.0, double y=0.0, double z=0.0) const;
448 
450  arma::vec integral() const;
451 
453  int Ztot() const;
454 
456  double Enuc() const;
457 
459  void projectMOs(const BasisSet & old, const arma::colvec & oldE, const arma::mat & oldMOs, arma::colvec & E, arma::mat & MOs, size_t nocc) const;
461  void projectOMOs(const BasisSet & old, const arma::cx_mat & oldOMOs, arma::cx_mat & OMOs, size_t nocc) const;
462 
464  bool operator==(const BasisSet & rhs) const;
465 
467  std::vector< std::vector<size_t> > find_identical_shells() const;
468 };
469 
471 arma::cube three_overlap(const GaussianShell *is, const GaussianShell *js, const GaussianShell *ks);
472 
484  size_t indstart;
485 
489  size_t cenind;
490 
492  bool uselm;
494  arma::mat transmat;
495 
500  std::vector<contr_t> c;
501 
503  int am;
504 
509  std::vector<shellf_t> cart;
510 
511  public:
513  GaussianShell();
515  GaussianShell(int am, bool lm, const std::vector<contr_t> & C);
517  ~GaussianShell();
518 
520  void set_first_ind(size_t ind);
522  void set_center(const coords_t & cenv, size_t cenindv);
523 
525  void sort();
526 
531  void convert_contraction();
532 
534  void normalize(bool coeffs=true);
536  void coulomb_normalize();
537 
539  std::vector<contr_t> get_contr() const;
541  std::vector<shellf_t> get_cart() const;
542 
549  std::vector<contr_t> get_contr_normalized() const;
550 
552  size_t get_Nbf() const;
554  size_t get_Ncart() const;
556  size_t get_Nlm() const;
557 
562  double range(double eps) const;
563 
565  bool lm_in_use() const;
567  void set_lm(bool lm);
569  arma::mat get_trans() const;
570 
572  size_t get_Ncontr() const;
574  int get_am() const;
576  size_t get_center_ind() const;
578  coords_t get_center() const;
579 
581  bool operator<(const GaussianShell & rhs) const;
583  bool operator==(const GaussianShell & rhs) const;
584 
586  size_t get_first_ind() const;
588  size_t get_last_ind() const;
589 
591  void print() const;
592 
594  arma::vec eval_func(double x, double y, double z) const;
596  arma::mat eval_grad(double x, double y, double z) const;
598  arma::vec eval_lapl(double x, double y, double z) const;
600  arma::mat eval_hess(double x, double y, double z) const;
602  arma::mat eval_laplgrad(double x, double y, double z) const;
603 
605  arma::mat overlap(const GaussianShell & rhs) const;
607  arma::mat coulomb_overlap(const GaussianShell & rhs) const;
609  arma::mat kinetic(const GaussianShell & rhs) const;
611  arma::mat nuclear(double cx, double cy, double cz, const GaussianShell & rhs) const;
612 
614  arma::vec nuclear_pulay(double cx, double cy, double cz, const arma::mat & P, const GaussianShell & rhs) const;
616  arma::vec nuclear_der(double cx, double cy, double cz, const arma::mat & P, const GaussianShell & rhs) const;
618  arma::vec kinetic_pulay(const arma::mat & P, const GaussianShell & rhs) const;
620  arma::vec overlap_der(const arma::mat & W, const GaussianShell & rhs) const;
621 
623  arma::vec integral() const;
624 
626  std::vector<arma::mat> moment(int mom, double x, double y, double z, const GaussianShell & rhs) const;
627 };
628 
630 GaussianShell dummyshell();
631 
633 std::vector<size_t> i_idx(size_t N);
634 
636 void construct_basis(BasisSet & basis, const std::vector<atom_t> & atoms, const BasisSetLibrary & baslib, const Settings & set);
638 void construct_basis(BasisSet & basis, const std::vector<nucleus_t> & nuclei, const BasisSetLibrary & baslib, const Settings & set);
639 
641 arma::vec compute_orbitals(const arma::mat & C, const BasisSet & bas, const coords_t & r);
642 
644 double compute_density(const arma::mat & P, const BasisSet & bas, const coords_t & r);
646 void compute_density_gradient(const arma::mat & P, const BasisSet & bas, const coords_t & r, double & d, arma::vec & g);
648 void compute_density_gradient_hessian(const arma::mat & P, const BasisSet & bas, const coords_t & r, double & d, arma::vec & g, arma::mat & h);
649 
651 double compute_potential(const arma::mat & P, const BasisSet & bas, const coords_t & r);
652 
660 double compute_elf(const arma::mat & P, const BasisSet & bas, const coords_t & r);
661 
663 double orth_diff(const arma::mat & C, const arma::mat & S);
665 double orth_diff(const arma::cx_mat & C, const arma::mat & S);
666 
668 void check_orth(const arma::mat & C, const arma::mat & S, bool verbose, double thr=sqrt(DBL_EPSILON));
670 void check_orth(const arma::cx_mat & C, const arma::mat & S, bool verbose, double thr=sqrt(DBL_EPSILON));
671 
682 arma::mat construct_IAO(const BasisSet & basis, const arma::mat & C, std::vector< std::vector<size_t> > & idx, std::string minbas="MINAO.gbs");
684 arma::cx_mat construct_IAO(const BasisSet & basis, const arma::cx_mat & C, std::vector< std::vector<size_t> > & idx, std::string minbas="MINAO.gbs");
685 
686 #endif
arma::mat nuclear() const
Calculate nuclear repulsion matrix.
Definition: basis.cpp:2195
std::vector< arma::mat > moment(int mom, double x=0.0, double y=0.0, double z=0.0) const
Compute moment integral around (x,y,z)
Definition: basis.cpp:2572
arma::mat nucleardist
Internuclear distances.
Definition: basis.h:197
std::vector< size_t > get_shell_inds(size_t inuc) const
Get indices of shells centered on a given atom.
Definition: basis.cpp:1768
arma::vec nuclear_force() const
Calculate nuclear repulsion force.
Definition: basis.cpp:2541
arma::mat eri_screening(double omega=0.0, double alpha=1.0, double beta=0.0) const
Calculate ERI screening matrix.
Definition: basis.cpp:2276
void form_unique_shellpairs()
Form list of unique shell pairs.
Definition: basis.cpp:1420
arma::mat potential(coords_t r) const
Calculate electric potential matrix.
Definition: basis.cpp:2242
int get_max_am() const
Get maximum angular momentum in basis set.
Definition: basis.cpp:1548
A shell of Gaussian basis functions of a given angular momentum, sharing the same exponential contrac...
Definition: basis.h:482
std::vector< GaussianShell > get_shells() const
Get shells in basis set.
Definition: basis.cpp:1657
void check_numbering()
Check numbering of basis functions.
Definition: basis.cpp:1352
arma::mat eval_hess(double x, double y, double z) const
Evaluate Hessian at (x,y,z)
Definition: basis.cpp:717
int am
Angular momentum of shell.
Definition: basis.h:503
std::vector< contr_t > get_contr() const
Get the exponential contraction.
Definition: basis.cpp:322
std::vector< shellf_t > get_cart() const
Get cartesians.
Definition: basis.cpp:326
int get_Z(size_t inuc) const
Get charge of nucleus.
Definition: basis.cpp:1745
void convert_contractions()
Convert contractions from normalized primitives to unnormalized primitives.
Definition: basis.cpp:1931
double c
Coefficient.
Definition: basis.h:162
void set_lm(bool lm)
Toggle use of spherical harmonics.
Definition: basis.cpp:403
~BasisSet()
Destructor.
Definition: basis.cpp:1293
arma::mat eval_grad(double x, double y, double z) const
Evaluate gradients at (x,y,z)
Definition: basis.cpp:585
coords_t get_center() const
Get coordinates.
Definition: basis.cpp:433
size_t is
First shell.
Definition: basis.h:111
void update_nuclear_shell_list()
Update the nuclear list of shells.
Definition: basis.cpp:1361
arma::mat transmat
Transformation matrix to spherical basis.
Definition: basis.h:494
bool is_lm_default() const
Are spherical harmonics the default for new shells?
Definition: basis.cpp:1682
size_t is
Index of first shell.
Definition: basis.h:91
size_t get_Nnuc() const
Get number of nuclei.
Definition: basis.cpp:1705
std::vector< GaussianShell > shells
Basis functions.
Definition: basis.h:191
std::vector< double > get_shell_ranges() const
Get precomputed ranges of shells.
Definition: basis.cpp:1580
bool bsse
Counterpoise nucleus..?
Definition: basis.h:72
BasisSet density_fitting(double fsam=1.5, int lmaxinc=1) const
Definition: basis.cpp:2962
size_t find_shell_ind(size_t find) const
Find shell index of basis function.
Definition: basis.cpp:1642
BasisSet decontract(arma::mat &m) const
Decontract basis set, m gives mapping from old functions to new ones.
Definition: basis.cpp:3244
std::vector< arma::mat > moment(int mom, double x, double y, double z, const GaussianShell &rhs) const
Calculate moment integrals around (x,y,z) between shells.
Definition: basis.cpp:1166
bool same_shells(const BasisSet &rhs) const
Check for same shells.
Definition: basis.cpp:3227
std::vector< nucleus_t > nuclei
Nuclei.
Definition: basis.h:189
void compute_shell_ranges(double eps=1e-10)
Definition: basis.cpp:1576
size_t get_Nlm() const
Number of spherical harmonics on shell.
Definition: basis.cpp:351
Helper for integral sorts.
Definition: basis.h:109
arma::mat coulomb_overlap() const
Calculate overlap matrix in Coulomb metric.
Definition: basis.cpp:2085
size_t get_Nbf() const
Number of functions on shell.
Definition: basis.cpp:344
int Ztot() const
Calculate nuclear charge.
Definition: basis.cpp:2702
size_t js
Second shell.
Definition: basis.h:118
void compute_nuclear_distances()
Compute nuclear distance table.
Definition: basis.cpp:1388
std::vector< const GaussianShell * > shells
List of shells located on nucleus.
Definition: basis.h:82
arma::vec nuclear_pulay(double cx, double cy, double cz, const arma::mat &P, const GaussianShell &rhs) const
Calculate nuclear Pulay forces.
Definition: basis.cpp:1000
bool operator==(const BasisSet &rhs) const
Are the basis sets the same?
Definition: basis.cpp:3240
size_t Nj
Amount of functions on shell.
Definition: basis.h:122
void set_center(const coords_t &cenv, size_t cenindv)
Set center.
Definition: basis.cpp:214
size_t get_Ncontr() const
Get number of contractions.
Definition: basis.cpp:420
BasisSet()
Dummy constructor.
Definition: basis.cpp:1280
void coulomb_normalize()
Normalize contractions in Coulomb norm (for density fitting)
Definition: basis.cpp:275
std::vector< shellpair_t > get_unique_shellpairs() const
Get list of unique shell pairs.
Definition: basis.cpp:1464
arma::vec eval_func(double x, double y, double z) const
Evaluate functions at (x,y,z)
Definition: basis.cpp:535
arma::vec overlap_der(const arma::mat &W) const
Calculate overlap derivative force.
Definition: basis.cpp:2491
void sort()
Sort shells in nuclear order, then by angular momentum, then by exponents.
Definition: basis.cpp:1375
size_t get_max_Ncontr() const
Get maximum number of contractions.
Definition: basis.cpp:1561
arma::mat get_nuclear_coords() const
Get coordinates of all nuclei.
Definition: basis.cpp:1717
coords_t get_shell_center(size_t shind) const
Get coordinates of center of ind&#39;th shell.
Definition: basis.cpp:1665
GaussianShell()
Dummy constructor.
Definition: basis.cpp:153
void add_shell(size_t nucind, const GaussianShell &sh, bool sort=true)
Add a shell to a nucleus and sort functions if wanted.
Definition: basis.cpp:1304
size_t j0
Index of first function on second shell.
Definition: basis.h:100
arma::mat cart_to_sph_trans() const
Calculate transformation matrix from cartesians to spherical harmonics.
Definition: basis.cpp:2012
arma::mat nuclear(double cx, double cy, double cz, const GaussianShell &rhs) const
Calculate nuclear repulsion matrix between shells.
Definition: basis.cpp:969
int n
Angular momentum in z direction.
Definition: basis.h:44
size_t get_Nbf() const
Get size of basis set.
Definition: basis.cpp:1569
arma::mat kinetic(const GaussianShell &rhs) const
Calculate kinetic energy matrix between shells.
Definition: basis.cpp:936
Basis set library class.
Definition: basislibrary.h:231
size_t js
Index of second shell.
Definition: basis.h:98
std::vector< shellpair_t > shellpairs
List of unique shell pairs.
Definition: basis.h:199
double z
Exponent.
Definition: basis.h:164
int li
Angular momentum of first shell.
Definition: basis.h:95
bool operator<(const GaussianShell &rhs) const
Comparison operator for angular momentum ordering.
Definition: basis.cpp:437
int get_am() const
Get angular momentum.
Definition: basis.cpp:424
std::vector< contr_t > get_contr_normalized(size_t ind) const
Get normalized exponential contraction of the ind:th shell.
Definition: basis.cpp:1673
double y
y coordinate
Definition: basis.h:54
Settings used for a calculations.
Definition: settings.h:74
size_t get_center_ind() const
Get nucleus index.
Definition: basis.cpp:428
arma::mat eval_grad(double x, double y, double z) const
Evaluate gradient at (x,y,z)
Definition: basis.cpp:1821
int lj
Angular momentum of second shell.
Definition: basis.h:102
std::vector< shellf_t > get_cart(size_t ind) const
Get the cartesian functions on the ind:th shell.
Definition: basis.cpp:1677
bool lm_in_use() const
Are spherical harmonics in use?
Definition: basis.cpp:399
Structure for defining shells of functions.
Definition: basis.h:38
Basis set for an element.
Definition: basislibrary.h:102
std::vector< contr_t > get_contr_normalized() const
Definition: basis.cpp:330
std::string symbol
Type of nucleus.
Definition: basis.h:75
double eri
Maximum integral on the shell.
Definition: basis.h:125
double Enuc() const
Calculate nuclear repulsion energy.
Definition: basis.cpp:2712
void normalize(bool coeffs=true)
Normalize contractions.
Definition: basis.cpp:234
size_t get_first_ind(size_t shind) const
Get index of first function on shell.
Definition: basis.cpp:1634
arma::vec nuclear_der(double cx, double cy, double cz, const arma::mat &P, const GaussianShell &rhs) const
Calculate nuclear Hellman-Feynman force.
Definition: basis.cpp:1042
size_t get_Nlm() const
Get amount of spherical harmonics on shell.
Definition: basis.cpp:1609
double relnorm
Relative normalization coefficient.
Definition: basis.h:46
std::string get_symbol_hr(size_t inuc) const
Get human readable symbol of nucleus (-Bq)
Definition: basis.cpp:1753
void set_nuclear_coords(const arma::mat &coords)
Set coordinates of all nuclei.
Definition: basis.cpp:1725
void add_shells(size_t nucind, ElementBasisSet el, bool sort=true)
Add all shells to a nucleus and sort functions if wanted.
Definition: basis.cpp:1332
coords_t r
Location of nucleus.
Definition: basis.h:70
void set_lm(size_t ind, bool lm)
Toggle the use of spherical harmonics on shell ind.
Definition: basis.cpp:1690
arma::vec nuclear_pulay(const arma::mat &P) const
Calculate nuclear Pulay forces.
Definition: basis.cpp:2320
void convert_contraction()
Definition: basis.cpp:223
double x
x coordinate
Definition: basis.h:52
size_t get_Nshells() const
Get number of shells.
Definition: basis.cpp:1701
arma::mat coulomb_overlap(const GaussianShell &rhs) const
Calculate block Coulomb overlap matrix between shells.
Definition: basis.cpp:911
void fill_sph_transmat()
Fill spherical harmonics transformation table.
void print(bool verbose=false) const
Print out basis set.
Definition: basis.cpp:1950
size_t i0
First function on shell.
Definition: basis.h:113
arma::mat get_trans() const
Get transformation matrix to spherical harmonics basis.
Definition: basis.cpp:412
std::vector< double > get_nuclear_distances(size_t inuc) const
Get distances to other nuclei.
Definition: basis.cpp:1595
size_t ind
Index of nucleus.
Definition: basis.h:68
std::vector< std::vector< size_t > > find_identical_shells() const
Find &quot;identical&quot; shells in basis set.
Definition: basis.cpp:3596
size_t j0
First function on shell.
Definition: basis.h:120
Nucleus structure.
Definition: basis.h:66
int m
Angular momentum in y direction.
Definition: basis.h:42
void projectOMOs(const BasisSet &old, const arma::cx_mat &oldOMOs, arma::cx_mat &OMOs, size_t nocc) const
Translate OMOs to new geometry, assuming same basis set. Virtuals are discarded and regenerated...
Definition: basis.cpp:2849
Basis set.
Definition: basis.h:187
size_t i0
Index of first functions on first shell.
Definition: basis.h:93
arma::mat kinetic() const
Calculate kinetic energy matrix.
Definition: basis.cpp:2165
arma::vec eval_lapl(double x, double y, double z) const
Evaluate laplacian at (x,y,z)
Definition: basis.cpp:652
std::vector< double > shell_ranges
Ranges of shells.
Definition: basis.h:202
bool uselm
Use spherical harmonics?
Definition: basis.h:492
arma::mat overlap() const
Calculate overlap matrix.
Definition: basis.cpp:2055
void set_first_ind(size_t ind)
Set index of first basis function.
Definition: basis.cpp:210
double range(double eps) const
Definition: basis.cpp:355
void normalize(bool coeffs=true)
Normalize contractions. If !coeffs, only cartesian factors are calculated.
Definition: basis.cpp:1940
int l
Angular momentum in x direction.
Definition: basis.h:40
double nuclear_distance(size_t i, size_t j) const
Get distance of nuclei.
Definition: basis.cpp:1407
size_t get_Ncart() const
Get amount of cartesian functions on shell.
Definition: basis.cpp:1602
size_t Ni
Amount of functions on shell.
Definition: basis.h:115
GaussianShell get_shell(size_t shind) const
Get ind:th shell.
Definition: basis.cpp:1661
std::string get_symbol(size_t inuc) const
Get symbol of nucleus.
Definition: basis.cpp:1749
void sort()
Sort exponents in decreasing order.
Definition: basis.cpp:219
arma::mat overlap(const GaussianShell &rhs) const
Calculate block overlap matrix between shells.
Definition: basis.cpp:879
size_t cenind
Index of center.
Definition: basis.h:489
std::vector< nucleus_t > get_nuclei() const
Get nuclei.
Definition: basis.cpp:1713
size_t get_shell_center_ind(size_t shind) const
Get index of the center of the ind&#39;th shell.
Definition: basis.cpp:1653
bool operator==(const GaussianShell &rhs) const
Are the two the same?
Definition: basis.cpp:456
std::vector< eripair_t > get_eripairs(arma::mat &screen, double thr, double omega=0.0, double alpha=1.0, double beta=0.0, bool verbose=false) const
Get list of ERI pairs. Screening matrix will also be calculated.
Definition: basis.cpp:1472
int Z
Nuclear charge.
Definition: basis.h:77
Coordinates structure.
Definition: basis.h:50
bool uselm
Use spherical harmonics by default as basis?
Definition: basis.h:194
arma::mat eval_hess(double x, double y, double z) const
Evaluate Hessian at (x,y,z)
Definition: basis.cpp:1866
size_t get_last_ind() const
Get index of last function, throws an exception if no functions exist.
Definition: basis.cpp:1624
double z
z coordinate
Definition: basis.h:56
Structure for contractions.
Definition: basis.h:160
void convert_contraction(size_t ish)
Convert contraction on given shell.
Definition: basis.cpp:1936
std::vector< contr_t > c
Definition: basis.h:500
arma::mat nuclear_distances() const
Get nuclear distances.
Definition: basis.cpp:1411
void coulomb_normalize()
Normalize contractions in Coulomb norm (for density fitting)
Definition: basis.cpp:1945
arma::mat sph_to_cart_trans() const
Calculate transfomration matrix from spherical harmonics to cartesians.
Definition: basis.cpp:2048
arma::vec kinetic_pulay(const arma::mat &P) const
Calculate kinetic Pulay forces.
Definition: basis.cpp:2442
std::vector< contr_t > get_contr(size_t ind) const
Get exponential contraction of the ind:th shell.
Definition: basis.cpp:1669
arma::vec integral() const
Compute integrals of basis functions (used in xc-fitting)
Definition: basis.cpp:2618
bool same_geometry(const BasisSet &rhs) const
Check for same geometry.
Definition: basis.cpp:3214
arma::vec nuclear_der(const arma::mat &P) const
Calculate nuclear Hellman-Feynman force.
Definition: basis.cpp:2382
arma::vec integral() const
Calculate integral over function (used in xc-fitting)
Definition: basis.cpp:1238
void finalize(bool convert=false, bool normalize=true)
Do all of the above.
Definition: basis.cpp:1522
arma::vec overlap_der(const arma::mat &W, const GaussianShell &rhs) const
Calculate overlap derivative.
Definition: basis.cpp:1126
size_t get_first_ind() const
Get index of first function on shell.
Definition: basis.cpp:485
bool lm_in_use(size_t ind) const
Is shell ind using spherical harmonics?
Definition: basis.cpp:1686
void print() const
Print out information about shell.
Definition: basis.cpp:493
~GaussianShell()
Destructor.
Definition: basis.cpp:207
Structure for unique shell pairs.
Definition: basis.h:89
size_t get_last_ind() const
Get index of last function on shell.
Definition: basis.cpp:489
arma::vec eval_func(double x, double y, double z) const
Evaluate functions at (x,y,z)
Definition: basis.cpp:1776
coords_t cen
Coordinates of center.
Definition: basis.h:487
size_t indstart
Number of first function on shell.
Definition: basis.h:484
void projectMOs(const BasisSet &old, const arma::colvec &oldE, const arma::mat &oldMOs, arma::colvec &E, arma::mat &MOs, size_t nocc) const
Project MOs to new basis set.
Definition: basis.cpp:2733
std::vector< GaussianShell > get_funcs(size_t inuc) const
Get basis functions centered on a given atom.
Definition: basis.cpp:1760
arma::mat eval_laplgrad(double x, double y, double z) const
Evaluate gradient of laplacian at (x,y,z)
Definition: basis.cpp:797
BasisSet exchange_fitting() const
Definition: basis.cpp:3124
std::vector< shellf_t > cart
Definition: basis.h:509
size_t get_Ncart() const
Number of cartesians on shell.
Definition: basis.cpp:416
void add_nucleus(const nucleus_t &nuc)
Add nucleus.
Definition: basis.cpp:1296
arma::mat eval_laplgrad(size_t ish, double x, double y, double z) const
Evaluate gradient of laplacian of shell ish at (x,y,z)
Definition: basis.cpp:1927
int Q
Net charge in system (used for atomic guess)
Definition: basis.h:79
arma::vec eval_lapl(size_t ish, double x, double y, double z) const
Evaluate laplacian of shell ish at (x,y,z)
Definition: basis.cpp:1919
int get_am(size_t shind) const
Get angular momentum of shell.
Definition: basis.cpp:1544
arma::mat get_trans(size_t ind) const
Get transformation matrix.
Definition: basis.cpp:1697
nucleus_t get_nucleus(size_t inuc) const
Get nucleus.
Definition: basis.cpp:1709
arma::vec kinetic_pulay(const arma::mat &P, const GaussianShell &rhs) const
Calculate kinetic Pulay forces.
Definition: basis.cpp:1086