15 #ifndef _aspect_simulator_stokes_matrix_free_operators_h 16 #define _aspect_simulator_stokes_matrix_free_operators_h 29 #include <deal.II/multigrid/mg_transfer_global_coarsening.templates.h> 49 namespace ChangeVectorTypes
52 const ::LinearAlgebra::ReadWriteVector<double> &rwv,
56 const ::LinearAlgebra::distributed::Vector<double> &in);
62 const ::LinearAlgebra::distributed::BlockVector<double> &in);
72 namespace MatrixFreeStokesOperators
85 template <
int dim,
typename number>
196 memory_consumption()
const;
211 template <
int dim,
typename number>
223 const MPI_Comm &mpi_comm,
226 double &minimum_viscosity,
227 double &maximum_viscosity);
232 template <
int dim,
int degree_v,
typename number>
246 void clear ()
override;
258 void compute_diagonal ()
override;
267 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
272 void local_apply (const ::MatrixFree<dim, number> &data,
274 const ::LinearAlgebra::distributed::BlockVector<number> &src,
275 const std::pair<unsigned int, unsigned int> &cell_range)
const;
280 void local_apply_face (const ::MatrixFree<dim, number> &data,
282 const ::LinearAlgebra::distributed::BlockVector<number> &src,
283 const std::pair<unsigned int, unsigned int> &face_range)
const;
288 void local_apply_boundary_face (const ::MatrixFree<dim, number> &data,
290 const ::LinearAlgebra::distributed::BlockVector<number> &src,
291 const std::pair<unsigned int, unsigned int> &face_range)
const;
304 template <
int dim,
int degree_v,
typename number>
318 void clear ()
override;
330 void compute_diagonal ()
override;
339 const ::LinearAlgebra::distributed::BlockVector<number> &src)
const override;
344 void local_apply (const ::MatrixFree<dim, number> &data,
346 const ::LinearAlgebra::distributed::BlockVector<number> &src,
347 const std::pair<unsigned int, unsigned int> &cell_range)
const;
352 void local_apply_face (const ::MatrixFree<dim, number> &data,
354 const ::LinearAlgebra::distributed::BlockVector<number> &src,
355 const std::pair<unsigned int, unsigned int> &face_range)
const;
368 template <
int dim,
int degree_p,
typename number>
382 void clear ()
override;
406 void compute_diagonal ()
override;
415 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
420 void local_apply (const ::MatrixFree<dim, number> &data,
422 const ::LinearAlgebra::distributed::Vector<number> &src,
423 const std::pair<unsigned int, unsigned int> &cell_range)
const;
444 template <
int dim,
int degree_v,
typename number>
458 void clear ()
override;
481 void compute_diagonal ()
override;
488 void set_diagonal (const ::LinearAlgebra::distributed::Vector<number> &diag);
499 number> &velocity)
const;
509 number> &velocity)
const;
517 const ::LinearAlgebra::distributed::Vector<number> &src)
const override;
522 void local_apply (const ::MatrixFree<dim, number> &data,
524 const ::LinearAlgebra::distributed::Vector<number> &src,
525 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)