Changeset b84add in git
- Timestamp:
- Mar 21, 2019, 11:07:30 AM (5 years ago)
- Branches:
- (u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
- Children:
- 66824999f4f8f37eea466e691f6dd16bac89a057
- Parents:
- e6ca692d11ed9f7aed14460a5e2329dd2ed58504
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/extra.cc
re6ca692 rb84add 3768 3768 { 3769 3769 const short t[]={5,POLY_CMD,NUMBER_CMD,NUMBER_CMD,NUMBER_CMD,NUMBER_CMD}; 3770 if (iiCheckTypes(h,t,1)) 3771 { 3772 // convert first arg. to fmpq_poly_t 3773 fmpq_poly_t f; 3774 convSingPFlintP(f,(poly)h->Data(),currRing); h=h->next; 3775 // convert box-center(re,im), box-size, epsilon 3776 fmpq_t center_re,center_im,boxsize,eps; 3777 convSingNFlintN(center_re,(number)h->Data(),currRing->cf); h=h->next; 3778 convSingNFlintN(center_im,(number)h->Data(),currRing->cf); h=h->next; 3779 convSingNFlintN(boxsize,(number)h->Data(),currRing->cf); h=h->next; 3780 convSingNFlintN(eps,(number)h->Data(),currRing->cf); h=h->next; 3781 // alloc arrays 3782 int n=fmpq_poly_length(f); 3783 fmpq_t* re_part=(fmpq_t*)omAlloc(n*sizeof(fmpq_t)); 3784 fmpq_t* im_part=(fmpq_t*)omAlloc(n*sizeof(fmpq_t)); 3785 int *mult =(int*) omAlloc(n*sizeof(int)); 3786 for(int i=0; i<n;i++) 3787 { fmpq_init(re_part[i]); fmpq_init(im_part[i]); } 3788 // call cccluster, adjust n 3789 int nn=ccluster_interface_poly_real(re_part,im_part,mult,f,center_re,center_im,boxsize,eps,23,1); 3790 // convert to list 3791 lists l=(lists)omAlloc0Bin(slists_bin); 3792 l->Init(nn); 3793 for(int i=0; i<nn;i++) 3794 { 3795 lists ll=(lists)omAlloc0Bin(slists_bin); 3796 l->m[i].rtyp=LIST_CMD; 3797 l->m[i].data=ll; 3798 ll->Init(3); 3799 ll->m[0].rtyp=NUMBER_CMD; 3800 ll->m[1].rtyp=NUMBER_CMD; 3801 ll->m[2].rtyp=INT_CMD; 3802 ll->m[0].data=convFlintNSingN(re_part[i],currRing->cf); 3803 ll->m[1].data=convFlintNSingN(im_part[i],currRing->cf); 3804 ll->m[2].data=(char*)(long)mult[i]; 3805 } 3806 // clear re, im 3807 for(int i=n-1;i>=0;i--) { fmpq_clear(re_part[i]); fmpq_clear(im_part[i]); } 3808 omFreeSize(re_part,n*sizeof(fmpq_t)); 3809 omFreeSize(im_part,n*sizeof(fmpq_t)); 3810 omFreeSize(mult,n*sizeof(int)); 3811 // result 3812 res->rtyp=LIST_CMD; 3813 res->data=l; 3814 return FALSE; 3815 } 3770 const short t2[]={6,POLY_CMD,POLY_CMD,NUMBER_CMD,NUMBER_CMD,NUMBER_CMD,NUMBER_CMD}; 3771 3772 // printf("test t : %d\n", h->Typ()==POLY_CMD); 3773 // printf("test t : %d\n", h->next->Typ()==POLY_CMD); 3774 int pol_with_complex_coeffs=0; 3775 if (h->next->Typ()==POLY_CMD) 3776 pol_with_complex_coeffs=1; 3777 3778 if ( (pol_with_complex_coeffs==0 && iiCheckTypes(h,t,1)) 3779 ||(pol_with_complex_coeffs==1 && iiCheckTypes(h,t2,1)) ) 3780 { 3781 // convert first arg. to fmpq_poly_t 3782 fmpq_poly_t fre, fim; 3783 convSingPFlintP(fre,(poly)h->Data(),currRing); h=h->next; 3784 if (pol_with_complex_coeffs==1) { // convert second arg. to fmpq_poly_t 3785 convSingPFlintP(fim,(poly)h->Data(),currRing); h=h->next; 3786 } 3787 // convert box-center(re,im), box-size, epsilon 3788 fmpq_t center_re,center_im,boxsize,eps; 3789 convSingNFlintN(center_re,(number)h->Data(),currRing->cf); h=h->next; 3790 convSingNFlintN(center_im,(number)h->Data(),currRing->cf); h=h->next; 3791 convSingNFlintN(boxsize,(number)h->Data(),currRing->cf); h=h->next; 3792 convSingNFlintN(eps,(number)h->Data(),currRing->cf); h=h->next; 3793 // alloc arrays 3794 int n=fmpq_poly_length(fre); 3795 fmpq_t* re_part=(fmpq_t*)omAlloc(n*sizeof(fmpq_t)); 3796 fmpq_t* im_part=(fmpq_t*)omAlloc(n*sizeof(fmpq_t)); 3797 int *mult =(int*) omAlloc(n*sizeof(int)); 3798 for(int i=0; i<n;i++) 3799 { fmpq_init(re_part[i]); fmpq_init(im_part[i]); } 3800 // call cccluster, adjust n 3801 int verbosity =0; //nothing is printed 3802 int strategy = 23; //default strategy 3803 int nn=0; 3804 long nb_threads = (long) feOptValue(FE_OPT_CPUS); 3805 strategy = strategy+(nb_threads<<6); 3806 // printf("nb threads: %ld\n", nb_threads); 3807 // printf("strategy: %ld\n", strategy); 3808 if (pol_with_complex_coeffs==0) 3809 nn=ccluster_interface_poly_real(re_part,im_part,mult,fre,center_re,center_im,boxsize,eps,strategy,verbosity); 3810 else 3811 nn=ccluster_interface_poly_real_imag(re_part,im_part,mult,fre,fim,center_re,center_im,boxsize,eps,strategy,verbosity); 3812 // convert to list 3813 lists l=(lists)omAlloc0Bin(slists_bin); 3814 l->Init(nn); 3815 for(int i=0; i<nn;i++) 3816 { 3817 lists ll=(lists)omAlloc0Bin(slists_bin); 3818 l->m[i].rtyp=LIST_CMD; 3819 l->m[i].data=ll; 3820 ll->Init(3); 3821 ll->m[0].rtyp=NUMBER_CMD; 3822 ll->m[1].rtyp=NUMBER_CMD; 3823 ll->m[2].rtyp=INT_CMD; 3824 ll->m[0].data=convFlintNSingN(re_part[i],currRing->cf); 3825 ll->m[1].data=convFlintNSingN(im_part[i],currRing->cf); 3826 ll->m[2].data=(void *)(long)mult[i]; 3827 } 3828 //clear re, im, mults, fre, fim 3829 for(int i=n-1;i>=0;i--) { fmpq_clear(re_part[i]); fmpq_clear(im_part[i]); } 3830 omFree(re_part); 3831 omFree(im_part); 3832 omFree(mult); 3833 fmpq_clear(center_re); fmpq_clear(center_im); fmpq_clear(boxsize); fmpq_clear(eps); 3834 fmpq_poly_clear(fre); 3835 if (pol_with_complex_coeffs==1) fmpq_poly_clear(fim); 3836 // result 3837 res->rtyp=LIST_CMD; 3838 res->data=l; 3839 return FALSE; 3840 } 3816 3841 } 3817 3842 return TRUE;
Note: See TracChangeset
for help on using the changeset viewer.