9 #ifndef __brinkman_matrix_h 10 #define __brinkman_matrix_h 12 #include <deal.II/integrators/divergence.h> 13 #include <deal.II/integrators/elasticity.h> 14 #include <deal.II/integrators/elasticity.h> 15 #include <deal.II/integrators/l2.h> 16 #include <deal.II/integrators/laplace.h> 18 #include <amandus/brinkman/parameters.h> 19 #include <amandus/integrator.h> 36 double friction_coefficient)
38 const unsigned int n_dofs = int_fe.dofs_per_cell;
39 const unsigned int n_comp = int_fe.get_fe().n_components();
41 AssertDimension(M.m(), n_dofs);
42 AssertDimension(M.n(), n_dofs);
43 AssertDimension(n_comp, dim);
48 const double factor = friction_coefficient;
50 for (
unsigned k = 0; k < int_fe.n_quadrature_points; ++k)
52 const double dx = int_fe.JxW(k) * factor;
53 const Tensor<1, dim> n = int_fe.normal_vector(k);
55 aux1 = cross_product_2d(n);
57 for (
unsigned i = 0; i < n_dofs; ++i)
59 for (
unsigned j = 0; j < n_dofs; ++j)
62 for (
unsigned int d = 0; d < n_comp; ++d)
63 M(i, j) += dx * aux1[d] * int_fe.shape_value_component(i, k, d) * aux1[d] *
64 int_fe.shape_value_component(j, k, d);
68 for (
unsigned int d = 0; d < dim; ++d)
69 u[d] = int_fe.shape_value_component(i, k, d);
70 aux1 = cross_product_3d(u, n);
71 for (
unsigned int d = 0; d < dim; ++d)
72 u[d] = int_fe.shape_value_component(j, k, d);
73 aux2 = cross_product_3d(u, n);
74 M(i, j) += dx * (aux1 * aux2);
78 Assert(
false, ExcNotImplemented());
101 void cell(MeshWorker::DoFInfo<dim>& dinfo,
typename MeshWorker::IntegrationInfo<dim>& info)
const;
102 void boundary(MeshWorker::DoFInfo<dim>& dinfo,
103 typename MeshWorker::IntegrationInfo<dim>& info)
const;
104 void face(MeshWorker::DoFInfo<dim>& dinfo1, MeshWorker::DoFInfo<dim>& dinfo2,
105 typename MeshWorker::IntegrationInfo<dim>& info1,
106 typename MeshWorker::IntegrationInfo<dim>& info2)
const;
108 void cell_error(MeshWorker::DoFInfo<dim>& dinfo,
typename MeshWorker::IntegrationInfo<dim>& info);
111 dealii::SmartPointer<const Parameters, Matrix<dim>>
parameters;
123 typename MeshWorker::IntegrationInfo<dim>& info)
const 125 AssertDimension(dinfo.n_matrices(), 4);
126 const unsigned int id = dinfo.cell->material_id();
131 dinfo.matrix(0,
false).matrix, info.fe_values(0),
parameters->viscosity[id]);
132 L2::mass_matrix(dinfo.matrix(0,
false).matrix, info.fe_values(0),
parameters->resistance[id]);
133 Divergence::grad_div_matrix(
134 dinfo.matrix(0,
false).matrix, info.fe_values(0),
parameters->graddiv_stabilization[id]);
137 dinfo.matrix(1,
false).matrix.copy_transposed(dinfo.matrix(2,
false).matrix);
143 typename MeshWorker::IntegrationInfo<dim>& info)
const 145 const unsigned int id = dinfo.cell->material_id();
146 const unsigned int deg = info.fe_values(0).get_fe().tensor_degree();
155 typename MeshWorker::IntegrationInfo<dim>& info1,
156 typename MeshWorker::IntegrationInfo<dim>& info2)
const 158 const unsigned int id1 = dinfo1.cell->material_id();
159 const unsigned int id2 = dinfo2.cell->material_id();
166 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
169 Elasticity::ip_matrix(dinfo1.matrix(0,
false).matrix,
170 dinfo1.matrix(0,
true).matrix,
171 dinfo2.matrix(0,
true).matrix,
172 dinfo2.matrix(0,
false).matrix,
175 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
void tangential_friction(FullMatrix< double > &M, const FEValuesBase< dim > &int_fe, double friction_coefficient)
Definition: brinkman/matrix.h:35
void cell_matrix(dealii::FullMatrix< double > &M, const dealii::FEValuesBase< dim > &fe, const dealii::VectorSlice< const std::vector< std::vector< dealii::Tensor< 1, dim >>>> &input, double lambda=0., double mu=1.)
Definition: matrix_integrators.h:23
dealii::SmartPointer< const Parameters, Matrix< dim > > parameters
Definition: brinkman/matrix.h:111
Definition: brinkman/parameters.h:51
void boundary(MeshWorker::DoFInfo< dim > &dinfo, typename MeshWorker::IntegrationInfo< dim > &info) const
Definition: brinkman/matrix.h:142
Definition: brinkman/matrix.h:91
void face(MeshWorker::DoFInfo< dim > &dinfo1, MeshWorker::DoFInfo< dim > &dinfo2, typename MeshWorker::IntegrationInfo< dim > &info1, typename MeshWorker::IntegrationInfo< dim > &info2) const
Definition: brinkman/matrix.h:154
Definition: brinkman/matrix.h:24
void cell(MeshWorker::DoFInfo< dim > &dinfo, typename MeshWorker::IntegrationInfo< dim > &info) const
Definition: brinkman/matrix.h:122
Definition: integrator.h:29