void RBEvaluation::clear() { START_LOG("clear()", "RBEvaluation"); // Clear the basis functions for(unsigned int i=0; i<basis_functions.size(); i++) { if (basis_functions[i]) { basis_functions[i]->clear(); delete basis_functions[i]; basis_functions[i] = NULL; } } set_n_basis_functions(0); clear_riesz_representors(); // Clear the Greedy param list for(unsigned int i=0; i<greedy_param_list.size(); i++) greedy_param_list[i].clear(); greedy_param_list.clear(); STOP_LOG("clear()", "RBEvaluation"); }
void RBEvaluation::read_offline_data_from_files(const std::string& directory_name, bool read_error_bound_data, const bool read_binary_data) { START_LOG("read_offline_data_from_files()", "RBEvaluation"); // The reading mode: DECODE for binary, READ for ASCII XdrMODE mode = read_binary_data ? DECODE : READ; // The suffix to use for all the files that are written out const std::string suffix = read_binary_data ? ".xdr" : ".dat"; // The string stream we'll use to make the file names std::ostringstream file_name; // First, find out how many basis functions we had when Greedy terminated unsigned int n_bfs; { file_name << directory_name << "/n_bfs" << suffix; Xdr n_bfs_in(file_name.str(), mode); n_bfs_in >> n_bfs; n_bfs_in.close(); } resize_data_structures(n_bfs, read_error_bound_data); // Read in the parameter ranges file_name.str(""); file_name << directory_name << "/parameter_ranges" << suffix; std::string continuous_param_file_name = file_name.str(); // Read in the discrete parameter values file_name.str(""); file_name << directory_name << "/discrete_parameter_values" << suffix; std::string discrete_param_file_name = file_name.str(); read_parameter_data_from_files(continuous_param_file_name, discrete_param_file_name, read_binary_data); // Read in output data in multiple files for(unsigned int n=0; n<rb_theta_expansion->get_n_outputs(); n++) { for(unsigned int q_l=0; q_l<rb_theta_expansion->get_n_output_terms(n); q_l++) { file_name.str(""); file_name << directory_name << "/output_"; file_name << std::setw(3) << std::setprecision(0) << std::setfill('0') << std::right << n; file_name << "_"; file_name << std::setw(3) << std::setprecision(0) << std::setfill('0') << std::right << q_l; file_name << suffix; Xdr output_n_in(file_name.str(), mode); for(unsigned int j=0; j<n_bfs; j++) { Number value; output_n_in >> value; RB_output_vectors[n][q_l](j) = value; } output_n_in.close(); } } if(compute_RB_inner_product) { // Next read in the inner product matrix file_name.str(""); file_name << directory_name << "/RB_inner_product_matrix" << suffix; Xdr RB_inner_product_matrix_in(file_name.str(), mode); for(unsigned int i=0; i<n_bfs; i++) { for(unsigned int j=0; j<n_bfs; j++) { Number value; RB_inner_product_matrix_in >> value; RB_inner_product_matrix(i,j) = value; } } RB_inner_product_matrix_in.close(); } // Next read in the Fq vectors for(unsigned int q_f=0; q_f<rb_theta_expansion->get_n_F_terms(); q_f++) { file_name.str(""); file_name << directory_name << "/RB_F_"; file_name << std::setw(3) << std::setprecision(0) << std::setfill('0') << std::right << q_f; file_name << suffix; Xdr RB_Fq_f_in(file_name.str(), mode); for(unsigned int i=0; i<n_bfs; i++) { Number value; RB_Fq_f_in >> value; RB_Fq_vector[q_f](i) = value; } RB_Fq_f_in.close(); } // Next read in the Aq matrices for(unsigned int q_a=0; q_a<rb_theta_expansion->get_n_A_terms(); q_a++) { file_name.str(""); file_name << directory_name << "/RB_A_"; file_name << std::setw(3) << std::setprecision(0) << std::setfill('0') << std::right << q_a; file_name << suffix; Xdr RB_Aq_a_in(file_name.str(), mode); for(unsigned int i=0; i<n_bfs; i++) { for(unsigned int j=0; j<n_bfs; j++) { Number value; RB_Aq_a_in >> value; RB_Aq_vector[q_a](i,j) = value; } } RB_Aq_a_in.close(); } if(read_error_bound_data) { // Next read in Fq representor norm data file_name.str(""); file_name << directory_name << "/Fq_innerprods" << suffix; Xdr RB_Fq_innerprods_in(file_name.str(), mode); unsigned int Q_f_hat = rb_theta_expansion->get_n_F_terms()*(rb_theta_expansion->get_n_F_terms()+1)/2; for(unsigned int i=0; i<Q_f_hat; i++) { RB_Fq_innerprods_in >> Fq_representor_innerprods[i]; } RB_Fq_innerprods_in.close(); // Read in output data for(unsigned int n=0; n<rb_theta_expansion->get_n_outputs(); n++) { file_name.str(""); file_name << directory_name << "/output_"; file_name << std::setw(3) << std::setprecision(0) << std::setfill('0') << std::right << n; file_name << "_dual_innerprods" << suffix; Xdr output_dual_innerprods_in(file_name.str(), mode); unsigned int Q_l_hat = rb_theta_expansion->get_n_output_terms(n)*(rb_theta_expansion->get_n_output_terms(n)+1)/2; for(unsigned int q=0; q<Q_l_hat; q++) { output_dual_innerprods_in >> output_dual_innerprods[n][q]; } output_dual_innerprods_in.close(); } // Next read in Fq_Aq representor norm data file_name.str(""); file_name << directory_name << "/Fq_Aq_innerprods" << suffix; Xdr RB_Fq_Aq_innerprods_in(file_name.str(), mode); for(unsigned int q_f=0; q_f<rb_theta_expansion->get_n_F_terms(); q_f++) { for(unsigned int q_a=0; q_a<rb_theta_expansion->get_n_A_terms(); q_a++) { for(unsigned int i=0; i<n_bfs; i++) { RB_Fq_Aq_innerprods_in >> Fq_Aq_representor_innerprods[q_f][q_a][i]; } } } RB_Fq_Aq_innerprods_in.close(); // Next read in Aq_Aq representor norm data file_name.str(""); file_name << directory_name << "/Aq_Aq_innerprods" << suffix; Xdr RB_Aq_Aq_innerprods_in(file_name.str(), mode); unsigned int Q_a_hat = rb_theta_expansion->get_n_A_terms()*(rb_theta_expansion->get_n_A_terms()+1)/2; for(unsigned int i=0; i<Q_a_hat; i++) { for(unsigned int j=0; j<n_bfs; j++) { for(unsigned int l=0; l<n_bfs; l++) { RB_Aq_Aq_innerprods_in >> Aq_Aq_representor_innerprods[i][j][l]; } } } RB_Aq_Aq_innerprods_in.close(); } // Resize basis_functions even if we don't read them in so that // get_n_bfs() returns the correct value. Initialize the pointers // to NULL set_n_basis_functions(n_bfs); for(unsigned int i=0; i<basis_functions.size(); i++) { if(basis_functions[i]) { basis_functions[i]->clear(); delete basis_functions[i]; } basis_functions[i] = NULL; } STOP_LOG("read_offline_data_from_files()", "RBEvaluation"); }