21 #ifndef _aspect_simulator_stokes_matrix_free_operators_h
22 #define _aspect_simulator_stokes_matrix_free_operators_h
35 #include <deal.II/multigrid/mg_transfer_global_coarsening.templates.h>
55 namespace ChangeVectorTypes
58 const ::LinearAlgebra::ReadWriteVector<double> &rwv,
62 const ::LinearAlgebra::distributed::Vector<double> &in);
68 const ::LinearAlgebra::distributed::BlockVector<double> &in);
78 namespace MatrixFreeStokesOperators
91 template <
int dim,
typename number>
217 template <
int dim,
typename number>
229 const MPI_Comm &mpi_comm,
232 double &minimum_viscosity,
233 double &maximum_viscosity);
238 template <
int dim,
int degree_v,
typename number>
273 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
280 const ::LinearAlgebra::distributed::BlockVector<number> &src,
281 const std::pair<unsigned int, unsigned int> &cell_range)
const;
288 const ::LinearAlgebra::distributed::BlockVector<number> &src,
289 const std::pair<unsigned int, unsigned int> &face_range)
const;
296 const ::LinearAlgebra::distributed::BlockVector<number> &src,
297 const std::pair<unsigned int, unsigned int> &face_range)
const;
310 template <
int dim,
int degree_v,
typename number>
345 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
352 const ::LinearAlgebra::distributed::BlockVector<number> &src,
353 const std::pair<unsigned int, unsigned int> &cell_range)
const;
360 const ::LinearAlgebra::distributed::BlockVector<number> &src,
361 const std::pair<unsigned int, unsigned int> &face_range)
const;
374 template <
int dim,
int degree_p,
typename number>
421 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
428 const ::LinearAlgebra::distributed::Vector<number> &src,
429 const std::pair<unsigned int, unsigned int> &cell_range)
const;
450 template <
int dim,
int degree_v,
typename number>
494 void set_diagonal (const ::LinearAlgebra::distributed::Vector<number> &diag);
505 number> &velocity)
const;
515 number> &velocity)
const;
523 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
530 const ::LinearAlgebra::distributed::Vector<number> &src,
531 const std::pair<unsigned int, unsigned int> &cell_range)
const;
std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > data
void apply_add(::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src) const override
void compute_diagonal() override
const OperatorCellData< dim, number > * cell_data
void cell_operation(FEEvaluation< dim, degree_v, degree_v+1, dim, number > &velocity) const
void set_cell_data(const OperatorCellData< dim, number > &data)
void reinit(const Mapping< dim > &mapping, const DoFHandler< dim > &dof_handler_v, const DoFHandler< dim > &dof_handler_p, const AffineConstraints< number > &constraints_v, const AffineConstraints< number > &constraints_p, std::shared_ptr< MatrixFree< dim, double >> mf_storage, const unsigned int level=numbers::invalid_unsigned_int)
void set_diagonal(const ::LinearAlgebra::distributed::Vector< number > &diag)
void inner_cell_operation(FEEvaluation< dim, degree_v, degree_v+1, dim, number > &velocity) const
void local_apply(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
void local_apply(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
void compute_diagonal() override
void set_cell_data(const OperatorCellData< dim, number > &data)
const OperatorCellData< dim, number > * cell_data
void local_apply_face(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src, const std::pair< unsigned int, unsigned int > &face_range) const
void apply_add(::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src) const override
void apply_add(::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src) const override
void reinit(const Mapping< dim > &mapping, const DoFHandler< dim > &dof_handler_v, const DoFHandler< dim > &dof_handler_p, const AffineConstraints< number > &constraints_v, const AffineConstraints< number > &constraints_p, std::shared_ptr< MatrixFree< dim, double >> mf_storage, const unsigned int level=numbers::invalid_unsigned_int)
void compute_diagonal() override
void inner_cell_operation(FEEvaluation< dim, degree_p, degree_p+2, 1, number > &pressure) const
void set_cell_data(const OperatorCellData< dim, number > &data)
void local_apply(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
const OperatorCellData< dim, number > * cell_data
void apply_add(::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src) const override
void set_cell_data(const OperatorCellData< dim, number > &data)
void local_apply_face(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src, const std::pair< unsigned int, unsigned int > &face_range) const
void local_apply_boundary_face(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src, const std::pair< unsigned int, unsigned int > &face_range) const
void compute_diagonal() override
void local_apply(const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::BlockVector< number > &dst, const ::LinearAlgebra::distributed::BlockVector< number > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
const OperatorCellData< dim, number > * cell_data
void fill_active_cell_data(const DoFHandler< dim > &dof_handler, const DoFHandler< dim > &dof_handler_projection, const Introspection< dim > &introspection, const Quadrature< dim > &quadrature_formula, const MaterialModel::Interface< dim > &material_model, const MaterialModel::MaterialAveraging::AveragingOperation &material_averaging, const Mapping< dim > &mapping, const MatrixFree< dim, double > &matrix_free, const MatrixFree< dim, double > &matrix_free_schur, const MatrixFree< dim, double > &matrix_free_A, const LinearAlgebra::BlockVector ¤t_linearization_point, const MPI_Comm &mpi_comm, ::LinearAlgebra::distributed::Vector< double > &active_viscosity_vector, OperatorCellData< dim, number > &active_cell_data, double &minimum_viscosity, double &maximum_viscosity)
void copy(aspect::LinearAlgebra::Vector &out, const ::LinearAlgebra::distributed::Vector< double > &in)
constexpr unsigned int invalid_unsigned_int
bool average_newton_factors
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > dilation_derivative_wrt_strain_rate_table
bool symmetrize_newton_system
std::set< types::boundary_id > free_surface_boundary_indicators
bool apply_stabilization_free_surface_faces
bool enable_newton_derivatives
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > newton_factor_wrt_strain_rate_table
Table< 2, Tensor< 1, dim, VectorizedArray< number > > > free_surface_stabilization_term_table
Table< 2, VectorizedArray< number > > viscosity
Table< 2, SymmetricTensor< 2, dim, VectorizedArray< number > > > strain_rate_table
bool enable_prescribed_dilation
std::size_t memory_consumption() const
Table< 2, VectorizedArray< number > > dilation_lhs_term_table
Table< 2, VectorizedArray< number > > dilation_derivative_wrt_pressure_table
Table< 2, VectorizedArray< number > > newton_factor_wrt_pressure_table