40 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
46 : pde_operator(
nullptr), rhs_vector(
nullptr), time(0.0), scaling_factor_mass(1.0)
53 this->pde_operator = &pde_operator;
57 update(VectorType
const & rhs_vector,
double const & time,
double const & scaling_factor)
59 this->rhs_vector = &rhs_vector;
61 this->scaling_factor_mass = scaling_factor;
69 evaluate_residual(VectorType & dst, VectorType
const & src)
71 pde_operator->evaluate_nonlinear_residual(dst, src, rhs_vector, time, scaling_factor_mass);
77 VectorType
const * rhs_vector;
79 double scaling_factor_mass;
90 typedef typename Base::VectorType VectorType;
92 typedef typename Base::scalar scalar;
93 typedef typename Base::vector vector;
94 typedef typename Base::tensor tensor;
96 typedef typename Base::Range Range;
98 typedef typename Base::FaceIntegratorU FaceIntegratorU;
99 typedef typename Base::FaceIntegratorP FaceIntegratorP;
107 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
112 std::string
const & field,
113 MPI_Comm
const & mpi_comm);
129 update_after_grid_motion(
bool const update_matrix_free)
final;
139 solve_linear_momentum_equation(VectorType & solution,
140 VectorType
const & rhs,
141 bool const & update_preconditioner,
142 double const & scaling_factor_mass);
150 rhs_add_viscous_term(VectorType & dst,
double const time)
const;
155 std::tuple<unsigned int, unsigned int>
156 solve_nonlinear_momentum_equation(VectorType & dst,
157 VectorType
const & rhs_vector,
159 bool const & update_preconditioner,
160 double const & scaling_factor_mass);
166 evaluate_nonlinear_residual(VectorType & dst,
167 VectorType
const & src,
168 VectorType
const * rhs_vector,
170 double const & scaling_factor_mass)
const;
177 evaluate_nonlinear_residual_steady(VectorType & dst_u,
179 VectorType
const & src_u,
180 VectorType
const & src_p,
181 double const & time)
const;
187 apply_momentum_operator(VectorType & dst, VectorType
const & src);
195 rhs_pressure_gradient_term_dirichlet_bc_from_dof_vector(VectorType & dst,
196 VectorType
const & pressure)
const;
199 evaluate_pressure_gradient_term_dirichlet_bc_from_dof_vector(VectorType & dst,
200 VectorType
const & src,
201 VectorType
const & pressure)
const;
209 apply_inverse_pressure_mass_operator(VectorType & dst, VectorType
const & src)
const;
215 solve_pressure(VectorType & dst, VectorType
const & src,
bool const update_preconditioner)
const;
218 rhs_ppe_laplace_add(VectorType & dst,
double const & time)
const;
221 rhs_ppe_laplace_add_dirichlet_bc_from_dof_vector(VectorType & dst, VectorType
const & src)
const;
224 interpolate_pressure_dirichlet_bc(VectorType & dst,
double const & time)
const;
228 setup_preconditioners_and_solvers()
final;
234 setup_momentum_preconditioner();
237 setup_momentum_solver();
243 setup_inverse_mass_operator_pressure();
246 cell_loop_empty(dealii::MatrixFree<dim, Number>
const &,
254 face_loop_empty(dealii::MatrixFree<dim, Number>
const &,
262 local_interpolate_pressure_dirichlet_bc_boundary_face(
263 dealii::MatrixFree<dim, Number>
const & matrix_free,
265 VectorType
const & src,
266 Range
const & face_range)
const;
281 momentum_newton_solver;
284 std::shared_ptr<PreconditionerBase<Number>> momentum_preconditioner;
285 std::shared_ptr<Krylov::SolverBase<VectorType>> momentum_linear_solver;