示例#1
0
int target_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_target_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_target_system();
      fail = syscon_clear_standard_system();
   }

   return fail;
}
示例#2
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;
}
示例#3
0
void slave_initialize(int id, int NUM_GROUP, char filename[50])
{
   int flag,*buffer,*newbuffer,count,i,eqn_1,dim_1,solution_1,eqn_2,
       cnt_eqns,eqnid,eqn_pack[NUM_GROUP],quit_flag=0,
       fail,k,n;
   char outfile[80];
   MPI_Status status;
   
   if(v>2) printf("Node %d knows the filename: %s\n",id, filename);fflush;
   fail = read_named_target_without_solutions ((int) strlen(filename),filename);
   fail = copy_target_system_to_container();
   
   cnt_eqns = 0;
   while(!quit_flag)
   {
     MPI_Iprobe(0,MPI_ANY_TAG,MPI_COMM_WORLD,&flag,&status); 
     while(flag) /* while flag -- pending recv */
     {  
     if(status.MPI_TAG==EQN_TAG)
     {
     MPI_Recv(&eqnid,1,MPI_INT,0,EQN_TAG,MPI_COMM_WORLD,&status);
     if(eqnid!=0) 
     {
      eqn_pack[cnt_eqns] = eqnid; 
      cnt_eqns++;
      if(v>2) printf("node %d solving eqn. %d; cnt_eqns=%d \n",
                      id, eqnid,  cnt_eqns); fflush;

     /* solving eqn. */
     sprintf(outfile, "%s_%d", filename, eqnid );
     n = (int) strlen(outfile);
     fail = hypersurface_witness_set(eqnid,n,outfile);
     /* end of solving eqn. */
     } 
     else 
     {
     if(v>2) printf("node %d recv end signal and send back: \n", id);
     /* send the index of the eqns for which the worker has computed back */
     eqn_pack[cnt_eqns] = 0; /* the last number is 0 */
     cnt_eqns++;
     if(v>2) 
     {
      printf("cnt_eqns=%d\n", cnt_eqns);
      for(i=0;i<cnt_eqns;i++)
        printf("%d\n", eqn_pack[i]);
     }
     MPI_Send(eqn_pack,cnt_eqns,MPI_INT,0,EQN_TAG,MPI_COMM_WORLD);
     /* clean the system and solution container */
     fail = solcon_clear_standard_solutions( );  
     if(fail>0) printf("fail to clear solution container.\n");
     fail = syscon_clear_standard_system( );
     if(fail>0) printf("fail to clear system container.\n");
     /* end of cleaning the system and solution container */
     quit_flag =1; 
     }
     fflush; 
     } /* status.MPI_TAG */
     MPI_Iprobe(0,MPI_ANY_TAG,MPI_COMM_WORLD,&flag,&status);       
     } /* flag */
   } /* quit_flag */
}
示例#4
0
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;
}