Changeset e01da4 in git


Ignore:
Timestamp:
Feb 20, 2007, 11:47:46 AM (16 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
Children:
421e42f64cacb50c3475fbbae08023fddb74803b
Parents:
ede220f19c45a9b68833b167e1957f75e4c89a8b
Message:
*bricken: sparse works now


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

Legend:

Unmodified
Added
Removed
  • kernel/tgb.cc

    rede220f re01da4  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb.cc,v 1.139 2007-02-16 07:24:12 bricken Exp $ */
     7/* $Id: tgb.cc,v 1.140 2007-02-20 10:47:45 bricken Exp $ */
    88/*
    99* ABSTRACT: slimgb and F4 implementation
     
    24452445    DataNoroCacheNode* dn=(DataNoroCacheNode*) node;
    24462446    if (dn->value_len!=backLinkCode){
     2447      poly p=dn->value_poly;
    24472448      #ifndef NORO_SPARSE_ROWS_PRE
    24482449      dn->row=new DenseRow();
    24492450      DenseRow* row=dn->row;
    24502451      memset(buffer,0,sizeof(number)*nIrreducibleMonomials);
    2451       poly p=dn->value_poly;
     2452     
    24522453      if (p==NULL) {row->array=NULL;row->begin=0;row->end=0; return;}
    24532454      int i=0;
     
    24702471      memcpy(row->array,a+row->begin,len*sizeof(number));
    24712472      #else
    2472       assume(dn->value_len==dn->value_poly);
     2473      assume(dn->value_len==pLength(dn->value_poly));
    24732474      dn->row=new SparseRow(dn->value_len);
    24742475      SparseRow* row=dn->row;
     
    24772478        DataNoroCacheNode* ref=getCacheReference(p);
    24782479       
    2479         idx=ref->term_index;
     2480        int idx=ref->term_index;
    24802481        assume(idx>=0);
    24812482        row->idx_array[i]=idx;
     
    25272528      }
    25282529
    2529     }
     2530   
    25302531   
    25312532    #else
     
    25432544    #endif
    25442545  }
     2546  }
    25452547
    25462548}
     
    27182720
    27192721}
     2722SparseRow* noro_red_to_non_poly(poly p, int &len, NoroCache* cache,slimgb_alg* c);
     2723MonRedResNP noro_red_mon_to_non_poly(poly t,  NoroCache* cache,slimgb_alg* c){
     2724  MonRedResNP res_holder;
     2725
     2726
     2727    DataNoroCacheNode* ref=cache->getCacheReference(t);
     2728    if (ref!=NULL){
     2729
     2730      /*if (res_holder.len==NoroCache::backLinkCode){
     2731        res_holder.len=1;
     2732
     2733
     2734      }*/
     2735      res_holder.coef=p_GetCoeff(t,c->r);
     2736     
     2737      res_holder.ref=ref;
     2738      p_Delete(&t,c->r);
     2739      return res_holder;
     2740    }
     2741 
     2742  unsigned long sev=p_GetShortExpVector(t,currRing);
     2743  int i=kFindDivisibleByInS_easy(c->strat,t,sev);
     2744  if (i>=0){
     2745    number coef_bak=p_GetCoeff(t,c->r);
     2746
     2747    p_SetCoeff(t,npInit(1),c->r);
     2748    assume(npIsOne(p_GetCoeff(c->strat->S[i],c->r)));
     2749    number coefstrat=p_GetCoeff(c->strat->S[i],c->r);
     2750
     2751      //poly t_copy_mon=p_Copy(t,c->r);
     2752    poly exp_diff=cache->temp_term;
     2753    p_ExpVectorDiff(exp_diff,t,c->strat->S[i],c->r);
     2754    p_SetCoeff(exp_diff,npNeg(npInvers(coefstrat)),c->r);
     2755    p_Setm(exp_diff,c->r);
     2756    assume(c->strat->S[i]!=NULL);
     2757      //poly t_to_del=t;
     2758    poly res;
     2759    res=pp_Mult_mm(pNext(c->strat->S[i]),exp_diff,c->r);
     2760
     2761    int len=c->strat->lenS[i]-1;
     2762    SparseRow* srow;
     2763    srow=noro_red_to_non_poly(res,len,cache,c);
     2764   
     2765    //DataNoroCacheNode* ref=cache->insert(t,srow);
     2766    p_Delete(&t,c->r);
     2767      //p_Delete(&t_copy_mon,c->r);
     2768      //res=pMult_nn(res,coef_bak);
     2769
     2770
     2771    res_holder.coef=coef_bak;
     2772    res_holder.ref=ref;
     2773    return res_holder;
     2774
     2775  } else {
     2776    number coef_bak=p_GetCoeff(t,c->r);
     2777    number one=npInit(1);
     2778    p_SetCoeff(t,one,c->r);
     2779 
     2780    res_holder.ref=cache->insertAndTransferOwnerShip(t,c->r);
     2781    res_holder.coef=coef_bak;
     2782   
     2783    return res_holder;
     2784   
     2785  }
     2786
     2787}
     2788
    27202789poly tree_add(poly* a,int begin, int end,ring r){
    27212790  int d=end-begin;
     
    27932862  return res;
    27942863}
    2795 
    2796 
     2864#ifdef NORO_SPARSE_ROWS_PRE
     2865//len input and out: Idea: reverse addition
     2866SparseRow* noro_red_to_non_poly(poly p, int &len, NoroCache* cache,slimgb_alg* c){
     2867  assume(len==pLength(p));
     2868  poly orig_p=p;
     2869  if (p==NULL) {
     2870    len=0;
     2871    return NULL;
     2872  }
     2873  number* temp_array=(number*) omalloc(cache->nIrreducibleMonomials*sizeof(number));
     2874  memset(temp_array,0,sizeof(number)*cache->nIrreducibleMonomials);
     2875 
     2876  MonRedResNP* mon=(MonRedResNP*) omalloc(len*sizeof(MonRedResNP));
     2877  int i=0;
     2878
     2879  while(p){
     2880
     2881    poly t=p;
     2882    pIter(p);
     2883    pNext(t)=NULL;
     2884   
     2885#ifndef NDEBUG
     2886    number coef_debug=p_GetCoeff(t,currRing);
     2887#endif
     2888    MonRedResNP red=noro_red_mon_to_non_poly(t,cache,c);
     2889    mon[i]=red;
     2890    i++;
     2891  }
     2892  assume(i==len);
     2893  len=i;
     2894  for(i=0;i<len;i++){
     2895    MonRedResNP red=mon[i];
     2896    if ((red.ref)){
     2897      if (red.ref->row){
     2898        SparseRow* row=red.ref->row;
     2899        number coef=red.coef;
     2900        for(i=0;i<row->len;i++){
     2901          int idx=row->idx_array[i];
     2902          temp_array[idx]=npAdd(temp_array[idx],npMult(row->coef_array[i],coef));
     2903        }
     2904      }
     2905      else{
     2906        if (red.ref->value_len==NoroCache::backLinkCode){
     2907          temp_array[red.ref->term_index]=red.coef;
     2908        } else {
     2909          PrintS("third case\n");
     2910        }
     2911      }
     2912    }
     2913  }
     2914 
     2915
     2916
     2917
     2918
     2919  //TODO:return res;
     2920}
     2921#endif
    27972922//len input and out: Idea: reverse addition
    27982923std::vector<NoroPlaceHolder> noro_red(poly p, int &len, NoroCache* cache,slimgb_alg* c){
  • kernel/tgb_internal.h

    rede220f re01da4  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb_internal.h,v 1.53 2007-02-12 14:29:54 Singular Exp $ */
     7/* $Id: tgb_internal.h,v 1.54 2007-02-20 10:47:46 bricken Exp $ */
    88/*
    99 * ABSTRACT: tgb internal .h file
     
    2020//#define USE_NORO 1
    2121//#define NORO_CACHE 1
     22#define NORO_SPARSE_ROWS_PRE 1
    2223#ifdef NORO_CACHE
    2324//#include <map>
     
    110111    ref=NULL;
    111112    p=NULL;
     113  }
     114};
     115class MonRedResNP{
     116public:
     117  number coef;
     118
     119
     120  DataNoroCacheNode* ref;
     121  MonRedResNP(){
     122    ref=NULL;
    112123  }
    113124};
Note: See TracChangeset for help on using the changeset viewer.