NanoStructures  1.0
DMFT solver for layered, strongly correlated nanostructures
chainprovider.h
1 #ifndef CHAINPROVIDER_H
2 #define CHAINPROVIDER_H
3 
4 #include "../config/configuration.h"
5 
6 #include <utility>
7 #include <vector>
8 
9 namespace nrg {
10 namespace chain {
11  // t , // e
12 typedef std::pair < double, double > tOrbital;
13 typedef std::vector < tOrbital > tWilsonChain;
14 }
15 // epsF o(0).fs o(1).snd o(1).fst
16 // <*> - <> - <> - <> - ...
17 // V e0 t0 ...
18 
20 {
21 public:
22  ChainProvider();
23  virtual void configure(config::Configuration& configuration);
24 
25  virtual void showInfo();
26 
27  // getters and setters
28  void setLength(int length) { m_length = length; }
29  void setLambda(double lambda) { m_lambda = lambda; }
30  double getLambda() { return m_lambda; }
31  int getLength() { return m_length; }
32  inline bool isPHsymmetric() { return m_symmetry_PH; }
33  inline bool isSZsymmetric() { return m_symmetry_SZ; }
34 
35  inline void setPHsymmetric(bool PH) { m_symmetry_PH = PH; }
36  inline void setSZsymmetric(bool SZ) { m_symmetry_SZ = SZ; }
37 
38  // retrieve orbital data
39  const chain::tOrbital& getOrbitalUp(int n) const { return m_up.at(n); }
40  const chain::tOrbital& getOrbitalDown(int n) const { return m_down.at(n); }
41 
42  virtual void buildChain() = 0;
43 
44  void dump();
45 protected:
46  // particle hole symmetry -- *.second = 0
47  bool m_symmetry_PH;
48  // sz symmetry -- m_up = m_down
49  bool m_symmetry_SZ;
50 
51  // energy discretization constant
52  double m_lambda;
53 
54  // ordered length
55  int m_length;
56 
57  // chains for spin-up and spin-down band
58  chain::tWilsonChain m_up;
59  chain::tWilsonChain m_down;
60 };
61 }
62 #endif // CHAINPROVIDER_H
Definition: chainprovider.h:19
A configuration object which is populated from a configuration file and allows to query and modify co...
Definition: configuration.h:46