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; }
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; }
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; } }
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, °1,°2,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,°); 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); } }