source: git/gfanlib/gfanlib_polyhedralfan.h @ c987db

spielwiese
Last change on this file since c987db was 5ff68b, checked in by Yue Ren <ren@…>, 9 years ago
chg: new gfanlib version, fixed multiplicities of cones inside fans
  • Property mode set to 100644
File size: 4.2 KB
RevLine 
[74a91c9]1/*
2 * gfanlib_polyhedralfan.h
3 *
4 *  Created on: Nov 16, 2010
5 *      Author: anders
6 */
7
8#ifndef GFANLIB_POLYHEDRALFAN_H_INCLUDED
9#define GFANLIB_POLYHEDRALFAN_H_INCLUDED
10
11#include <set>
12#include <list>
13#include <map>
14#include "gfanlib_symmetry.h"
15#include "gfanlib_matrix.h"
16#include "gfanlib_zcone.h"
17#include "gfanlib_symmetriccomplex.h"
18
19namespace gfan{
20
21
22typedef std::set<ZCone> PolyhedralConeList;
23typedef std::list<IntVector> IntVectorList;
24typedef std::map<int,IntVectorList> IncidenceList;
25
[5ff68b]26class PolyhedralFan;
[4b5171]27PolyhedralFan refinement(const PolyhedralFan &a, const PolyhedralFan &b, int cutOffDimension=-1, bool allowASingleConeOfCutOffDimension=false);
[74a91c9]28
29/** A PolyhedralFan is simply a collection of canonicalized PolyhedralCones.
30 * It contains no combinatorial information in the sense of a polyhedral complex.
31 * A cone being present in the PolyhedralFan corresponds to the cone and all its facets being present
32 * in the mathematical object.
33 * The intersection of cones in the fan must be a face of both.
34 * In particular all cones in a PolyhedralFan have the same lineality space.*/
35class PolyhedralFan
36{
37  int n;
38  SymmetryGroup symmetries;
39  PolyhedralConeList cones;
40 public:
41  static class PolyhedralFan fullSpace(int n);
42  static class PolyhedralFan facetsOfCone(ZCone const &c);
43  PolyhedralFan(int ambientDimension);
44  PolyhedralFan(SymmetryGroup const &sym);
45  std::string toString(int flags=FPF_default)const;
46  /* Read in a polyhedral fan, but with the cones containing w.  If
47     present, only read in cones among coneIndices.  If sym is
48     present, read COMPRESSED section and make w containment up to
49     symmetry, taking all elements in the orbit that contains w into
50     the fan.  If onlyMaximal is set then only maximal cones are read
51     in.
52   */
53  int getAmbientDimension()const;
54  int getMaxDimension()const;
55  int getMinDimension()const;
[5ff68b]56  // friend PolyhedralFan refinement(const PolyhedralFan &a, const PolyhedralFan &b, int cutOffDimension=-1, bool allowASingleConeOfCutOffDimension=false);
[74a91c9]57  ZMatrix getRays(int dim=1);//This can be called for other dimensions than 1. The term "Rays" still makes sense modulo the common linearity space
58  ZMatrix getRelativeInteriorPoints();
59  void insert(ZCone const &c);
60  void remove(ZCone const &c);
61  void removeAllLowerDimensional();
62  /**
63     Since the cones stored in a PolyhedralFan are cones of a
64     polyhedral fan, it is possible to identify non maximal cones by
65     just checking containment of relative interior points in other
66     cones. This routine removes all non-maximal cones.
67   */
68  void removeNonMaximal();
69  /**
70     Returns the number of cones stored in the fan. This is not the number of cones in the fan in a mathematical sense.
71   */
72  int size()const;
73  int dimensionOfLinealitySpace()const;
74  void makePure();
75  bool contains(ZCone const &c)const;
76  /**
77   * For a vector contained in the support of the fan represented by the fan object, this function
78   * computes the cone that contains the vector in its relative interior.
79   */
80  ZCone coneContaining(ZVector const &v)const;
81  PolyhedralFan facetComplex()const;
82
83  ZMatrix getRaysInPrintingOrder(bool upToSymmetry=false)const;
84  IncidenceList getIncidenceList(SymmetryGroup *sym=0)const;
85  bool isEmpty()const;
86
87
88  /**
89     Computes the link of the face containing w in its relative interior.
90   */
91  PolyhedralFan link(ZVector const &w)const;
92  PolyhedralFan link(ZVector const &w, SymmetryGroup *sym)const;
93
94
95
96  typedef PolyhedralConeList::const_iterator coneIterator;
97  PolyhedralFan::coneIterator conesBegin()const;
98  PolyhedralFan::coneIterator conesEnd()const;
99
100
101  /**
102   * Converts a PolyhedralFan into a SymmetricComplex. This is used for homology computations, but not for printing yet.
103   */
104  SymmetricComplex toSymmetricComplex()const;
105//  static PolyhedralFan readFan(string const &filename, bool onlyMaximal=true, IntegerVector *w=0, set<int> const *conesIndice=0, SymmetryGroup const *sym=0, bool readCompressedIfNotSym=false);
106};
107
108
109void addFacesToSymmetricComplex(SymmetricComplex &c, ZCone const &cone, ZMatrix const &facetCandidates, ZMatrix const &generatorsOfLinealitySpace);
110void addFacesToSymmetricComplex(SymmetricComplex &c, std::set<int> const &indices, ZMatrix const &facetCandidates, int dimension, Integer multiplicity);
111
112}
113
114#endif
Note: See TracBrowser for help on using the repository browser.