58 , tag_handler(
new table_type())
60 int Nmax = model[
"Nmax"];
61 double U = model[
"U"];
62 double t = model[
"t"];
63 double V = model[
"V"];
66 op_t create_op, destroy_op, count_op, interaction_op;
71 phys.
insert(std::make_pair(C, N));
74 Matrix mcount(N,N), minteraction(N,N), mcreate(N,N), mdestroy(N,N);
75 for (
int n=1; n<=Nmax; ++n)
79 minteraction(n,n) = n*n-n;
81 mcreate(n-1,n) =
std::sqrt(value_type(n));
82 mdestroy(n,n-1) =
std::sqrt(value_type(n));
84 count_op.insert_block(mcount, C,C);
85 interaction_op.insert_block(minteraction, C,C);
86 create_op.insert_block(mcreate, C,C);
87 destroy_op.insert_block(mdestroy, C,C);
93 #define REGISTER(op, kind) op = tag_handler->register_op(op ## _op, kind);
105 for (
int p=0; p<lat.
size(); ++p) {
111 term.push_back( boost::make_tuple(p, interaction) );
112 this->
terms_.push_back(term);
115 std::vector<int> neighs = lat.
forward(p);
116 for (
int n=0; n<neighs.size(); ++n) {
121 term.push_back( boost::make_tuple(p, create) );
122 term.push_back( boost::make_tuple(neighs[n], destroy) );
123 this->
terms_.push_back(term);
128 term.push_back( boost::make_tuple(p, destroy) );
129 term.push_back( boost::make_tuple(neighs[n], create) );
130 this->
terms_.push_back(term);
136 term.push_back( boost::make_tuple(p, count) );
137 term.push_back( boost::make_tuple(neighs[n], count) );
138 this->
terms_.push_back(term);
block_matrix< Matrix, SymmGroup > identity_matrix(Index< SymmGroup > const &size)
block_matrix< Matrix, SymmGroup > sqrt(block_matrix< Matrix, SymmGroup > m)
#define REGISTER(op, kind)
static const charge IdentityCharge
std::vector< pos_t > forward(pos_t site) const
std::size_t insert(std::pair< charge, std::size_t > const &x)