コード例 #1
0
ファイル: parallel_phcpack.c プロジェクト: sommars/PHCpack
int start_in_container_broadcast ( int myid, int n )
{
   int fail;

   if(myid == 0)
   {
      if(v>0) printf("Manager copies target system to container.\n");
      fail = copy_start_system_to_container();
   }
   else
   {
      if(v>0) printf("Node %d initializes container with n = %d.\n",myid,n);
      fail = syscon_initialize_number_of_standard_polynomials(n);
   }

   monomials_broadcast(myid,n);

   if(myid != 0)
   {
      if(v>0) printf("Node %d copies container to target.\n",myid);
      fail = copy_container_to_start_system();
      fail = syscon_clear_standard_system();
   }

   return fail;
}
コード例 #2
0
ファイル: parallel_phcpack.c プロジェクト: sommars/PHCpack
int start_system_broadcast_without_solutions ( int myid, int n, int *nbsols )
{
   int fail,dim;

   if(myid == 0)                           /* manager reads start system */
   {
      fail = read_start_system_without_solutions();
      fail = copy_start_system_to_container();
     /* fail = solcon_open_solution_input_file(); */
      fail = solcon_scan_solution_banner();
      fail = solcon_read_solution_dimensions(nbsols,&dim);
      printf("read the solution dimensions : %d\n",*nbsols);
   }
   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 */
   }

   return fail;
}
コード例 #3
0
ファイル: parallel_phcpack.c プロジェクト: sommars/PHCpack
int start_system_broadcast ( int myid, int n, int *nbsols )
{
   int fail;

   if(myid == 0)                           /* manager reads start system */
   {
      fail = read_standard_start_system();
      fail = copy_start_system_to_container();
      fail = copy_start_solutions_to_container();
   }
   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 */
   }
   else
      fail = solcon_number_of_standard_solutions(nbsols);

   return fail;
}
コード例 #4
0
ファイル: parallel_phcpack.c プロジェクト: sommars/PHCpack
int named_start_system_broadcast
    ( int myid, int n, int *nbsols, int kind, int nc, char name[nc] )
{
   int fail,dim;

   if(myid == 0)                           /* manager reads start system */
   {
      if(kind == 2)
         fail = read_named_linear_product_start_system(nc,name);
      else
         fail = read_named_start_without_solutions(nc,name);

      fail = copy_start_system_to_container();

      if(kind >= 3)                        /* cheater's homotopy */
      {
         fail = solcon_scan_solution_banner();
         fail = solcon_read_solution_dimensions(nbsols,&dim);
      }
      else
         fail = syscon_total_degree(nbsols);

      if(v>0) printf("the number of solution paths : %d\n",*nbsols);
   }
   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 */
   }

   return fail;
}
コード例 #5
0
ファイル: lib_read.c プロジェクト: Jakobularius/PHCpack
int named_input_files ( void )
{
   int n, fail, len;
   char inputfile[80];
   int mode = 7;
 /* reading target system :  0 for standard, 1 for double double,
                             2 for quad double, 3 for multiprecision
    reading start system :  4 for standard, 5 for double double,
                            6 for quad double, 7 for multiprecision */

   if(mode < 4) printf("\nReading the target system from file ...\n");
   if(mode > 3) printf("\nReading the start system from file ...\n");
   printf("Give the file name : "); scanf("%s", inputfile);
   n = (int) strlen(inputfile);

   if(mode == 0)
   {
      printf("\n... test reading in standard doubles ...\n");
      fail = read_standard_target_system_from_file(n, inputfile);
      fail = copy_container_to_target_system();
      printf("\nThe system read :\n"); fail = write_standard_target_system();
   }
   else if(mode == 1)
   {
      printf("\n... test reading in double doubles ...\n");
      fail = read_dobldobl_target_system_from_file(n, inputfile);
      fail = copy_dobldobl_container_to_target_system();
      printf("\nThe system read :\n"); fail = write_dobldobl_target_system();
   }
   else if(mode == 2)
   {
      printf("\n... test reading in quad doubles ...\n");
      fail = read_quaddobl_target_system_from_file(n, inputfile);
      fail = copy_quaddobl_container_to_target_system();
      printf("\nThe system read :\n"); fail = write_quaddobl_target_system();
   }
   else if(mode == 3)
   {
      printf("\n... test reading in multiprecision ...\n");
      fail = read_multprec_target_system_from_file(80, n, inputfile);
      fail = copy_multprec_container_to_target_system();
      printf("\nThe system read :\n"); fail = write_multprec_target_system();
   }
   else if(mode == 4)
   {
      printf("\n... test reading in standard doubles ...\n");
      fail = read_standard_start_system_from_file(n, inputfile);
      fail = copy_container_to_start_system();
      printf("\nThe system read :\n"); fail = write_standard_start_system();
      fail = solcon_number_of_solutions(&len);
      printf("\nNumber of start solutions in container : %d\n", len);
   }
   else if(mode == 5)
   {
      printf("\n... test reading in double doubles ...\n");
      fail = read_dobldobl_start_system_from_file(n, inputfile);
      fail = copy_dobldobl_container_to_start_system();
      printf("\nThe system read :\n"); fail = write_dobldobl_start_system();
      fail = solcon_number_of_dobldobl_solutions(&len);
      printf("\nNumber of start solutions in container : %d\n", len);
   }
   else if(mode == 6)
   {
      printf("\n... test reading in quad doubles ...\n");
      fail = read_quaddobl_start_system_from_file(n, inputfile);
      fail = copy_quaddobl_container_to_start_system();
      printf("\nThe system read :\n"); fail = write_quaddobl_start_system();
      fail = solcon_number_of_quaddobl_solutions(&len);
      printf("\nNumber of start solutions in container : %d\n", len);
   }
   else
   {
      printf("\n... test reading in multiprecision ...\n");
      fail = read_multprec_start_system_from_file(80, n, inputfile);
      fail = copy_multprec_container_to_start_system();
      printf("\nThe system read :\n"); fail = write_multprec_start_system();
      fail = solcon_number_of_multprec_solutions(&len);
      printf("\nNumber of start solutions in container : %d\n", len);
   }
   return 0;
}
コード例 #6
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; 
   }
}
コード例 #7
0
ファイル: mpi2padcon.c プロジェクト: janverschelde/PHCpack
int standard_run ( int myid, int nbrp, int nbc, char* outfile, int verbose )
{
   int fail,dim,nbsols,mysolnum,len,*nbpaths;
   double startwtime,endwtime,wtime,*time;

   startwtime = MPI_Wtime();
   if(myid == 0)
   {
      time = (double*)calloc(nbrp,sizeof(double));
      nbpaths = (int*)calloc(nbrp,sizeof(int));
      fail = read_target_system_without_solutions();
      fail = copy_target_system_to_container();
      fail = syscon_number_of_standard_polynomials(&dim);
      fail = write_standard_target_system(); // writes to file
   }
   standard_dimensions_broadcast(myid,&dim,&dim);

   if(verbose > 0) printf("Process %d has dimension %d.\n",myid,dim);

   monomials_broadcast(myid,dim); // broadcast target system

   if(myid != 0) fail = copy_container_to_target_system();

   if(verbose > 0)
      if(myid == 1) fail = write_standard_target_system();

   if(myid == 0)
   {
      fail = read_standard_start_system();
      fail = copy_start_system_to_container();
      fail = write_standard_start_system(); // writes to file
      fail = write_start_solutions(); // writes solutions to file
      fail = copy_start_solutions_to_container();
      fail = solcon_number_of_standard_solutions(&nbsols);
      if(verbose>0) printf("Read %d start solutions.\n",nbsols);
   }
   else
      fail = syscon_initialize_number_of_standard_polynomials(dim);

   monomials_broadcast(myid,dim); // broadcast start system

   if(myid != 0) fail = copy_container_to_start_system();

   if(verbose > 0)
      if(myid == 1) fail = write_standard_start_system();

   parameters_broadcast(myid,nbrp,verbose);

   if(myid == 0) verbose = prompt_for_verbose();
   MPI_Barrier(MPI_COMM_WORLD);

   MPI_Bcast(&verbose,1,MPI_INT,0,MPI_COMM_WORLD);

   MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD);
   solutions_distribute(myid,nbsols,dim,nbrp,&mysolnum);

   fail = solcon_number_of_standard_solutions(&len);
   if(verbose > 0) printf("Node %d has %d solutions.\n",myid,len);

   if(myid > 0)
   {
      fail = copy_container_to_start_solutions();
      fail = standard_track_paths(myid,nbrp,nbc,outfile,verbose);
   }
   MPI_Barrier(MPI_COMM_WORLD);
   solutions_collect(myid,nbsols,dim,nbrp,mysolnum);

   if(myid == 0)
   {
      fail = copy_container_to_target_solutions();
      fail = write_target_solutions();
   }
   endwtime = MPI_Wtime();
   wtime = endwtime-startwtime;
   MPI_Gather(&wtime,1,MPI_DOUBLE,time,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
   MPI_Gather(&mysolnum,1,MPI_INT,nbpaths,1,MPI_INT,0,MPI_COMM_WORLD);

   if(myid == 0)
   {
      nbpaths[0] = nbsols;
      write_time_and_paths_to_defined_output_file(nbrp,time,nbpaths);
      free(time); free(nbpaths);
   }
   return 0;
}