Changeset 9f11ab in git


Ignore:
Timestamp:
Feb 16, 2007, 8:24:12 AM (17 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
8324cc32fb89526d0957452cb54e691d6c81ef3f
Parents:
6881be5a0364e2c5f737071fdc615a582d56cff1
Message:
*bricken: sparse rows for noro preprocessing


git-svn-id: file:///usr/local/Singular/svn/trunk@9862 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/tgb.cc

    r6881be5 r9f11ab  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb.cc,v 1.138 2007-02-15 15:16:32 bricken Exp $ */
     7/* $Id: tgb.cc,v 1.139 2007-02-16 07:24:12 bricken Exp $ */
    88/*
    99* ABSTRACT: slimgb and F4 implementation
     
    22742274  }
    22752275};
     2276class SparseRow{
     2277public:
     2278  int* idx_array;
     2279  number* coef_array;
     2280  int len;
     2281  SparseRow(){
     2282    len=0;
     2283    idx_array=NULL;
     2284    coef_array=NULL;
     2285  }
     2286  SparseRow(int n){
     2287    len=n;
     2288    idx_array=(int*) omalloc(n*sizeof(int));
     2289    coef_array=(number*) omalloc(n*sizeof(number));
     2290  }
     2291  ~SparseRow(){
     2292    omfree(idx_array);
     2293    omfree(coef_array);
     2294  }
     2295};
    22762296
    22772297class DataNoroCacheNode:public NoroCacheNode{
     
    22802300  int value_len;
    22812301  poly value_poly;
     2302  #ifdef NORO_SPARSE_ROWS_PRE
     2303  SparseRow* row;
     2304  #else
    22822305  DenseRow* row;
     2306  #endif
    22832307  int term_index;
    22842308  DataNoroCacheNode(poly p, int len){
     
    24212445    DataNoroCacheNode* dn=(DataNoroCacheNode*) node;
    24222446    if (dn->value_len!=backLinkCode){
     2447      #ifndef NORO_SPARSE_ROWS_PRE
    24232448      dn->row=new DenseRow();
    24242449      DenseRow* row=dn->row;
     
    24442469      row->array=(number*) omalloc((len)*sizeof(number));
    24452470      memcpy(row->array,a+row->begin,len*sizeof(number));
    2446       /*dn->row->array=(number*) omalloc(nIrreducibleMonomials*sizeof(number));
    2447       dn->row->begin=0;
    2448       dn->row->end=nIrreducibleMonomials;
    2449       number* row= dn->row->array;
    2450       int i;
    2451       for(i=0;i<nIrreducibleMonomials;i++){
    2452         row[i]=npInit(0);
    2453       }
    2454       poly p=dn->value_poly;
    2455       i=0;
     2471      #else
     2472      assume(dn->value_len==dn->value_poly);
     2473      dn->row=new SparseRow(dn->value_len);
     2474      SparseRow* row=dn->row;
     2475      int i=0;
    24562476      while(p){
    2457 
    2458         if (i==0){
    2459           dn->row->begin=idx;
    2460         }
    2461         dn->row->end=idx+1;
     2477        DataNoroCacheNode* ref=getCacheReference(p);
     2478       
     2479        idx=ref->term_index;
     2480        assume(idx>=0);
     2481        row->idx_array[i]=idx;
     2482        row->coef_array[i]=p_GetCoeff(p,currRing);
     2483       
    24622484        i++;
    2463         assume(idx>=0);
    2464         //Print("idx:%d\n",idx);
    2465         row[idx]=p_GetCoeff(p,currRing);
    24662485        pIter(p);
    2467       }*/
     2486      }
     2487      if (i!=dn->value_len){
     2488        Print("F4 calc wrong, as poly len was wrong\n");
     2489      }
     2490      assume(i==dn->value_len);
     2491      #endif
    24682492     
    2469       //p_Delete(&dn->value_poly,currRing);
    24702493    }
    24712494  }
     
    24802503      row[ref->term_index]=npAdd(row[ref->term_index],coef);
    24812504    } else {
     2505      #ifndef NORO_SPARSE_ROWS_PRE
    24822506      DenseRow* ref_row=ref->row;
    24832507      if (ref_row==NULL) continue;
     
    25042528
    25052529    }
     2530   
     2531    #else
     2532    SparseRow* ref_row=ref->row;
     2533    if (ref_row==NULL) continue;
     2534    int n=ref_row->len;
     2535    int j;
     2536    int* idx_array=ref_row->idx_array;
     2537    number* coef_array=ref_row->coef_array;
     2538    for(j=0;j<n;j++){
     2539      int idx=idx_array[j];
     2540      number ref_coef=coef_array[j];
     2541      row[idx]=npAdd(row[idx],npMult(coef,ref_coef));
     2542    }
     2543    #endif
    25062544  }
    25072545
Note: See TracChangeset for help on using the changeset viewer.