Changeset b84add in git


Ignore:
Timestamp:
Mar 21, 2019, 11:07:30 AM (5 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
Children:
66824999f4f8f37eea466e691f6dd16bac89a057
Parents:
e6ca692d11ed9f7aed14460a5e2329dd2ed58504
Message:
ccluster by Remy Imbach
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/extra.cc

    re6ca692 rb84add  
    37683768      {
    37693769        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        }
    38163841      }
    38173842      return TRUE;
Note: See TracChangeset for help on using the changeset viewer.