void WitnessSet::only_first_vars(int num_vars) { vec_mp tempvec; init_vec_mp2(tempvec, num_vars, 1024); tempvec->size = num_vars; for (unsigned int ii=0; ii<num_points(); ii++) { vec_mp & curr_point = point(ii); for (int jj=0; jj<num_vars; jj++) { set_mp(&tempvec->coord[jj], &curr_point->coord[jj]); } change_size_vec_mp(curr_point, num_vars); curr_point->size = num_vars; vec_cp_mp(curr_point, tempvec); } this->num_vars_ = num_vars; int patch_size_counter = 0, trim_from_here = 0; for (unsigned int ii=0; ii<num_patches(); ii++) { patch_size_counter += patch(ii)->size; if (patch_size_counter == num_vars) { trim_from_here = ii+1; } } if (trim_from_here==0) { std::cerr << "problem: the sum of the patch sizes never equalled the number of variables to trim to...\nhence, the trimming operation could not complete." << std::endl; this->print_to_screen(); deliberate_segfault(); } for (unsigned int ii=trim_from_here; ii<num_patches(); ii++) { clear_vec_mp(patch(ii)); } patch_mp_ = (vec_mp *) br_realloc(patch_mp_, trim_from_here* sizeof(vec_mp)); num_patches_ = trim_from_here; for (unsigned int ii=0; ii<num_linears(); ii++) { linear(ii)->size = num_vars; } clear_vec_mp(tempvec); return; }
int PatchHolder::add_patch(vec_mp new_patch) { if (num_patches_!=0 && patch_mp_==NULL) { printf("trying to add patch to witness set with non-zero num_patches and NULL container!\n"); deliberate_segfault(); } if (num_patches_==0 && patch_mp_!=NULL) { printf("trying to add point to witness set with num_points==0 and non-NULL container!\n"); deliberate_segfault(); } if (num_patches_==0) { patch_mp_ = (vec_mp *)br_malloc(sizeof(vec_mp)); } else{ patch_mp_ = (vec_mp *)br_realloc(patch_mp_, (num_patches_+1) * sizeof(vec_mp)); } init_vec_mp2(patch_mp_[num_patches_], new_patch->size,new_patch->curr_prec); patch_mp_[num_patches_]->size = new_patch->size; vec_cp_mp(patch_mp_[num_patches_], new_patch); this->num_patches_++; int burnsome = 0; for (unsigned int ii=0; ii<this->num_patches_; ii++) { burnsome += this->patch_mp_[ii]->size; } return num_patches_-1; }
void br_exit(int errorCode) /***************************************************************\ * USAGE: * * ARGUMENTS: * * RETURN VALUES: * * NOTES: exits Bertini_real - either standard or using MPI * \***************************************************************/ { std::cout << "bertini_real quitting\a" << std::endl; #ifdef debug_compile deliberate_segfault(); #endif MPI_Abort(MPI_COMM_WORLD, errorCode); }
void create_sliced_system(boost::filesystem::path input_file, boost::filesystem::path output_file, vec_mp * linears, int num_to_add, const WitnessSet & W) { #ifdef functionentry_output std::cout << "create_sliced_system" << std::endl; #endif if (W.num_var_names()==0) { std::cout << "trying to create a sliced system, but witness set does not have the variable names." << std::endl; deliberate_segfault(); } int *declarations = NULL; partition_parse(&declarations, input_file, "func_input", "config", 0); // the 0 means not self conjugate. free(declarations); FILE *OUT = safe_fopen_write(output_file); FILE *IN = safe_fopen_read("func_input"); fprintf(OUT,"INPUT\n\n"); copyfile(IN,OUT); fclose(IN); std::vector< int > indicators; for (int ii=0; ii<num_to_add; ii++) { indicators.push_back(rand()); } for (int ii=0; ii<num_to_add; ii++) { std::stringstream linname; linname << "supp_lin_" << indicators[ii]; write_vector_as_constants(linears[ii], linname.str(), OUT); linname.clear(); linname.str(""); } for (int ii=0; ii<num_to_add; ii++) { fprintf(OUT,"function supp_lin_%d;\n",indicators[ii]); } for (int ii=0; ii<num_to_add; ii++) { fprintf(OUT,"supp_lin_%d = supp_lin_%d_1",indicators[ii],indicators[ii]); for (int jj=1; jj<W.num_variables(); jj++) { fprintf(OUT," + %s*supp_lin_%d_%d",W.name(jj).c_str(), indicators[ii],jj+1); } fprintf(OUT, ";\n\n"); } fprintf(OUT,"END;\n\n\n\n"); for (unsigned int ii=0; ii<W.num_patches(); ii++) { std::stringstream linname; linname << "patch_" << ii; write_vector_as_constants(W.patch(ii), linname.str(), OUT); linname.clear(); linname.str(""); } fclose(OUT); }