Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
group.h
Go to the documentation of this file.
1 // This file is part of MARTY.
2 //
3 // MARTY is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // MARTY is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with MARTY. If not, see <https://www.gnu.org/licenses/>.
15 
22 #ifndef GROUP_H_INCLUDED
23 #define GROUP_H_INCLUDED
24 
25 #include <memory>
26 #include "semiSimpleAlgebra.h"
27 #include "SU_N_algebra.h"
28 #include "representation.h"
29 #include "mrtError.h"
30 
31 // Forward declaration of QuantumFieldParent
32 namespace mty {
33 class QuantumFieldParent;
34 class GaugedGroup;
35 }
36 
37 namespace mty {
38 
39 namespace group {
44 enum class Type {
45 
46  Trivial,
47  O,
48  SO,
49  U1,
50  SU,
51  Sp,
52  E6,
53  E7,
54  E8,
55  F4,
56  G2,
57  Lorentz
58 };
59 
67 std::ostream& operator<<(std::ostream& fout,
68  mty::group::Type type);
69 
70 } // End of namespace group
71 } // End of namespace mty
72 
73 namespace mty {
74 
82 typedef class AbstractGroup {
83 
84  public:
85 
90  explicit
91  AbstractGroup(const std::string& t_name = "");
92 
98  explicit
99  AbstractGroup(int t_dim, const std::string& t_name = "");
100 
104  virtual
106 
111  virtual
112  SemiSimpleAlgebra* getAlgebra() const;
113 
118  virtual
119  Irrep highestWeightRep(const std::vector<int>& highestWeight) const;
120 
125  virtual
126  Irrep getTrivialRep() const = 0;
127 
132  virtual
133  Irrep getAdjointRep() const;
134 
139  virtual
140  group::Type getType() const = 0;
141 
142  mty::GaugedGroup *getGaugedGroup() const {
143  return gauged;
144  }
145  void setGaugedGroup(mty::GaugedGroup *t_gauged) {
146  gauged = t_gauged;
147  }
148 
153  std::string getName() const;
154 
159  int getDim() const;
160 
165  virtual
166  const csl::Space* getVectorSpace(const Irrep& irrep) const = 0;
167 
172  virtual
173  AlgebraState getHighestWeight(const csl::Space* t_space) const;
174 
179  virtual
180  std::vector<const csl::Space*> getAllVectorSpace() const = 0;
181 
186  virtual
187  csl::Index getCorrespondingIndex(const std::string& index_name,
188  const QuantumFieldParent& parent) = 0;
189 
190  protected:
191 
195  int dim;
196 
200  std::string name;
201 
202  mty::GaugedGroup *gauged;
203 
204 } Group;
205 
206 
220 
221  public:
222 
227  explicit
228  SemiSimpleGroup(const std::string& name);
229 
235  SemiSimpleGroup(const SemiSimpleAlgebra& t_algebra,
236  const std::string& t_name);
237 
241  ~SemiSimpleGroup() override;
242 
247  SemiSimpleAlgebra* getAlgebra() const override;
248 
260  void setAlgebra(const SemiSimpleAlgebra& t_algebra);
261 
271  Irrep highestWeightRep(
272  const std::vector<int>& highestWeight) const override;
273 
283  csl::Expr getQuadraticCasimir(const AlgebraState& highest) const;
284 
290  Irrep getTrivialRep() const override;
291 
301  SumIrrep tensorProduct(const Irrep& rep1,
302  const Irrep& rep2) const;
303 
319  SumIrrep tensorProduct(const std::initializer_list<int>& rep1,
320  const std::initializer_list<int>& rep2) const;
321 
338  const csl::Space* getVectorSpace(const Irrep& irrep) const override;
339 
348  AlgebraState getHighestWeight(const csl::Space* t_space) const override;
349 
356  std::vector<const csl::Space*> getAllVectorSpace() const override;
357 
379  csl::Index getCorrespondingIndex(
380  const std::string& index_name,
381  const QuantumFieldParent& parent) override;
382 
383  protected:
384 
389  std::unique_ptr<SemiSimpleAlgebra> algebra;
390 
396  mutable
397  std::vector<std::pair<AlgebraState, const csl::Space*>> vectorSpaces;
398 
405  mutable
406  std::map<AlgebraState, csl::Expr> quadraticCasimir;
407 };
408 
409 } // End of namespace mty
410 
415 namespace mty::group {
416 
422 class U1: public mty::SemiSimpleGroup {
423 
424  public:
425 
430  explicit
431  U1(std::string const& t_name = "");
432 
437  mty::group::Type getType() const override;
438 
449  mty::Irrep getAdjointRep() const override;
450 };
451 
457 class SU: public mty::SemiSimpleGroup {
458 
459  public:
460 
466  explicit
467  SU(std::string const& t_name,
468  int t_dim = 2);
469 
474  explicit
475  SU(int t_dim = 2);
476 
481  mty::group::Type getType() const override;
482 
492  mty::Irrep getAdjointRep() const override;
493 };
494 
501 class SO: public mty::SemiSimpleGroup {
502 
503  public:
504 
510  explicit
511  SO(std::string const& t_name,
512  int t_dim = 3);
513 
518  explicit
519  SO(int t_dim = 3);
520 
525  mty::group::Type getType() const override;
526 
536  mty::Irrep getAdjointRep() const override;
537 };
538 
544 class Sp: public mty::SemiSimpleGroup {
545 
546  public:
547 
553  explicit
554  Sp(std::string const& t_name,
555  int t_dim = 2);
556 
561  explicit
562  Sp(int t_dim = 2);
563 
568  mty::group::Type getType() const override;
569 
579  mty::Irrep getAdjointRep() const override;
580 };
581 
586 class E6: public mty::SemiSimpleGroup {
587 
588  public:
589 
594  explicit
595  E6(std::string const& t_name = "");
596 
601  mty::group::Type getType() const override;
602 
612  mty::Irrep getAdjointRep() const override;
613 };
614 
619 class E7: public mty::SemiSimpleGroup {
620 
621  public:
622 
627  explicit
628  E7(std::string const& t_name = "");
629 
634  mty::group::Type getType() const override;
635 
645  mty::Irrep getAdjointRep() const override;
646 };
647 
652 class E8: public mty::SemiSimpleGroup {
653 
654  public:
655 
660  explicit
661  E8(std::string const& t_name = "");
662 
667  mty::group::Type getType() const override;
668 
678  mty::Irrep getAdjointRep() const override;
679 };
680 
685 class F4: public mty::SemiSimpleGroup {
686 
687  public:
688 
693  explicit
694  F4(std::string const& t_name = "");
695 
700  mty::group::Type getType() const override;
701 
711  mty::Irrep getAdjointRep() const override;
712 };
713 
718 class G2: public mty::SemiSimpleGroup {
719 
720  public:
721 
726  explicit
727  G2(std::string const& t_name = "");
728 
733  mty::group::Type getType() const override;
734 
744  mty::Irrep getAdjointRep() const override;
745 };
746 
752 
753  public:
754 
758  Lorentz();
759 
764 
769  mty::group::Type getType() const override;
770 };
771 
772 } // End of namespace mty::group
773 
774 namespace mty {
775 
784 std::unique_ptr<mty::SemiSimpleGroup> createGroup(
785  group::Type type,
786  std::string const& name,
787  int dim = -1);
788 
796 std::unique_ptr<mty::SemiSimpleGroup> createGroup(
797  group::Type type,
798  int dim = -1);
799 
807 std::ostream& operator<<(std::ostream& fout,
808  const AbstractGroup& obj);
809 
816 group::Type stringToGroupType(std::string const& name);
817 
824 
825 } // End of namespace mty
826 
827 #endif
Special orthogonal group. The algebra of is if is odd, else. See mty::algebra::B and mty::algebra...
Definition: group.h:501
Definition: gaugedGroup.h:194
Base class for all Semi simple groups, i.e. groups that has a SemiSimpleAlgebra.
Definition: group.h:219
std::unique_ptr< mty::SemiSimpleGroup > createGroup(group::Type type, std::string const &name, int dim=-1)
Dynamically allocates a new group of type type and returns a pointer to it (in a std::unique_ptr).
Definition: group.cpp:552
Exceptional group of algebra . See mty::algebra::E6.
Definition: group.h:586
std::map< AlgebraState, csl::Expr > quadraticCasimir
Association of AlgebraState (highest weights of irreps) and quadratic Casimirs. To each irrep (i...
Definition: group.h:406
Exceptional group of algebra . See mty::algebra::F4.
Definition: group.h:685
Namespace of MARTY.
Definition: 2HDM.h:31
Class inherited from std::vector<int>, dynkin labels for a state of a semi-simple algebra (see docume...
Definition: algebraState.h:35
Contains a sum of Irrep (irreducible representation) of a given SemiSimpleAlgebra.
Definition: representation.h:363
class mty::AbstractGroup Group
Abstract base class for groups.
Classes handling irreducible representations of semi simple Lie algebras, using the Cartan formalism:...
group::Type stringToGroupType(std::string const &name)
Converts a string to a group type. Allows to read a group::Type in a file.
Lorentz group. Algebra of Lorentz: .
Definition: group.h:751
virtual ~AbstractGroup()
Destructor.
Definition: group.h:105
std::ostream & operator<<(std::ostream &fout, mty::group::Type type)
Overload of operator<< for group::Type::Type. Allows to display a string corresponding to the type of...
Special unitary group. The algebra of is , see mty::algebra::A.
Definition: group.h:457
Exceptional group of algebra . See mty::algebra::G2.
Definition: group.h:718
std::vector< std::pair< AlgebraState, const csl::Space * > > vectorSpaces
Association of AlgebraState (highest weights of irreps) and vector spaces. To each irrep (i...
Definition: group.h:397
Abelian unitary group. mty::algebra::R is the associated SemiSimpleAlgebra.
Definition: group.h:422
Abstract base class for all semi-simple Lie algebras.
Definition: semiSimpleAlgebra.h:96
Exceptional group of algebra . See mty::algebra::E8.
Definition: group.h:652
std::unique_ptr< SemiSimpleAlgebra > algebra
Owner std::unique_ptr to the SemiSimpleAlgebra associated with the group.
Definition: group.h:389
Handles the irreducible representation of a given semi-simple algebra.
Definition: representation.h:42
Namespace to avoid name conflicts for groups that can have very simple names. See algebra::Type for t...
Definition: group.h:39
Base class for parents of QuantumField objects.
Definition: quantumField.h:152
Exceptional group of algebra . See mty::algebra::E7.
Definition: group.h:619
Semi simple Lie algebras: calculations of highest weight representations, products and sums of repres...
~Lorentz()
Destructor.
Definition: group.h:763
Abstract base class for groups.
Definition: group.h:82
int dim
Dimension of the group.
Definition: group.h:195
std::string name
Name of the group.
Definition: group.h:200
Type
Enumeration of types of semi simple Lie groups. The names being very small, we use a namespace to avo...
Definition: group.h:44
Simplectic group. The algebra of is . See mty::algebra::C.
Definition: group.h:544