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;
59 arma::vec coords_to_vec(
const coords_t & c);
60 coords_t vec_to_coords(
const arma::vec & v);
82 std::vector<const GaussianShell *>
shells;
150 inline double normsq(
const coords_t & r) {
151 return r.
x*r.
x + r.
y*r.
y + r.
z*r.
z;
155 inline double norm(
const coords_t & r) {
156 return sqrt(normsq(r));
171 #include "basislibrary.h"
246 void add_shell(
size_t nucind,
int am,
bool uselm,
const std::vector<contr_t> & C,
bool sort=
true);
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;
289 int get_am(
size_t shind)
const;
306 std::vector<GaussianShell>
get_shells()
const;
315 std::vector<contr_t>
get_contr(
size_t ind)
const;
319 std::vector<shellf_t>
get_cart(
size_t ind)
const;
326 void set_lm(
size_t ind,
bool lm);
344 size_t get_Nbf(
size_t ind)
const;
380 int get_Z(
size_t inuc)
const;
387 std::vector<GaussianShell>
get_funcs(
size_t inuc)
const;
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;
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;
410 void print(
bool verbose=
false)
const;
433 arma::mat
eri_screening(
double omega=0.0,
double alpha=1.0,
double beta=0.0)
const;
447 std::vector<arma::mat>
moment(
int mom,
double x=0.0,
double y=0.0,
double z=0.0)
const;
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;
500 std::vector<contr_t>
c;
541 std::vector<shellf_t>
get_cart()
const;
562 double range(
double eps)
const;
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;
626 std::vector<arma::mat>
moment(
int mom,
double x,
double y,
double z,
const GaussianShell & rhs)
const;
633 std::vector<size_t> i_idx(
size_t N);
641 arma::vec compute_orbitals(
const arma::mat & C,
const BasisSet & bas,
const coords_t & r);
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);
651 double compute_potential(
const arma::mat & P,
const BasisSet & bas,
const coords_t & r);
660 double compute_elf(
const arma::mat & P,
const BasisSet & bas,
const coords_t & r);
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);
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));
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");
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'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 "identical" 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'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