7 #ifndef __brusselator_matrix_h 8 #define __brusselator_matrix_h 10 #include <amandus/brusselator/parameters.h> 11 #include <amandus/integrator.h> 12 #include <deal.II/integrators/divergence.h> 13 #include <deal.II/integrators/l2.h> 14 #include <deal.II/integrators/laplace.h> 15 #include <deal.II/meshworker/integration_info.h> 61 virtual void cell(MeshWorker::DoFInfo<dim>& dinfo, MeshWorker::IntegrationInfo<dim>& info)
const;
62 virtual void boundary(MeshWorker::DoFInfo<dim>& dinfo,
63 MeshWorker::IntegrationInfo<dim>& info)
const;
64 virtual void face(MeshWorker::DoFInfo<dim>& dinfo1, MeshWorker::DoFInfo<dim>& dinfo2,
65 MeshWorker::IntegrationInfo<dim>& info1,
66 MeshWorker::IntegrationInfo<dim>& info2)
const;
69 SmartPointer<const Parameters, class Matrix<dim>>
parameters;
76 this->use_boundary =
false;
77 this->use_face =
true;
78 this->input_vector_names.push_back(
"Newton iterate");
83 Matrix<dim>::cell(MeshWorker::DoFInfo<dim>& dinfo, MeshWorker::IntegrationInfo<dim>& info)
const 85 AssertDimension(dinfo.n_matrices(), 4);
90 L2::mass_matrix(dinfo.matrix(0,
false).matrix, info.fe_values(0));
91 L2::mass_matrix(dinfo.matrix(3,
false).matrix, info.fe_values(0));
95 dinfo.matrix(0,
false).matrix, info.fe_values(0),
parameters->alpha0 * factor);
97 dinfo.matrix(3,
false).matrix, info.fe_values(0),
parameters->alpha1 * factor);
98 if (info.values.size() > 0)
100 AssertDimension(info.values[0].size(), 2);
101 AssertDimension(info.values[0][0].size(), info.fe_values(0).n_quadrature_points);
102 AssertDimension(info.values[0][1].size(), info.fe_values(0).n_quadrature_points);
103 std::vector<double> Du_ru(info.fe_values(0).n_quadrature_points);
104 std::vector<double> Dv_ru(info.fe_values(0).n_quadrature_points);
105 std::vector<double> Dv_rv(info.fe_values(0).n_quadrature_points);
106 std::vector<double> Du_rv(info.fe_values(0).n_quadrature_points);
107 for (
unsigned int k = 0; k < Du_ru.size(); ++k)
109 const double u = info.values[0][0][k];
110 const double v = info.values[0][1][k];
111 Du_ru[k] = (-2. * u * v + (
parameters->A + 1.)) * factor;
112 Dv_ru[k] = -u * u * factor;
113 Dv_rv[k] = u * u * factor;
114 Du_rv[k] = (-
parameters->A + 2. * u * v) * factor;
132 MeshWorker::IntegrationInfo<dim>& info1,
133 MeshWorker::IntegrationInfo<dim>& info2)
const 135 const unsigned int deg = info1.fe_values(0).get_fe().tensor_degree();
137 Laplace::ip_matrix(dinfo1.matrix(0,
false).matrix,
138 dinfo1.matrix(0,
true).matrix,
139 dinfo2.matrix(0,
true).matrix,
140 dinfo2.matrix(0,
false).matrix,
143 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
145 Laplace::ip_matrix(dinfo1.matrix(3,
false).matrix,
146 dinfo1.matrix(3,
true).matrix,
147 dinfo2.matrix(3,
true).matrix,
148 dinfo2.matrix(3,
false).matrix,
151 Laplace::compute_penalty(dinfo1, dinfo2, deg, deg),
virtual void cell(MeshWorker::DoFInfo< dim > &dinfo, MeshWorker::IntegrationInfo< dim > &info) const
Definition: brusselator/matrix.h:83
void weighted_mass_matrix(dealii::FullMatrix< double > &M, const dealii::FEValuesBase< dim > &fe, const dealii::TensorFunction< 2, dim > &weight)
Definition: darcy/integrators.h:41
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
virtual void face(MeshWorker::DoFInfo< dim > &dinfo1, MeshWorker::DoFInfo< dim > &dinfo2, MeshWorker::IntegrationInfo< dim > &info1, MeshWorker::IntegrationInfo< dim > &info2) const
Definition: brusselator/matrix.h:131
Definition: explicit.h:25
SmartPointer< const Parameters, class Matrix< dim > > parameters
Definition: brusselator/matrix.h:69
double timestep
Current timestep if applicable.
Definition: integrator.h:48
Definition: brusselator/parameters.h:14
Definition: brusselator/matrix.h:56
virtual void boundary(MeshWorker::DoFInfo< dim > &dinfo, MeshWorker::IntegrationInfo< dim > &info) const
Definition: brusselator/matrix.h:125
Definition: integrator.h:29