16 #ifndef dealii__integrators_divergence_h 17 #define dealii__integrators_divergence_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/exceptions.h> 22 #include <deal.II/base/quadrature.h> 23 #include <deal.II/lac/full_matrix.h> 24 #include <deal.II/fe/mapping.h> 25 #include <deal.II/fe/fe_values.h> 26 #include <deal.II/meshworker/dof_info.h> 28 DEAL_II_NAMESPACE_OPEN
60 for (
unsigned int d=0; d<dim; ++d)
62 result[d] += h0[d][0];
63 if (dim >=2) result[d] += h1[d][1];
64 if (dim >=3) result[d] += h2[d][2];
86 unsigned int fecomp = fe.
get_fe().n_components();
96 const double dx = fe.
JxW(k) * factor;
97 for (
unsigned int i=0; i<t_dofs; ++i)
100 for (
unsigned int d=0; d<dim; ++d)
101 for (
unsigned int j=0; j<n_dofs; ++j)
104 M(i,j) += dx * du * vv;
122 template <
int dim,
typename number>
127 const double factor = 1.)
132 Assert (result.
size() == t_dofs, ExcDimensionMismatch(result.
size(), t_dofs));
136 const double dx = factor * fetest.
JxW(k);
138 for (
unsigned int i=0; i<t_dofs; ++i)
139 for (
unsigned int d=0; d<dim; ++d)
140 result(i) += dx * input[d][k][d] * fetest.
shape_value(i,k);
157 template <
int dim,
typename number>
161 const VectorSlice<
const std::vector<std::vector<double> > > &input,
162 const double factor = 1.)
167 Assert (result.
size() == t_dofs, ExcDimensionMismatch(result.
size(), t_dofs));
171 const double dx = factor * fetest.
JxW(k);
173 for (
unsigned int i=0; i<t_dofs; ++i)
174 for (
unsigned int d=0; d<dim; ++d)
175 result(i) -= dx * input[d][k] * fetest.
shape_grad(i,k)[d];
197 unsigned int fecomp = fetest.
get_fe().n_components();
208 const double dx = fe.
JxW(k) * factor;
209 for (
unsigned int d=0; d<dim; ++d)
210 for (
unsigned int i=0; i<t_dofs; ++i)
213 for (
unsigned int j=0; j<n_dofs; ++j)
216 M(i,j) += dx * vv * Du[d];
234 template <
int dim,
typename number>
239 const double factor = 1.)
244 Assert (result.
size() == t_dofs, ExcDimensionMismatch(result.
size(), t_dofs));
248 const double dx = factor * fetest.
JxW(k);
250 for (
unsigned int i=0; i<t_dofs; ++i)
251 for (
unsigned int d=0; d<dim; ++d)
268 template <
int dim,
typename number>
272 const std::vector<double> &input,
273 const double factor = 1.)
278 Assert (result.
size() == t_dofs, ExcDimensionMismatch(result.
size(), t_dofs));
282 const double dx = factor * fetest.
JxW(k);
284 for (
unsigned int i=0; i<t_dofs; ++i)
285 for (
unsigned int d=0; d<dim; ++d)
306 unsigned int fecomp = fe.
get_fe().n_components();
318 for (
unsigned int i=0; i<t_dofs; ++i)
319 for (
unsigned int j=0; j<n_dofs; ++j)
320 for (
unsigned int d=0; d<dim; ++d)
336 template<
int dim,
typename number>
342 const VectorSlice<
const std::vector<std::vector<double> > > &data,
345 unsigned int fecomp = fe.
get_fe().n_components();
357 for (
unsigned int i=0; i<t_dofs; ++i)
358 for (
unsigned int d=0; d<dim; ++d)
359 result(i) += ndx[d] * fetest.
shape_value(i,k) * data[d][k];
373 template<
int dim,
typename number>
378 const std::vector<double> &data,
391 for (
unsigned int i=0; i<t_dofs; ++i)
392 for (
unsigned int d=0; d<dim; ++d)
439 const double dx = factor * fe1.
JxW(k);
440 for (
unsigned int i=0; i<t_dofs; ++i)
441 for (
unsigned int j=0; j<n_dofs; ++j)
442 for (
unsigned int d=0; d<dim; ++d)
449 M11(i,j) += .5 * dx * un1 * v1;
450 M12(i,j) += .5 * dx * un2 * v1;
451 M21(i,j) += .5 * dx * un1 * v2;
452 M22(i,j) += .5 * dx * un2 * v2;
480 const double dx = factor * fe.
JxW(k);
481 for (
unsigned int i=0; i<n_dofs; ++i)
482 for (
unsigned int j=0; j<n_dofs; ++j)
486 for (
unsigned int d=0; d<dim; ++d)
492 M(i,j) += dx * du * dv;
506 template <
int dim,
typename number>
511 const double factor = 1.)
520 const double dx = factor * fetest.
JxW(k);
521 for (
unsigned int i=0; i<n_dofs; ++i)
525 for (
unsigned int d=0; d<dim; ++d)
528 du += input[d][k][d];
531 result(i) += dx * du * dv;
574 const double dx = factor * fe1.
JxW(k);
575 for (
unsigned int i=0; i<n_dofs; ++i)
576 for (
unsigned int j=0; j<n_dofs; ++j)
577 for (
unsigned int d=0; d<dim; ++d)
584 M11(i,j) += dx * un1 * vn1;
585 M12(i,j) += dx * un2 * vn1;
586 M21(i,j) += dx * un1 * vn2;
587 M22(i,j) += dx * un2 * vn2;
607 unsigned int fecomp = fe.
get_fe().n_components();
615 double div = Du[0][k][0];
616 for (
unsigned int d=1; d<dim; ++d)
618 result += div*div*fe.
JxW(k);
627 DEAL_II_NAMESPACE_CLOSE
#define AssertDimension(dim1, dim2)
const unsigned int dofs_per_cell
#define AssertVectorVectorDimension(vec, dim1, dim2)
const FiniteElement< dim, spacedim > & get_fe() const
void cell_residual(Vector< number > &result, const FEValuesBase< dim > &fetest, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim > > > > &input, const double factor=1.)
void grad_div_residual(Vector< number > &result, const FEValuesBase< dim > &fetest, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim > > > > &input, const double factor=1.)
double shape_value_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
Library of integrals over cells and faces.
void cell_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, double factor=1.)
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
#define Assert(cond, exc)
void gradient_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, double factor=1.)
void u_dot_n_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, double factor=1.)
void u_dot_n_jump_matrix(FullMatrix< double > &M11, FullMatrix< double > &M12, FullMatrix< double > &M21, FullMatrix< double > &M22, const FEValuesBase< dim > &fe1, const FEValuesBase< dim > &fe2, double factor=1.)
const unsigned int n_quadrature_points
void u_times_n_residual(Vector< number > &result, const FEValuesBase< dim > &fetest, const std::vector< double > &data, double factor=1.)
double norm(const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim > > > > &Du)
void u_dot_n_residual(Vector< number > &result, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, const VectorSlice< const std::vector< std::vector< double > > > &data, double factor=1.)
void gradient_residual(Vector< number > &result, const FEValuesBase< dim > &fetest, const std::vector< Tensor< 1, dim > > &input, const double factor=1.)
double JxW(const unsigned int quadrature_point) const
Tensor< 1, dim > grad_div(const Tensor< 2, dim > &h0, const Tensor< 2, dim > &h1, const Tensor< 2, dim > &h2)
void grad_div_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double factor=1.)
const Tensor< 1, spacedim > & shape_grad(const unsigned int function_no, const unsigned int quadrature_point) const
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
Tensor< 1, spacedim > shape_grad_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const