Changeset e01da4 in git
- Timestamp:
- Feb 20, 2007, 11:47:46 AM (16 years ago)
- Branches:
- (u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
- Children:
- 421e42f64cacb50c3475fbbae08023fddb74803b
- Parents:
- ede220f19c45a9b68833b167e1957f75e4c89a8b
- Location:
- kernel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/tgb.cc
rede220f re01da4 5 5 * Computer Algebra System SINGULAR * 6 6 ****************************************/ 7 /* $Id: tgb.cc,v 1.1 39 2007-02-16 07:24:12bricken Exp $ */7 /* $Id: tgb.cc,v 1.140 2007-02-20 10:47:45 bricken Exp $ */ 8 8 /* 9 9 * ABSTRACT: slimgb and F4 implementation … … 2445 2445 DataNoroCacheNode* dn=(DataNoroCacheNode*) node; 2446 2446 if (dn->value_len!=backLinkCode){ 2447 poly p=dn->value_poly; 2447 2448 #ifndef NORO_SPARSE_ROWS_PRE 2448 2449 dn->row=new DenseRow(); 2449 2450 DenseRow* row=dn->row; 2450 2451 memset(buffer,0,sizeof(number)*nIrreducibleMonomials); 2451 poly p=dn->value_poly;2452 2452 2453 if (p==NULL) {row->array=NULL;row->begin=0;row->end=0; return;} 2453 2454 int i=0; … … 2470 2471 memcpy(row->array,a+row->begin,len*sizeof(number)); 2471 2472 #else 2472 assume(dn->value_len== dn->value_poly);2473 assume(dn->value_len==pLength(dn->value_poly)); 2473 2474 dn->row=new SparseRow(dn->value_len); 2474 2475 SparseRow* row=dn->row; … … 2477 2478 DataNoroCacheNode* ref=getCacheReference(p); 2478 2479 2479 i dx=ref->term_index;2480 int idx=ref->term_index; 2480 2481 assume(idx>=0); 2481 2482 row->idx_array[i]=idx; … … 2527 2528 } 2528 2529 2529 }2530 2530 2531 2531 2532 #else … … 2543 2544 #endif 2544 2545 } 2546 } 2545 2547 2546 2548 } … … 2718 2720 2719 2721 } 2722 SparseRow* noro_red_to_non_poly(poly p, int &len, NoroCache* cache,slimgb_alg* c); 2723 MonRedResNP 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 2720 2789 poly tree_add(poly* a,int begin, int end,ring r){ 2721 2790 int d=end-begin; … … 2793 2862 return res; 2794 2863 } 2795 2796 2864 #ifdef NORO_SPARSE_ROWS_PRE 2865 //len input and out: Idea: reverse addition 2866 SparseRow* 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 2797 2922 //len input and out: Idea: reverse addition 2798 2923 std::vector<NoroPlaceHolder> noro_red(poly p, int &len, NoroCache* cache,slimgb_alg* c){ -
kernel/tgb_internal.h
rede220f re01da4 5 5 * Computer Algebra System SINGULAR * 6 6 ****************************************/ 7 /* $Id: tgb_internal.h,v 1.5 3 2007-02-12 14:29:54 SingularExp $ */7 /* $Id: tgb_internal.h,v 1.54 2007-02-20 10:47:46 bricken Exp $ */ 8 8 /* 9 9 * ABSTRACT: tgb internal .h file … … 20 20 //#define USE_NORO 1 21 21 //#define NORO_CACHE 1 22 #define NORO_SPARSE_ROWS_PRE 1 22 23 #ifdef NORO_CACHE 23 24 //#include <map> … … 110 111 ref=NULL; 111 112 p=NULL; 113 } 114 }; 115 class MonRedResNP{ 116 public: 117 number coef; 118 119 120 DataNoroCacheNode* ref; 121 MonRedResNP(){ 122 ref=NULL; 112 123 } 113 124 };
Note: See TracChangeset
for help on using the changeset viewer.