BEM++  2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
block_coalescer.hpp
1 // Copyright (C) 2013 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 bempp_block_coalescer_hpp
22 #define bempp_block_coalescer_hpp
23 
24 #include "../common/common.hpp"
25 #include "bempp/common/config_ahmed.hpp"
26 
27 #ifdef WITH_AHMED
28 
29 #include "aca_options.hpp"
30 #include "ahmed_aux_fwd.hpp"
31 #include "../common/boost_scoped_array_fwd.hpp"
32 #include "../common/boost_shared_array_fwd.hpp"
33 #include "../common/scalar_traits.hpp"
34 #include "../common/shared_ptr.hpp"
35 
36 class Epetra_CrsMatrix;
37 
38 namespace Bempp
39 {
40 
41 template <typename ValueType>
43 {
44  typedef typename Fiber::ScalarTraits<ValueType>::RealType CoordinateType;
46  typedef bbxbemblcluster<AhmedDofType, AhmedDofType> AhmedBemBlcluster;
47  typedef mblock<typename AhmedTypeTraits<ValueType>::Type> AhmedMblock;
48 
49 public:
50  BlockCoalescer(blcluster* blclustersRoot,
51  blcluster* decomposedBlclustersRoot,
52  const shared_ptr<const Epetra_CrsMatrix>& permutedTestGlobalToFlatLocalMap,
53  const shared_ptr<const Epetra_CrsMatrix>& permutedTrialGlobalToFlatLocalMap,
54  const boost::shared_array<AhmedMblock*>& blocks,
55  const boost::shared_array<AhmedMblock*>& decomposedBlocks,
56  const AcaOptions& acaOptions);
57 
58  void coalesceBlock(unsigned index);
59 
60 private:
62  void coalesceDenseBlock(unsigned index);
63  void coalesceLowRankBlock(unsigned index);
64 
65 private:
66  boost::scoped_array<blcluster*> m_blclusters;
67  boost::scoped_array<blcluster*> m_decomposedBlclusters;
68  shared_ptr<const Epetra_CrsMatrix> m_permutedTestGlobalToFlatLocalMap;
69  shared_ptr<const Epetra_CrsMatrix> m_permutedTrialGlobalToFlatLocalMap;
70  boost::shared_array<AhmedMblock*> m_blocks;
71  boost::shared_array<AhmedMblock*> m_decomposedBlocks;
72  AcaOptions m_acaOptions;
74 };
75 
76 } // namespace Bempp
77 
78 #endif // WITH_AHMED
79 
80 #endif
Traits of scalar types.
Definition: scalar_traits.hpp:40
Adaptive cross approximation (ACA) parameters.
Definition: aca_options.hpp:34
An Ahmed-compatible degree-of-freedom type.
Definition: ahmed_aux.hpp:89
Definition: block_coalescer.hpp:42