Ejemplo n.º 1
0
int input_argument_free ( void )
{
   int fail,n;
   char outfile[80],ch;

   printf("\nReading and writing a polynomial system ...\n");

   fail = read_standard_target_system();
   if(v==1) printf("-> read_target_system returns %d\n",fail);
   fail = copy_target_system_to_container();
   if(v==1) printf("-> copy_target_system_to_container returns %d\n",fail);
   printf("\nThe system read :\n");
   fail = print_system();
   if(v==1) printf("-> print_system returns %d\n",fail);

   printf("\nGive name of the output file : ");
   scanf("%s",outfile);
   n = (int) strlen(outfile);
   fail = define_output_file_with_string(n,outfile);
   if(v==1) printf("-> define_output_file_with_string returns %d\n",fail);
   fail = print_system();
   if(v==1) printf("-> print_system returns %d\n",fail);
   fail = write_string_to_defined_output_file(21,"\nTITLE : some system\n");
   if(v==1) printf("-> write_string_to_defined_output_file returns %d\n",fail);
   fail = close_output_file();
   if(v==1) printf("-> close_output_file returns %d\n",fail);

   return 0;
}
Ejemplo n.º 2
0
int main ( int argc, char *argv[] )
{
   const int verbose = 0; // set to 1 for more info
   int myid,numprocs,precision,fail,ns;
   char* filename;
 
   adainit();
   MPI_Init(&argc,&argv);
   MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
   MPI_Comm_rank(MPI_COMM_WORLD,&myid);

   if(verbose > 0)
   {
       printf("\nHello from process %d!\n", myid);
       MPI_Barrier(MPI_COMM_WORLD);
   }
   if(myid == 0) precision = prompt_for_precision();

   MPI_Bcast(&precision,1,MPI_INT,0,MPI_COMM_WORLD);
   if(verbose > 0)
       printf("\nProcess %d has %d as precision.\n", myid, precision);

   MPI_Barrier(MPI_COMM_WORLD);

   filename = (char*)calloc(80,sizeof(char));
   if(myid == 0)
   {
      char nl;

      printf("\nReading the name of the output file ...");
      printf("\nGive a string of characters : "); scanf("%s",filename);
      scanf("%c",&nl); /* skip newline symbol for next reading ...*/
      if(verbose > 0) printf("\nThe output file is \"%s\".\n", filename);
      ns = strlen(filename);
      fail = define_output_file_with_string(ns,filename);
   }
   MPI_Bcast(&ns,1,MPI_INT,0,MPI_COMM_WORLD);
   MPI_Bcast(filename,ns,MPI_CHAR,0,MPI_COMM_WORLD);

   if(verbose > 0)
       printf("\nNode %d has filename \"%s\".\n", myid, filename);

   MPI_Barrier(MPI_COMM_WORLD);

   switch(precision)
   {
      case 0: fail = standard_run(myid,numprocs,ns,filename,verbose); break;
      case 1: fail = dobldobl_run(myid,numprocs,ns,filename,verbose); break;
      case 2: fail = quaddobl_run(myid,numprocs,ns,filename,verbose); break;
      default: printf("Invalid choice of precision.\n");
   }

   MPI_Finalize();
   adafinal();

   return 0;
}
Ejemplo n.º 3
0
void cascade_one_level_down(int myid, int numbprocs, char *infile, 
                            char *outfile, WSET *ws, int num_group, 
                            int stages, int cnt_stage, int cnt_step, IDLE_ELEMENT **ie, 
                            LISTELEMENT **listpointer, int *TaskCount,
                            int NUM_GROUP, int *dimension, int *cnt_index, 
                            int update_flag)
{
   int n,/* dimension */
       nbsols, dim, deg, fail, i,
       n1, n2, cd;   
   double vcp[34];
  
   if(myid == 0)
   {
     printf("manager is in inside of cascade_one_level_down\n");        
     read_dimension_of_system((int)strlen(infile),infile,&n);
   }
   
   dimension_broadcast(myid,&n);
   
   if(myid == 0)
   {
     fail = syscon_clear_symbol_table();
     fail = read_named_start_without_solutions((int)strlen(infile),infile);  
     /*fail = copy_start_system_to_container();*/
     fail = copy_start_system_to_container();
     fail = syscon_sort_embed_symbols(&dim);
     printf("the top dimension is %d\n",dim);
     fail = copy_container_to_start_system();
      
     fail = solcon_scan_solution_banner();
     fail = solcon_read_solution_dimensions(&nbsols,dimension); 
   }
   else
     /* initialize system container */
     fail = syscon_initialize_number_of_standard_polynomials(n);
   
   monomials_broadcast(myid,n);            /* broadcast container */

   if(myid != 0)                           /* copy result of broadcast */
   {
      fail = copy_container_to_start_system();
      fail = syscon_clear_standard_system();  /* clear system container */
   }
   
   fail = create_cascade_homotopy(); 
   
   MPI_Barrier(MPI_COMM_WORLD);
   if(myid == 0)
   {
      if(v>3) printf("# paths to track : %d\n",nbsols);
      fail = define_output_file_with_string ((int)strlen(outfile), outfile);
      
      fail = write_standard_target_system();
      fail = write_standard_start_system(); 
      /*fail = tune_continuation_parameters(); printf("\n");*/
      fail = retrieve_continuation_parameters(vcp);     
      write_solution_banner_to_defined_output_file(nbsols,n);
      printf("\nSee the output file for results...\n\n");
   }
   
   MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD);
   MPI_Bcast(vcp,34,MPI_DOUBLE,0,MPI_COMM_WORLD);
    
   if(myid != 0) 
   {
      fail = set_continuation_parameters(vcp); 
   } 
   if(myid == 0)
   {
      n1=0; n2=0; cd=n;
      send_collect(ws, num_group, stages, cnt_stage, numbprocs, cnt_step, 
                   ie, listpointer, TaskCount, NUM_GROUP,
                   cnt_index, update_flag, 
                   n1, n2, cd);  
      if(update_flag) *cnt_index=*cnt_index+1;
      
      if(v>3)
      {                         
       printf("after send_collect \n");
       printf("%d JOBs in listpointer. \n", length(*listpointer));
       printf("%d idles\n", num_idle(*ie));
       printf("indexing........ with cnt_index=%d\n", *cnt_index);  
      }                             
   }
   else
   {  
      if(v>3) printf("node %d will run run_slave \n", myid); fflush;
      run_slave(myid); 
   }
      
   MPI_Barrier(MPI_COMM_WORLD);
                          
   if(myid == 0)
   { 
      if(v>3) printf("manager clear data \n"); 
      fail = clear_data(); 
      if(fail>0) printf("manager fail to clear data.\n"); fflush;
      fail = solcon_close_solution_input_file(0);
      if(fail>0) printf("fail to close solution input file.\n");
      fail = solcon_clear_standard_solutions( );  
      if(fail>0) printf("fail to clear solution container.\n");
      fail = close_output_file();
      if(fail>0) printf("fail to close output file. \n");
      fflush;	 
   } 
   else 
   {
      if(v>3) printf("node %d clear data \n", myid); 
      fail = clear_data(); 
      if(fail>0) printf("node %d fail to clear data.\n", myid); 
      fflush; 
   }
}
Ejemplo n.º 4
0
void start_a_diagonal_homotopy(int myid, int numbprocs, char *name_1, 
                               char *name_2, char *outfile, WSET *ws,
                               int num_group, int stages, int cnt_stage, 
                               int cnt_step,
                               IDLE_ELEMENT **ie, LISTELEMENT **listpointer,
                               int *TaskCount, int NUM_GROUP, int NUM_VARS, 
                               int *cnt_index, int *expected,
                               int *dim, int update_flag)                           
{
   int n, deg, n1, n2, dim1, dim2, deg1, deg2, cd, nbsols,
       fail, i, slv, count;
   double vcp[34];
  
   if(myid==0)
   {
     printf("manager is in inside of start_a_diagonal_homotopy\n"); 
                           
     fail = read_two_witness_sets_from_file(&n1,&n2,&dim1,&dim2,
                                            &deg1,&deg2,name_1,name_2,&cd);
     n = cd; /* dimension */
     nbsols = deg1*deg2;
     printf("#paths to track: %d\n", nbsols);
     
     fail = define_output_file_with_string ((int)strlen(outfile), outfile);
     
     fail = standard_diagonal_homotopy(dim1,dim2);
     if(fail == 0)
     {
      fail = write_standard_target_system();
      fail = write_standard_start_system();
     }
     /*fail = tune_continuation_parameters(); printf("\n");*/
     fail = retrieve_continuation_parameters(vcp);
     write_solution_banner_to_defined_output_file(nbsols,n);
     printf("\nSee the output file %s for results...\n\n", outfile);  
     *expected = dim1+dim2-NUM_VARS;  
     printf("expected dimension=%d\n", *expected);
   }       
   
   dimension_broadcast(myid,&n);
  
   MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD);
   MPI_Bcast(vcp,34,MPI_DOUBLE,0,MPI_COMM_WORLD);
   
   if(myid != 0) 
   {
      fail = set_continuation_parameters(vcp);
   }
   
   fail = homotopy_broadcast(myid,n);
   fail = create_homotopy_with_given_gamma
                (-0.824263733224601,0.566206056211557);
   
   if(myid == 0)
   {
     send_collect(ws, num_group, stages, cnt_stage, numbprocs, cnt_step, 
                  ie, listpointer, TaskCount, NUM_GROUP,
                  cnt_index, update_flag, 
                  n1, n2, cd);
   
     if(v>3)
     {   
     printf("after send_collect \n");
     printf("%d JOBs in listpointer. \n", length(*listpointer));
     printf("%d idles\n", num_idle(*ie));
     printf("indexing........ with cnt_index=%d\n", *cnt_index);    
     }                 
   }
   else
   {   
     if(v>3) printf("node %d will run run_slave \n", myid); fflush;
     run_slave(myid); 
   }
   
   MPI_Barrier(MPI_COMM_WORLD);
                            
   if(myid == 0)
   { 
     if(v>3) printf("manager clear data \n"); 
     fail = clear_data(); 
     if(fail>0) printf("manager fail to clear data.\n"); 
     fail = clear_homotopy(); 
     if(fail>0) printf("manager fail to clear homotopy.\n"); 
     fail = solcon_close_solution_input_file(1);
     if(fail>0) printf("fail to close witness set 1.\n");
     fail = solcon_close_solution_input_file(2); 
     if(fail>0) printf("fail to close witness set 2.\n");
     fail = solcon_clear_standard_solutions( );  
     if(fail>0) printf("fail to clear solution container.\n");
     fail = close_output_file();
     if(fail>0) printf("fail to close output file. \n"); 
     fail = read_witness_set_from_file((int)strlen(outfile),
                                       outfile,&n,dim,&deg); 
     fail = solcon_clear_standard_solutions();
     fail = syscon_clear_standard_system( );
     printf("end of start_a_diagonal_homotopy\n");
     fflush;
   }
   else 
   {
     if(v>3) printf("node %d clear data.\n", myid); 
     fail = clear_data();
     if(fail>0) printf("node %d fail to clear data.\n", myid);
     fail = clear_homotopy();
     if(fail>0) printf("node %d fail to clear homotopy.\n", myid);
   }
}