Changeset 5ff68b in git for gfanlib/gfanlib_symmetriccomplex.cpp
- Timestamp:
- Oct 14, 2014, 10:31:31 PM (10 years ago)
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gfanlib/gfanlib_symmetriccomplex.cpp
r5a6083 r5ff68b 59 59 sum+=vertices[indices[i]]; 60 60 61 intn=sum.size();61 unsigned n=sum.size(); 62 62 Permutation const &bestPermutation=sortKeyPermutation; 63 63 64 assert( (int)bestPermutation.size()==n);64 assert(bestPermutation.size()==n); 65 65 66 66 IntVector indicesNew(indices.size()); … … 88 88 bool SymmetricComplex::Cone::isSubsetOf(Cone const &c)const 89 89 { 90 intnext=0;90 unsigned next=0; 91 91 for(unsigned i=0;i<indices.size();i++) 92 92 { 93 93 while(1) 94 94 { 95 if(next>= (int)c.indices.size())return false;95 if(next>=c.indices.size())return false; 96 96 if(indices[i]==c.indices[next])break; 97 97 next++; … … 183 183 184 184 185 int SymmetricComplex::getLinDim()const 186 { 187 return linealitySpace.getHeight(); 188 } 189 185 190 int SymmetricComplex::getMaxDim()const 186 191 { … … 199 204 } 200 205 201 202 int SymmetricComplex::getLinDim()const203 {204 ZMatrix zm=linealitySpace;205 return zm.reduceAndComputeRank();206 }207 206 208 207 bool SymmetricComplex::isMaximal(Cone const &c)const … … 248 247 #endif 249 248 250 void SymmetricComplex::buildConeLists(bool onlyMaximal, bool compressed, std::vector<std::vector<IntVector > >*conelist /*, ZMatrix *multiplicities*/)const249 void SymmetricComplex::buildConeLists(bool onlyMaximal, bool compressed, std::vector<std::vector<IntVector > >*conelist, std::vector<std::vector<Integer > > *multiplicities)const 251 250 { 252 251 int dimLow=this->linealitySpace.getHeight(); … … 254 253 if(dimHigh<dimLow)dimHigh=dimLow-1; 255 254 if(conelist)*conelist=std::vector<std::vector<IntVector> >(dimHigh-dimLow+1); 255 if(multiplicities)*multiplicities=std::vector<std::vector<Integer> >(dimHigh-dimLow+1); 256 256 for(int d=dimLow;d<=dimHigh;d++) 257 257 { … … 262 262 int I=0; 263 263 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++; 267 267 if(!onlyMaximal || isMaximal(*i)) 268 268 { … … 270 270 // bool isMax=isMaximal(*i); 271 271 // 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 { 275 275 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)); 277 277 if(compressed)break; 278 278 } 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++) 280 280 { 281 281 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); 283 283 if(conelist)(*conelist)[d-dimLow].push_back(temp); 284 if(multiplicities)(*multiplicities)[d-dimLow].push_back(j->second); 284 285 /* if(isMax)if(multiplicities) 285 286 { … … 293 294 // newDimension=false; 294 295 } 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*/)const296 } 297 } 298 } 299 } 300 301 } 302 303 std::string SymmetricComplex::toStringJustCones(int dimLow, int dimHigh, bool onlyMaximal, bool group, std::ostream *multiplicities, bool compressed, bool tPlaneSort)const 303 304 { 304 305 std::stringstream ret; … … 365 366 366 367 367 std::string SymmetricComplex::toStringJustRaysAndMaximalCones(int flags)const368 {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 380 368 ZVector SymmetricComplex::fvector(bool boundedPart)const 381 369 { … … 538 526 polymakeFile.writeCardinalProperty("LINEALITY_DIM",linealitySpace.getHeight()); 539 527 // polymakeFile.writeMatrixProperty("RAYS",rays,true,comments); 540 polymakeFile.writeMatrixProperty("RAYS",vertices,true);528 polymakeFile.writeMatrixProperty("RAYS",vertices,true); 541 529 polymakeFile.writeCardinalProperty("N_RAYS",vertices.getHeight()); 542 530 … … 606 594 607 595 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()); 612 602 613 603 if(!sym.isTrivial()) … … 647 637 stringstream multiplicities; 648 638 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());650 639 // log1 fprintf(Stderr,"Done producing list of maximal cones.\n"); 651 640 }
Note: See TracChangeset
for help on using the changeset viewer.