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::resize_data_structures(const unsigned int Nmax, bool resize_error_bound_data) { START_LOG("resize_data_structures()", "RBEvaluation"); if(Nmax < this->get_n_basis_functions()) libmesh_error_msg("Error: Cannot set Nmax to be less than the current number of basis functions."); // Resize/clear inner product matrix if(compute_RB_inner_product) RB_inner_product_matrix.resize(Nmax,Nmax); // Allocate dense matrices for RB solves RB_Aq_vector.resize(rb_theta_expansion->get_n_A_terms()); for(unsigned int q=0; q<rb_theta_expansion->get_n_A_terms(); q++) { // Initialize the memory for the RB matrices RB_Aq_vector[q].resize(Nmax,Nmax); } RB_Fq_vector.resize(rb_theta_expansion->get_n_F_terms()); for(unsigned int q=0; q<rb_theta_expansion->get_n_F_terms(); q++) { // Initialize the memory for the RB vectors RB_Fq_vector[q].resize(Nmax); } // Initialize the RB output vectors RB_output_vectors.resize(rb_theta_expansion->get_n_outputs()); for(unsigned int n=0; n<rb_theta_expansion->get_n_outputs(); n++) { RB_output_vectors[n].resize(rb_theta_expansion->get_n_output_terms(n)); for(unsigned int q_l=0; q_l<rb_theta_expansion->get_n_output_terms(n); q_l++) { RB_output_vectors[n][q_l].resize(Nmax); } } // Initialize vectors storing output data RB_outputs.resize(rb_theta_expansion->get_n_outputs(), 0.); if(resize_error_bound_data) { // Initialize vectors for the norms of the Fq representors unsigned int Q_f_hat = rb_theta_expansion->get_n_F_terms()*(rb_theta_expansion->get_n_F_terms()+1)/2; Fq_representor_innerprods.resize(Q_f_hat); // Initialize vectors for the norms of the representors Fq_Aq_representor_innerprods.resize(rb_theta_expansion->get_n_F_terms()); for(unsigned int i=0; i<rb_theta_expansion->get_n_F_terms(); i++) { Fq_Aq_representor_innerprods[i].resize(rb_theta_expansion->get_n_A_terms()); for(unsigned int j=0; j<rb_theta_expansion->get_n_A_terms(); j++) { Fq_Aq_representor_innerprods[i][j].resize(Nmax, 0.); } } unsigned int Q_a_hat = rb_theta_expansion->get_n_A_terms()*(rb_theta_expansion->get_n_A_terms()+1)/2; Aq_Aq_representor_innerprods.resize(Q_a_hat); for(unsigned int i=0; i<Q_a_hat; i++) { Aq_Aq_representor_innerprods[i].resize(Nmax); for(unsigned int j=0; j<Nmax; j++) { Aq_Aq_representor_innerprods[i][j].resize(Nmax, 0.); } } RB_output_error_bounds.resize(rb_theta_expansion->get_n_outputs(), 0.); // Resize the output dual norm vectors output_dual_innerprods.resize(rb_theta_expansion->get_n_outputs()); for(unsigned int n=0; n<rb_theta_expansion->get_n_outputs(); n++) { unsigned int Q_l_hat = rb_theta_expansion->get_n_output_terms(n)*(rb_theta_expansion->get_n_output_terms(n)+1)/2; output_dual_innerprods[n].resize(Q_l_hat); } // Clear and resize the vector of Aq_representors clear_riesz_representors(); Aq_representor.resize(rb_theta_expansion->get_n_A_terms()); for(unsigned int q_a=0; q_a<rb_theta_expansion->get_n_A_terms(); q_a++) { Aq_representor[q_a].resize(Nmax); } } STOP_LOG("resize_data_structures()", "RBEvaluation"); }