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>
202 memory_consumption()
const;
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>
252 void clear ()
override;
264 void compute_diagonal ()
override;
273 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
278 void local_apply (const ::MatrixFree<dim, number> &data,
280 const ::LinearAlgebra::distributed::BlockVector<number> &src,
281 const std::pair<unsigned int, unsigned int> &cell_range)
const;
286 void local_apply_face (const ::MatrixFree<dim, number> &data,
288 const ::LinearAlgebra::distributed::BlockVector<number> &src,
289 const std::pair<unsigned int, unsigned int> &face_range)
const;
294 void local_apply_boundary_face (const ::MatrixFree<dim, number> &data,
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>
324 void clear ()
override;
336 void compute_diagonal ()
override;
345 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
350 void local_apply (const ::MatrixFree<dim, number> &data,
352 const ::LinearAlgebra::distributed::BlockVector<number> &src,
353 const std::pair<unsigned int, unsigned int> &cell_range)
const;
358 void local_apply_face (const ::MatrixFree<dim, number> &data,
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>
388 void clear ()
override;
412 void compute_diagonal ()
override;
421 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
426 void local_apply (const ::MatrixFree<dim, number> &data,
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>
464 void clear ()
override;
487 void compute_diagonal ()
override;
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;
528 void local_apply (const ::MatrixFree<dim, number> &data,
530 const ::LinearAlgebra::distributed::Vector<number> &src,
531 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
constexpr unsigned int invalid_unsigned_int
std::set< types::boundary_id > free_surface_boundary_indicators
std::vector< index_type > data
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
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
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)