36 #ifdef PRINT_MATLAB_DEBUG
100 Vec dummy_seq_vec_bis;
102 VecZeroEntries(dummy_seq_vec);
103 VecDuplicate(dummy_seq_vec,&dummy_seq_vec_bis);
107 PetscScalar *dummy_seq_array;
108 VecGetArray(dummy_seq_vec,&dummy_seq_array);
110 VecRestoreArray(dummy_seq_vec,&dummy_seq_array);
126 VecCopy(vec_in,vec_out);
128 VecGetArray(dummy_seq_vec_bis,&dummy_seq_array);
130 VecRestoreArray(dummy_seq_vec_bis,&dummy_seq_array);
133 VecDestroy(&dummy_seq_vec);
134 VecDestroy(&dummy_seq_vec_bis);
141 Vec vec_C_micro_t_p_kkk_PETSc;
142 VecCreate(
m_comm.get(),&vec_C_micro_t_p_kkk_PETSc);
144 VecSetFromOptions(vec_C_micro_t_p_kkk_PETSc);
146 Vec vec_C_BIG_t_p_kkk_PETSc;
147 VecCreate(
m_comm.get(),&vec_C_BIG_t_p_kkk_PETSc);
149 VecSetFromOptions(vec_C_BIG_t_p_kkk_PETSc);
151 MatMultTranspose(
m_C_R_micro,vec_in,vec_C_micro_t_p_kkk_PETSc);
152 MatMultTranspose(
m_C_R_BIG,vec_in,vec_C_BIG_t_p_kkk_PETSc);
158 #ifdef PRINT_MATLAB_DEBUG
163 VecDestroy(&vec_C_micro_t_p_kkk_PETSc);
164 VecDestroy(&vec_C_BIG_t_p_kkk_PETSc);
289 Mat * coupling_matrix;
311 std::string input_filename = input_filename_base +
"_0_n_" + std::to_string(
m_null_nb_vecs) +
".petscvec";
326 input_filename = input_filename_base +
"_" + std::to_string(iii) +
"_n_" + std::to_string(m_null_nb_vecs) +
".petscvec";
330 std::string output_filename =
m_scratch_folder_path +
"/rb_coupl_vector_" + std::to_string(iii) +
"_n_" + std::to_string(m_null_nb_vecs) +
".petscvec";
338 std::vector<PetscScalar> dummy_vec_val(m_null_nb_vecs,0);
339 std::vector<PetscInt> dummy_vec_row(m_null_nb_vecs,0);
343 dummy_vec_row[iii] = iii;
346 MatCreateSeqDense(PETSC_COMM_SELF,m_null_nb_vecs,m_null_nb_vecs,NULL,&
m_RITRI_mat);
351 MatSetValues(
m_RITRI_mat,m_null_nb_vecs,dummy_vec_row.data(),1,&iii,dummy_vec_val.data(),INSERT_VALUES);
Vec m_current_residual
Current residual vector, r(kkk+1) (r(0) for the initialization)
bool m_bC_RR_MatrixSet
Mediator - mediator coupling matrix has been set?
PetscInt m_null_nb_vecs
Number of null space vectors.
PetscInt m_null_vecs_N_local
void set_null_space(const std::string &input_filename_base, int nb_of_vecs)
Set and print the null space vectors and matrices.
bool m_bSet_u_0
Have the u_0 vectors been set?
bool m_bNullVecsDimensionsSet
Have the null space vectors' dimensions been set?
bool m_bSet_previous_residual
Have the previous r(kkk) vector been set?
PetscInt m_C_R_BIG_N_local
Vec m_previous_phi
Previous Lagrange multipliers / solution, phi(kkk)
Mat m_C_RR
Mediator - mediator system coupling matrix.
bool m_binvRITRIMatSet
Have the inv(RI^T * RI) matrix been set?
void export_ext_solver_rhs(Vec vec_in)
Calculate and export the external solver RHS's.
KSP m_coupling_precond_solver
Preconditioner system solver.
Mat m_C_R_BIG
Mediator - macro system coupling matrix.
void write_PETSC_vector(libMesh::PetscVector< libMesh::Number > &input_vec, const std::string &filename, int dim=1)
Vec m_ext_solver_sol_micro
Micro model external solver solution.
Vec m_u_0_BIG
Solution of the decoupled macro model.
std::string m_scratch_folder_path
Scratch folder path.
Vec m_coupled_sol_micro
Coupled system solution for the micro model.
bool m_bC_R_BIG_MatrixSet
Mediator - macro coupling matrix has been set?
Vec * m_previous_p_ptr
Pointer to the previous p vectors, p(0 ... kkk)
Mat m_inv_RITRI_mat
Matrix , used in some projectors.
bool m_bSet_current_RB_correction
Have the RB modes correction RB_corr(kkk+1) vector been set?
void read_jacobi_precond_vector()
Read the Jacobi coupling matrix preconditioner vector.
Vec m_u_0_micro
Solution of the decoupled micro model.
void set_coupling_matrix_RR()
Read the mediator - mediator system coupling matrix.
Vec m_current_rb_correction
Current rigid body modes correction, RB_corr(kkk+1) (RB_corr(0) for the initialization) ...
void clear_PETSc()
PETSc Vec and Mat deallocation, called by the destructor.
bool m_bScratchFolderSet
Have the scratch folder been set?
Mat m_C_R_micro
Mediator - micro system coupling matrix.
bool m_bSet_previous_p_ptr
Have the previous p vectors, p(0 ... kkk), been set?
bool m_bCreatedPrecondSolver
Have the preconditioner system solver been set?
Vec * m_previous_q_ptr
Pointer to the previous q vectors, q(0 ... kkk)
void PETSC_MatMultScale_Bcast(Mat mat_seq, Vec vec_seq_in, Vec vec_seq_out, double a_const)
PetscInt m_C_R_micro_N_local
bool m_bSet_current_residual
Have the current r(kkk+1) vector been set?
void PETSC_invert_dense_matrix(Mat &matrix_in, Mat &matrix_out)
void set_jacobi_precond_vector()
Set up the Jacobi coupling matrix preconditioner vector.
void apply_inverse_coupling_precond(Vec vec_in, Vec vec_out)
Apply the full inversed coupling matrix preconditioner.
Vec m_coupled_sol_BIG
Coupled system solution for the macro model.
RBModesSystem m_RB_modes_system
Which model is associated to the RB modes? Default: RBModesSystem::MICRO.
bool m_bSet_previous_q_ptr
Have the previous q vectors, q(0 ... kkk), been set?
Vec m_coupling_jacobi_precond_vec
Preconditioner Jacobi vector.
libMesh::Parallel::Communicator & m_comm
Communicator.
Vec m_ext_solver_sol_BIG
Macro model external solver solution.
void using_rb_modes(bool bUseRigidBodyModes)
Set up the.
bool m_bCreatedPrecondJacobiVec
Have the preconditioner system solver been set?
bool m_bSet_ext_solver_sol
Have the external solvers solutions been set vectors been set?
bool m_bC_R_micro_MatrixSet
Mediator - micro coupling matrix has been set?
Vec m_current_phi
Current Lagrange multipliers / solution, phi(kkk+1) (phi(0) for the initialization) ...
BaseCGPrecondType m_precond_type
Preconditioner type. Default: BaseCGPrecondType::NO_PRECONDITIONER.
bool m_bSet_previous_phi
Have the previous Lagrange multipliers / solution phi(kkk) been set?
void apply_RB_projection(Vec vec_in, Vec vec_out)
Apply the rigid body modes projection operation.
bool m_bCoupled_sols_set
Have the coupled solutions been set yet?
Vec m_null_coupled_vecs[maxVecLimit]
Null space vectors times the coupling matrix.
Vec m_previous_residual
Previous residual vector, r(kkk)
void apply_jacobi_coupling_precond(Vec vec_in, Vec vec_out)
Apply the Jacobi coupling matrix preconditioner vector.
int m_kkk
Current iteration index.
void read_PETSC_vector(libMesh::PetscVector< libMesh::Number > &input_vec, const std::string &filename)
bool m_bSet_current_phi
Have the current Lagrange multipliers / solution phi(kkk+1) been set?
void write_PETSC_vector_MATLAB(Vec input_vec, const std::string &filename, MPI_Comm comm=PETSC_COMM_WORLD)
void apply_precond(Vec vec_in, Vec vec_out)
Common interface to the preconditionners.
Vec m_null_vecs[maxVecLimit]
Null space vectors.
void set_preconditioner(BaseCGPrecondType CG_precond_type, bool bInitialSet=true)
void set_inverse_precond_solver()
Set up the full inversed coupling matrix preconditioner.
bool m_bUsingNullVecs
Do we need to use the null space vectors?
void write_PETSC_matrix(Mat input_mat, const std::string &filename, int rank, MPI_Comm comm=PETSC_COMM_WORLD, int dim=1)
bool m_bNullVecsSet
Have the null space vectors been set?