void dobldobl_dimensions_broadcast ( int myid, int *nbequ, int *nbvar ) { int fail,m; if(v>0) printf("Node %d has entered dimensions_broadcast.\n", myid); MPI_Bcast(nbequ,1,MPI_INT,0,MPI_COMM_WORLD); MPI_Bcast(nbvar,1,MPI_INT,0,MPI_COMM_WORLD); if(myid != 0) { if(v>0) { printf("Node %d has the number of equations as %d.\n", myid, *nbequ); printf("Node %d has the number of variables as %d.\n", myid, *nbvar); } /* initialize container */ fail = syscon_initialize_number_of_dobldobl_polynomials(*nbequ); if(v>0) { /* get dimension as test */ fail = syscon_number_of_dobldobl_polynomials(&m); printf(" and initialized container with dimension %d.\n", m); } } if(v>0) printf("Node %d is leaving dimensions_broadcast.\n", myid); }
int dobldobl_interactive_input_output ( void ) { int n,fail,k,nc,i,rc,len,nbtasks; char ch,p[800]; printf("\nGive the number of polynomials in the system : "); scanf("%d",&n); fail = syscon_initialize_number_of_dobldobl_polynomials(n); printf("\nReading %d polynomials, ",n); printf("terminate each with ; (semicolon)...\n"); for(k=1; k<=n; k++) { printf("-> polynomial %d : ",k); ch = getchar(); /* skip previous newline symbol */ read_poly(&nc,p); /* printf(" p[%d] = ",k); for(i=0; i<nc; i++) printf("%c",p[i]); printf("\n"); */ fail = syscon_store_dobldobl_polynomial(nc,n,k,p); } printf("The system in the container : \n"); syscon_write_dobldobl_system(); printf("\nGive the number of tasks : "); scanf("%d",&nbtasks); fail = solve_dobldobl_system(&rc,nbtasks); printf("\nThe root count : %d\n",rc); /* printf("\nThe solutions :\n"); fail = solcon_write_dobldobl_solutions(); */ printf("interactive selection of solutions... \n"); do { printf("\nGive an index to a solution (-1 to exit) : "); scanf("%d",&k); if(k < 0) break; fail = solcon_length_dobldobl_solution_string(k,&len); { char s[len]; fail = solcon_write_dobldobl_solution_string(k,len,s); printf("\nSolution %d : \n%s",k,s); } } while (k >= 0); return fail; }
int dobldobl_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_dobldobl_target_system_without_solutions(); fail = copy_dobldobl_target_system_to_container(); fail = syscon_number_of_dobldobl_polynomials(&dim); fail = write_dobldobl_target_system(); } dobldobl_dimensions_broadcast(myid,&dim,&dim); if(verbose > 0) printf("Process %d has dimension %d.\n",myid,dim); dobldobl_monomials_broadcast(myid,dim); if(myid != 0) fail = copy_dobldobl_container_to_target_system(); if(verbose > 0) if(myid == 1) fail = write_dobldobl_target_system(); if(myid == 0) { fail = read_dobldobl_start_system(); fail = copy_dobldobl_start_system_to_container(); fail = write_dobldobl_start_system(); // writes to file fail = write_dobldobl_start_solutions(); // writes solutions to file fail = copy_dobldobl_start_solutions_to_container(); fail = solcon_number_of_dobldobl_solutions(&nbsols); if(verbose>0) printf("Read %d start solutions.\n",nbsols); } else fail = syscon_initialize_number_of_dobldobl_polynomials(dim); dobldobl_monomials_broadcast(myid,dim); // broadcast start system if(myid != 0) fail = copy_dobldobl_container_to_start_system(); if(verbose > 0) if(myid == 1) fail = write_dobldobl_start_system(); parameters_broadcast(myid,nbrp,verbose); MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD); dobldobl_solutions_distribute(myid,nbsols,dim,nbrp,&mysolnum,verbose); fail = solcon_number_of_dobldobl_solutions(&len); if(verbose > 0) printf("Node %d has %d solutions.\n",myid,len); if(myid > 0) { fail = copy_dobldobl_container_to_start_solutions(); fail = dobldobl_track_paths(myid,nbrp,nbc,outfile,verbose); } MPI_Barrier(MPI_COMM_WORLD); dobldobl_solutions_collect(myid,nbsols,dim,nbrp,mysolnum); if(myid == 0) { fail = copy_dobldobl_container_to_target_solutions(); fail = write_dobldobl_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; }