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>
153 Table<2, SymmetricTensor<2, dim, VectorizedArray<number>>>
170 Table<2, VectorizedArray<number>>
177 Table<2, SymmetricTensor<2, dim, VectorizedArray<number>>>
197 memory_consumption()
const;
208 template <
int dim,
int degree_v,
typename number>
210 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::BlockVector<number>>
222 void clear ()
override;
234 void compute_diagonal ()
override;
242 void apply_add (::LinearAlgebra::distributed::BlockVector<number> &dst,
243 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
248 void local_apply (const ::MatrixFree<dim, number> &data,
249 ::LinearAlgebra::distributed::BlockVector<number> &dst,
250 const ::LinearAlgebra::distributed::BlockVector<number> &src,
251 const std::pair<unsigned int, unsigned int> &cell_range)
const;
256 void local_apply_face (const ::MatrixFree<dim, number> &data,
257 ::LinearAlgebra::distributed::BlockVector<number> &dst,
258 const ::LinearAlgebra::distributed::BlockVector<number> &src,
259 const std::pair<unsigned int, unsigned int> &face_range)
const;
264 void local_apply_boundary_face (const ::MatrixFree<dim, number> &data,
265 ::LinearAlgebra::distributed::BlockVector<number> &dst,
266 const ::LinearAlgebra::distributed::BlockVector<number> &src,
267 const std::pair<unsigned int, unsigned int> &face_range)
const;
280 template <
int dim,
int degree_v,
typename number>
282 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::BlockVector<number>>
294 void clear ()
override;
306 void compute_diagonal ()
override;
314 void apply_add (::LinearAlgebra::distributed::BlockVector<number> &dst,
315 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
320 void local_apply (const ::MatrixFree<dim, number> &data,
321 ::LinearAlgebra::distributed::BlockVector<number> &dst,
322 const ::LinearAlgebra::distributed::BlockVector<number> &src,
323 const std::pair<unsigned int, unsigned int> &cell_range)
const;
328 void local_apply_face (const ::MatrixFree<dim, number> &data,
329 ::LinearAlgebra::distributed::BlockVector<number> &dst,
330 const ::LinearAlgebra::distributed::BlockVector<number> &src,
331 const std::pair<unsigned int, unsigned int> &face_range)
const;
344 template <
int dim,
int degree_p,
typename number>
346 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::Vector<number>>
358 void clear ()
override;
370 void compute_diagonal ()
override;
378 void apply_add (::LinearAlgebra::distributed::Vector<number> &dst,
379 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
384 void local_apply (const ::MatrixFree<dim, number> &data,
385 ::LinearAlgebra::distributed::Vector<number> &dst,
386 const ::LinearAlgebra::distributed::Vector<number> &src,
387 const std::pair<unsigned int, unsigned int> &cell_range)
const;
392 void inner_cell_operation(FEEvaluation<dim,
408 template <
int dim,
int degree_v,
typename number>
410 :
public MatrixFreeOperators::Base<dim, ::LinearAlgebra::distributed::Vector<number>>
422 void clear ()
override;
434 void compute_diagonal ()
override;
441 void set_diagonal (const ::LinearAlgebra::distributed::Vector<number> &diag);
448 void inner_cell_operation(FEEvaluation<dim,
452 number> &velocity)
const;
458 void cell_operation(FEEvaluation<dim,
462 number> &velocity)
const;
469 void apply_add (::LinearAlgebra::distributed::Vector<number> &dst,
470 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
475 void local_apply (const ::MatrixFree<dim, number> &data,
476 ::LinearAlgebra::distributed::Vector<number> &dst,
477 const ::LinearAlgebra::distributed::Vector<number> &src,
478 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
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
Table< 2, VectorizedArray< number > > viscosity
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > newton_factor_wrt_strain_rate_table
bool enable_newton_derivatives
void copy(TrilinosWrappers::MPI::Vector &out, const ::LinearAlgebra::distributed::Vector< double > &in)
Table< 2, VectorizedArray< number > > newton_factor_wrt_pressure_table