28 #ifndef MODELS_CODED_NONE_H
29 #define MODELS_CODED_NONE_H
37 template<
class Matrix>
52 typedef typename Matrix::value_type value_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));
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);
148 throw std::runtime_error(
"update() not yet implemented for this model.");
172 typedef std::vector<block_matrix<Matrix, TrivialGroup> > op_vec;
173 typedef std::vector<std::pair<op_vec, bool> > bond_element;
175 measurements_type meas;
177 if (model[
"MEASURE[Density]"]) {
181 op_vec(1,tag_handler->get_op(count))) );
184 if (model[
"MEASURE[Local density]"]) {
188 op_vec(1,tag_handler->get_op(count))) );
191 if (model[
"MEASURE[Onebody density matrix]"]) {
193 ops.push_back( std::make_pair(op_vec(1,tag_handler->get_op(create)),
false) );
194 ops.push_back( std::make_pair(op_vec(1,tag_handler->get_op(destroy)),
false) );
208 else if (name ==
"bdag")
210 else if (name ==
"b")
213 throw std::runtime_error(
"Operator not valid for this model.");
228 table_ptr tag_handler;
229 tag_type ident, create, destroy, count, interaction;
table_ptr operators_table() const
boost::ptr_vector< measurement< Matrix, TrivialGroup > > measurements_type
measurements_type measurements() const
BoseHubbardNone(const Lattice &lat, BaseParameters &model_)
definition of Model base class
Index< TrivialGroup > const & phys_dim(size_t type) const
tag_type get_operator_tag(std::string const &name, size_t type) const
tag_type filling_matrix_tag(size_t type) const
block_matrix< Matrix, SymmGroup > identity_matrix(Index< SymmGroup > const &size)
size_type insert_block(Matrix const &, charge, charge)
boost::shared_ptr< table_type > table_ptr
table_type::tag_type tag_type
std::vector< term_descriptor > terms_type
virtual op_t const & identity_matrix(size_t type) const
block_matrix< Matrix, SymmGroup > sqrt(block_matrix< Matrix, SymmGroup > m)
TrivialGroup::charge total_quantum_numbers(BaseParameters &parms) const
::term_descriptor< typename Matrix::value_type > term_descriptor
#define REGISTER(op, kind)
tag_type identity_matrix_tag(size_t type) const
static const charge IdentityCharge
void update(BaseParameters const &p)
std::vector< pos_t > forward(pos_t site) const
std::size_t insert(std::pair< charge, std::size_t > const &x)
virtual op_t const & filling_matrix(size_t type) const