ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
integrals.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-2013
9  * Copyright (c) 2010-2013, 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 INTEGRALS_H
18 #define INTEGRALS_H
19 
20 #include <armadillo>
21 
23 typedef struct {
25  int n;
27  double zeta;
29  int l;
31  int m;
32 } bf_t;
33 
35 arma::mat overlap(const std::vector<bf_t> & basis);
37 arma::mat kinetic(const std::vector<bf_t> & basis);
39 arma::mat nuclear(const std::vector<bf_t> & basis, int Z);
41 arma::mat coulomb(const std::vector<bf_t> & basis, const arma::mat & P);
43 arma::mat exchange(const std::vector<bf_t> & basis, const arma::mat & P);
44 
46 arma::mat coulomb(const std::vector<bf_t> & basis, const std::vector<bf_t> & fitbas, const arma::mat & P);
47 
49 double normalization(int n, double z);
51 double overlap(int na, int nb, double za, double zb, int la, int ma, int lb, int mb);
53 inline double overlap(bf_t i, bf_t j) {
54  return overlap(i.n,j.n,i.zeta,j.zeta,i.l,i.m,j.l,j.m);
55 }
56 
58 double three_overlap(int na, int nc, int nd, int la, int ma, int lc, int mc, int ld, int md, double za, double zc, double zd);
60 inline double three_overlap(bf_t i, bf_t k, bf_t l) {
61  return three_overlap(i.n,k.n,l.n,i.l,i.m,k.l,k.m,l.l,l.m,i.zeta,k.zeta,l.zeta);
62 }
63 
64 
66 double kinetic(int na, int nb, double za, double zb, int la, int ma, int lb, int mb);
68 double nuclear(int na, int nb, double za, double zb, int la, int ma, int lb, int mb);
69 
71 double ERI_unnormalized(int na, int nb, int nc, int nd, double za, double zb, double zc, double zd, int la, int ma, int lb, int mb, int lc, int mc, int ld, int md);
73 inline double ERI_unnormalized(bf_t i, bf_t j, bf_t k, bf_t l) {
74  return ERI_unnormalized(i.n,j.n,k.n,l.n,i.zeta,j.zeta,k.zeta,l.zeta,i.l,i.m,j.l,j.m,k.l,k.m,l.l,l.m);
75 }
77 double ERI(int na, int nb, int nc, int nd, double za, double zb, double zc, double zd, int la, int ma, int lb, int mb, int lc, int mc, int ld, int md);
79 inline double ERI(bf_t i, bf_t j, bf_t k, bf_t l) {
80  return ERI(i.n,j.n,k.n,l.n,i.zeta,j.zeta,k.zeta,l.zeta,i.l,i.m,j.l,j.m,k.l,k.m,l.l,l.m);
81 }
82 
84 double gaussian_ERI(int la, int ma, int lb, int mb, int lc, int mc, int ld, int md, double za, double zb, double zc, double zd, int nfit);
86 inline double gaussian_ERI(bf_t i, bf_t j, bf_t k, bf_t l) {
87  return gaussian_ERI(i.l,i.m,j.l,j.m,k.l,k.m,l.l,l.m,i.zeta,j.zeta,k.zeta,l.zeta,6);
88 }
89 
90 #endif
int l
Angular momentum.
Definition: integrals.h:29
double zeta
Slater exponent.
Definition: integrals.h:27
Basis function.
Definition: integrals.h:23
int n
Primary quantum number.
Definition: integrals.h:25
int m
z component
Definition: integrals.h:31