-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSIAM.h
More file actions
64 lines (48 loc) · 1.35 KB
/
SIAM.h
File metadata and controls
64 lines (48 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef __SINGLE_IMPURITY_ANDERSON_MODEL_H__
#define __SINGLE_IMPURITY_ANDERSON_MODEL_H__
#include <functional>
#include <armadillo>
struct SIAM
{
using d2d = std::function<double(double)>;
using d2v = std::function<arma::vec(double)>;
SIAM( d2d const& Ed,
d2v const& cpl,
double const& U,
arma::vec const& bath,
arma::uword const& n_elec,
arma::uword const& n_val );
// impurity on-site energy and impurity-bath coupling amplitudes
// both are functions of the nuclear coordinate (which is a double)
d2d Ed;
d2v cpl;
double U;
arma::vec bath;
arma::uword n_elec;
arma::uword n_val;
arma::uword n_bath;
arma::uword n_occ;
arma::uword n_vir;
arma::span idx_F_occ;
arma::span idx_F_vir;
arma::uword max_scf_cycles = 50;
double tol_n_imp = 1e-10;
double E_mf = -1;
double n_imp = -1;
arma::mat vec_Fock;
arma::vec val_Fock;
double E_eff(double const& x, double const& n);
arma::mat Fock(double const& x, double const& n);
double n2n(double const& x, double const& n);
void mfscf(double const& x);
void CIS_common();
arma::vec vec_h;
arma::vec vec_l;
arma::mat Ftoo;
arma::mat Ftvv;
arma::subview<double> vec_Fock_occ();
arma::subview<double> vec_Fock_vir();
arma::mat Q_occ();
arma::mat Q_vir();
};
#endif