7 #ifndef __advectiondiffusion_matrix_h 8 #define __advectiondiffusion_matrix_h 10 #include <amandus/integrator.h> 11 #include <deal.II/integrators/advection.h> 12 #include <deal.II/integrators/l2.h> 13 #include <deal.II/integrators/laplace.h> 14 #include <deal.II/lac/full_matrix.h> 15 #include <deal.II/meshworker/integration_info.h> 38 Matrix(
const Parameters& par,
double factor1,
double factor2,
39 std::vector<std::vector<double>> direction,
double x1,
double x2,
double y1,
double y2);
41 virtual void cell(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
42 virtual void boundary(DoFInfo<dim>& dinfo, IntegrationInfo<dim>& info)
const;
43 virtual void face(DoFInfo<dim>& dinfo1, DoFInfo<dim>& dinfo2, IntegrationInfo<dim>& info1,
44 IntegrationInfo<dim>& info2)
const;
47 dealii::SmartPointer<const Parameters, class Matrix<dim>>
parameters;
59 std::vector<std::vector<double>> direction,
double x1,
double x2,
double y1,
64 , direction(direction)
77 FullMatrix<double>& M1 = dinfo.matrix(0,
false).matrix;
78 FullMatrix<double>& M2 = dinfo.matrix(0,
false).matrix;
80 AssertDimension(dinfo.n_matrices(), 1);
82 M1, info.fe_values(0), info.fe_values(0),
direction);
84 if (x1 < dinfo.cell->center()[0] && dinfo.cell->center()[0] <
x2 &&
85 y1 < dinfo.cell->center()[1] && dinfo.cell->center()[1] <
y2)
96 FullMatrix<double>& M1 = dinfo.matrix(0,
false).matrix;
97 FullMatrix<double>& M2 = dinfo.matrix(0,
false).matrix;
99 dealii::LocalIntegrators::Advection::upwind_value_matrix(
100 M1, info.fe_values(0), info.fe_values(0),
direction);
102 const unsigned int deg = info.fe_values(0).get_fe().tensor_degree();
108 const Tensor<1, dim>& normal = info.fe_values(0).normal_vector(1);
111 if (normal * dir < 0)
113 Laplace::nitsche_matrix(
114 M2, info.fe_values(0), Laplace::compute_penalty(dinfo, dinfo, deg, deg),
factor1);
121 IntegrationInfo<dim>& info2)
const 124 FullMatrix<double>& M11 = dinfo1.matrix(0,
false).matrix;
125 FullMatrix<double>& M12 = dinfo1.matrix(0,
true).matrix;
126 FullMatrix<double>& M13 = dinfo2.matrix(0,
true).matrix;
127 FullMatrix<double>& M14 = dinfo2.matrix(0,
false).matrix;
128 FullMatrix<double>& M21 = dinfo1.matrix(0,
false).matrix;
129 FullMatrix<double>& M22 = dinfo1.matrix(0,
true).matrix;
130 FullMatrix<double>& M23 = dinfo2.matrix(0,
true).matrix;
131 FullMatrix<double>& M24 = dinfo2.matrix(0,
false).matrix;
133 dealii::LocalIntegrators::Advection::upwind_value_matrix(M11,
143 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
145 if (x1 < dinfo1.cell->center()[0] && dinfo1.cell->center()[0] <
x2 &&
146 y1 < dinfo1.cell->center()[1] && dinfo1.cell->center()[1] <
y2 &&
147 x1 < dinfo2.cell->center()[0] && dinfo2.cell->center()[0] <
x2 &&
148 y1 < dinfo2.cell->center()[1] && dinfo2.cell->center()[1] <
y2)
149 Laplace::ip_matrix(M21,
155 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
158 Laplace::ip_matrix(M21,
164 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
double y2
Definition: advection-diffusion/matrix.h:54
double y1
Definition: advection-diffusion/matrix.h:53
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
double x1
Definition: advection-diffusion/matrix.h:51
virtual void cell(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: advection-diffusion/matrix.h:75
Definition: advection-diffusion/matrix.h:35
std::vector< std::vector< double > > direction
Definition: advection-diffusion/matrix.h:50
Definition: advection-diffusion/matrix.h:17
virtual void face(DoFInfo< dim > &dinfo1, DoFInfo< dim > &dinfo2, IntegrationInfo< dim > &info1, IntegrationInfo< dim > &info2) const
Definition: advection-diffusion/matrix.h:120
double x2
Definition: advection-diffusion/matrix.h:52
Matrix(const Parameters &par, double factor1, double factor2, std::vector< std::vector< double >> direction, double x1, double x2, double y1, double y2)
Definition: advection-diffusion/matrix.h:58
dealii::SmartPointer< const Parameters, class Matrix< dim > > parameters
Definition: advection-diffusion/matrix.h:47
virtual void boundary(DoFInfo< dim > &dinfo, IntegrationInfo< dim > &info) const
Definition: advection-diffusion/matrix.h:93
double factor2
Definition: advection-diffusion/matrix.h:49
Definition: integrator.h:29
double factor1
Definition: advection-diffusion/matrix.h:48