BEM++  2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
default_kernel_trial_integral.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_default_kernel_trial_integral_hpp
22 #define fiber_default_kernel_trial_integral_hpp
23 
24 #include "kernel_trial_integral.hpp"
25 
26 namespace Fiber
27 {
28 
29 template <typename IntegrandFunctor>
31  public KernelTrialIntegral<
32  typename IntegrandFunctor::BasisFunctionType,
33  typename IntegrandFunctor::KernelType,
34  typename IntegrandFunctor::ResultType>
35 {
36  typedef KernelTrialIntegral<
37  typename IntegrandFunctor::BasisFunctionType,
38  typename IntegrandFunctor::KernelType,
39  typename IntegrandFunctor::ResultType>
40  Base;
41 public:
42  typedef typename Base::CoordinateType CoordinateType;
43  typedef typename Base::BasisFunctionType BasisFunctionType;
44  typedef typename Base::KernelType KernelType;
45  typedef typename Base::ResultType ResultType;
46 
47  explicit DefaultKernelTrialIntegral(const IntegrandFunctor& functor) :
48  m_functor(functor)
49  {}
50 
51  virtual int resultDimension() const;
52 
53  virtual void addGeometricalDependencies(size_t& trialGeomDeps) const;
54 
55  virtual void evaluate(
56  const GeometricalData<CoordinateType>& trialGeomData,
57  const CollectionOf4dArrays<KernelType>& kernels,
58  const CollectionOf2dArrays<ResultType>& weightedTrialTransformations,
59  const std::vector<CoordinateType>& weights,
60  _2dArray<ResultType>& result) const;
61 
62  virtual void evaluateWithPureWeights(
63  const GeometricalData<CoordinateType>& trialGeomData,
64  const CollectionOf4dArrays<KernelType>& kernels,
65  const CollectionOf3dArrays<BasisFunctionType>& trialTransformations,
66  const std::vector<CoordinateType>& weights,
67  _3dArray<ResultType>& result) const;
68 
69 private:
70  IntegrandFunctor m_functor;
71 };
72 
73 } // namespace Fiber
74 
75 #include "default_kernel_trial_integral_imp.hpp"
76 
77 #endif
Storage of geometrical data.
Definition: geometrical_data.hpp:54
Definition: collection_of_3d_arrays.hpp:39
Definition: default_kernel_trial_integral.hpp:30
Definition: kernel_trial_integral.hpp:42
Simple implementation of a 2D Fortran-ordered array.
Definition: _2d_array.hpp:41
Definition: collection_of_4d_arrays.hpp:41
Simple implementation of a 3D Fortran-ordered array.
Definition: _3d_array.hpp:48