Exemplo n.º 1
0
void ada_write_sols ( PolySolSet& sols )
{
    int fail = solcon_clear_quaddobl_solutions();
    if(fail != 0)
        std::cout << "failed to clear the solutions" << std::endl;
    int dim = sols.dim;
    int nbsols = sols.n_sol;

    for(int sol_idx=0; sol_idx<nbsols; sol_idx++)
    {
        CT* sol = sols.get_sol(sol_idx);
        double csol[8*dim+20];
        csol[0] = 0.0;
        csol[1] = 0.0;
        csol[2] = 0.0;
        csol[3] = 0.0;
        csol[4] = 0.0;
        csol[5] = 0.0;
        csol[6] = 0.0;
        csol[7] = 0.0;
        int idx = 8;
        for(int k=0; k<dim; k++)
        {
            csol[idx++] = sol[k].real.x[0];
            csol[idx++] = sol[k].real.x[1];
            csol[idx++] = sol[k].real.x[2];
            csol[idx++] = sol[k].real.x[3];
            csol[idx++] = sol[k].imag.x[0];
            csol[idx++] = sol[k].imag.x[1];
            csol[idx++] = sol[k].imag.x[2];
            csol[idx++] = sol[k].imag.x[3];
        }
        csol[8*dim+8] = 0.0;
        csol[8*dim+9] = 0.0;
        csol[8*dim+10] = 0.0;
        csol[8*dim+11] = 0.0;
        csol[8*dim+12] = 0.0;
        csol[8*dim+13] = 0.0;
        csol[8*dim+14] = 0.0;
        csol[8*dim+15] = 0.0;
        csol[8*dim+16] = 0.0;
        csol[8*dim+17] = 0.0;
        csol[8*dim+18] = 0.0;
        csol[8*dim+19] = 0.0;
        fail = solcon_append_quaddobl_solution(dim,1,csol);
        if(fail != 0)
            std::cout << "failed to append the solution" << std::endl;
    }
}
Exemplo n.º 2
0
int quaddobl_monodromy_breakup ( int nbloops, int n, int k, int d )
{
   int fail,i,j,done;
   double err,dis;

   fail = initialize_quaddobl_sampler(k);
   fail = initialize_quaddobl_monodromy(nbloops,d,k);
   if(verbose>0)
      printf("\nInitialized sampler and monodromy permutations ...\n");

   fail = store_quaddobl_solutions();  /* store in monodromy permutations */

   printf("... initializing the grid in quad double precision ...\n");
   for(i=1; i<=2; i++)        /* initialize grid for trace validation */
   {
      fail = set_quaddobl_trace_slice(i);   /* fix constant of slice */
      fail = store_quaddobl_gammas(n);  /* generate random gamma constants */
      fail = quaddobl_track_paths();
      fail = store_quaddobl_solutions();   /* store solutions in the grid */
      fail = restore_quaddobl_solutions(); /* use original sols at start */
      fail = swap_quaddobl_slices();       /* go back to original slices */
   }
   fail = quaddobl_trace_grid_diagnostics(&err,&dis);
   printf("Trace grid diagnostics : \n");
   printf("  largest error of the samples : %.3e\n", err);
   printf("  smallest distance between samples : %.3e\n", dis);
   done = 0;
   for(i=1; (i<=nbloops) && (done==0); i++)  /* perform monodromy loops */
   {
      printf("... starting loop #\%d in quad double precision ...\n",i);
      fail = new_quaddobl_slices(k,n);
      fail = store_quaddobl_gammas(n);
      fail = quaddobl_track_paths();     /* swapping slices happens here */
      fail = solcon_clear_quaddobl_solutions();
      fail = store_quaddobl_gammas(n);
      fail = quaddobl_track_paths();
      fail = store_quaddobl_solutions();
      {
         int permutation[d];

         fail = permutation_after_quaddobl_loop(d,permutation);
         printf("the permutation at step %d:",i);
         for(j=0; j<d; j++) printf(" %d",permutation[j]);
         printf("\n");
      }
      fail = quaddobl_monodromy_permutation(d,&done);
      {
         int nf,deg,jp,w[d];
         double trace_difference;

         fail = number_of_quaddobl_factors(&nf);
         printf("number of irreducible factors : %d\n",nf);
         for(j=1; j<=nf; j++)
         {
            fail = witness_points_of_quaddobl_factor(j,&deg,w);
            printf(" %d :",j);
            for(jp=0; jp<deg; jp++) printf(" %d",w[jp]);
            fail = quaddobl_trace_sum_difference(deg,w,&trace_difference);
            printf(" : %.3e\n",trace_difference);
         }
      }
      fail = restore_quaddobl_solutions();
   }
   if(done==1)
      printf("Found factorization using %d loops.\n", i-1);
   else
      printf("Failed to factor using %d loops.\n", i-1);

   return fail;
}