27 #ifndef APP_ALPS_MODEL_SYMM_HANDLER_H
28 #define APP_ALPS_MODEL_SYMM_HANDLER_H
30 #include <alps/parameter.h>
31 #include <alps/model.h>
40 return qn_value.get_twice();
44 template <
class SymmGroup>
45 typename SymmGroup::charge
state_to_charge(alps::site_state<short>
const & state, alps::SiteBasisDescriptor<short>
const& b,
46 std::map<std::string, int>
const& all_conserved_qn);
48 template <
class SymmGroup>
49 typename SymmGroup::charge
init_charge(
const alps::Parameters& parms, std::map<std::string, int>
const& all_conserved_qn);
52 template <
class SymmGroup>
58 typedef std::pair<charge_t, size_t>
coord_t;
65 alps::site_basis<I> states(b);
67 numstates_ = states.size();
68 state_index_.resize(numstates_);
69 state_offset_.resize(numstates_);
70 std::vector<charge_t> state_charge(numstates_);
73 for (
size_t i=0; i<states.size(); ++i) {
74 state_charge[i] = state_to_charge<SymmGroup>(states[i], b, all_conserved_qn);
76 size_t ci = phys_.position(state_charge[i]);
77 if (ci < phys_.size()) phys_[ci].second += 1;
78 else ci = phys_.insert( std::make_pair(state_charge[i], 1) );
80 state_offset_[i] = phys_[ci].second - 1;
84 for (
size_t i=0; i<states.size(); ++i)
85 state_index_[i] = phys_.position(state_charge[i]);
88 size_t size()
const {
return numstates_; }
91 size_t block_size(
size_t i)
const {
return phys_[state_index_[i]].second; }
96 std::vector<size_t> state_index_;
97 std::vector<size_t> state_offset_;
std::pair< charge_t, size_t > coord_t
int to_integer(alps::half_integer< T > const &qn_value)
SymmGroup::charge charge_t
Index< SymmGroup > const & phys_dim() const
SymmGroup::charge init_charge(const alps::Parameters &parms, std::map< std::string, int > const &all_conserved_qn)
coord_t coords(size_t i) const
SymmGroup::charge state_to_charge(alps::site_state< short > const &state, alps::SiteBasisDescriptor< short > const &b, std::map< std::string, int > const &all_conserved_qn)
symmetric_basis_descriptor(alps::SiteBasisDescriptor< I > const &b, qn_map_type const &all_conserved_qn)
include one of the Index class definitions
charge_t charge(size_t i) const
std::map< std::string, int > qn_map_type
symmetric_basis_descriptor()
size_t block_size(size_t i) const