const double porosity;
const double AOS_threshold;
- std::shared_ptr<TrilinosWrappers::PreconditionIC> Amg_preconditioner;
- std::shared_ptr<TrilinosWrappers::PreconditionIC> Mp_preconditioner;
+ std::shared_ptr<TrilinosWrappers::PreconditionIC> top_left_preconditioner;
+ std::shared_ptr<TrilinosWrappers::PreconditionIC>
+ bottom_right_preconditioner;
bool rebuild_saturation_matrix;
}
{
- Amg_preconditioner.reset();
- Mp_preconditioner.reset();
+ top_left_preconditioner.reset();
+ bottom_right_preconditioner.reset();
darcy_preconditioner_matrix.clear();
BlockDynamicSparsityPattern dsp(darcy_dofs_per_block,
{
assemble_darcy_preconditioner();
- Amg_preconditioner = std::make_shared<TrilinosWrappers::PreconditionIC>();
- Amg_preconditioner->initialize(darcy_preconditioner_matrix.block(0, 0));
+ top_left_preconditioner =
+ std::make_shared<TrilinosWrappers::PreconditionIC>();
+ top_left_preconditioner->initialize(
+ darcy_preconditioner_matrix.block(0, 0));
- Mp_preconditioner = std::make_shared<TrilinosWrappers::PreconditionIC>();
- Mp_preconditioner->initialize(darcy_preconditioner_matrix.block(1, 1));
+ bottom_right_preconditioner =
+ std::make_shared<TrilinosWrappers::PreconditionIC>();
+ bottom_right_preconditioner->initialize(
+ darcy_preconditioner_matrix.block(1, 1));
}
const LinearSolvers::InverseMatrix<TrilinosWrappers::SparseMatrix,
TrilinosWrappers::PreconditionIC>
mp_inverse(darcy_preconditioner_matrix.block(1, 1),
- *Mp_preconditioner);
+ *bottom_right_preconditioner);
const LinearSolvers::BlockSchurPreconditioner<
TrilinosWrappers::PreconditionIC,
TrilinosWrappers::PreconditionIC>
- preconditioner(darcy_matrix, mp_inverse, *Amg_preconditioner);
+ preconditioner(darcy_matrix, mp_inverse, *top_left_preconditioner);
SolverControl solver_control(darcy_matrix.m(),
1e-16 * darcy_rhs.l2_norm());