Ignore:
Timestamp:
Oct 14, 2014, 10:31:31 PM (10 years ago)
Author:
Yue Ren <ren@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
97351e66f70a4390d6f911ee38436e695b8ec551
Parents:
5a60835ee02dcb3d57c9e469c5d50e25ec5d29db
git-author:
Yue Ren <ren@mathematik.uni-kl.de>2014-10-14 23:31:31+03:00
git-committer:
Yue Ren <ren@mathematik.uni-kl.de>2015-02-06 13:47:01+01:00
Message:
chg: new gfanlib version, fixed multiplicities of cones inside fans
File:
1 edited

Legend:

Unmodified
Added
Removed
  • gfanlib/gfanlib_symmetriccomplex.cpp

    r5a6083 r5ff68b  
    5959    sum+=vertices[indices[i]];
    6060
    61   int n=sum.size();
     61  unsigned n=sum.size();
    6262  Permutation const &bestPermutation=sortKeyPermutation;
    6363
    64   assert((int)bestPermutation.size()==n);
     64  assert(bestPermutation.size()==n);
    6565
    6666  IntVector indicesNew(indices.size());
     
    8888bool SymmetricComplex::Cone::isSubsetOf(Cone const &c)const
    8989{
    90   int next=0;
     90  unsigned next=0;
    9191  for(unsigned i=0;i<indices.size();i++)
    9292    {
    9393      while(1)
    9494        {
    95           if(next>=(int)c.indices.size())return false;
     95          if(next>=c.indices.size())return false;
    9696          if(indices[i]==c.indices[next])break;
    9797          next++;
     
    183183
    184184
     185int SymmetricComplex::getLinDim()const
     186{
     187        return linealitySpace.getHeight();
     188}
     189
    185190int SymmetricComplex::getMaxDim()const
    186191{
     
    199204}
    200205
    201 
    202 int SymmetricComplex::getLinDim()const
    203 {
    204   ZMatrix zm=linealitySpace;
    205   return zm.reduceAndComputeRank();
    206 }
    207206
    208207bool SymmetricComplex::isMaximal(Cone const &c)const
     
    248247#endif
    249248
    250 void SymmetricComplex::buildConeLists(bool onlyMaximal, bool compressed, std::vector<std::vector<IntVector > >*conelist/*, ZMatrix *multiplicities*/)const
     249void SymmetricComplex::buildConeLists(bool onlyMaximal, bool compressed, std::vector<std::vector<IntVector > >*conelist, std::vector<std::vector<Integer > > *multiplicities)const
    251250{
    252251  int dimLow=this->linealitySpace.getHeight();
     
    254253  if(dimHigh<dimLow)dimHigh=dimLow-1;
    255254  if(conelist)*conelist=std::vector<std::vector<IntVector> >(dimHigh-dimLow+1);
     255  if(multiplicities)*multiplicities=std::vector<std::vector<Integer> >(dimHigh-dimLow+1);
    256256  for(int d=dimLow;d<=dimHigh;d++)
    257257    {
     
    262262          int I=0;
    263263          for(ConeContainer::const_iterator i=cones.begin();i!=cones.end();i++,I++)
    264             if(i->dimension==d)
    265             {
    266               numberOfOrbitsOfThisDimension++;
     264                  if(i->dimension==d)
     265                    {
     266                  numberOfOrbitsOfThisDimension++;
    267267              if(!onlyMaximal || isMaximal(*i))
    268268                {
     
    270270                  // bool isMax=isMaximal(*i);
    271271                  // bool newOrbit=true;
    272                   std::set<std::set<int> > temp;
    273                   for(SymmetryGroup::ElementContainer::const_iterator k=sym.elements.begin();k!=sym.elements.end();k++)
    274                     {
     272                  std::set<std::pair<std::set<int>,Integer> > temp;
     273                    for(SymmetryGroup::ElementContainer::const_iterator k=sym.elements.begin();k!=sym.elements.end();k++)
     274                      {
    275275                        Cone temp1=i->permuted(*k,*this,false);
    276                         temp.insert(temp1.indexSet());
     276                        temp.insert(std::pair<std::set<int>,Integer>(temp1.indexSet(),temp1.multiplicity));
    277277                        if(compressed)break;
    278278                    }
    279                   for(std::set<std::set<int> >::const_iterator j=temp.begin();j!=temp.end();j++)
     279                  for(std::set<std::pair<std::set<int>,Integer> >::const_iterator j=temp.begin();j!=temp.end();j++)
    280280                    {
    281281                      IntVector temp;
    282                       for(std::set<int>::const_iterator k=j->begin();k!=j->end();k++)temp.push_back(*k);
     282                      for(std::set<int>::const_iterator k=j->first.begin();k!=j->first.end();k++)temp.push_back(*k);
    283283                      if(conelist)(*conelist)[d-dimLow].push_back(temp);
     284                      if(multiplicities)(*multiplicities)[d-dimLow].push_back(j->second);
    284285 /*                     if(isMax)if(multiplicities)
    285286                        {
     
    293294                      // newDimension=false;
    294295                    }
    295                 }
    296             }
    297         }
    298     }
    299 
    300 }
    301 
    302 std::string SymmetricComplex::toStringJustCones(int dimLow, int dimHigh, bool onlyMaximal, bool group, std::ostream *multiplicities, bool compressed, bool /*tPlaneSort*/)const
     296              }
     297                    }
     298        }
     299    }
     300
     301}
     302
     303std::string SymmetricComplex::toStringJustCones(int dimLow, int dimHigh, bool onlyMaximal, bool group, std::ostream *multiplicities, bool compressed, bool tPlaneSort)const
    303304{
    304305  std::stringstream ret;
     
    365366
    366367
    367 std::string SymmetricComplex::toStringJustRaysAndMaximalCones(int flags)const
    368 {
    369   PolymakeFile polymakeFile;
    370   polymakeFile.create("NONAME","PolyhedralFan","PolyhedralFan",flags&FPF_xml);
    371   polymakeFile.writeMatrixProperty("RAYS",vertices,true);
    372   polymakeFile.writeStringProperty("MAXIMAL_CONES",toStringJustCones(getMinDim(),getMaxDim(),true,flags&FPF_group, 0,false,flags&FPF_tPlaneSort));
    373 
    374   std::stringstream s;
    375   polymakeFile.writeStream(s);
    376   return s.str();
    377 }
    378 
    379 
    380368ZVector SymmetricComplex::fvector(bool boundedPart)const
    381369{
     
    538526    polymakeFile.writeCardinalProperty("LINEALITY_DIM",linealitySpace.getHeight());
    539527    //    polymakeFile.writeMatrixProperty("RAYS",rays,true,comments);
    540     polymakeFile.writeMatrixProperty("RAYS",vertices,true);
     528        polymakeFile.writeMatrixProperty("RAYS",vertices,true);
    541529    polymakeFile.writeCardinalProperty("N_RAYS",vertices.getHeight());
    542530
     
    606594
    607595
    608     polymakeFile.writeStringProperty("CONES",toStringJustCones(getMinDim(),getMaxDim(),false,flags&FPF_group, 0,false,flags&FPF_tPlaneSort));
    609     polymakeFile.writeStringProperty("MAXIMAL_CONES",toStringJustCones(getMinDim(),getMaxDim(),true,flags&FPF_group, 0,false,flags&FPF_tPlaneSort));
    610     polymakeFile.writeStringProperty("CONES_ORBITS",toStringJustCones(getMinDim(),getMaxDim(),false,flags&FPF_group, 0,true,flags&FPF_tPlaneSort));
    611     polymakeFile.writeStringProperty("MAXIMAL_CONES_ORBITS",toStringJustCones(getMinDim(),getMaxDim(),true,flags&FPF_group, 0,true,flags&FPF_tPlaneSort));
     596    if(flags&FPF_cones)polymakeFile.writeStringProperty("CONES",toStringJustCones(getMinDim(),getMaxDim(),false,flags&FPF_group, 0,false,flags&FPF_tPlaneSort));
     597    std::stringstream multiplicities;
     598    if(flags&FPF_maximalCones)polymakeFile.writeStringProperty("MAXIMAL_CONES",toStringJustCones(getMinDim(),getMaxDim(),true,flags&FPF_group, &multiplicities,false,flags&FPF_tPlaneSort));
     599    if(flags&FPF_conesCompressed)polymakeFile.writeStringProperty("CONES_ORBITS",toStringJustCones(getMinDim(),getMaxDim(),false,flags&FPF_group, 0,true,flags&FPF_tPlaneSort));
     600    if((flags&FPF_conesCompressed) && (flags&FPF_maximalCones))polymakeFile.writeStringProperty("MAXIMAL_CONES_ORBITS",toStringJustCones(getMinDim(),getMaxDim(),true,flags&FPF_group, 0,true,flags&FPF_tPlaneSort));
     601    if(flags&FPF_multiplicities)polymakeFile.writeStringProperty("MULTIPLICITIES",multiplicities.str());
    612602
    613603    if(!sym.isTrivial())
     
    647637            stringstream multiplicities;
    648638            polymakeFile.writeStringProperty("MAXIMAL_CONES",symCom.toString(symCom.getMinDim(),symCom.getMaxDim(),true,flags&FPF_group, &multiplicities,false,flags&FPF_tPlaneSort));
    649             if(flags&FPF_multiplicities)polymakeFile.writeStringProperty("MULTIPLICITIES",multiplicities.str());
    650639  //          log1 fprintf(Stderr,"Done producing list of maximal cones.\n");
    651640          }
Note: See TracChangeset for help on using the changeset viewer.