Changeset bc8a609 in git


Ignore:
Timestamp:
Mar 18, 2019, 5:09:12 PM (5 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
Children:
5e8ecdbc3b543a3a045897b074162b8ff5053c87
Parents:
c854b9a4ef6bb168095febb6c5bb20cf579a7ff4
Message:
add: try ccluster
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/extra.cc

    rc854b9 rbc8a609  
    1010
    1111#define HAVE_WALK 1
     12
     13#ifdef HAVE_CCLUSTER
     14#include "ccluster/ccluster.h"
     15#endif
    1216
    1317#include "kernel/mod2.h"
     
    37573761    else
    37583762    #endif
     3763/* ccluster --------------------------------------------------------------*/
     3764#ifdef HAVE_CCLUSTER
     3765    if(strcmp(sys_cmd,"ccluster")==0)
     3766    {
     3767      if (rField_is_Q(currRing))
     3768      {
     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()); h=h->next;
     3778          convSingNFlintN(center_im,(number)h->Data()); h=h->next;
     3779          convSingNFlintN(boxsize,(number)h->Data()); h=h->next;
     3780          convSingNFlintN(eps,(number)h->Data()); 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(2);
     3799            ll->m[0].rtyp=NUMBER_CMD;
     3800            ll->m[1].rtyp=NUMBER_CMD;
     3801            ll->m[0].data=convFlintNSingN(re_part[i]);
     3802            ll->m[1].data=convFlintNSingN(im_part[i]);
     3803          }
     3804          // clear re, im
     3805          for(int i=n-1;i>=0;i--) { fmpq_clear(re_part[i]); fmpq_clear(im_part[i]); }
     3806          omFree(re_part);
     3807          omFree(im_part);
     3808          // result
     3809          res->rtyp=LIST_CMD;
     3810          res->data=l;
     3811          return FALSE;
     3812        }
     3813      }
     3814      return TRUE;
     3815    }
     3816    else
     3817#endif
    37593818/*==================== Error =================*/
    37603819      Werror( "(extended) system(\"%s\",...) %s", sys_cmd, feNotImplemented );
Note: See TracChangeset for help on using the changeset viewer.