Changeset 52ec76 in git
- Timestamp:
- Oct 9, 2017, 4:44:06 PM (7 years ago)
- Branches:
- (u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
- Children:
- 9f643b295e9a8346261ff5256aec555f57acc264
- Parents:
- e4d8aca0e2e92ecdde66a3c59c3d02d377857a90
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/dyn_modules/customstd/customstd.cc
re4d8ac r52ec76 69 69 if (nonTrivialSaturationToBeDone==false) break; 70 70 } 71 if (nonTrivialSaturationToBeDone ==true)71 if (nonTrivialSaturationToBeDone) 72 72 { 73 73 // std::cout << "simplifying!" << std::endl; … … 184 184 } 185 185 186 ideal I = (ideal) u->Data();187 188 186 idealCache = NULL; 189 I=kStd(I,currRing->qideal,testHomog,NULL,NULL,0,0,NULL,sat_vars_sp);187 ideal I=kStd(I,currRing->qideal,testHomog,NULL,NULL,0,0,NULL,sat_vars_sp); 190 188 customstd_satstdSaturatingVariables = std::vector<int>(); 191 189 -
kernel/ideals.cc
re4d8ac r52ec76 33 33 34 34 #include "kernel/GBEngine/kstd1.h" 35 #include "kernel/GBEngine/kutil.h" 35 36 #include "kernel/GBEngine/tgb.h" 36 37 #include "kernel/GBEngine/syz.h" … … 2828 2829 } 2829 2830 2831 static int * id_satstdSaturatingVariables=NULL; 2832 2833 static BOOLEAN id_sat_vars_sp(kStrategy strat) 2834 { 2835 BOOLEAN b = FALSE; // set b to TRUE, if spoly was changed, 2836 // let it remain FALSE otherwise 2837 if (strat->P.t_p==NULL) 2838 { 2839 poly p=strat->P.p; 2840 2841 // iterate over all terms of p and 2842 // compute the minimum mm of all exponent vectors 2843 int *mm=(int*)omAlloc((1+rVar(currRing))*sizeof(int)); 2844 int *m0=(int*)omAlloc0((1+rVar(currRing))*sizeof(int)); 2845 p_GetExpV(p,mm,currRing); 2846 bool nonTrivialSaturationToBeDone=true; 2847 for (p=pNext(p); p!=NULL; pIter(p)) 2848 { 2849 nonTrivialSaturationToBeDone=false; 2850 p_GetExpV(p,m0,currRing); 2851 for (int i=rVar(currRing); i>0; i--) 2852 { 2853 if (id_satstdSaturatingVariables[i]!=0) 2854 { 2855 mm[i]=si_min(mm[i],m0[i]); 2856 if (mm[i]>0) nonTrivialSaturationToBeDone=true; 2857 } 2858 } 2859 // abort if the minimum is zero in each component 2860 if (!nonTrivialSaturationToBeDone) break; 2861 } 2862 if (nonTrivialSaturationToBeDone) 2863 { 2864 // std::cout << "simplifying!" << std::endl; 2865 if (TEST_OPT_PROT) { PrintS("S"); mflush(); } 2866 p=p_Copy(strat->P.p,currRing); 2867 memset(&strat->P,0,sizeof(strat->P)); 2868 strat->P.tailRing = strat->tailRing; 2869 strat->P.p=p; 2870 while(p!=NULL) 2871 { 2872 for (int i=rVar(currRing); i>0; i--) 2873 { 2874 if(id_satstdSaturatingVariables[i]!=0) 2875 { 2876 p_SubExp(p,i,mm[i],currRing); 2877 } 2878 } 2879 p_Setm(p,currRing); 2880 pIter(p); 2881 } 2882 b = TRUE; 2883 } 2884 omFree(mm); 2885 omFree(m0); 2886 } 2887 else 2888 { 2889 poly p=strat->P.t_p; 2890 2891 // iterate over all terms of p and 2892 // compute the minimum mm of all exponent vectors 2893 int *mm=(int*)omAlloc((1+rVar(currRing))*sizeof(int)); 2894 int *m0=(int*)omAlloc0((1+rVar(currRing))*sizeof(int)); 2895 p_GetExpV(p,mm,strat->tailRing); 2896 bool nonTrivialSaturationToBeDone=true; 2897 for (p = pNext(p); p!=NULL; pIter(p)) 2898 { 2899 nonTrivialSaturationToBeDone=false; 2900 p_GetExpV(p,m0,strat->tailRing); 2901 for(int i=rVar(currRing); i>0; i--) 2902 { 2903 if(id_satstdSaturatingVariables[i]!=0) 2904 { 2905 mm[i]=si_min(mm[i],m0[i]); 2906 if (mm[i]>0) nonTrivialSaturationToBeDone = true; 2907 } 2908 } 2909 // abort if the minimum is zero in each component 2910 if (!nonTrivialSaturationToBeDone) break; 2911 } 2912 if (nonTrivialSaturationToBeDone) 2913 { 2914 if (TEST_OPT_PROT) { PrintS("S"); mflush(); } 2915 p=p_Copy(strat->P.t_p,strat->tailRing); 2916 memset(&strat->P,0,sizeof(strat->P)); 2917 strat->P.tailRing = strat->tailRing; 2918 strat->P.t_p=p; 2919 while(p!=NULL) 2920 { 2921 for(int i=rVar(currRing); i>0; i--) 2922 { 2923 if(id_satstdSaturatingVariables[i]!=0) 2924 { 2925 p_SubExp(p,i,mm[i],strat->tailRing); 2926 } 2927 } 2928 p_Setm(p,strat->tailRing); 2929 pIter(p); 2930 } 2931 strat->P.GetP(); 2932 b = TRUE; 2933 } 2934 omFree(mm); 2935 omFree(m0); 2936 } 2937 return b; // return TRUE if sp was changed, FALSE if not 2938 } 2939 2940 ideal id_Satstd(const ideal I, ideal J, const ring r) 2941 { 2942 ring save=currRing; 2943 if (currRing!=r) rChangeCurrRing(r); 2944 idSkipZeroes(J); 2945 id_satstdSaturatingVariables=(int*)omAlloc0((1+rVar(currRing))*sizeof(int)); 2946 int k=IDELEMS(J); 2947 for (int i=0; i<k; i++) 2948 { 2949 poly x = J->m[i]; 2950 int li = p_Var(x,r); 2951 if (li>0) 2952 id_satstdSaturatingVariables[li]=1; 2953 else 2954 { 2955 if (currRing!=save) rChangeCurrRing(save); 2956 WerrorS("ideal generators must be variables"); 2957 return NULL; 2958 } 2959 } 2960 ideal res=kStd(I,r->qideal,testHomog,NULL,NULL,0,0,NULL,id_sat_vars_sp); 2961 omFreeSize(id_satstdSaturatingVariables,(1+rVar(currRing))*sizeof(int)); 2962 id_satstdSaturatingVariables=NULL; 2963 if (currRing!=save) rChangeCurrRing(save); 2964 return res; 2965 } 2966 2830 2967 GbVariant syGetAlgorithm(char *n, const ring r, const ideal /*M*/) 2831 2968 { -
kernel/ideals.h
re4d8ac r52ec76 202 202 ideal id_TensorModuleMult(const int m, const ideal M, const ring rRing); // image of certain map for BGG 203 203 204 ideal id_Satstd(const ideal I, ideal J, const ring r); 205 204 206 GbVariant syGetAlgorithm(char *n, const ring r, const ideal M); 205 207 #endif
Note: See TracChangeset
for help on using the changeset viewer.