Changeset 2f72c55 in git for kernel


Ignore:
Timestamp:
Feb 18, 2010, 6:41:02 PM (14 years ago)
Author:
Martin Monerjan
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', '7e41ef9499d2014a20b2ab8b603aa2c6cce053c8')
Children:
8c242f751a401103b6fe0ff007cfe5ecf3a1c621
Parents:
cbc93adeabbc48315f23204cfe66b57fdd63a669
Message:
Precautions in face::setFacetNormal, (facet,gcone)::setInteriorPoint
Computation of interior point for facets in getExtremalRays
isHomog, isNotHomog params on kStd depending on hasHomInput
hilberFunction


git-svn-id: file:///usr/local/Singular/svn/trunk@12559 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/gfan.cc

    rcbc93a r2f72c55  
    2424#include "../Singular/lists.h"
    2525#include "prCopy.h"     //Needed for idrCopyR
     26#include "stairc.h"     //For Hilbert series
    2627#include <iostream>
    2728// #include <bitset>
     
    3132#include <sstream>
    3233#include <time.h>
    33 #include <sys/time.h>
    3434#include <stdlib.h>
    3535//#include <gmpxx.h>
     
    7373#endif
    7474#endif
     75
    7576#define gfanp
     77#ifdef gfanp
     78#include <sys/time.h>
     79#endif
     80
    7681#include <gfan.h>
    7782using namespace std;
     
    321326inline void facet::setFacetNormal(intvec *iv)
    322327{
     328        if(this->fNormal!=NULL)
     329                delete this->fNormal;
    323330        this->fNormal = ivCopy(iv);                     
    324331}
     
    395402inline void facet::setInteriorPoint(intvec *iv)
    396403{
     404        if(this->interiorPoint!=NULL)
     405                delete this->interiorPoint;
    397406        this->interiorPoint = ivCopy(iv);
    398407}
     
    547556inline void gcone::setIntPoint(intvec *iv)
    548557{
     558        if(this->ivIntPt!=NULL)
     559                delete this->ivIntPt;
    549560        this->ivIntPt=ivCopy(iv);
    550561}
     
    12541265* Figuring out whether a ray belongs to a given facet(normal) is done by
    12551266* checking whether the inner product of the ray with the normal is zero.
     1267* We use ivAdd here which returns a new intvec. Therefore we need to avoid
     1268* a memory leak which would be cause by the line
     1269* iv=ivAdd(iv,b)
     1270* So we keep pointer tmp to iv and delete(tmp), so there should not occur a
     1271* memleak
    12561272*/
    12571273void gcone::getExtremalRays(const gcone &gc)
     
    12801296                const intvec *fNormal;// = new intvec(this->numVars);
    12811297                fNormal = fAct->getRef2FacetNormal();//->getFacetNormal();
     1298                intvec *ivIntPointOfFacet = new intvec(this->numVars);
    12821299                for(int ii=0;ii<rows;ii++)
    1283                 {
     1300                {                       
    12841301                        intvec *rowvec = new intvec(this->numVars);
    1285                         makeInt(P,ii+1,*rowvec);//get an integer entry instead of rational
     1302                        makeInt(P,ii+1,*rowvec);//get an integer entry instead of rational                     
    12861303                        if(dotProduct(*fNormal,*rowvec)==0)
    12871304                        {
     1305                                intvec *tmp = ivIntPointOfFacet;
    12881306                                fAct->numCodim2Facets++;
    12891307                                facet *codim2Act;
     
    12991317                                }
    13001318                                codim2Act->setFacetNormal(rowvec);
    1301                                 fAct->numRays++;                       
     1319                                fAct->numRays++;
     1320                                //TODO Add up to interior point here!
     1321                                ivIntPointOfFacet=ivAdd(ivIntPointOfFacet,rowvec);
     1322                                delete(tmp);
     1323                                       
    13021324                        }
    13031325                        delete(rowvec);
    13041326                }
     1327                fAct->setInteriorPoint(ivIntPointOfFacet);
     1328                delete(ivIntPointOfFacet);
    13051329                //Now (if we have at least 3 variables) do a bubblesort on the rays
    13061330                /*if(this->numVars>2)
     
    14981522        gettimeofday(&t_kStd_start,0);
    14991523#endif
    1500         H=kStd(ina,NULL,testHomog,NULL);        //This is \mathcal(G)_{>_-\alpha}(in_v(I))
     1524        if(gcone::hasHomInput==TRUE)
     1525                H=kStd(ina,NULL,isHomog,NULL/*,gcone::hilbertFunction*/);
     1526        else
     1527                H=kStd(ina,NULL,isNotHomog,NULL);       //This is \mathcal(G)_{>_-\alpha}(in_v(I))
    15011528#ifdef gfanp
    15021529        gettimeofday(&t_kStd_end, 0);
     
    16811708        dd_rowindex newpos;
    16821709
     1710        //NOTE Here we should remove interiorPoint and instead
     1711        // create and ordering like (a(omega),a(fNormal),dp)
    16831712        interiorPoint(intPointMatrix, *iv_weight);      //iv_weight now contains the interior point
    16841713        dd_FreeMatrix(intPointMatrix);
     
    17411770        gettimeofday(&t_kStd_start,0);
    17421771#endif
    1743         dstRing_I=kStd(tmpI,NULL,testHomog,NULL);
     1772        if(gcone::hasHomInput==TRUE)
     1773                dstRing_I=kStd(tmpI,NULL,isHomog,NULL/*,gcone::hilbertFunction*/);
     1774        else
     1775                dstRing_I=kStd(tmpI,NULL,isNotHomog,NULL);
    17441776#ifdef gfanp
    17451777        gettimeofday(&t_kStd_end, 0);
     
    26832715                if(*ggT>1)//We only need to do this if the ggT is non-trivial
    26842716                {
     2717//                      intvec *fCopy = fAct->getFacetNormal();
    26852718                        for(int ii=0;ii<this->numVars;ii++)
    26862719                                (*fNormal)[ii] = ((*fNormal)[ii])/(*ggT);
     
    34283461int gcone::maxSize;
    34293462dd_MatrixPtr gcone::dd_LinealitySpace;
     3463intvec *gcone::hilbertFunction;
    34303464#ifdef gfanp
    34313465// int gcone::lengthOfSearchList=0;
     
    34813515                        */
    34823516                        if(idHomIdeal(gcAct->gcBasis,NULL))//disabled for tests
     3517                        {
    34833518                                gcone::hasHomInput=TRUE;
     3519                                gcone::hilbertFunction=hHstdSeries(inputIdeal,NULL,NULL,NULL,currRing);
     3520                        }
    34843521        #ifndef NDEBUG
    34853522        //              cout << "GB of input ideal is:" << endl;
  • kernel/gfan.h

    rcbc93a r2f72c55  
    3434// ideal gfan(ideal inputIdeal, int heuristic);
    3535lists gfan(ideal inputIdeal, int heuristic);
    36 
    3736//int dotProduct(intvec a, intvec b);
    3837//bool isParallel(intvec a, intvec b);
     
    168167                /** # of variables in the ring */
    169168                int numVars;            //#of variables in the ring
     169                /** The hilbert function - for the homogeneous case*/
     170                static intvec *hilbertFunction;
    170171               
    171172                /** # of facets of the cone
Note: See TracChangeset for help on using the changeset viewer.