void dobldobl_monomials_broadcast ( int myid, int n ) { double cff[4]; int i,j,exp[n],mm,fail; if(v>0) printf("Node %d has entered monomials_broadcast.\n", myid); for(i=1; i<=n; i++) { if(myid == 0) { fail = syscon_number_of_dobldobl_terms(i,&mm); /* get #monomials */ if(v>1) printf("Polynomial %d has %d monomials.\n",i,mm); } MPI_Bcast(&mm,1,MPI_INT,0,MPI_COMM_WORLD); for(j=1; j<=mm; j++) /* broadcast j-th term of i-th polynomial */ { if(myid == 0) fail = syscon_retrieve_dobldobl_term(i,j,n,exp,cff); MPI_Bcast(cff,4,MPI_DOUBLE,0,MPI_COMM_WORLD); MPI_Bcast(exp,n,MPI_INT,0,MPI_COMM_WORLD); if(myid != 0) fail = syscon_add_dobldobl_term(i,n,exp,cff); } } if(v>0) printf("Node %d is about to leave monomials_broadcast.\n", myid); }
void test_dobldobl_container ( void ) { int fail,n,i,t,deg; fail = syscon_read_dobldobl_system(); fail = syscon_write_dobldobl_system(); fail = syscon_number_of_dobldobl_polynomials(&n); printf("number of polynomials : %d\n",n); printf("number of terms in each polynomial :"); for(i=1; i<=n; i++) { fail = syscon_number_of_dobldobl_terms(i,&t); printf(" %d",t); } printf("\ndegree of each polynomial :"); for(i=1; i<=n; i++) { fail = syscon_degree_of_dobldobl_polynomial(i,°); printf(" %d",deg); } printf("\nthe polynomials as strings :\n"); for(i=1; i<=n; i++) { char buffer[2000]; int nc; fail = syscon_load_dobldobl_polynomial(i,&nc,buffer); printf("polynomial %d : %s\n",i,buffer); } printf("\n"); test_symbol_table(); }
void ada_read_sys ( int verbose, PolySys& sys ) { int fail,nbsym; fail = syscon_number_of_symbols(&nbsym); if(verbose > 0) { std::cout << "the system is .." << std::endl; fail = syscon_write_dobldobl_system(); std::cout << "the number of symbols : " << nbsym << std::endl; } int s_dim = 80*nbsym; char *s = (char*) calloc(s_dim,sizeof(char)); fail = syscon_string_of_symbols(&s_dim, s); string* x_names; int dim = 0; var_name(s, s_dim, x_names, dim); int i = 1; if(verbose > 0) std::cout << "dim = " << dim << std::endl; double c[4]; /* two consecutive double doubles are real and imag parts */ int d[dim]; int n_eq = 0; fail = syscon_number_of_dobldobl_polynomials(&n_eq); sys.n_eq = n_eq; sys.dim = dim; sys.eq_space = new PolyEq[n_eq]; sys.pos_var = x_names; PolyEq* tmp_eq = sys.eq_space; for(int i=1; i<n_eq+1; i++) { int nt; fail = syscon_number_of_dobldobl_terms(i,&nt); if(verbose > 0) std::cout << " #terms in polynomial " << i << " : " << nt << std::endl; tmp_eq->n_mon = nt; tmp_eq->dim = dim; for(int j=1; j<=nt; j++) { fail = syscon_retrieve_dobldobl_term(i,j,dim,d,c); if(verbose > 0) { std::cout << c[0] << " " << c[2] << std::endl; for (int k=0; k<dim; k++) std::cout << " " << d[k]; std::cout << std::endl; } bool constant_term = true; for(int k=0; k<dim; k++) if(d[k]!=0) constant_term = false; if(constant_term==true) { tmp_eq->n_mon--; tmp_eq->constant += CT(c[0],c[2]); } else { T1 cffs[2]; T1 realpcff; T1 imagpcff; realpcff.x[0] = c[0]; realpcff.x[1] = c[1]; imagpcff.x[0] = c[2]; imagpcff.x[1] = c[3]; cffs[0] = realpcff; cffs[1] = imagpcff; PolyMon* a = new PolyMon(dim,d,cffs); tmp_eq->mon.push_back(a); } } if(verbose > 0) tmp_eq->print(x_names); sys.eq.push_back(tmp_eq); tmp_eq++; } if(verbose > 0) { sys.print(); std::cout << "End" << std::endl; } }