Changeset 57647a in git for Singular/tgb.cc
- Timestamp:
- Sep 11, 2004, 1:41:42 PM (20 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b9f50b373314e74e83c7c060a651dd2913e1f033')
- Children:
- 6fb170161691327f834a8738ef37ecb6507c390e
- Parents:
- a4892f0b671a20e2624f571ff52fa4a128e17848
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
ra4892f r57647a 2155 2155 i=0; 2156 2156 poly* p; 2157 2157 int nfs=0; 2158 2158 int curr_deg=-1; 2159 2159 … … 2161 2161 while(chosen_index<PAR_N_F4) 2162 2162 { 2163 2163 2164 sorted_pair_node* s=top_pair(c);//here is actually chain criterium done 2164 2165 if (!s) break; 2166 nfs++; 2165 2167 if(curr_deg>=0) 2166 2168 { … … 2243 2245 2244 2246 } 2245 2247 Print("M[%i, ",nfs); 2246 2248 //next Step, simplify all pairs 2247 2249 for(i=0;i<chosen_index;i++) … … 2396 2398 omfree(m); 2397 2399 omfree(q); 2400 Print("%i, ",chosen_index); 2398 2401 //next Step build matrix 2399 2402 assume(p_index==chosen_index); 2400 2403 2401 2404 tgb_matrix* mat=build_matrix(p,p_index,done, done_index,c); 2402 2405 2403 2406 //next Step Gauss 2404 2407 simple_gauss(mat); … … 2411 2414 m_index=retranslate(m,mat,done,c); 2412 2415 mat=NULL; 2416 omfree(done); 2417 done=NULL; 2413 2418 //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; 2414 2478 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 2451 2490 // delete buf[j]; 2452 2491 //remember to free res here 2453 2492 // 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); 2455 2494 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); 2478 2519 #ifdef TGB_DEBUG 2479 2520 int z;
Note: See TracChangeset
for help on using the changeset viewer.