21 #ifndef fiber_separable_numerical_test_kernel_trial_integrator_hpp
22 #define fiber_separable_numerical_test_kernel_trial_integrator_hpp
24 #include "../common/common.hpp"
26 #include "bempp/common/config_opencl.hpp"
28 #include "test_kernel_trial_integrator.hpp"
30 #include <tbb/enumerable_thread_specific.h>
37 template <
typename CoordinateType>
class CollectionOfShapesetTransformations;
38 template <
typename ValueType>
class CollectionOfKernels;
39 template <
typename CoordinateType>
class RawGridGeometry;
40 template <
typename BasisFunctionType,
typename KernelType,
typename ResultType>
41 class TestKernelTrialIntegral;
45 template <
typename BasisFunctionType,
typename KernelType,
46 typename ResultType,
typename GeometryFactory>
52 typedef typename Base::CoordinateType CoordinateType;
53 typedef typename Base::ElementIndexPair ElementIndexPair;
56 const arma::Mat<CoordinateType>& localTestQuadPoints,
57 const arma::Mat<CoordinateType>& localTrialQuadPoints,
58 const std::vector<CoordinateType>& testQuadWeights,
59 const std::vector<CoordinateType>& trialQuadWeights,
60 const GeometryFactory& testGeometryFactory,
61 const GeometryFactory& trialGeometryFactory,
69 bool cacheGeometricalData =
true);
73 virtual void integrate(
74 CallVariant callVariant,
75 const std::vector<int>& elementIndicesA,
79 LocalDofIndex localDofIndexB,
80 const std::vector<arma::Mat<ResultType>*>& result)
const;
82 virtual void integrate(
83 const std::vector<ElementIndexPair>& elementIndexPairs,
86 const std::vector<arma::Mat<ResultType>*>& result)
const;
90 CallVariant callVariant,
91 const std::vector<int>& elementIndicesA,
95 LocalDofIndex localDofIndexB,
96 const std::vector<arma::Mat<ResultType>*>& result)
const;
99 CallVariant callVariant,
100 const std::vector<int>& elementIndicesA,
104 LocalDofIndex localDofIndexB,
105 const std::vector<arma::Mat<ResultType>*>& result)
const;
108 const std::vector<ElementIndexPair>& elementIndexPairs,
111 const std::vector<arma::Mat<ResultType>*>& result)
const;
114 const std::vector<ElementIndexPair>& elementIndexPairs,
117 const std::vector<arma::Mat<ResultType>*>& result)
const;
119 void precalculateGeometricalData();
120 void precalculateGeometricalDataOnSingleGrid(
121 const arma::Mat<CoordinateType>& localQuadPoints,
122 const GeometryFactory& geometryFactory,
133 arma::Mat<CoordinateType> m_localTestQuadPoints;
134 arma::Mat<CoordinateType> m_localTrialQuadPoints;
135 std::vector<CoordinateType> m_testQuadWeights;
136 std::vector<CoordinateType> m_trialQuadWeights;
138 const GeometryFactory& m_testGeometryFactory;
139 const GeometryFactory& m_trialGeometryFactory;
149 bool m_cacheGeometricalData;
151 std::vector<GeometricalData<CoordinateType> > m_cachedTestGeomData;
152 std::vector<GeometricalData<CoordinateType> > m_cachedTrialGeomData;
153 mutable tbb::enumerable_thread_specific<GeometricalData<CoordinateType> >
154 m_testGeomData, m_trialGeomData;
158 cl::Buffer *clTestQuadPoints;
159 cl::Buffer *clTrialQuadPoints;
160 cl::Buffer *clTestQuadWeights;
161 cl::Buffer *clTrialQuadWeights;
167 #include "separable_numerical_test_kernel_trial_integrator_imp.hpp"
Integration over pairs of elements.
Definition: test_kernel_trial_integrator.hpp:42
Storage of geometrical data.
Definition: geometrical_data.hpp:54
Collection of shape functions defined on a reference element.
Definition: default_local_assembler_for_operators_on_surfaces_utilities.hpp:34
Integration over pairs of elements on tensor-product point grids.
Definition: separable_numerical_test_kernel_trial_integrator.hpp:47
Definition: default_local_assembler_for_operators_on_surfaces_utilities.hpp:35
const std::pair< const char *, int > clStrIntegrateRowOrCol() const
Returns an OpenCL code snippet containing the clIntegrate kernel function for integrating a single ro...
Definition: separable_numerical_test_kernel_trial_integrator_imp.hpp:963
Definition: opencl_handler.hpp:208