4
extern FILE *infile, *outfile;
10
MOInfo::SlaterDeterminant::SlaterDeterminant()
15
MOInfo::SlaterDeterminant::~SlaterDeterminant()
21
* @fn MOInfo::SlaterDeterminant::is_closed_shell()
23
bool MOInfo::SlaterDeterminant::is_closed_shell()
25
for(int i=0;i<moinfo->get_nmo();i++)
26
if(bits[i]!=bits[i+moinfo->get_nmo()])
33
* @fn MOInfo::SlaterDeterminant::is_spin_flip(SlaterDeterminant& det)
35
bool MOInfo::SlaterDeterminant::is_spin_flipped(SlaterDeterminant& det)
37
for(int i=0;i<moinfo->get_nmo();i++){
38
if(bits[i]!=det.test(i+moinfo->get_nmo()))
40
if(bits[i+moinfo->get_nmo()]!=det.test(i))
48
* @fn MOInfo::SlaterDeterminant::print(int n)
50
void MOInfo::SlaterDeterminant::print()
53
for(int i=0;i<moinfo->get_nmo();i++){
54
fprintf(outfile,"%s",get_occupation_symbol(i));
60
* @fn MOInfo::SlaterDeterminant::print(int n)
62
void MOInfo::SlaterDeterminant::print_occ()
66
for(int h=0;h<moinfo->get_nirreps();h++){
68
for(int i=0;i<moinfo->get_docc(h);i++){
69
fprintf(outfile,"%c",get_occupation_symbol(counter));
72
for(int i=0;i<moinfo->get_actv(h);i++){
73
fprintf(outfile,"%c",get_occupation_symbol(counter));
76
counter+=moinfo->get_avir(h);
83
* @fn MOInfo::SlaterDeterminant::get_internal_excitations(...)
85
void MOInfo::SlaterDeterminant::get_internal_excitations(SlaterDeterminant& det,double& sign,
86
vector<pair<int,int> >& alpha_operators,
87
vector<pair<int,int> >& beta_operators)
90
int nmo = moinfo->get_nmo();
91
bitdet bits_exc = det.get_bits();
92
bitdet bits_tmp = bits;
94
// Find one set of excitations at a time
98
if(bits[ann] && !bits_exc[ann]) break;
100
if(!bits[cre] && bits_exc[cre]) break;
102
alpha_operators.push_back(make_pair(moinfo->get_all_to_occ(ann),moinfo->get_all_to_vir(cre)));
103
sign *= annihilate(bits_tmp,ann);
104
sign *= create(bits_tmp,cre);
110
if(bits[ann+nmo] && !bits_exc[ann+nmo]) break;
112
if(!bits[cre+nmo] && bits_exc[cre+nmo]) break;
114
beta_operators.push_back(make_pair(moinfo->get_all_to_occ(ann),moinfo->get_all_to_vir(cre)));
115
sign *= annihilate(bits_tmp,ann+nmo);
116
sign *= create(bits_tmp,cre+nmo);
121
double MOInfo::SlaterDeterminant::annihilate(bitdet& bits_det,int so)
123
if(bits_det.test(so)){
126
for(int i=0;i<so;i++)
127
if(bits_det.test(i)) sign *= -1.0;
134
double MOInfo::SlaterDeterminant::create(bitdet& bits_det,int so)
136
if(!bits_det.test(so)){
139
for(int i=0;i<so;i++)
140
if(bits_det.test(i)) sign *= -1.0;
147
vector<int> MOInfo::SlaterDeterminant::get_aocc()
150
for(int i=0;i<moinfo->get_nmo();i++)
152
aocc.push_back(moinfo->get_all_to_occ(i));
156
vector<int> MOInfo::SlaterDeterminant::get_bocc()
159
for(int i=0;i<moinfo->get_nmo();i++)
160
if(bits[i+moinfo->get_nmo()])
161
bocc.push_back(moinfo->get_all_to_occ(i));
165
vector<int> MOInfo::SlaterDeterminant::get_avir()
168
for(int i=0;i<moinfo->get_nmo();i++)
170
avir.push_back(moinfo->get_all_to_vir(i));
174
vector<int> MOInfo::SlaterDeterminant::get_bvir()
177
for(int i=0;i<moinfo->get_nmo();i++)
178
if(!bits[i+moinfo->get_nmo()])
179
bvir.push_back(moinfo->get_all_to_vir(i));
183
char MOInfo::SlaterDeterminant::get_occupation_symbol(int i)
185
int occupation=bits[i]+bits[i+moinfo->get_nmo()];
186
if(occupation==0) return('0');
187
if(occupation==2) return('2');
188
if((occupation==1) && bits.test(i)) return('+');
189
if((occupation==1) && bits.test(i+moinfo->get_nmo())) return('-');