Changeset 964cd1 in git


Ignore:
Timestamp:
Mar 9, 2003, 9:52:43 AM (21 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
32f58cd398994310d68f0171a7b1eda5d17811ba
Parents:
08405a9243e7a4046ddae06608507408e33cc842
Message:
*bricken: work in progress


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

Legend:

Unmodified
Added
Removed
  • Singular/tgb.cc

    r08405a r964cd1  
    19551955
    19561956
    1957 struct find_erg{
    1958   poly expand;
    1959   int expand_length;
    1960   int to_reduce_u;
    1961   int to_reduce_l;
    1962   int reduce_by;//index of reductor
    1963   BOOLEAN fromS;//else from los
    1964 
    1965 };
     1957
    19661958static int guess_quality(const red_object & p, calc_dat* c){
    19671959  //looks only on bucket
     
    23102302    if(erg.reduce_by<0) break;
    23112303    multi_reduction_lls_trick(los,losl,c,erg);
    2312     //erweitern? muß noch implementiert werden
     2304    int sum=0;
     2305    BOOLEAN join=FALSE;
     2306    for(i=erg.to_reduce_l;i<=erg.to_reduce_u;i++){
     2307      if(!los[i].sum) sum++;
     2308      if (sum>=AC_NEW_MIN) {join=TRUE;break;}
     2309    }
     2310   
    23132311    int i;
    23142312    int len;
     
    23412339       nDelete(&coef);
    23422340       los[i].p = kBucketGetLm(los[i].bucket);
    2343        if(los[i].p!=NULL)
    2344          if((i>0)&&(los[i-1].p!=NULL)&&(pLmEqual(los[i-1].p,los[i].p)))
    2345              los[i].sev=los[i-1].sev;
    2346          else
    2347            los[i].sev=pGetShortExpVector(los[i].p);
     2341//        if(los[i].p!=NULL)
     2342//       if((i>0)&&(los[i-1].p!=NULL)&&(pLmEqual(los[i-1].p,los[i].p)))
     2343//           los[i].sev=los[i-1].sev;
     2344//       else
     2345//         los[i].sev=pGetShortExpVector(los[i].p);
     2346       los[i].validate();
    23482347       //better would be first sorting before sev
    23492348    }
     
    24022401      flatten();
    24032402      p=kBucketGetLm(bucket);
     2403      sev=pGetShortExpVector(p);
    24042404    }
    24052405    else
    24062406    {
     2407 
    24072408      p=lm_ac;
     2409      assume(sum->ac->sev==pGetShortExpVector(p));
     2410      sev=sum->ac->sev;
    24082411    }
    24092412   
    24102413  }
    2411   else
     2414  else{
    24122415    p=kBucketGetLm(bucket);
    2413 
     2416    sev=pGetShortExpVector(p);
     2417  }
    24142418}
    24152419int red_object::clear_to_poly(){
     
    24222426{
    24232427  //we have to add support later for building new sums at this points, this involves a change in the interface
    2424   if(this->sum==NULL)
    2425     kBucketPolyRed(this->bucket,reductor_full,
    2426                    full_len,
    2427                    c->strat->kNoether);
    2428   else
    2429   {
    2430     assume(sum->ac!=NULL);
    2431     if(sum->ac->last_reduction_id!=reduction_id){
    2432      
    2433 
    2434 
    2435      
    2436      
    2437       number n1=kBucketPolyRed(sum->ac->bucket,reductor_full, full_len, c->strat->kNoether);
    2438       number n2=nMult(n1,sum->ac->multiplied);
    2439       nDelete(&sum->ac->multiplied);
    2440       nDelete(&n1);
    2441       sum->ac->multiplied=n2;
    2442     }
    2443       //reduce and adjust multiplied
    2444       sum->ac->last_reduction_id=reduction_id;
    2445      
    2446   }
    2447    
    24482428     
    24492429}
     
    24802460    return s;
    24812461}
     2462void reduction_step::reduce(red_object* r, int l, int u){}
     2463void simple_reducer::reduce(red_object* r, int l, int u){
     2464  int i;
     2465  for(i=l;i<=u;i++){
     2466    if(r[i].sum==NULL)
     2467      kBucketPolyRed(r[i].bucket,p,
     2468                     p_len,
     2469                     c->strat->kNoether);
     2470    else
     2471    {
     2472      assume(r[i].sum->ac!=NULL);
     2473      if(r[i].sum->ac->last_reduction_id!=reduction_id){
     2474        number n1=kBucketPolyRed(r[i].sum->ac->bucket,p, p_len, c->strat->kNoether);
     2475        number n2=nMult(n1,r[i].sum->ac->multiplied);
     2476        nDelete(&r[i].sum->ac->multiplied);
     2477        nDelete(&n1);
     2478        r[i].sum->ac->multiplied=n2;
     2479      }
     2480      //reduce and adjust multiplied
     2481      r[i].sum->ac->last_reduction_id=reduction_id;
     2482     
     2483    }
     2484 
     2485  }
     2486  for(i=l;i<=u;i++)
     2487    r[i].validate();
     2488}
     2489reduction_step::~reduction_step(){}
     2490simple_reducer::~simple_reducer(){
     2491  if(fill_back!=NULL)
     2492  {
     2493    kBucketInit(fill_back,p,p_len);
     2494  }
     2495   
     2496}
     2497void finalize_reduction_step(reduction_step* r){
     2498  delete r;
     2499}
     2500reduction_step* create_reduction_step(find_erg & erg, red_object* r, calc_dat* c){
     2501  static int id=0;
     2502  id++;
     2503 
     2504  simple_reducer* pointer= new simple_reducer();
     2505 
     2506  if (erg.fromS){
     2507    pointer->p=c->strat->S[erg.reduce_by];
     2508    pointer->p_len=c->strat->lenS[erg.reduce_by];
     2509    pointer->fill_back=NULL;
     2510  }
     2511  else
     2512  {
     2513    kBucket_pt bucket=r[erg.reduce_by].bucket;
     2514    kBucketClear(bucket,&pointer->p,&pointer->p_len);
     2515
     2516    pointer->fill_back=bucket;
     2517  }
     2518
     2519  pointer->reduction_id=id;
     2520  pointer->c=c;
     2521 
     2522  return pointer;
     2523};
  • Singular/tgb.h

    r08405a r964cd1  
    2525#define REDTAIL_S
    2626#define PAR_N 1000
     27#define AC_NEW_MIN 5
    2728//#define REDTAIL_PROT
    2829//#define QUICK_SPOLY_TEST
     
    4849  ///the polynomial data
    4950  kBucket_pt bucket;
     51  /// the short exponent vector
     52  unsigned long sev;
    5053  /// the reference counter
    5154  int counter;
     
    115118  void flatten();
    116119  void validate();
    117   void red_object::reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c);
     120  void reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c);
    118121  void adjust_coefs(number c_r, number c_ac_r);
    119122  int guess_quality(calc_dat* c);
    120   int red_object::clear_to_poly();
     123  int clear_to_poly();
    121124};
    122125
     
    164167static sorted_pair_node* top_pair(calc_dat* c);
    165168static int quality(poly p, int len, calc_dat* c);
    166 
     169/**
     170   makes on each red_object in a region a single_step
     171 **/
     172class reduction_step{
     173 public:
     174  /// we assume hat all occuring red_objects have same lm, and all
     175  /// occ. lm's in r[l...u] are the same, only reductor does not occur
     176  virtual void reduce(red_object* r, int l, int u);
     177  //int reduction_id;
     178  virtual ~reduction_step();
     179  calc_dat* c;
     180  int reduction_id;
     181};
     182class simple_reducer:public reduction_step{
     183 public:
     184  poly p;
     185  kBucket_pt fill_back;
     186  int p_len;
     187
     188  void reduce(red_object* r, int l, int u);
     189  ~simple_reducer();
     190};
     191//class sum_canceling_reducer:public reduction_step {
     192//  void reduce(red_object* r, int l, int u);
     193//};
     194struct find_erg{
     195  poly expand;
     196  int expand_length;
     197  int to_reduce_u;
     198  int to_reduce_l;
     199  int reduce_by;//index of reductor
     200  BOOLEAN fromS;//else from los
     201
     202};
     203
     204reduction_step* create_reduction_step(find_erg & erg, red_object* r, calc_dat* c);
    167205#endif
Note: See TracChangeset for help on using the changeset viewer.