43struct InverseMassOperatorData
45 InverseMassOperatorData()
48 coefficient_is_variable(
false),
49 consider_inverse_coefficient(
false),
50 variable_coefficients(
nullptr)
57 static InverseMassType
58 get_optimal_inverse_mass_type(dealii::FiniteElement<dim>
const & fe)
60 if(fe.conforms(dealii::FiniteElementData<dim>::L2))
62 if(fe.reference_cell().is_hyper_cube())
64 return InverseMassType::MatrixfreeOperator;
68 return InverseMassType::ElementwiseKrylovSolver;
73 return InverseMassType::GlobalKrylovSolver;
78 unsigned int dof_index;
79 unsigned int quad_index;
84 bool coefficient_is_variable;
89 bool consider_inverse_coefficient;
95class InverseMassOperator
98 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
100 typedef InverseMassOperator<dim, n_components, Number> This;
102 typedef CellIntegrator<dim, n_components, Number> Integrator;
105 typedef dealii::MatrixFreeOperators::CellwiseInverseMassMatrix<dim, -1, n_components, Number>
106 InverseMassAsMatrixFreeOperator;
108 typedef std::pair<unsigned int, unsigned int> Range;
111 InverseMassOperator();
114 get_n_iter_global_last()
const;
117 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free_in,
119 dealii::AffineConstraints<Number>
const * constraints =
nullptr);
130 apply(VectorType & dst, VectorType
const & src)
const;
134 apply_scale(VectorType & dst,
double const scaling_factor, VectorType
const & src)
const;
139 cell_loop_matrix_free_operator(dealii::MatrixFree<dim, Number>
const &,
141 VectorType
const & src,
142 Range
const & cell_range)
const;
144 dealii::MatrixFree<dim, Number>
const * matrix_free;
146 unsigned int dof_index, quad_index;
151 bool coefficient_is_variable;
152 bool consider_inverse_coefficient;
158 std::shared_ptr<PreconditionerBase<Number>> global_preconditioner;
159 std::shared_ptr<Krylov::SolverBase<VectorType>> global_solver;
162 mutable unsigned int n_iter_global_last = dealii::numbers::invalid_unsigned_int;
168 std::shared_ptr<BlockJacobiPreconditioner<MassOperator<dim, n_components, Number>>>
169 block_jacobi_preconditioner;