Changeset 57647a in git for Singular/tgb.cc


Ignore:
Timestamp:
Sep 11, 2004, 1:41:42 PM (20 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b9f50b373314e74e83c7c060a651dd2913e1f033')
Children:
6fb170161691327f834a8738ef37ecb6507c390e
Parents:
a4892f0b671a20e2624f571ff52fa4a128e17848
Message:
*bricken: now debugging of F4 begins


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

Legend:

Unmodified
Added
Removed
  • Singular/tgb.cc

    ra4892f r57647a  
    21552155  i=0;
    21562156  poly* p;
    2157 
     2157  int nfs=0;
    21582158  int curr_deg=-1;
    21592159 
     
    21612161  while(chosen_index<PAR_N_F4)
    21622162  {
     2163   
    21632164    sorted_pair_node* s=top_pair(c);//here is actually chain criterium done
    21642165    if (!s) break;
     2166    nfs++;
    21652167    if(curr_deg>=0)
    21662168    {
     
    22432245
    22442246  }
    2245 
     2247  Print("M[%i, ",nfs);
    22462248  //next Step, simplify all pairs
    22472249  for(i=0;i<chosen_index;i++)
     
    23962398  omfree(m);
    23972399  omfree(q);
     2400  Print("%i, ",chosen_index);
    23982401  //next Step build matrix
    23992402  assume(p_index==chosen_index);
    24002403 
    24012404  tgb_matrix* mat=build_matrix(p,p_index,done, done_index,c);
    2402 
     2405 
    24032406  //next Step Gauss
    24042407  simple_gauss(mat);
     
    24112414  m_index=retranslate(m,mat,done,c);
    24122415  mat=NULL;
     2416  omfree(done);
     2417  done=NULL;
    24132418  //next Step addElements to basis
     2419  int F_plus_size=m_index;
     2420  poly* F_plus=(poly*)omalloc(F_plus_size*sizeof(poly));
     2421  int F_plus_index=0;
     2422  int F_minus_size=m_index;
     2423  poly* F_minus=(poly*) omalloc(F_minus_size*sizeof(poly));
     2424  int F_minus_index=0;
     2425
     2426  //better algorithm replace p by its monoms, qsort,delete duplicates and binary search for testing if monom is contained in array
     2427 
     2428  for(i=0;i<m_index;i++)
     2429  {
     2430    int j;
     2431    BOOLEAN minus=FALSE;
     2432    for(j=0;j<p_index;j++)
     2433      if (pLmEqual(p[j],m[i]))
     2434      {
     2435        minus=TRUE;
     2436        break;
     2437      }
     2438    if(minus)
     2439    {
     2440      F_minus[F_minus_index++]=m[i];
     2441      m[i]=NULL;
     2442    }
     2443    else
     2444    {
     2445      F_plus[F_plus_index++]=m[i];
     2446      m[i]=NULL;
     2447    }
     2448  }
     2449  Print("%i]", F_plus_index);
     2450  for(i=0;i<p_index;i++)
     2451    pDelete(&p[i]);
     2452  omfree(p);
     2453  p=NULL;
     2454  omfree(m);
     2455  m=NULL;
     2456  //the F_minus list must be cleared separately at the end
     2457  mp_array_list** F_i;
     2458  poly_array_list** F_m_i;
     2459  F_i=&(c->F);
     2460  F_m_i=&(c->F_minus);
     2461  while((*F_i)!=NULL)
     2462  {
     2463    assume((*F_minus)!=NULL);
     2464    F_i=(&((*F_i)->next));
     2465    F_m_i=(&((*F_m_i)->next));
     2466  }
     2467  assume((*F_minus)==NULL);
     2468  //should resize the array to save memory
     2469  //F and F_minus
     2470  (*F_m_i)=(poly_array_list*) omalloc(sizeof(poly_array_list));
     2471  (*F_m_i)->size=F_minus_index;
     2472  (*F_m_i)->p=F_minus;
     2473  (*F_m_i)->next=NULL;
     2474  (*F_i)=(mp_array_list*) omalloc(sizeof(poly_array_list));
     2475  (*F_i)->size=chosen_index;
     2476  (*F_i)->mp=chosen;
     2477  (*F_i)->next=NULL;
    24142478 
    2415 //  pre_comp(p,i,c);
    2416   if(i==0){
    2417     omfree(p);
    2418     return;
    2419   }
    2420   red_object* buf=(red_object*) omalloc(i*sizeof(red_object));
    2421   c->normal_forms+=i;
    2422   int j;
    2423   for(j=0;j<i;j++){
    2424     buf[j].p=p[j];
    2425     buf[j].sev=pGetShortExpVector(p[j]);
    2426     buf[j].sum=NULL;
    2427     buf[j].bucket = kBucketCreate(currRing);
    2428     int len=pLength(p[j]);
    2429     kBucketInit(buf[j].bucket,buf[j].p,len);
    2430   }
    2431   omfree(p);
    2432   qsort(buf,i,sizeof(red_object),red_object_better_gen);
    2433 //    Print("\ncurr_deg:%i\n",curr_deg);
    2434   Print("M[%i, ",i);
    2435 
    2436   multi_reduction(buf, i, c);
    2437 
    2438   //resort S
    2439 
    2440   Print("%i]",i);
    2441 
    2442   int* ibuf=(int*) omalloc(i*sizeof(int));
    2443   sorted_pair_node*** sbuf=(sorted_pair_node***) omalloc(i*sizeof(sorted_pair_node**));
    2444   for(j=0;j<i;j++)
    2445   {
    2446     int len;
    2447     poly p;
    2448     buf[j].flatten();
    2449     kBucketClear(buf[j].bucket,&p, &len);
    2450     kBucketDestroy(&buf[j].bucket);
     2479  if(F_plus_index>0)
     2480  {
     2481    int j;
     2482    int* ibuf=(int*) omalloc(F_plus_index*sizeof(int));
     2483    sorted_pair_node*** sbuf=(sorted_pair_node***) omalloc(F_plus_index*sizeof(sorted_pair_node**));
     2484 
     2485    for(j=0;j<F_plus_index;j++)
     2486    {
     2487      int len;
     2488      poly p=F_plus[j];
     2489   
    24512490    // delete buf[j];
    24522491    //remember to free res here
    24532492    //    p=redTailShort(p, c->strat);
    2454     sbuf[j]=add_to_basis(p,-1,-1,c,ibuf+j);
     2493      sbuf[j]=add_to_basis(p,-1,-1,c,ibuf+j);
    24552494   
    2456   }
    2457   int sum=0;
    2458   for(j=0;j<i;j++){
    2459     sum+=ibuf[j];
    2460   }
    2461   sorted_pair_node** big_sbuf=(sorted_pair_node**) omalloc(sum*sizeof(sorted_pair_node*));
    2462   int partsum=0;
    2463   for(j=0;j<i;j++)
    2464   {
    2465     memmove(big_sbuf+partsum, sbuf[j],ibuf[j]*sizeof(sorted_pair_node*));
    2466     omfree(sbuf[j]);
    2467     partsum+=ibuf[j];
    2468   }
    2469 
    2470   qsort(big_sbuf,sum,sizeof(sorted_pair_node*),pair_better_gen2);
    2471   c->apairs=merge(c->apairs,c->pair_top+1,big_sbuf,sum,c);
    2472   c->pair_top+=sum;
    2473   clean_top_of_pair_list(c);
    2474   omfree(big_sbuf);
    2475   omfree(sbuf);
    2476   omfree(ibuf);
    2477   omfree(buf);
     2495    }
     2496    int sum=0;
     2497    for(j=0;j<i;j++)
     2498    {
     2499      sum+=ibuf[j];
     2500    }
     2501    sorted_pair_node** big_sbuf=(sorted_pair_node**) omalloc(sum*sizeof(sorted_pair_node*));
     2502    int partsum=0;
     2503    for(j=0;j<i;j++)
     2504    {
     2505      memmove(big_sbuf+partsum, sbuf[j],ibuf[j]*sizeof(sorted_pair_node*));
     2506      omfree(sbuf[j]);
     2507      partsum+=ibuf[j];
     2508    }
     2509
     2510    qsort(big_sbuf,sum,sizeof(sorted_pair_node*),pair_better_gen2);
     2511    c->apairs=merge(c->apairs,c->pair_top+1,big_sbuf,sum,c);
     2512    c->pair_top+=sum;
     2513    clean_top_of_pair_list(c);
     2514    omfree(big_sbuf);
     2515    omfree(sbuf);
     2516    omfree(ibuf);
     2517  }
     2518  omfree(F_plus);
    24782519#ifdef TGB_DEBUG
    24792520  int z;
Note: See TracChangeset for help on using the changeset viewer.