16 #ifndef __H2D_INTEGRALS_HCURL_H
17 #define __H2D_INTEGRALS_HCURL_H
19 #include "../quadrature/limit_order.h"
20 #include "../weakform/weakform.h"
26 template<
typename Real,
typename Scalar>
27 Scalar int_e_f(
int n,
double *wt, Func<Real> *u, Func<Real> *v)
29 Scalar result = Scalar(0);
30 for (
int i = 0; i < n; i++)
31 result += wt[i] * (u->val0[i] * conj(v->val0[i]) + u->val1[i] * conj(v->val1[i]));
35 template<
typename Scalar>
44 this->setSymFlag(sym);
51 this->set_areas(areas);
52 this->setSymFlag(sym);
58 return int_e_f<double, Scalar>(n, wt, u, v);
64 return int_e_f<Hermes::Ord, Hermes::Ord>(n, wt, u, v);
73 template<
typename Real,
typename Scalar>
76 Scalar result = Scalar(0);
77 for (
int i = 0; i < n; i++)
78 result += wt[i] * (u->
curl[i] * conj(v->
curl[i]));
82 template<
typename Real,
typename Scalar>
83 Scalar int_v0(
int n,
double *wt, Func<Scalar> *v)
85 Scalar result = Scalar(0);
86 for (
int i = 0; i < n; i++)
87 result += wt[i] * v->val0[i];
91 template<
typename Real,
typename Scalar>
92 Scalar int_v1(
int n,
double *wt, Func<Real> *v)
94 Scalar result = Scalar(0);
95 for (
int i = 0; i < n; i++)
96 result += wt[i] * (v->val1[i]);
100 template<
typename Real,
typename Scalar>
101 Scalar int_F_e_f(
int n,
double *wt,
double (*F)(
int marker, Real x, Real y), Func<Real> *u, Func<Real> *v, Geom<Real> *e)
103 Scalar result = Scalar(0);
104 for (
int i = 0; i < n; i++)
105 result += wt[i] * (*F)(e->elem_marker, e->x[i], e->y[i]) * (u->val0[i] * conj(v->val0[i]) + u->val1[i] * conj(v->val1[i]));
109 template<
typename Real,
typename Scalar>
110 Scalar int_e_tau_f_tau(
int n,
double *wt, Func<Real> *u, Func<Real> *v, Geom<Real> *e)
112 Scalar result = Scalar(0);
113 for (
int i = 0; i < n; i++)
114 result += wt[i] * ( (u->val0[i] * e->tx[i] + u->val1[i] * e->ty[i]) *
115 conj(v->val0[i] * e->tx[i] + v->val1[i] * e->ty[i]));