*** empty log message ***
This commit is contained in:
parent
c8e86a2b47
commit
84798008e9
43
fourindex.h
43
fourindex.h
@ -22,7 +22,17 @@ struct matel4
|
|||||||
packedindex index;
|
packedindex index;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {nosymmetry=0, twoelectronreal=1, twoelectroncomplex=2, twobodyantisym=3} fourindexsymtype; //if twoelectron, only permutation-nonequivalent elements are stored
|
typedef enum {nosymmetry=0, twoelectronrealmullikan=1, twoelectronrealdirac=2, T2ijab_real=3} fourindexsymtype; //if twoelectron, only permutation-nonequivalent elements are stored
|
||||||
|
// these should actually be static private members of the fourindex class, but leads to an ICE on gcc3.2
|
||||||
|
static const int fourindex_n_symmetrytypes=4;
|
||||||
|
static const int fourindex_permnumbers[fourindex_n_symmetrytypes]={0,7,7,3};
|
||||||
|
static const int fourindex_permutations[fourindex_n_symmetrytypes][8][5]=
|
||||||
|
{
|
||||||
|
{{0,1,2,3,1},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
|
||||||
|
{{0,1,2,3,1}, {1,0,2,3,1}, {0,1,3,2,1}, {1,0,3,2,1}, {2,3,0,1,1}, {3,2,0,1,1}, {2,3,1,0,1}, {3,2,1,0,1}},
|
||||||
|
{{0,1,2,3,1},{2,1,0,3,1},{0,3,2,1,1},{2,3,0,1,1},{1,0,3,2,1},{3,0,1,2,1},{1,2,3,0,1},{3,2,1,0,1}},
|
||||||
|
{{0,1,2,3,1},{1,0,2,3,-1},{0,1,3,2,-1},{1,0,3,2,1},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}
|
||||||
|
};
|
||||||
|
|
||||||
template <class I, class T>
|
template <class I, class T>
|
||||||
class fourindex {
|
class fourindex {
|
||||||
@ -43,8 +53,8 @@ public:
|
|||||||
iterator() {};
|
iterator() {};
|
||||||
~iterator() {};
|
~iterator() {};
|
||||||
iterator(matel4<I,T> *list): p(list) {};
|
iterator(matel4<I,T> *list): p(list) {};
|
||||||
bool operator==(const iterator rhs) const {return p==rhs.p;}
|
bool operator==(const iterator &rhs) const {return p==rhs.p;}
|
||||||
bool operator!=(const iterator rhs) const {return p!=rhs.p;}
|
bool operator!=(const iterator &rhs) const {return p!=rhs.p;}
|
||||||
iterator operator++() {return p=p->next;}
|
iterator operator++() {return p=p->next;}
|
||||||
iterator operator++(int) {matel4<I,T> *q=p; p=p->next; return q;}
|
iterator operator++(int) {matel4<I,T> *q=p; p=p->next; return q;}
|
||||||
matel4<I,T> & operator*() const {return *p;}
|
matel4<I,T> & operator*() const {return *p;}
|
||||||
@ -53,6 +63,33 @@ public:
|
|||||||
iterator begin() const {return list;}
|
iterator begin() const {return list;}
|
||||||
iterator end() const {return NULL;}
|
iterator end() const {return NULL;}
|
||||||
|
|
||||||
|
//permiterator ... iterates also over all permutations, with a possibly scaled matrix element or skips permutations yielding equivalent result
|
||||||
|
//has to take into account the symmetry type of the fourindex
|
||||||
|
typedef class piterator {
|
||||||
|
private:
|
||||||
|
matel4<I,T> *p;
|
||||||
|
matel4<I,T> my;
|
||||||
|
int permindex;
|
||||||
|
void setup(void)
|
||||||
|
{
|
||||||
|
switch (symmetry) {
|
||||||
|
case twoelectronreal:
|
||||||
|
break;
|
||||||
|
default: laerror("piterator not supported for this symmetry type yet");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
piterator() {};
|
||||||
|
~piterator() {};
|
||||||
|
piterator(matel4<I,T> *list): p(list),permindex(0) {setup();};
|
||||||
|
piterator operator++() {}
|
||||||
|
piterator operator++(int) {laerror("postincrement not possible on permute-iterator");}
|
||||||
|
bool operator==(const piterator &rhs) const {return p==rhs.p && permindex==rhs.permindex;}
|
||||||
|
bool operator!=(const piterator &rhs) const {return p!=rhs.p || permindex!=rhs.permindex;}
|
||||||
|
};
|
||||||
|
piterator pbegin() const {return list;}
|
||||||
|
piterator pend() const {return NULL;}
|
||||||
|
|
||||||
//constructors etc.
|
//constructors etc.
|
||||||
inline fourindex() :nn(0),count(NULL),list(NULL) {};
|
inline fourindex() :nn(0),count(NULL),list(NULL) {};
|
||||||
inline fourindex(const I n) :nn(n),count(new int(1)),list(NULL) {};
|
inline fourindex(const I n) :nn(n),count(new int(1)),list(NULL) {};
|
||||||
|
Loading…
Reference in New Issue
Block a user