SOLIDstate
A C++ library for solid state physics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
ParityOperator.hpp
Go to the documentation of this file.
1 
11 #ifndef OBSERVABLE_PARITYOPERATOR_HPP
12 #define OBSERVABLE_PARITYOPERATOR_HPP
13 
14 #include "Observable.hpp"
15 
16 namespace solid
17 {
18 
31 template <template <typename> class T1, typename T2>
32 class ParityOperator : public Observable<T1, T2>, public IOperatorParameters<T1, T2>
33 {
36 
37 public:
44  {
45  L = _L;
46  SelectTerms();
48  }
49 
50 private:
51  int L;
52 
53  void SelectTerms()
54  {
55  _operator.termsEnabled.terms = {TermsEnum::FermionOneBodyInteraction};
56  }
57 
58  void FillParameters() override
59  {
60  arma::SpMat<T2> mu = arma::eye<arma::SpMat<T2>>(L, L);
61  parameters["mu"] = mu;
62  }
63 
64 public:
65  void PreprocessingVirtual(T1<T2> &matrixElements) override { Preprocessing(matrixElements); }
66  static void Preprocessing(T1<T2> &matrixElements)
67  {
68  std::cout << "parity pre-process..." << std::endl;
69  matrixElements.diag() = arma::Col<T2>(matrixElements.diag()).transform([](T2 val) { return std::pow(-1, val); });
70  }
71 };
72 
73 } // namespace solid
74 
75 #endif
Observable parent class.
Definition: Observable.hpp:75
implementation of the ParityOperator
Definition: ParityOperator.hpp:32
interface for Observable class
Definition: Observable.hpp:29
static void Preprocessing(T1< T2 > &matrixElements)
Definition: ParityOperator.hpp:66
void FillParameters() override
Filling the Parameters.
Definition: ParityOperator.hpp:58
Parameters< T2 > parameters
parameters for Observable
Definition: Observable.hpp:85
int L
Definition: ParityOperator.hpp:51
Interface and class parent for Observables.
Operator< T1, T2 > _operator
container for matrixElements
Definition: Observable.hpp:81
void PreprocessingVirtual(T1< T2 > &matrixElements) override
virtual link for static Postprocessing
Definition: ParityOperator.hpp:65
void SelectTerms()
Definition: ParityOperator.hpp:53