Amandus: Simulations based on multilevel Schwarz methods
maxwell/eigen.h
Go to the documentation of this file.
1 /**********************************************************************
2  * Copyright (C) 2011 - 2014 by the authors
3  * Distributed under the MIT License
4  *
5  * See the files AUTHORS and LICENSE in the project root directory
6  **********************************************************************/
7 #ifndef __matrix_curl_curl_h
8 #define __matrix_curl_curl_h
9 
10 #include <amandus/integrator.h>
11 #include <deal.II/integrators/divergence.h>
12 #include <deal.II/integrators/l2.h>
13 #include <deal.II/integrators/maxwell.h>
14 #include <deal.II/meshworker/integration_info.h>
15 
16 using namespace dealii;
17 using namespace LocalIntegrators;
18 
23 {
52 namespace DivCurl
53 {
60 template <int dim>
61 class Eigen : public AmandusIntegrator<dim>
62 {
63 public:
68  Eigen();
69  virtual void cell(dealii::MeshWorker::DoFInfo<dim>& dinfo,
70  dealii::MeshWorker::IntegrationInfo<dim>& info) const;
71  virtual void boundary(dealii::MeshWorker::DoFInfo<dim>& dinfo,
72  dealii::MeshWorker::IntegrationInfo<dim>& info) const;
73  virtual void face(dealii::MeshWorker::DoFInfo<dim>& dinfo1,
74  dealii::MeshWorker::DoFInfo<dim>& dinfo2,
75  dealii::MeshWorker::IntegrationInfo<dim>& info1,
76  dealii::MeshWorker::IntegrationInfo<dim>& info2) const;
77 
78  std::vector<double> curl_coefficient;
79  std::vector<double> mass_coefficient;
80 };
81 
82 template <int dim>
84  : curl_coefficient(1, 1.)
85  , mass_coefficient(1, 0.)
86 {
87  this->use_boundary = false;
88  this->use_face = false;
89 }
90 
91 template <int dim>
92 void
93 Eigen<dim>::cell(dealii::MeshWorker::DoFInfo<dim>& dinfo,
94  dealii::MeshWorker::IntegrationInfo<dim>& info) const
95 {
96  if (dinfo.n_matrices() > 4)
97  {
98  AssertDimension(dinfo.n_matrices(), 8);
99  }
100  else
101  {
102  AssertDimension(dinfo.n_matrices(), 4);
103  }
104  const unsigned int id = dinfo.cell->material_id();
105  AssertIndexRange(id, curl_coefficient.size());
106  AssertIndexRange(id, mass_coefficient.size());
107  // const double mu = curl_coefficient[id];
108  // const double sigma = mass_coefficient[id];
109 
110  Maxwell::curl_curl_matrix(dinfo.matrix(0, false).matrix, info.fe_values(0) /*, mu*/);
111  // if (sigma != 0.)
112  // L2::mass_matrix(dinfo.matrix(0,false).matrix, info.fe_values(0), sigma);
113  Divergence::gradient_matrix(dinfo.matrix(1, false).matrix, info.fe_values(1), info.fe_values(0));
114  dinfo.matrix(2, false).matrix.copy_transposed(dinfo.matrix(1, false).matrix);
115  if (dinfo.n_matrices() > 4)
116  {
117  L2::mass_matrix(dinfo.matrix(4, false).matrix, info.fe_values(0));
118  // dinfo.matrix(0,false).matrix.add(-8., dinfo.matrix(4,false).matrix);
119  }
120 
121  // L2::mass_matrix(dinfo.matrix(7,false).matrix, info.fe_values(1));
122 }
123 
124 template <int dim>
125 void
126 Eigen<dim>::boundary(dealii::MeshWorker::DoFInfo<dim>& /*dinfo*/,
127  typename dealii::MeshWorker::IntegrationInfo<dim>& /*info*/) const
128 {
129 }
130 
131 template <int dim>
132 void
133 Eigen<dim>::face(dealii::MeshWorker::DoFInfo<dim>& /*dinfo1*/,
134  dealii::MeshWorker::DoFInfo<dim>& /*dinfo2*/,
135  dealii::MeshWorker::IntegrationInfo<dim>& /*info1*/,
136  dealii::MeshWorker::IntegrationInfo<dim>& /*info2*/) const
137 {
138 }
139 }
140 }
141 
142 #endif
virtual void face(dealii::MeshWorker::DoFInfo< dim > &dinfo1, dealii::MeshWorker::DoFInfo< dim > &dinfo2, dealii::MeshWorker::IntegrationInfo< dim > &info1, dealii::MeshWorker::IntegrationInfo< dim > &info2) const
Definition: maxwell/eigen.h:133
Definition: maxwell/eigen.h:22
virtual void boundary(dealii::MeshWorker::DoFInfo< dim > &dinfo, dealii::MeshWorker::IntegrationInfo< dim > &info) const
Definition: maxwell/eigen.h:126
std::vector< double > curl_coefficient
Definition: maxwell/eigen.h:78
virtual void cell(dealii::MeshWorker::DoFInfo< dim > &dinfo, dealii::MeshWorker::IntegrationInfo< dim > &info) const
Definition: maxwell/eigen.h:93
Definition: maxwell/eigen.h:61
std::vector< double > mass_coefficient
Definition: maxwell/eigen.h:79
Definition: integrator.h:29