21 #ifndef bempp_weak_form_aca_assembly_helper_hpp
22 #define bempp_weak_form_aca_assembly_helper_hpp
24 #include "../common/common.hpp"
26 #include "ahmed_aux_fwd.hpp"
27 #include "../common/armadillo_fwd.hpp"
28 #include "../common/shared_ptr.hpp"
29 #include "../common/types.hpp"
30 #include "../fiber/scalar_traits.hpp"
32 #include <tbb/atomic.h>
33 #include <tbb/concurrent_unordered_map.h>
44 template <
typename ResultType>
class LocalAssemblerForIntegralOperators;
53 class AssemblyOptions;
54 template <
typename ResultType>
class DiscreteBoundaryOperator;
55 template <
typename BasisFunctionType>
class LocalDofListsCache;
56 template <
typename BasisFunctionType>
class Space;
62 template <
typename BasisFunctionType,
typename ResultType>
70 typedef typename AhmedTypeTraits<ResultType>::Type AhmedResultType;
74 const std::vector<unsigned int>& p2oTestDofs,
75 const std::vector<unsigned int>& p2oTrialDofs,
76 const std::vector<LocalAssembler*>& assemblers,
77 const std::vector<const DiscreteLinOp*>& sparseTermsToAdd,
78 const std::vector<ResultType>& denseTermsMultipliers,
79 const std::vector<ResultType>& sparseTermsMultipliers,
86 void cmpbl(
unsigned b1,
unsigned n1,
unsigned b2,
unsigned n2,
87 AhmedResultType* data,
88 const cluster* c1 = 0,
const cluster* c2 = 0,
89 bool countAccessedEntries =
true)
const;
95 void cmpblsym(
unsigned b1,
unsigned n1, AhmedResultType* data,
96 const cluster* c1 = 0,
97 bool countAccessedEntries =
true)
const;
100 MagnitudeType
scale(
unsigned b1,
unsigned n1,
unsigned b2,
unsigned n2,
101 const cluster* c1 = 0,
const cluster* c2 = 0)
const;
105 MagnitudeType
relativeScale(
unsigned b1,
unsigned n1,
unsigned b2,
unsigned n2,
106 const cluster* c1 = 0,
const cluster* c2 = 0)
const;
117 MagnitudeType estimateMinimumDistance(
118 const cluster* c1,
const cluster* c2)
const;
124 const std::vector<unsigned int>& m_p2oTestDofs;
125 const std::vector<unsigned int>& m_p2oTrialDofs;
126 const std::vector<LocalAssembler*>& m_assemblers;
127 const std::vector<const DiscreteLinOp*>& m_sparseTermsToAdd;
128 const std::vector<ResultType>& m_denseTermsMultipliers;
129 const std::vector<ResultType>& m_sparseTermsMultipliers;
131 bool m_indexWithGlobalDofs;
132 bool m_uniformQuadratureOrder;
134 shared_ptr<LocalDofListsCache<BasisFunctionType> >
135 m_testDofListsCache, m_trialDofListsCache;
137 mutable tbb::atomic<size_t> m_accessedEntryCount;
139 typedef tbb::concurrent_unordered_map<
140 std::pair<const cluster*, const cluster*>, CoordinateType> DistanceMap;
141 mutable DistanceMap m_distancesCache;
Traits of scalar types.
Definition: scalar_traits.hpp:40
Function space.
Definition: assembled_potential_operator.hpp:35
Abstract interface of a local assembler for integral operators.
Definition: local_assembler_for_integral_operators.hpp:48
Discrete boundary operator.
Definition: assembled_potential_operator.hpp:33
Options determining how weak-form assembly is done.
Definition: assembly_options.hpp:43