16#ifndef dealii_integrators_maxwell_h
17#define dealii_integrators_maxwell_h
141 normal[2] * (
g2[1] -
g0[2]) + normal[1] * (
g1[0] -
g0[1]);
143 normal[0] * (
g0[2] -
g1[0]) + normal[2] * (
g2[1] -
g1[2]);
145 normal[1] * (
g1[0] -
g2[1]) + normal[0] * (
g0[2] -
g2[0]);
165 const double factor = 1.)
167 const unsigned int n_dofs = fe.dofs_per_cell;
182 const unsigned int d_max = (dim == 2) ? 1 : dim;
184 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
186 const double dx = factor * fe.JxW(
k);
187 for (
unsigned int i = 0; i < n_dofs; ++i)
188 for (
unsigned int j = 0;
j < n_dofs; ++
j)
189 for (
unsigned int d = 0; d <
d_max; ++d)
191 const unsigned int d1 = (d + 1) % dim;
192 const unsigned int d2 = (d + 2) % dim;
194 const double cv = fe.shape_grad_component(i,
k,
d2)[
d1] -
195 fe.shape_grad_component(i,
k,
d1)[
d2];
196 const double cu = fe.shape_grad_component(
j,
k,
d2)[
d1] -
197 fe.shape_grad_component(
j,
k,
d1)[
d2];
221 const unsigned int n_dofs = fe.dofs_per_cell;
230 const unsigned int d_max = (dim == 2) ? 1 : dim;
232 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
234 const double dx = fe.JxW(
k) * factor;
235 for (
unsigned int i = 0; i <
t_dofs; ++i)
236 for (
unsigned int j = 0;
j < n_dofs; ++
j)
237 for (
unsigned int d = 0; d <
d_max; ++d)
239 const unsigned int d1 = (d + 1) % dim;
240 const unsigned int d2 = (d + 2) % dim;
242 const double vv =
fetest.shape_value_component(i,
k, d);
243 const double cu = fe.shape_grad_component(
j,
k,
d2)[
d1] -
244 fe.shape_grad_component(
j,
k,
d1)[
d2];
271 const unsigned int n_dofs = fe.dofs_per_cell;
287 const unsigned int d_max = (dim == 2) ? 1 : dim;
289 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
291 const double dx = factor * fe.JxW(
k);
293 for (
unsigned int i = 0; i < n_dofs; ++i)
294 for (
unsigned int j = 0;
j < n_dofs; ++
j)
295 if (fe.get_fe().has_support_on_face(i,
face_no) &&
296 fe.get_fe().has_support_on_face(
j,
face_no))
298 for (
unsigned int d = 0; d <
d_max; ++d)
300 const unsigned int d1 = (d + 1) % dim;
301 const unsigned int d2 = (d + 2) % dim;
303 const double cv = fe.shape_grad_component(i,
k,
d2)[
d1] -
304 fe.shape_grad_component(i,
k,
d1)[
d2];
305 const double cu = fe.shape_grad_component(
j,
k,
d2)[
d1] -
306 fe.shape_grad_component(
j,
k,
d1)[
d2];
308 fe.shape_value_component(i,
k,
d1) * n[
d2] -
309 fe.shape_value_component(i,
k,
d2) * n[
d1];
311 fe.shape_value_component(
j,
k,
d1) * n[
d2] -
312 fe.shape_value_component(
j,
k,
d2) * n[
d1];
332 const unsigned int n_dofs = fe.dofs_per_cell;
348 const unsigned int d_max = (dim == 2) ? 1 : dim;
350 for (
unsigned int k = 0;
k < fe.n_quadrature_points; ++
k)
352 const double dx = factor * fe.JxW(
k);
354 for (
unsigned int i = 0; i < n_dofs; ++i)
355 for (
unsigned int j = 0;
j < n_dofs; ++
j)
356 for (
unsigned int d = 0; d <
d_max; ++d)
358 const unsigned int d1 = (d + 1) % dim;
359 const unsigned int d2 = (d + 2) % dim;
361 const double v = fe.shape_value_component(i,
k,
d1) * n(
d2) -
362 fe.shape_value_component(i,
k,
d2) * n(
d1);
363 const double u = fe.shape_value_component(
j,
k,
d1) * n(
d2) -
364 fe.shape_value_component(
j,
k,
d2) * n(
d1);
366 M(i,
j) += dx *
u * v;
395 const unsigned int n_dofs =
fe1.n_dofs_per_cell();
422 const unsigned int d_max = (dim == 2) ? 1 : dim;
424 for (
unsigned int k = 0;
k <
fe1.n_quadrature_points; ++
k)
426 const double dx =
fe1.JxW(
k);
428 for (
unsigned int i = 0; i < n_dofs; ++i)
429 for (
unsigned int j = 0;
j < n_dofs; ++
j)
430 for (
unsigned int d = 0; d <
d_max; ++d)
432 const unsigned int d1 = (d + 1) % dim;
433 const unsigned int d2 = (d + 2) % dim;
437 fe1.shape_grad_component(i,
k,
d1)[
d2];
440 fe2.shape_grad_component(i,
k,
d1)[
d2];
450 fe1.shape_value_component(
j,
k,
d1) * n(
d2) -
451 fe1.shape_value_component(
j,
k,
d2) * n(
d1);
453 -
fe2.shape_value_component(
j,
k,
d1) * n(
d2) +
454 fe2.shape_value_component(
j,
k,
d2) * n(
d1);
456 fe1.shape_value_component(i,
k,
d1) * n(
d2) -
457 fe1.shape_value_component(i,
k,
d2) * n(
d1);
459 -
fe2.shape_value_component(i,
k,
d1) * n(
d2) +
460 fe2.shape_value_component(i,
k,
d2) * n(
d1);
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
void nitsche_curl_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const unsigned int face_no, double penalty, double factor=1.)
void curl_curl_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const double factor=1.)
void tangential_trace_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, double factor=1.)
void curl_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, double factor=1.)
Tensor< 1, dim > tangential_curl(const Tensor< 1, dim > &g0, const Tensor< 1, dim > &g1, const Tensor< 1, dim > &g2, const Tensor< 1, dim > &normal)
void ip_curl_matrix(FullMatrix< double > &M11, FullMatrix< double > &M12, FullMatrix< double > &M21, FullMatrix< double > &M22, const FEValuesBase< dim > &fe1, const FEValuesBase< dim > &fe2, const double pen, const double factor1=1., const double factor2=-1.)
Tensor< 1, dim > curl_curl(const Tensor< 2, dim > &h0, const Tensor< 2, dim > &h1, const Tensor< 2, dim > &h2)
Library of integrals over cells and faces.