BEM++  2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
numerical_quadrature_strategy_imp.hpp
1 // Copyright (C) 2011-2012 by the Bem++ Authors
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 // THE SOFTWARE.
20 
21 #ifndef fiber_numerical_quadrature_strategy_imp_hpp
22 #define fiber_numerical_quadrature_strategy_imp_hpp
23 
24 #include "numerical_quadrature_strategy.hpp"
25 
26 #include "default_local_assembler_for_grid_functions_on_surfaces.hpp"
27 #include "default_local_assembler_for_integral_operators_on_surfaces.hpp"
28 #include "default_local_assembler_for_local_operators_on_surfaces.hpp"
29 #include "default_local_assembler_for_potential_operators_on_surfaces.hpp"
30 #include "default_evaluator_for_integral_operators.hpp"
31 #include "default_quadrature_descriptor_selector_factory.hpp"
32 
33 #include "default_double_quadrature_rule_family.hpp"
34 #include "default_single_quadrature_rule_family.hpp"
35 
36 #include "default_test_trial_integral_imp.hpp"
37 #include "simple_test_trial_integrand_functor.hpp"
38 
39 #include "../common/boost_make_shared_fwd.hpp"
40 
41 #include <stdexcept>
42 
43 namespace Fiber
44 {
45 
46 template <typename BasisFunctionType, typename ResultType,
47  typename GeometryFactory, typename Enable>
48 NumericalQuadratureStrategyBase<
49 BasisFunctionType, ResultType, GeometryFactory, Enable>::
50 NumericalQuadratureStrategyBase(
51  const shared_ptr<const QuadratureDescriptorSelectorFactory<BasisFunctionType> >&
52  quadratureDescriptorSelectorFactory,
53  const shared_ptr<const SingleQuadratureRuleFamily<CoordinateType> >&
54  singleQuadratureRuleFamily,
55  const shared_ptr<const DoubleQuadratureRuleFamily<CoordinateType> >&
56  doubleQuadratureRuleFamily) :
57  m_quadratureDescriptorSelectorFactory(
58  quadratureDescriptorSelectorFactory),
59  m_singleQuadratureRuleFamily(singleQuadratureRuleFamily),
60  m_doubleQuadratureRuleFamily(doubleQuadratureRuleFamily)
61 {
62 }
63 
64 template <typename BasisFunctionType, typename ResultType,
65  typename GeometryFactory, typename Enable>
66 std::auto_ptr<LocalAssemblerForLocalOperators<ResultType> >
67 NumericalQuadratureStrategyBase<
68 BasisFunctionType, ResultType, GeometryFactory, Enable>::
69 makeAssemblerForIdentityOperators(
70  const shared_ptr<const GeometryFactory>& geometryFactory,
71  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
72  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
73  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
74  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
75  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
76  const shared_ptr<const OpenClHandler>& openClHandler) const
77 {
79  IntegrandFunctor;
80  shared_ptr<TestTrialIntegral<BasisFunctionType, ResultType> > integral(
82  IntegrandFunctor()));
83  return makeAssemblerForLocalOperators(
84  geometryFactory, rawGeometry,
85  testShapesets, trialShapesets,
86  testTransformations, trialTransformations, integral,
87  openClHandler);
88 }
89 
90 template <typename BasisFunctionType, typename ResultType,
91  typename GeometryFactory, typename Enable>
92 std::auto_ptr<LocalAssemblerForLocalOperators<ResultType> >
93 NumericalQuadratureStrategyBase<
94 BasisFunctionType, ResultType, GeometryFactory, Enable>::
95 makeAssemblerForLocalOperators(
96  const shared_ptr<const GeometryFactory>& geometryFactory,
97  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
98  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
99  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
100  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
101  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
102  const shared_ptr<const TestTrialIntegral<BasisFunctionType, ResultType> >& integral,
103  const shared_ptr<const OpenClHandler>& openClHandler) const
104 {
105  typedef DefaultLocalAssemblerForLocalOperatorsOnSurfaces<
106  BasisFunctionType, ResultType, GeometryFactory>
107  LocalAssemblerForLocalOperators_;
108  return std::auto_ptr<LocalAssemblerForLocalOperators<ResultType> >(
109  new LocalAssemblerForLocalOperators_(
110  geometryFactory, rawGeometry,
111  testShapesets, trialShapesets,
112  testTransformations, trialTransformations, integral,
113  openClHandler,
114  this->quadratureDescriptorSelectorFactory()->
115  makeQuadratureDescriptorSelectorForLocalOperators(
116  rawGeometry, testShapesets, trialShapesets),
117  this->singleQuadratureRuleFamily()));
118 }
119 
120 template <typename BasisFunctionType, typename ResultType,
121  typename GeometryFactory, typename Enable>
122 std::auto_ptr<LocalAssemblerForIntegralOperators<ResultType> >
123 NumericalQuadratureStrategyBase<
124 BasisFunctionType, ResultType, GeometryFactory, Enable>::
125 makeAssemblerForIntegralOperatorsImplRealKernel(
126  const shared_ptr<const GeometryFactory>& testGeometryFactory,
127  const shared_ptr<const GeometryFactory>& trialGeometryFactory,
128  const shared_ptr<const RawGridGeometry<CoordinateType> >& testRawGeometry,
129  const shared_ptr<const RawGridGeometry<CoordinateType> >& trialRawGeometry,
130  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
131  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
132  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
133  const shared_ptr<const CollectionOfKernels<CoordinateType> >& kernels,
134  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
135  const shared_ptr<const TestKernelTrialIntegral<BasisFunctionType, CoordinateType, ResultType> >& integral,
136  const shared_ptr<const OpenClHandler>& openClHandler,
137  const ParallelizationOptions& parallelizationOptions,
138  VerbosityLevel::Level verbosityLevel,
139  bool cacheSingularIntegrals) const
140 {
141  typedef CoordinateType KernelType;
142  typedef DefaultLocalAssemblerForIntegralOperatorsOnSurfaces<
143  BasisFunctionType, KernelType, ResultType, GeometryFactory>
144  LocalAssemblerForIntegralOperators_;
145  return std::auto_ptr<LocalAssemblerForIntegralOperators<ResultType> >(
146  new LocalAssemblerForIntegralOperators_(
147  testGeometryFactory, trialGeometryFactory,
148  testRawGeometry, trialRawGeometry,
149  testShapesets, trialShapesets,
150  testTransformations, kernels, trialTransformations, integral,
151  openClHandler, parallelizationOptions,
152  verbosityLevel,
153  cacheSingularIntegrals,
154  this->quadratureDescriptorSelectorFactory()->
155  makeQuadratureDescriptorSelectorForIntegralOperators(
156  testRawGeometry, trialRawGeometry,
157  testShapesets, trialShapesets),
158  this->doubleQuadratureRuleFamily()));
159 }
160 
161 template <typename BasisFunctionType, typename ResultType,
162  typename GeometryFactory, typename Enable>
163 std::auto_ptr<LocalAssemblerForGridFunctions<ResultType> >
164 NumericalQuadratureStrategyBase<
165 BasisFunctionType, ResultType, GeometryFactory, Enable>::
166 makeAssemblerForGridFunctionsImplRealUserFunction(
167  const shared_ptr<const GeometryFactory>& geometryFactory,
168  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
169  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
170  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
171  const shared_ptr<const Function<CoordinateType> >& function,
172  const shared_ptr<const OpenClHandler>& openClHandler) const
173 {
174  typedef CoordinateType UserFunctionType;
175  typedef DefaultLocalAssemblerForGridFunctionsOnSurfaces<
176  BasisFunctionType, UserFunctionType, ResultType, GeometryFactory>
177  LocalAssemblerForGridFunctions_;
178  return std::auto_ptr<LocalAssemblerForGridFunctions<ResultType> >(
179  new LocalAssemblerForGridFunctions_(
180  geometryFactory, rawGeometry,
181  testShapesets,
182  testTransformations, function,
183  openClHandler,
184  this->quadratureDescriptorSelectorFactory()->
185  makeQuadratureDescriptorSelectorForGridFunctions(
186  rawGeometry, testShapesets),
187  this->singleQuadratureRuleFamily()));
188 }
189 
190 template <typename BasisFunctionType, typename ResultType,
191  typename GeometryFactory, typename Enable>
192 std::auto_ptr<EvaluatorForIntegralOperators<ResultType> >
193 NumericalQuadratureStrategyBase<
194 BasisFunctionType, ResultType, GeometryFactory, Enable>::
195 makeEvaluatorForIntegralOperatorsImplRealKernel(
196  const shared_ptr<const GeometryFactory>& geometryFactory,
197  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
198  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
199  const shared_ptr<const CollectionOfKernels<CoordinateType> >& kernels,
200  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
201  const shared_ptr<const KernelTrialIntegral<BasisFunctionType, CoordinateType, ResultType> >& integral,
202  const shared_ptr<const std::vector<std::vector<ResultType> > >& argumentLocalCoefficients,
203  const shared_ptr<const OpenClHandler>& openClHandler,
204  const ParallelizationOptions& parallelizationOptions) const
205 {
206  typedef CoordinateType KernelType;
207  typedef DefaultEvaluatorForIntegralOperators<
208  BasisFunctionType, KernelType, ResultType, GeometryFactory>
209  EvaluatorForIntegralOperators_;
210  return std::auto_ptr<EvaluatorForIntegralOperators<ResultType> >(
211  new EvaluatorForIntegralOperators_(
212  geometryFactory, rawGeometry,
213  trialShapesets,
214  kernels, trialTransformations, integral,
215  argumentLocalCoefficients,
216  openClHandler,
217  parallelizationOptions,
218  this->quadratureDescriptorSelectorFactory()->
219  makeQuadratureDescriptorSelectorForPotentialOperators(
220  rawGeometry, trialShapesets),
221  this->singleQuadratureRuleFamily()));
222 }
223 
224 template <typename BasisFunctionType, typename ResultType,
225  typename GeometryFactory, typename Enable>
226 std::auto_ptr<LocalAssemblerForPotentialOperators<ResultType> >
227 NumericalQuadratureStrategyBase<
228 BasisFunctionType, ResultType, GeometryFactory, Enable>::
229 makeAssemblerForPotentialOperatorsImplRealKernel(
230  const arma::Mat<CoordinateType>& evaluationPoints,
231  const shared_ptr<const GeometryFactory>& geometryFactory,
232  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
233  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
234  const shared_ptr<const CollectionOfKernels<CoordinateType> >& kernels,
235  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
236  const shared_ptr<const KernelTrialIntegral<BasisFunctionType, CoordinateType, ResultType> >& integral,
237  const shared_ptr<const OpenClHandler>& openClHandler,
238  const ParallelizationOptions& parallelizationOptions,
239  VerbosityLevel::Level verbosityLevel) const
240 {
241  typedef CoordinateType KernelType;
242  typedef DefaultLocalAssemblerForPotentialOperatorsOnSurfaces<
243  BasisFunctionType, KernelType, ResultType, GeometryFactory>
244  LocalAssemblerForPotentialOperators_;
245  return std::auto_ptr<LocalAssemblerForPotentialOperators<ResultType> >(
246  new LocalAssemblerForPotentialOperators_(
247  evaluationPoints,
248  geometryFactory, rawGeometry,
249  trialShapesets,
250  kernels, trialTransformations, integral,
251  parallelizationOptions,
252  verbosityLevel,
253  this->quadratureDescriptorSelectorFactory()->
254  makeQuadratureDescriptorSelectorForPotentialOperators(
255  rawGeometry, trialShapesets),
256  this->singleQuadratureRuleFamily()));
257 }
258 
259 template <typename BasisFunctionType, typename ResultType,
260  typename GeometryFactory, typename Enable>
261 shared_ptr<const QuadratureDescriptorSelectorFactory<BasisFunctionType> >
262 NumericalQuadratureStrategyBase<
263 BasisFunctionType, ResultType, GeometryFactory, Enable>::
264 quadratureDescriptorSelectorFactory() const
265 {
266  return m_quadratureDescriptorSelectorFactory;
267 }
268 
269 template <typename BasisFunctionType, typename ResultType,
270  typename GeometryFactory, typename Enable>
271 shared_ptr<const DoubleQuadratureRuleFamily<
272 typename NumericalQuadratureStrategyBase<
273  BasisFunctionType, ResultType, GeometryFactory, Enable>::CoordinateType> >
274 NumericalQuadratureStrategyBase<
275 BasisFunctionType, ResultType, GeometryFactory, Enable>::
276 doubleQuadratureRuleFamily() const
277 {
278  return m_doubleQuadratureRuleFamily;
279 }
280 
281 template <typename BasisFunctionType, typename ResultType,
282  typename GeometryFactory, typename Enable>
283 shared_ptr<const SingleQuadratureRuleFamily<
284 typename NumericalQuadratureStrategyBase<
285  BasisFunctionType, ResultType, GeometryFactory, Enable>::CoordinateType> >
286 NumericalQuadratureStrategyBase<
287 BasisFunctionType, ResultType, GeometryFactory, Enable>::
288 singleQuadratureRuleFamily() const
289 {
290  return m_singleQuadratureRuleFamily;
291 }
292 
293 // Complex ResultType
294 template <typename BasisFunctionType, typename ResultType,
295  typename GeometryFactory, typename Enable>
296 NumericalQuadratureStrategy<
297 BasisFunctionType, ResultType, GeometryFactory, Enable>::
298 NumericalQuadratureStrategy() :
299  Base(
300  boost::make_shared<
301  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(),
302  boost::make_shared<
303  DefaultSingleQuadratureRuleFamily<CoordinateType> >(),
304  boost::make_shared<
305  DefaultDoubleQuadratureRuleFamily<CoordinateType> >())
306 {
307 }
308 
309 template <typename BasisFunctionType, typename ResultType,
310  typename GeometryFactory, typename Enable>
312 BasisFunctionType, ResultType, GeometryFactory, Enable>::
314  const AccuracyOptionsEx& accuracyOptions) :
315  Base(
316  boost::make_shared<
317  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(
318  accuracyOptions),
319  boost::make_shared<
320  DefaultSingleQuadratureRuleFamily<CoordinateType> >(),
321  boost::make_shared<
322  DefaultDoubleQuadratureRuleFamily<CoordinateType> >())
323 {
324 }
325 
326 template <typename BasisFunctionType, typename ResultType,
327  typename GeometryFactory, typename Enable>
329 BasisFunctionType, ResultType, GeometryFactory, Enable>::
331  const AccuracyOptionsEx& accuracyOptions,
332  const shared_ptr<const SingleQuadratureRuleFamily<CoordinateType> >&
333  singleQuadratureRuleFamily,
334  const shared_ptr<const DoubleQuadratureRuleFamily<CoordinateType> >&
335  doubleQuadratureRuleFamily) :
336  Base(
337  boost::make_shared<
338  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(accuracyOptions),
339  singleQuadratureRuleFamily,
340  doubleQuadratureRuleFamily)
341 {
342 }
343 
344 template <typename BasisFunctionType, typename ResultType,
345  typename GeometryFactory, typename Enable>
347 BasisFunctionType, ResultType, GeometryFactory, Enable>::
350  quadratureDescriptorSelectorFactory,
351  const shared_ptr<const SingleQuadratureRuleFamily<CoordinateType> >&
352  singleQuadratureRuleFamily,
353  const shared_ptr<const DoubleQuadratureRuleFamily<CoordinateType> >&
354  doubleQuadratureRuleFamily) :
355  Base(
356  quadratureDescriptorSelectorFactory,
357  singleQuadratureRuleFamily,
358  doubleQuadratureRuleFamily)
359 {
360 }
361 
362 template <typename BasisFunctionType, typename ResultType,
363  typename GeometryFactory, typename Enable>
364 std::auto_ptr<LocalAssemblerForIntegralOperators<ResultType> >
366 BasisFunctionType, ResultType, GeometryFactory, Enable>::
367 makeAssemblerForIntegralOperatorsImplComplexKernel(
368  const shared_ptr<const GeometryFactory>& testGeometryFactory,
369  const shared_ptr<const GeometryFactory>& trialGeometryFactory,
370  const shared_ptr<const RawGridGeometry<CoordinateType> >& testRawGeometry,
371  const shared_ptr<const RawGridGeometry<CoordinateType> >& trialRawGeometry,
372  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
373  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
374  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
375  const shared_ptr<const CollectionOfKernels<ResultType> >& kernels,
376  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
378  const shared_ptr<const OpenClHandler>& openClHandler,
379  const ParallelizationOptions& parallelizationOptions,
380  VerbosityLevel::Level verbosityLevel,
381  bool cacheSingularIntegrals) const
382 {
383  typedef ResultType KernelType;
385  BasisFunctionType, KernelType, ResultType, GeometryFactory>
386  LocalAssemblerForIntegralOperators_;
387  return std::auto_ptr<LocalAssemblerForIntegralOperators<ResultType> >(
388  new LocalAssemblerForIntegralOperators_(
389  testGeometryFactory, trialGeometryFactory,
390  testRawGeometry, trialRawGeometry,
391  testShapesets, trialShapesets,
392  testTransformations, kernels, trialTransformations, integral,
393  openClHandler, parallelizationOptions,
394  verbosityLevel,
395  cacheSingularIntegrals,
396  this->quadratureDescriptorSelectorFactory()->
397  makeQuadratureDescriptorSelectorForIntegralOperators(
398  testRawGeometry, trialRawGeometry,
399  testShapesets, trialShapesets),
400  this->doubleQuadratureRuleFamily()));
401 }
402 
403 template <typename BasisFunctionType, typename ResultType,
404  typename GeometryFactory, typename Enable>
405 std::auto_ptr<LocalAssemblerForGridFunctions<ResultType> >
406 NumericalQuadratureStrategy<
407 BasisFunctionType, ResultType, GeometryFactory, Enable>::
408 makeAssemblerForGridFunctionsImplComplexUserFunction(
409  const shared_ptr<const GeometryFactory>& geometryFactory,
410  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
411  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& testShapesets,
412  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& testTransformations,
413  const shared_ptr<const Function<ResultType> >& function,
414  const shared_ptr<const OpenClHandler>& openClHandler) const
415 {
416  typedef ResultType UserFunctionType;
417  typedef DefaultLocalAssemblerForGridFunctionsOnSurfaces<
418  BasisFunctionType, UserFunctionType, ResultType, GeometryFactory>
419  LocalAssemblerForGridFunctions_;
420  return std::auto_ptr<LocalAssemblerForGridFunctions<ResultType> >(
421  new LocalAssemblerForGridFunctions_(
422  geometryFactory, rawGeometry,
423  testShapesets,
424  testTransformations, function,
425  openClHandler,
426  this->quadratureDescriptorSelectorFactory()->
427  makeQuadratureDescriptorSelectorForGridFunctions(
428  rawGeometry, testShapesets),
429  this->singleQuadratureRuleFamily()));
430 }
431 
432 template <typename BasisFunctionType, typename ResultType,
433  typename GeometryFactory, typename Enable>
434 std::auto_ptr<EvaluatorForIntegralOperators<ResultType> >
435 NumericalQuadratureStrategy<
436 BasisFunctionType, ResultType, GeometryFactory, Enable>::
437 makeEvaluatorForIntegralOperatorsImplComplexKernel(
438  const shared_ptr<const GeometryFactory>& geometryFactory,
439  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
440  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
441  const shared_ptr<const CollectionOfKernels<ResultType> >& kernels,
442  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
443  const shared_ptr<const KernelTrialIntegral<BasisFunctionType, ResultType, ResultType> >& integral,
444  const shared_ptr<const std::vector<std::vector<ResultType> > >& argumentLocalCoefficients,
445  const shared_ptr<const OpenClHandler>& openClHandler,
446  const ParallelizationOptions& parallelizationOptions) const
447 {
448  typedef ResultType KernelType;
449  typedef DefaultEvaluatorForIntegralOperators<
450  BasisFunctionType, KernelType, ResultType, GeometryFactory>
451  EvaluatorForIntegralOperators_;
452  return std::auto_ptr<EvaluatorForIntegralOperators<ResultType> >(
453  new EvaluatorForIntegralOperators_(
454  geometryFactory, rawGeometry,
455  trialShapesets,
456  kernels, trialTransformations, integral,
457  argumentLocalCoefficients,
458  openClHandler,
459  parallelizationOptions,
460  this->quadratureDescriptorSelectorFactory()->
461  makeQuadratureDescriptorSelectorForPotentialOperators(
462  rawGeometry, trialShapesets),
463  this->singleQuadratureRuleFamily()));
464 }
465 
466 template <typename BasisFunctionType, typename ResultType,
467  typename GeometryFactory, typename Enable>
468 std::auto_ptr<LocalAssemblerForPotentialOperators<ResultType> >
469 NumericalQuadratureStrategy<
470 BasisFunctionType, ResultType, GeometryFactory, Enable>::
471 makeAssemblerForPotentialOperatorsImplComplexKernel(
472  const arma::Mat<CoordinateType>& evaluationPoints,
473  const shared_ptr<const GeometryFactory>& geometryFactory,
474  const shared_ptr<const RawGridGeometry<CoordinateType> >& rawGeometry,
475  const shared_ptr<const std::vector<const Shapeset<BasisFunctionType>*> >& trialShapesets,
476  const shared_ptr<const CollectionOfKernels<ResultType> >& kernels,
477  const shared_ptr<const CollectionOfShapesetTransformations<CoordinateType> >& trialTransformations,
478  const shared_ptr<const KernelTrialIntegral<BasisFunctionType, ResultType, ResultType> >& integral,
479  const shared_ptr<const OpenClHandler>& openClHandler,
480  const ParallelizationOptions& parallelizationOptions,
481  VerbosityLevel::Level verbosityLevel) const
482 {
483  typedef ResultType KernelType;
484  typedef DefaultLocalAssemblerForPotentialOperatorsOnSurfaces<
485  BasisFunctionType, KernelType, ResultType, GeometryFactory>
486  LocalAssemblerForPotentialOperators_;
487  return std::auto_ptr<LocalAssemblerForPotentialOperators<ResultType> >(
488  new LocalAssemblerForPotentialOperators_(
489  evaluationPoints,
490  geometryFactory, rawGeometry,
491  trialShapesets,
492  kernels, trialTransformations, integral,
493  parallelizationOptions,
494  verbosityLevel,
495  this->quadratureDescriptorSelectorFactory()->
496  makeQuadratureDescriptorSelectorForPotentialOperators(
497  rawGeometry, trialShapesets),
498  this->singleQuadratureRuleFamily()));
499 }
500 
501 template <typename BasisFunctionType, typename ResultType, typename GeometryFactory>
502 NumericalQuadratureStrategy<
503  BasisFunctionType, ResultType, GeometryFactory,
504  typename boost::enable_if<
505  boost::is_same<ResultType,
506  typename ScalarTraits<ResultType>::RealType> >::type>::
507 NumericalQuadratureStrategy() :
508  Base(
509  boost::make_shared<
510  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(),
511  boost::make_shared<
512  DefaultSingleQuadratureRuleFamily<CoordinateType> >(),
513  boost::make_shared<
514  DefaultDoubleQuadratureRuleFamily<CoordinateType> >())
515 {
516 }
517 
518 template <typename BasisFunctionType, typename ResultType, typename GeometryFactory>
519 NumericalQuadratureStrategy<
520  BasisFunctionType, ResultType, GeometryFactory,
521  typename boost::enable_if<
522  boost::is_same<ResultType,
523  typename ScalarTraits<ResultType>::RealType> >::type>::
524 NumericalQuadratureStrategy(
525  const AccuracyOptionsEx& accuracyOptions) :
526  Base(
527  boost::make_shared<
528  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(
529  accuracyOptions),
530  boost::make_shared<
531  DefaultSingleQuadratureRuleFamily<CoordinateType> >(),
532  boost::make_shared<
533  DefaultDoubleQuadratureRuleFamily<CoordinateType> >())
534 {
535 }
536 
537 template <typename BasisFunctionType, typename ResultType, typename GeometryFactory>
538 NumericalQuadratureStrategy<
539  BasisFunctionType, ResultType, GeometryFactory,
540  typename boost::enable_if<
541  boost::is_same<ResultType,
542  typename ScalarTraits<ResultType>::RealType> >::type>::
543 NumericalQuadratureStrategy(
544  const AccuracyOptionsEx& accuracyOptions,
545  const shared_ptr<const SingleQuadratureRuleFamily<CoordinateType> >&
546  singleQuadratureRuleFamily,
547  const shared_ptr<const DoubleQuadratureRuleFamily<CoordinateType> >&
548  doubleQuadratureRuleFamily) :
549  Base(
550  boost::make_shared<
551  DefaultQuadratureDescriptorSelectorFactory<BasisFunctionType> >(accuracyOptions),
552  singleQuadratureRuleFamily,
553  doubleQuadratureRuleFamily)
554 {
555 }
556 
557 template <typename BasisFunctionType, typename ResultType, typename GeometryFactory>
558 NumericalQuadratureStrategy<
559  BasisFunctionType, ResultType, GeometryFactory,
560  typename boost::enable_if<
561  boost::is_same<ResultType,
562  typename ScalarTraits<ResultType>::RealType> >::type>::
563 NumericalQuadratureStrategy(
564  const shared_ptr<const QuadratureDescriptorSelectorFactory<BasisFunctionType> >&
565  quadratureDescriptorSelectorFactory,
566  const shared_ptr<const SingleQuadratureRuleFamily<CoordinateType> >&
567  singleQuadratureRuleFamily,
568  const shared_ptr<const DoubleQuadratureRuleFamily<CoordinateType> >&
569  doubleQuadratureRuleFamily) :
570  Base(
571  quadratureDescriptorSelectorFactory,
572  singleQuadratureRuleFamily,
573  doubleQuadratureRuleFamily)
574 {
575 }
576 
577 } // namespace Fiber
578 
579 #endif
An integral representing the weak form of an integral operator.
Definition: test_kernel_trial_integral.hpp:70
Collection of kernels.
Definition: collection_of_kernels.hpp:59
Base class for quadrature strategies.
Definition: quadrature_strategy.hpp:242
Parallel operation settings.
Definition: parallelization_options.hpp:32
Collection of shape functions defined on a reference element.
Definition: default_local_assembler_for_operators_on_surfaces_utilities.hpp:34
Builder of quadrature descriptor selectors.
Definition: numerical_quadrature_strategy.hpp:33
Definition: default_local_assembler_for_integral_operators_on_surfaces.hpp:67
Quadrature strategy according to which integrals are evaluated by numerical quadrature.
Definition: numerical_quadrature_strategy.hpp:248
Definition: default_test_trial_integral.hpp:30
New-style options controlling quadrature accuracy.
Definition: accuracy_options.hpp:53
Definition: default_local_assembler_for_operators_on_surfaces_utilities.hpp:35
Family of quadrature rules over single elements.
Definition: numerical_quadrature_strategy.hpp:35
Family of quadrature rules over pairs of elements.
Definition: double_quadrature_rule_family.hpp:52
Definition: default_quadrature_descriptor_selector_factory.hpp:31
Default family of quadrature rules over single elements.
Definition: default_single_quadrature_rule_family.hpp:31
Functor evaluating the integrand of the standard identity operator.
Definition: simple_test_trial_integrand_functor.hpp:43
Default family of quadrature rules over pairs of elements.
Definition: default_double_quadrature_rule_family.hpp:35