21 #ifndef _aspect_simulator_stokes_matrix_free_operators_h 22 #define _aspect_simulator_stokes_matrix_free_operators_h 28 #include <deal.II/matrix_free/matrix_free.h> 29 #include <deal.II/matrix_free/operators.h> 30 #include <deal.II/matrix_free/fe_evaluation.h> 32 #include <deal.II/multigrid/mg_constrained_dofs.h> 33 #include <deal.II/multigrid/multigrid.h> 34 #include <deal.II/multigrid/mg_transfer_matrix_free.h> 35 #include <deal.II/multigrid/mg_transfer_global_coarsening.templates.h> 36 #include <deal.II/multigrid/mg_tools.h> 37 #include <deal.II/multigrid/mg_coarse.h> 38 #include <deal.II/multigrid/mg_smoother.h> 39 #include <deal.II/multigrid/mg_matrix.h> 41 #include <deal.II/lac/vector.h> 42 #include <deal.II/lac/block_vector.h> 43 #include <deal.II/lac/la_parallel_vector.h> 44 #include <deal.II/lac/la_parallel_block_vector.h> 55 namespace ChangeVectorTypes
58 const ::LinearAlgebra::ReadWriteVector<double> &rwv,
59 const VectorOperation::values operation);
62 const ::LinearAlgebra::distributed::Vector<double> &in);
64 void copy(::LinearAlgebra::distributed::Vector<double> &out,
68 const ::LinearAlgebra::distributed::BlockVector<double> &in);
70 void copy(::LinearAlgebra::distributed::BlockVector<double> &out,
78 namespace MatrixFreeStokesOperators
91 template <
int dim,
typename number>
158 Table<2, SymmetricTensor<2, dim, VectorizedArray<number>>>
175 Table<2, VectorizedArray<number>>
182 Table<2, SymmetricTensor<2, dim, VectorizedArray<number>>>
202 memory_consumption()
const;
213 template <
int dim,
int degree_v,
typename number>
215 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::BlockVector<number>>
227 void clear ()
override;
239 void compute_diagonal ()
override;
247 void apply_add (::LinearAlgebra::distributed::BlockVector<number> &dst,
248 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
253 void local_apply (const ::MatrixFree<dim, number> &data,
254 ::LinearAlgebra::distributed::BlockVector<number> &dst,
255 const ::LinearAlgebra::distributed::BlockVector<number> &src,
256 const std::pair<unsigned int, unsigned int> &cell_range)
const;
261 void local_apply_face (const ::MatrixFree<dim, number> &data,
262 ::LinearAlgebra::distributed::BlockVector<number> &dst,
263 const ::LinearAlgebra::distributed::BlockVector<number> &src,
264 const std::pair<unsigned int, unsigned int> &face_range)
const;
269 void local_apply_boundary_face (const ::MatrixFree<dim, number> &data,
270 ::LinearAlgebra::distributed::BlockVector<number> &dst,
271 const ::LinearAlgebra::distributed::BlockVector<number> &src,
272 const std::pair<unsigned int, unsigned int> &face_range)
const;
285 template <
int dim,
int degree_v,
typename number>
287 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::BlockVector<number>>
299 void clear ()
override;
311 void compute_diagonal ()
override;
319 void apply_add (::LinearAlgebra::distributed::BlockVector<number> &dst,
320 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
325 void local_apply (const ::MatrixFree<dim, number> &data,
326 ::LinearAlgebra::distributed::BlockVector<number> &dst,
327 const ::LinearAlgebra::distributed::BlockVector<number> &src,
328 const std::pair<unsigned int, unsigned int> &cell_range)
const;
333 void local_apply_face (const ::MatrixFree<dim, number> &data,
334 ::LinearAlgebra::distributed::BlockVector<number> &dst,
335 const ::LinearAlgebra::distributed::BlockVector<number> &src,
336 const std::pair<unsigned int, unsigned int> &face_range)
const;
349 template <
int dim,
int degree_p,
typename number>
351 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::Vector<number>>
363 void clear ()
override;
369 void reinit(
const Mapping<dim> &mapping,
370 const DoFHandler<dim> &dof_handler_v,
371 const DoFHandler<dim> &dof_handler_p,
372 const AffineConstraints<number> &constraints_v,
373 const AffineConstraints<number> &constraints_p,
374 std::shared_ptr<MatrixFree<dim,double>> mf_storage,
375 const unsigned int level = numbers::invalid_unsigned_int);
387 void compute_diagonal ()
override;
395 void apply_add (::LinearAlgebra::distributed::Vector<number> &dst,
396 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
401 void local_apply (const ::MatrixFree<dim, number> &data,
402 ::LinearAlgebra::distributed::Vector<number> &dst,
403 const ::LinearAlgebra::distributed::Vector<number> &src,
404 const std::pair<unsigned int, unsigned int> &cell_range)
const;
409 void inner_cell_operation(FEEvaluation<dim,
425 template <
int dim,
int degree_v,
typename number>
427 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::Vector<number>>
439 void clear ()
override;
445 void reinit(
const Mapping<dim> &mapping,
446 const DoFHandler<dim> &dof_handler_v,
447 const DoFHandler<dim> &dof_handler_p,
448 const AffineConstraints<number> &constraints_v,
449 const AffineConstraints<number> &constraints_p,
450 std::shared_ptr<MatrixFree<dim,double>> mf_storage,
451 const unsigned int level = numbers::invalid_unsigned_int);
462 void compute_diagonal ()
override;
469 void set_diagonal (const ::LinearAlgebra::distributed::Vector<number> &diag);
476 void inner_cell_operation(FEEvaluation<dim,
480 number> &velocity)
const;
486 void cell_operation(FEEvaluation<dim,
490 number> &velocity)
const;
497 void apply_add (::LinearAlgebra::distributed::Vector<number> &dst,
498 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
503 void local_apply (const ::MatrixFree<dim, number> &data,
504 ::LinearAlgebra::distributed::Vector<number> &dst,
505 const ::LinearAlgebra::distributed::Vector<number> &src,
506 const std::pair<unsigned int, unsigned int> &cell_range)
const;
Table< 2, VectorizedArray< number > > dilation_derivative_wrt_pressure_table
const OperatorCellData< dim, number > * cell_data
std::set< types::boundary_id > free_surface_boundary_indicators
::TrilinosWrappers::MPI::BlockVector BlockVector
bool apply_stabilization_free_surface_faces
const OperatorCellData< dim, number > * cell_data
bool symmetrize_newton_system
void copy(aspect::LinearAlgebra::Vector &out, const ::LinearAlgebra::distributed::Vector< double > &in)
Table< 2, Tensor< 1, dim, VectorizedArray< number > > > free_surface_stabilization_term_table
::TrilinosWrappers::MPI::Vector Vector
const OperatorCellData< dim, number > * cell_data
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > strain_rate_table
const OperatorCellData< dim, number > * cell_data
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > dilation_derivative_wrt_strain_rate_table
Table< 2, VectorizedArray< number > > dilation_lhs_term_table
bool enable_prescribed_dilation
bool average_newton_factors
Table< 2, VectorizedArray< number > > viscosity
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > newton_factor_wrt_strain_rate_table
bool enable_newton_derivatives
Table< 2, VectorizedArray< number > > newton_factor_wrt_pressure_table