16 #include "weakforms_hcurl.h"
22 namespace WeakFormsHcurl
24 template<
typename Scalar>
25 DefaultMatrixFormVol<Scalar>::DefaultMatrixFormVol
26 (
int i,
int j,
std::string area, Scalar const_coeff,
27 Hermes2DFunction<Scalar>* f_coeff,
SymFlag sym,
29 : MatrixFormVol<Scalar>(i, j), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
32 this->setSymFlag(sym);
35 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
36 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
39 template<
typename Scalar>
40 DefaultMatrixFormVol<Scalar>::DefaultMatrixFormVol
41 (
int i,
int j, Hermes::vector<std::string> areas, Scalar const_coeff,
43 : MatrixFormVol<Scalar>(i, j), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
45 this->set_areas(areas);
46 this->setSymFlag(sym);
49 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
50 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
53 template<
typename Scalar>
54 DefaultMatrixFormVol<Scalar>::~DefaultMatrixFormVol()
56 if(function_coeff == HERMES_DEFAULT_FUNCTION)
57 delete function_coeff;
60 template<
typename Scalar>
61 Scalar DefaultMatrixFormVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
62 Func<double> *v, Geom<double> *e, Func<Scalar> **ext)
const
65 if(gt == HERMES_PLANAR)
67 result = const_coeff * int_e_f<double, Scalar>(n, wt, u, v);
69 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
74 template<
typename Scalar>
75 Ord DefaultMatrixFormVol<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v,
76 Geom<Ord> *e, Func<Ord> **ext)
const
79 if(gt == HERMES_PLANAR)
81 result = const_coeff * int_e_f<Ord, Ord>(n, wt, u, v);
83 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
88 template<
typename Scalar>
89 MatrixFormVol<Scalar>* DefaultMatrixFormVol<Scalar>::clone()
const
91 return new DefaultMatrixFormVol<Scalar>(*this);
94 template<
typename Scalar>
95 DefaultJacobianCurlCurl<Scalar>::DefaultJacobianCurlCurl(
int i,
int j,
std::string area, Scalar const_coeff,
96 CubicSpline* c_spline,
98 : MatrixFormVol<Scalar>(i, j),
99 idx_j(j), const_coeff(const_coeff), spline_coeff(c_spline), gt(gt)
101 this->set_area(area);
102 this->setSymFlag(sym);
105 if(c_spline == HERMES_DEFAULT_SPLINE) this->spline_coeff =
new CubicSpline(1.0);
106 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
109 template<
typename Scalar>
110 DefaultJacobianCurlCurl<Scalar>::DefaultJacobianCurlCurl(
int i,
int j, Hermes::vector<std::string> areas,
111 Scalar const_coeff, CubicSpline* c_spline,
113 : MatrixFormVol<Scalar>(i, j),
114 idx_j(j), const_coeff(const_coeff), spline_coeff(c_spline), gt(gt)
116 this->set_areas(areas);
117 this->setSymFlag(sym);
120 if(c_spline == HERMES_DEFAULT_SPLINE)
121 this->spline_coeff =
new CubicSpline(1.0);
122 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
125 template<
typename Scalar>
126 DefaultJacobianCurlCurl<Scalar>::~DefaultJacobianCurlCurl()
128 if(spline_coeff == HERMES_DEFAULT_SPLINE)
132 template<
typename Scalar>
133 Scalar DefaultJacobianCurlCurl<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
134 Func<double> *v, Geom<double> *e, Func<Scalar> **ext)
const
137 if(gt == HERMES_PLANAR)
139 result = const_coeff * int_curl_e_curl_f<double, Scalar>(n, wt, u, v);
141 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
146 template<
typename Scalar>
147 Ord DefaultJacobianCurlCurl<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v,
148 Geom<Ord> *e, Func<Ord> **ext)
const
151 if(gt == HERMES_PLANAR)
153 result = const_coeff * int_curl_e_curl_f<Ord, Ord>(n, wt, u, v);
155 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
160 template<
typename Scalar>
161 MatrixFormVol<Scalar>* DefaultJacobianCurlCurl<Scalar>::clone()
const
163 return new DefaultJacobianCurlCurl(*
this);
166 template<
typename Scalar>
167 DefaultVectorFormVol<Scalar>::DefaultVectorFormVol(
int i,
std::string area, Scalar const_coeff0, Scalar const_coeff1,
168 Hermes2DFunction<Scalar>* f_coeff0, Hermes2DFunction<Scalar>* f_coeff1,
170 : VectorFormVol<Scalar>(i), const_coeff0(const_coeff0), const_coeff1(const_coeff1),
171 function_coeff0(f_coeff0), function_coeff1(f_coeff1), gt(gt)
173 this->set_area(area);
176 if(f_coeff0 == HERMES_DEFAULT_FUNCTION) this->function_coeff0 =
new Hermes2DFunction<Scalar>(1.0);
177 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
178 if(f_coeff1 == HERMES_DEFAULT_FUNCTION) this->function_coeff1 =
new Hermes2DFunction<Scalar>(1.0);
179 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
182 template<
typename Scalar>
183 DefaultVectorFormVol<Scalar>::DefaultVectorFormVol(
int i, Hermes::vector<std::string> areas,
184 Scalar const_coeff0, Scalar const_coeff1,
185 Hermes2DFunction<Scalar>* f_coeff0, Hermes2DFunction<Scalar>* f_coeff1,
187 : VectorFormVol<Scalar>(i), const_coeff0(const_coeff0), const_coeff1(const_coeff1),
188 function_coeff0(f_coeff0), function_coeff1(f_coeff1), gt(gt)
190 this->set_areas(areas);
193 if(f_coeff0 == HERMES_DEFAULT_FUNCTION) this->function_coeff0 =
new Hermes2DFunction<Scalar>(1.0);
194 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
195 if(f_coeff1 == HERMES_DEFAULT_FUNCTION) this->function_coeff1 =
new Hermes2DFunction<Scalar>(1.0);
196 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
199 template<
typename Scalar>
200 DefaultVectorFormVol<Scalar>::~DefaultVectorFormVol()
202 if(function_coeff0 == HERMES_DEFAULT_FUNCTION)
delete function_coeff0;
203 if(function_coeff1 == HERMES_DEFAULT_FUNCTION)
delete function_coeff1;
206 template<
typename Scalar>
207 Scalar DefaultVectorFormVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
208 Geom<double> *e, Func<Scalar> **ext)
const
210 Scalar int_v0 = 0, int_v1 = 0;
211 for (
int i = 0; i < n; i++) int_v0 += wt[i] * v->val0[i];
212 for (
int i = 0; i < n; i++) int_v1 += wt[i] * v->val1[i];
213 return const_coeff0 * int_v0 + const_coeff1 * int_v1;
216 template<
typename Scalar>
217 Ord DefaultVectorFormVol<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
218 Geom<Ord> *e, Func<Ord> **ext)
const
220 Ord int_v0 = Ord(0), int_v1 = Ord(0);
221 for (
int i = 0; i < n; i++) int_v0 += wt[i] * v->val0[i];
222 for (
int i = 0; i < n; i++) int_v1 += wt[i] * v->val1[i];
223 return const_coeff0 * int_v0 + const_coeff1 * int_v1;
226 template<
typename Scalar>
227 VectorFormVol<Scalar>* DefaultVectorFormVol<Scalar>::clone()
const
229 return new DefaultVectorFormVol<Scalar>(*this);
232 template<
typename Scalar>
233 DefaultResidualVol<Scalar>::DefaultResidualVol(
int i,
std::string area, Scalar const_coeff,
234 Hermes2DFunction<Scalar>* f_coeff,
236 : VectorFormVol<Scalar>(i),
237 idx_i(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
239 this->set_area(area);
242 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
243 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
246 template<
typename Scalar>
247 DefaultResidualVol<Scalar>::DefaultResidualVol(
int i, Hermes::vector<std::string> areas, Scalar const_coeff,
248 Hermes2DFunction<Scalar>* f_coeff,
250 : VectorFormVol<Scalar>(i),
251 idx_i(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
253 this->set_areas(areas);
256 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
257 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
260 template<
typename Scalar>
261 DefaultResidualVol<Scalar>::~DefaultResidualVol()
263 if(function_coeff == HERMES_DEFAULT_FUNCTION)
delete function_coeff;
266 template<
typename Scalar>
267 Scalar DefaultResidualVol<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
268 Geom<double> *e, Func<Scalar> **ext)
const
271 if(gt == HERMES_PLANAR)
273 for (
int i = 0; i < n; i++)
275 result += wt[i] * function_coeff->value(e->x[i], e->y[i]) * (u_ext[idx_i]->val0[i] * v->val0[i] +
276 u_ext[idx_i]->val1[i] * v->val1[i]);
279 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
281 return const_coeff * result;
284 template<
typename Scalar>
285 Ord DefaultResidualVol<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
286 Geom<Ord> *e, Func<Ord> **ext)
const
289 if(gt == HERMES_PLANAR)
291 for (
int i = 0; i < n; i++)
293 result += wt[i] * function_coeff->value(e->x[i], e->y[i]) * u_ext[idx_i]->val[i] * v->val[i];
296 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
301 template<
typename Scalar>
302 VectorFormVol<Scalar>* DefaultResidualVol<Scalar>::clone()
const
304 return new DefaultResidualVol(*
this);
307 template<
typename Scalar>
308 DefaultResidualCurlCurl<Scalar>::DefaultResidualCurlCurl(
int i,
std::string area, Scalar const_coeff,
309 CubicSpline* c_spline,
311 : VectorFormVol<Scalar>(i),
312 idx_i(i), const_coeff(const_coeff), spline_coeff(c_spline), gt(gt)
314 this->set_area(area);
317 if(c_spline == HERMES_DEFAULT_SPLINE) this->spline_coeff =
new CubicSpline(1.0);
318 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
321 template<
typename Scalar>
322 DefaultResidualCurlCurl<Scalar>::DefaultResidualCurlCurl(
int i, Hermes::vector<std::string> areas, Scalar const_coeff,
323 CubicSpline* c_spline,
325 : VectorFormVol<Scalar>(i),
326 idx_i(i), const_coeff(const_coeff), spline_coeff(c_spline), gt(gt)
328 this->set_areas(areas);
331 if(c_spline == HERMES_DEFAULT_SPLINE) this->spline_coeff =
new CubicSpline(1.0);
332 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
335 template<
typename Scalar>
336 DefaultResidualCurlCurl<Scalar>::~DefaultResidualCurlCurl()
338 if(spline_coeff == HERMES_DEFAULT_SPLINE)
delete spline_coeff;
341 template<
typename Scalar>
342 Scalar DefaultResidualCurlCurl<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
343 Geom<double> *e, Func<Scalar> **ext)
const
345 Func<Scalar>* u_prev = u_ext[idx_i];
347 if(gt == HERMES_PLANAR)
349 for (
int i = 0; i < n; i++)
351 double mag0_i = std::abs(u_prev->val0[i]);
352 double mag1_i = std::abs(u_prev->val1[i]);
353 double mag_i = sqrt(sqr(mag0_i) + sqr(mag1_i));
354 result += wt[i] * const_coeff*spline_coeff->value(mag_i)
355 * (u_prev->curl[i] * conj(v->curl[i]));
358 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
363 template<
typename Scalar>
364 Ord DefaultResidualCurlCurl<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
365 Geom<Ord> *e, Func<Ord> **ext)
const
367 Func<Ord>* u_prev = u_ext[idx_i];
369 if(gt == HERMES_PLANAR)
371 for (
int i = 0; i < n; i++)
373 Ord mag0_i = u_prev->val0[i];
374 Ord mag1_i = u_prev->val1[i];
375 Ord mag_i = sqrt(sqr(mag0_i) + sqr(mag1_i));
376 result += wt[i] * const_coeff*spline_coeff->value(mag_i)
377 * (u_prev->curl[i] * conj(v->curl[i]));
380 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
385 template<
typename Scalar>
386 VectorFormVol<Scalar>* DefaultResidualCurlCurl<Scalar>::clone()
const
388 return new DefaultResidualCurlCurl(*
this);
391 template<
typename Scalar>
392 DefaultMatrixFormSurf<Scalar>::DefaultMatrixFormSurf(
int i,
int j,
std::string area,
393 Scalar const_coeff, Hermes2DFunction<Scalar>* f_coeff,
395 : MatrixFormSurf<Scalar>(i, j), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
397 this->set_area(area);
399 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
400 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
403 template<
typename Scalar>
404 DefaultMatrixFormSurf<Scalar>::DefaultMatrixFormSurf(
int i,
int j, Hermes::vector<std::string> areas,
405 Scalar const_coeff, Hermes2DFunction<Scalar>* f_coeff,
407 : MatrixFormSurf<Scalar>(i, j), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
409 this->set_areas(areas);
411 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
412 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
415 template<
typename Scalar>
416 DefaultMatrixFormSurf<Scalar>::~DefaultMatrixFormSurf()
418 if(function_coeff == HERMES_DEFAULT_FUNCTION)
delete function_coeff;
421 template<
typename Scalar>
422 Scalar DefaultMatrixFormSurf<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u, Func<double> *v,
423 Geom<double> *e, Func<Scalar> **ext)
const
426 if(gt == HERMES_PLANAR)
428 result = const_coeff * int_e_tau_f_tau<double, Scalar>(n, wt, u, v, e);
430 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemnted yet.");
435 template<
typename Scalar>
436 Ord DefaultMatrixFormSurf<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u,
437 Func<Ord> *v, Geom<Ord> *e, Func<Ord> **ext)
const
440 if(gt == HERMES_PLANAR)
442 result = const_coeff * int_e_tau_f_tau<Ord, Ord>(n, wt, u, v, e);
445 throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemnted yet.");
450 template<
typename Scalar>
451 MatrixFormSurf<Scalar>* DefaultMatrixFormSurf<Scalar>::clone()
const
453 return new DefaultMatrixFormSurf<Scalar>(*this);
456 template<
typename Scalar>
457 DefaultResidualSurf<Scalar>::DefaultResidualSurf(
int i,
std::string area,
458 Scalar const_coeff, Hermes2DFunction<Scalar>* f_coeff,
460 : VectorFormSurf<Scalar>(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
462 this->set_area(area);
464 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
465 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
468 template<
typename Scalar>
469 DefaultResidualSurf<Scalar>::DefaultResidualSurf(
int i, Hermes::vector<std::string> areas,
470 Scalar const_coeff, Hermes2DFunction<Scalar>* f_coeff,
472 : VectorFormSurf<Scalar>(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
475 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
476 else throw Hermes::Exceptions::Exception(
"Nonconstant functions in Hcurl forms not implemented yet.");
479 template<
typename Scalar>
480 DefaultResidualSurf<Scalar>::~DefaultResidualSurf()
482 if(function_coeff == HERMES_DEFAULT_FUNCTION)
delete function_coeff;
485 template<
typename Scalar>
486 Scalar DefaultResidualSurf<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
487 Geom<double> *e, Func<Scalar> **ext)
const
490 if(gt == HERMES_PLANAR)
492 for (
int i = 0; i < n; i++)
493 result += wt[i] * ( (u_ext[0]->val0[i] * e->tx[i] + u_ext[0]->val1[i] * e->ty[i]) *
494 conj(v->val0[i] * e->tx[i] + v->val1[i] * e->ty[i]));
495 result *= const_coeff;
497 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemnted yet.");
502 template<
typename Scalar>
503 Ord DefaultResidualSurf<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[],
504 Func<Ord> *v, Geom<Ord> *e, Func<Ord> **ext)
const
507 if(gt == HERMES_PLANAR)
509 for (
int i = 0; i < n; i++)
510 result += wt[i] * ( (u_ext[0]->val0[i] * e->tx[i] + u_ext[0]->val1[i] * e->ty[i]) *
511 conj(v->val0[i] * e->tx[i] + v->val1[i] * e->ty[i]));
513 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemnted yet.");
518 template<
typename Scalar>
519 VectorFormSurf<Scalar>* DefaultResidualSurf<Scalar>::clone()
const
521 return new DefaultResidualSurf(*
this);
524 template<
typename Scalar>
525 DefaultVectorFormSurf<Scalar>::DefaultVectorFormSurf(
int i,
std::string area, Scalar const_coeff,
526 Hermes2DFunction<Scalar>* f_coeff,
528 : VectorFormSurf<Scalar>(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
530 this->set_area(area);
532 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
533 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
536 template<
typename Scalar>
537 DefaultVectorFormSurf<Scalar>::DefaultVectorFormSurf(
int i, Hermes::vector<std::string> areas, Scalar const_coeff,
538 Hermes2DFunction<Scalar>* f_coeff,
540 : VectorFormSurf<Scalar>(i), const_coeff(const_coeff), function_coeff(f_coeff), gt(gt)
542 this->set_areas(areas);
544 if(f_coeff == HERMES_DEFAULT_FUNCTION) this->function_coeff =
new Hermes2DFunction<Scalar>(1.0);
545 else throw Hermes::Exceptions::Exception(
"Nonconstant coefficients in Hcurl forms not implemented yet.");
548 template<
typename Scalar>
549 DefaultVectorFormSurf<Scalar>::~DefaultVectorFormSurf()
551 if(function_coeff == HERMES_DEFAULT_FUNCTION)
delete function_coeff;
554 template<
typename Scalar>
555 Scalar DefaultVectorFormSurf<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
556 Geom<double> *e, Func<Scalar> **ext)
const
559 if(gt == HERMES_PLANAR)
561 for (
int i = 0; i < n; i++)
563 result += wt[i] * conj(v->val0[i] * e->tx[i] + v->val1[i] * e->ty[i]);
566 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
571 template<
typename Scalar>
572 Ord DefaultVectorFormSurf<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
573 Geom<Ord> *e, Func<Ord> **ext)
const
576 if(gt == HERMES_PLANAR)
578 for (
int i = 0; i < n; i++)
580 result += wt[i] * conj(v->val0[i] * e->tx[i] + v->val1[i] * e->ty[i]);
583 else throw Hermes::Exceptions::Exception(
"Axisymmetric Hcurl forms not implemented yet.");
588 template<
typename Scalar>
589 VectorFormSurf<Scalar>* DefaultVectorFormSurf<Scalar>::clone()
const
591 return new DefaultVectorFormSurf<Scalar>(*this);
594 template class HERMES_API DefaultJacobianCurlCurl<double>;
595 template class HERMES_API DefaultJacobianCurlCurl<std::complex<double> >;
596 template class HERMES_API DefaultMatrixFormVol<double>;
597 template class HERMES_API DefaultMatrixFormVol<std::complex<double> >;
598 template class HERMES_API DefaultVectorFormVol<double>;
599 template class HERMES_API DefaultVectorFormVol<std::complex<double> >;
600 template class HERMES_API DefaultResidualVol<double>;
601 template class HERMES_API DefaultResidualVol<std::complex<double> >;
602 template class HERMES_API DefaultResidualCurlCurl<double>;
603 template class HERMES_API DefaultResidualCurlCurl<std::complex<double> >;
604 template class HERMES_API DefaultMatrixFormSurf<double>;
605 template class HERMES_API DefaultMatrixFormSurf<std::complex<double> >;
606 template class HERMES_API DefaultVectorFormSurf<double>;
607 template class HERMES_API DefaultVectorFormSurf<std::complex<double> >;
608 template class HERMES_API DefaultResidualSurf<double>;
609 template class HERMES_API DefaultResidualSurf<std::complex<double> >;