24 template<
typename Real,
typename Scalar>
25 static Scalar l2_norm(
int n,
double *wt, Func<Scalar> *u, Func<Real> *v)
27 Scalar result = Scalar(0);
28 for (
int i = 0; i < n; i++)
29 result += wt[i] * u->val[i] * v->val[i];
33 template<
typename Real,
typename Scalar>
34 static Scalar h1_norm(
int n,
double *wt, Func<Scalar> *u, Func<Real> *v)
36 Scalar result = Scalar(0);
37 for (
int i = 0; i < n; i++)
38 result += wt[i] * (u->val[i] * conj(v->val[i]) + u->dx[i] * conj(v->dx[i]) + u->dy[i] * conj(v->dy[i]));
42 template<
typename Real,
typename Scalar>
43 static Scalar h1_seminorm(
int n,
double *wt, Func<Scalar> *u, Func<Real> *v)
45 Scalar result = Scalar(0);
46 for (
int i = 0; i < n; i++)
47 result += wt[i] * (u->val[i] * conj(v->val[i]) + u->dx[i] * conj(v->dx[i]) + u->dy[i] * conj(v->dy[i]));
51 template<
typename Real,
typename Scalar>
52 static Scalar hcurl_norm(
int n,
double *wt, Func<Scalar> *u, Func<Real> *v)
54 Scalar result = Scalar(0);
55 for (
int i = 0; i < n; i++)
56 result += wt[i] * (u->curl[i] * conj(v->curl[i]) + u->val0[i] * conj(v->val0[i]) + u->val1[i] * conj(v->val1[i]));
60 template<
typename Real,
typename Scalar>
61 static Scalar hdiv_norm(
int n,
double *wt, Func<Scalar> *u, Func<Real> *v)
63 Scalar result = Scalar(0);
64 for (
int i = 0; i < n; i++)
65 result += wt[i] * (u->div[i] * conj(v->div[i]) + u->val0[i] * conj(v->val0[i]) + u->val1[i] * conj(v->val1[i]));
69 NormForm::NormForm(
int i,
int j,
FunctionsEvaluatedType functionType) : i(i), j(j), functionType(functionType)
78 template<
typename Scalar>
83 template<
typename Scalar>
84 NormFormSurf<Scalar>::NormFormSurf(
int i,
int j) : NormForm(i, j)
88 template<
typename Scalar>
89 NormFormDG<Scalar>::NormFormDG(
int i,
int j) : NormForm(i, j)
93 template<
typename Scalar>
94 DefaultNormFormVol<Scalar>::DefaultNormFormVol(
int i,
int j,
NormType normType) : NormFormVol<Scalar>(i, j), normType(normType)
98 template<
typename Scalar>
99 Scalar DefaultNormFormVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u, Func<Scalar> *v, GeomVol<double> *e)
const
101 switch (this->normType)
104 return l2_norm<Scalar, Scalar>(n, wt, u, v);
106 return h1_norm<Scalar, Scalar>(n, wt, u, v);
107 case HERMES_H1_SEMINORM:
108 return h1_seminorm<Scalar, Scalar>(n, wt, u, v);
109 case HERMES_HCURL_NORM:
110 return hcurl_norm<Scalar, Scalar>(n, wt, u, v);
111 case HERMES_HDIV_NORM:
112 return hdiv_norm<Scalar, Scalar>(n, wt, u, v);
114 throw Hermes::Exceptions::Exception(
"Unknown norm in DefaultNormFormVol<Scalar>::value.");
118 template<
typename Scalar>
119 DefaultNormFormSurf<Scalar>::DefaultNormFormSurf(
int i,
int j,
NormType normType) : NormFormSurf<Scalar>(i, j), normType(normType)
123 template<
typename Scalar>
124 Scalar DefaultNormFormSurf<Scalar>::value(
int n,
double *wt, Func<Scalar> *u, Func<Scalar> *v, GeomSurf<double> *e)
const
126 switch (this->normType)
129 return l2_norm<Scalar, Scalar>(n, wt, u, v);
131 return h1_norm<Scalar, Scalar>(n, wt, u, v);
132 case HERMES_H1_SEMINORM:
133 return h1_seminorm<Scalar, Scalar>(n, wt, u, v);
134 case HERMES_HCURL_NORM:
135 return hcurl_norm<Scalar, Scalar>(n, wt, u, v);
136 case HERMES_HDIV_NORM:
137 return hdiv_norm<Scalar, Scalar>(n, wt, u, v);
139 throw Hermes::Exceptions::Exception(
"Unknown norm in DefaultNormFormSurf<Scalar>::value.");
144 template<
typename Scalar>
145 MatrixDefaultNormFormVol<Scalar>::MatrixDefaultNormFormVol(
int i,
int j,
NormType normType) : MatrixFormVol<Scalar>(i, j), normType(normType)
147 this->setSymFlag(HERMES_SYM);
150 template<
typename Scalar>
151 Scalar MatrixDefaultNormFormVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
152 Func<double> *v, GeomVol<double> *e, Func<Scalar> **ext)
const
154 switch (this->normType)
157 return l2_norm<double, double>(n, wt, u, v);
159 return h1_norm<double, double>(n, wt, u, v);
160 case HERMES_H1_SEMINORM:
161 return h1_seminorm<double, double>(n, wt, u, v);
162 case HERMES_HCURL_NORM:
163 return hcurl_norm<double, double>(n, wt, u, v);
164 case HERMES_HDIV_NORM:
165 return hdiv_norm<double, double>(n, wt, u, v);
167 throw Hermes::Exceptions::Exception(
"Unknown norm in MatrixDefaultNormFormVol<Scalar>::value.");
172 template<
typename Scalar>
173 Ord MatrixDefaultNormFormVol<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v,
174 GeomVol<Ord> *e, Func<Ord> **ext)
const
176 switch (this->normType)
179 return l2_norm<Ord, Ord>(n, wt, u, v);
181 return h1_norm<Ord, Ord>(n, wt, u, v);
182 case HERMES_H1_SEMINORM:
183 return h1_seminorm<Ord, Ord>(n, wt, u, v);
184 case HERMES_HCURL_NORM:
185 return hcurl_norm<Ord, Ord>(n, wt, u, v);
186 case HERMES_HDIV_NORM:
187 return hdiv_norm<Ord, Ord>(n, wt, u, v);
189 throw Hermes::Exceptions::Exception(
"Unknown norm in MatrixDefaultNormFormVol<Scalar>::ord.");
194 template<
typename Scalar>
195 MatrixFormVol<Scalar>* MatrixDefaultNormFormVol<Scalar>::clone()
const
197 return new MatrixDefaultNormFormVol(this->i, this->j, this->normType);
200 template<
typename Scalar>
201 VectorDefaultNormFormVol<Scalar>::VectorDefaultNormFormVol(
int i,
NormType normType) : VectorFormVol<Scalar>(i), normType(normType)
205 template<
typename Scalar>
206 Scalar VectorDefaultNormFormVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v, GeomVol<double> *e, Func<Scalar> **ext)
const
208 switch (this->normType)
211 return l2_norm<double, Scalar>(n, wt, ext[0], v);
213 return h1_norm<double, Scalar>(n, wt, ext[0], v);
214 case HERMES_H1_SEMINORM:
215 return h1_seminorm<double, Scalar>(n, wt, ext[0], v);
216 case HERMES_HCURL_NORM:
217 return hcurl_norm<double, Scalar>(n, wt, ext[0], v);
218 case HERMES_HDIV_NORM:
219 return hdiv_norm<double, Scalar>(n, wt, ext[0], v);
221 throw Hermes::Exceptions::Exception(
"Unknown norm in VectorDefaultNormFormVol<Scalar>::value.");
226 template<
typename Scalar>
227 Ord VectorDefaultNormFormVol<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
228 GeomVol<Ord> *e, Func<Ord> **ext)
const
230 switch (this->normType)
233 return l2_norm<Ord, Ord>(n, wt, ext[0], v);
235 return h1_norm<Ord, Ord>(n, wt, ext[0], v);
236 case HERMES_H1_SEMINORM:
237 return h1_seminorm<Ord, Ord>(n, wt, ext[0], v);
238 case HERMES_HCURL_NORM:
239 return hcurl_norm<Ord, Ord>(n, wt, ext[0], v);
240 case HERMES_HDIV_NORM:
241 return hdiv_norm<Ord, Ord>(n, wt, ext[0], v);
243 throw Hermes::Exceptions::Exception(
"Unknown norm in VectorDefaultNormFormVol<Scalar>::ord.");
248 template<
typename Scalar>
249 VectorFormVol<Scalar>* VectorDefaultNormFormVol<Scalar>::clone()
const
251 return new VectorDefaultNormFormVol(this->i, this->normType);
254 template HERMES_API
class NormFormVol < double > ;
255 template HERMES_API
class NormFormVol < std::complex<double> > ;
256 template HERMES_API
class NormFormSurf < double > ;
257 template HERMES_API
class NormFormSurf < std::complex<double> > ;
258 template HERMES_API
class NormFormDG < double > ;
259 template HERMES_API
class NormFormDG < std::complex<double> > ;
260 template HERMES_API
class DefaultNormFormVol < double > ;
261 template HERMES_API
class DefaultNormFormVol < std::complex<double> > ;
262 template HERMES_API
class DefaultNormFormSurf < double > ;
263 template HERMES_API
class DefaultNormFormSurf < std::complex<double> > ;
264 template HERMES_API
class MatrixDefaultNormFormVol < double > ;
265 template HERMES_API
class MatrixDefaultNormFormVol < std::complex<double> > ;
266 template HERMES_API
class VectorDefaultNormFormVol < double > ;
267 template HERMES_API
class VectorDefaultNormFormVol < std::complex<double> > ;
FunctionsEvaluatedType
Enum passed to the class NormForm specifying the functions the form acts upon.
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.