QNANO
CdaggerC_Iterator_SingleI.h
1 #ifndef QNANO_NEW_CDAGGERC_ITERATOR_SINGLEI_DEFINED_H
2 #define QNANO_NEW_CDAGGERC_ITERATOR_SINGLEI_DEFINED_H
3 
4 #include "manybody/Fermion_Double_Index.h"
5 #include <iostream>
6 #include <cstdlib>
7 
9 protected:
10  //Reference Fermion_Index
11  //Fermion_Index fi_ref;
12  //Current Fermion_Index
13  Fermion_Index fi_cur;
14 
15  //index of destroyed Fermion
16  int c_index;
17  //current position of cdagger index:
18  int cur_index;
19  //Current and maxmimal number of single-particle states
20  int n_cur, n_max;
21  int m_old;
22  //current sign;
23  double sign;
24 
25 public:
26  void adjust_fi();
27  void calculate_next();
28 
29 
30  bool done()const{
31  return n_cur>=n_max;
32  }
33  int get_n()const{
34  return n_cur;
35  }
36  int get_m()const{
37  return m_old;
38  }
39  double get_sign()const{
40  return sign;
41  }
42  const Fermion_Index& get_fi()const{
43  return fi_cur;
44  }
45 
46  CdaggerC_Iterator_SingleI& operator++(){
47  calculate_next();
48  return *this;
49  }
50 
51  void setup(const Fermion_Index &fi, int c_index_, int n_max_){
52  fi_cur=fi;
53  c_index=c_index_;
54  n_max=n_max_;
55 
56  //Handle vacuum:
57  if(fi.size()<1){
58  n_max=0;
59  n_cur=0;
60  return;
61  }
62 
63  if(c_index>=(int)fi.size()){
64  std::cerr<<"CdaggerC_Iterator::constructor: c_index>=fi.size()"<<std::endl;
65  exit(1);
66  }
67  if(n_max<(int)fi.size()){
68  std::cerr<<"CdaggerC_Iterator::constructor: n_max<fi.size()"<<std::endl;
69  exit(1);
70  }
71 
72  m_old=fi[c_index];
73 
74  n_cur=0;
75  cur_index=0;
76  for(int i=c_index-1; i>=0; i--){
77  //std::cout<<i+1<<"<-"<<i<<": "<<fi_cur[i]<<std::endl;
78  fi_cur[i+1]=fi_cur[i];
79  }
80  if(fi_cur.size()>0)fi_cur[0]=0;
81  sign=1.;
82  if(c_index%2==1)sign=-1.;
83 
84  adjust_fi();
85  }
86 
88  setup(Fermion_Index(), 0, 0);
89  }
90  CdaggerC_Iterator_SingleI(const Fermion_Index &fi, int c_index_, int n_max_){
91  setup(fi, c_index_, n_max_);
92  }
93 
94 };
95 
96 
97 #endif
Definition: CdaggerC_Iterator_SingleI.h:8
Definition: Fermion_Index.h:19