ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
model_Ztwo.cpp
Go to the documentation of this file.
1 /*****************************************************************************
2  *
3  * ALPS MPS DMRG Project
4  *
5  * Copyright (C) 2013 Institute for Theoretical Physics, ETH Zurich
6  * 2011-2011 by Michele Dolfi <dolfim@phys.ethz.ch>
7  *
8  * This software is part of the ALPS Applications, published under the ALPS
9  * Application License; you can use, redistribute it and/or modify it under
10  * the terms of the license, either version 1 or (at your option) any later
11  * version.
12  *
13  * You should have received a copy of the ALPS Application License along with
14  * the ALPS Applications; see the file LICENSE.txt. If not, the license is also
15  * available from http://alps.comp-phys.org/.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
20  * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
21  * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  *
25  *****************************************************************************/
26 
29 
30 // Symmetry dependent implementation
31 
32 // Z2 Symmetry
33 template <>
34 Ztwo::charge init_charge<Ztwo> (const alps::Parameters& parms, std::map<std::string, int> const& all_conserved_qn)
35 {
36  typedef std::map<std::string, int> qn_map_type;
37  assert(all_conserved_qn.size() == 1);
38  qn_map_type::const_iterator it = all_conserved_qn.begin();
39  int tmp = alps::evaluate<double>(static_cast<std::string>(parms[it->first+"_total"]), parms);
40  if (!(tmp == 0 || tmp == 1))
41  throw std::runtime_error("Invalid value for " + it->first + "_total");
42  return (tmp == 1) ? Ztwo::Minus : Ztwo::Plus;
43 }
44 
45 template <>
46 Ztwo::charge state_to_charge<Ztwo>(alps::site_state<short> const & state, alps::SiteBasisDescriptor<short> const& b,
47  std::map<std::string, int> const& all_conserved_qn)
48 {
49  typedef std::map<std::string, int> qn_map_type;
50  int tmp = 0;
51  for (typename alps::SiteBasisDescriptor<short>::const_iterator it = b.begin(); it != b.end(); ++it) {
52  qn_map_type::const_iterator match = all_conserved_qn.find(it->name());
53  if (match != all_conserved_qn.end())
54  tmp = detail::to_integer( get_quantumnumber(state, it->name(), b) );
55  }
56  return (tmp % 4 == 0 ? Ztwo::Plus : Ztwo::Minus);
57 }
Ztwo::charge init_charge< Ztwo >(const alps::Parameters &parms, std::map< std::string, int > const &all_conserved_qn)
Definition: model_Ztwo.cpp:34
charge
Definition: z2.h:41
Definition: z2.h:41
int to_integer(alps::half_integer< T > const &qn_value)
Definition: z2.h:41
Ztwo::charge state_to_charge< Ztwo >(alps::site_state< short > const &state, alps::SiteBasisDescriptor< short > const &b, std::map< std::string, int > const &all_conserved_qn)
Definition: model_Ztwo.cpp:46