Dear Jean-Paul,
Thank you for your reply and the complete information you provide me.
Effectively, declaring the preconditioner (out-of-line) was one problem, but the inverse_operator function is still not matching.
What I just realized is that when I compute the operator as a multiplication of a linear operator, an inverse operator and a linear operator ( for instance, when I compute the Schur complement )
const auto op_S = op_BT * op_M_inv * op_B;
this operator becomes to the type 'dealii::TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload' ,
but when I compute the operator as a multiplication of other linear operators directly (for instance, when I compute the Schur preconditioner, following the procedure in step 20 )
const auto op_pre = linear_operator<LA::MPI::Vector>(prec_M);
const auto op_aS = op_BT * op_pre * op_B;
this operator becomes to the type 'dealii::internal::LinearOperatorImplementation::EmptyPayload&'.
So, If I use the inverse_operator function with the first operator (op_S), I can obtain the inverse without any problem,
(const auto op_S_inv = inverse_operator(op_S, solver_S, preconditioner_S );
But if I do it with the second case, it doesn't work because the functions are not matching.
(const auto op_S_inv = inverse_operator(opa_S, solver_S, preconditioner_S );
I am not sure what is happening because all the operators are declared as "LA::MPI::Vector".
If you have any suggestion, would be greatly appreciated.
Thank you so much,
Regards,
Felipe Giraldo