30 #include <boost/function.hpp>
33 #include <boost/tokenizer.hpp>
41 std::map<int, std::string> symm_names;
42 symm_names[0] =
"none";
44 symm_names[2] =
"2u1";
47 typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
48 if (parms.defined(
"CONSERVED_QUANTUMNUMBERS")) {
49 boost::char_separator<char> sep(
" ,");
50 std::string qn_string = parms[
"CONSERVED_QUANTUMNUMBERS"].str();
51 tokenizer qn_tokens(qn_string, sep);
52 for (tokenizer::iterator it=qn_tokens.begin(); it != qn_tokens.end(); it++) {
53 if (parms.defined(*it +
"_total"))
65 typedef typename TR::shared_ptr ptr_type;
66 std::map<std::string, ptr_type> factory_map;
68 maquis::cout <<
"This binary contains symmetries: ";
70 factory_map[
"nu1"] = ptr_type(
new typename TR::template F<NU1>::type());
71 maquis::cout <<
"nu1 ";
73 #ifdef HAVE_TrivialGroup
74 factory_map[
"none"] = ptr_type(
new typename TR::template F<TrivialGroup>::type());
75 maquis::cout <<
"none ";
78 factory_map[
"u1"] = ptr_type(
new typename TR::template F<U1>::type());
79 maquis::cout <<
"u1 ";
82 factory_map[
"2u1"] = ptr_type(
new typename TR::template F<TwoU1>::type());
83 maquis::cout <<
"2u1 ";
86 factory_map[
"2u1pg"] = ptr_type(
new typename TR::template F<TwoU1PG>::type());
87 maquis::cout <<
"2u1pg ";
90 factory_map[
"Z2"] = ptr_type(
new typename TR::template F<Ztwo>::type());
91 maquis::cout <<
"Z2 ";
93 maquis::cout << std::endl;
96 std::string symm_name;
97 if (!parms.
is_set(
"symmetry")) {
101 if (parms[
"model_library"] ==
"alps")
105 symm_name = parms[
"symmetry"].str();
108 if (factory_map.find(symm_name) != factory_map.end())
109 return factory_map[symm_name];
111 throw std::runtime_error(
"Don't know this symmetry group. Please, check your compilation flags.");
std::string guess_alps_symmetry(BaseParameters &parms)
include all symmetry definitions
bool is_set(std::string const &key) const
TR::shared_ptr symmetry_factory(DmrgParameters &parms)