AlVin  1.0
A C++ implementation of the Vinberg's algorithm for Q, Q( sqrt(d) ) and Q( cos(2 pi / 7) )
infinitensymetries.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2014, 2015, 2016
3 Rafael Guglielmetti, rafael.guglielmetti@unifr.ch
4 */
5 
6 /*
7 This file is part of AlVin.
8 
9 CoxIter is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as
11 published by the Free Software Foundation, either version 3 of the
12 License, or (at your option) any later version.
13 
14 CoxIter is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with AlVin. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
31 #ifndef INFINITENSYMETRIES_H
32 #define INFINITENSYMETRIES_H
33 
34 #include "alvin.h"
35 #include "CoxIter/lib/numbers/rational.h"
36 
37 #include <eigen3/Eigen/Dense>
38 #include <igraph/igraph.h>
39 
40 #ifdef _OPENMP
41 #include <omp.h>
42 #endif
43 
44 using namespace Eigen;
45 
48 {
49  vector< unsigned int > iVertices;
50  vector< unsigned int > iPermutation;
51  vector< unsigned int > iLinearlyIndependantVertices;
52  unsigned int iOrbitCount;
53 };
54 
56 {
57  protected:
58  AlVin* alvin;
59  vector< AlgebraicInteger* > aiQF;
60 
61  vector< vector< unsigned int > > iGraphMatrix;
62  vector< vector< unsigned int > > iCoxeterMatrix;
63 
64  unsigned int iVectorsCount;
65  unsigned int iDimension;
66  const unsigned int iVectorSize;
67 
68  unsigned int iFixedPointsDimension;
69  bool bFinished;
70 
71  vector< GraphInvolution > usefulInvolutions;
72 
73  public:
74  InfiniteNSymetries( AlVin* alvin );
75  bool Run( const unsigned int& iNRMin, const unsigned int& iNRMax );
76 
77  unsigned int get_iFixedPointsDimension() const;
78  virtual void print_basisFixedPoints( const string& strSpacer = "" ) const = 0;
79 
80  virtual ~InfiniteNSymetries();
81 
82  vector< GraphInvolution > get_usefulInvolutions() const;
83 
84  protected:
85  virtual bool bDottedSameWeight( const unsigned int& v1, const unsigned int& v2, const unsigned int& w1, const unsigned int& w2 ) const = 0;
86  virtual bool FindIntegralSymmetryFromSubgraph( const vector< unsigned int >& iVertices ) = 0;
87 };
88 
89 #endif // INFINITENSYMETRIES_H
bool bFinished
If true, the form is non-reflective.
Definition: infinitensymetries.h:69
Try to find integral symmetries of the polyhedron which do not have any common fixed point inside the...
Definition: infinitensymetries.h:55
Main class for AlVin.
Definition: alvin.h:52
Definition: quadraticinteger_infinitensymetries.h:38
const unsigned int iVectorSize
iDimension + 1
Definition: infinitensymetries.h:66
unsigned int iOrbitCount
Number of invariant subsets (in iVertices)
Definition: infinitensymetries.h:52
vector< unsigned int > iLinearlyIndependantVertices
Strictly speaking, the indices i (in iVertices!) such that the set vectors[ iVertices[i] ] is linearl...
Definition: infinitensymetries.h:51
vector< unsigned int > iPermutation
Permutation defining the transformation.
Definition: infinitensymetries.h:50
vector< vector< unsigned int > > iGraphMatrix
1 if bold, 2 if dotted, weight otherwise
Definition: infinitensymetries.h:61
unsigned int iDimension
Dimension of the hyperbolic space.
Definition: infinitensymetries.h:65
unsigned int iFixedPointsDimension
Actual dimension of the space of fixed points.
Definition: infinitensymetries.h:68
<
Definition: infinitensymetries.h:47
vector< unsigned int > iVertices
Vertices of definition.
Definition: infinitensymetries.h:49
unsigned int iVectorsCount
Number of vectors computed.
Definition: infinitensymetries.h:64