NiHu  2.0
singular_accelerator.hpp
Go to the documentation of this file.
1 // This file is a part of NiHu, a C++ BEM template library.
2 //
3 // Copyright (C) 2012-2014 Peter Fiala <fiala@hit.bme.hu>
4 // Copyright (C) 2012-2014 Peter Rucz <rucz@hit.bme.hu>
5 //
6 // This program is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
22 
23 #ifndef SINGULAR_ACCELERATOR_HPP_INCLUDED
24 #define SINGULAR_ACCELERATOR_HPP_INCLUDED
25 
26 #include "asymptotic_types.hpp"
27 #include "kernel.hpp" // for the galerkin case
28 #include "singular_galerkin_quadrature.hpp" // for the galerkin case
29 #include "blind_transform_selector.hpp" // for the collocation case
30 #include "blind_singular_quadrature.hpp" // for the collocation case
31 #include "field.hpp"
32 #include "../tmp/control.hpp"
33 #include "../util/is_specialisation.hpp"
34 
35 #include "singular_integral_shortcut.hpp"
36 
37 #include "../util/dual_range.hpp"
38 #include "formalism.hpp"
39 
40 #include <stdexcept>
41 
42 namespace NiHu
43 {
44 
50 template <class test_iterator_t, class trial_iterator_t>
52  public dual_iterator<iteration::diagonal, test_iterator_t, trial_iterator_t>
53 {
54 public:
58  typedef typename test_iterator_t::value_type value_type;
59 
64  singular_quadrature_iterator(test_iterator_t test, trial_iterator_t trial)
65  : base_t(test, trial)
66  {
67  }
68 
73  {
74  return *base_t::get_first();
75  }
76 
81  {
82  return *base_t::get_second();
83  }
84 };
85 
86 
89 
92 {
93 public:
98  template <class match>
99  invalid_singular_iterator begin(match const &) const
100  {
101  return invalid_singular_iterator();
102  }
103 
108  template <class match>
109  invalid_singular_iterator end(match const &) const
110  {
111  return invalid_singular_iterator();
112  }
113 };
114 
121 template <
122  class Kernel,
123  class TestField,
124  class TrialField,
125  class = typename get_formalism<TestField, TrialField>::type
126 >
128 
129 
136 template <
137  class Kernel,
138  class TestField,
139  class TrialField
140 >
141 class singular_accelerator<Kernel, TestField, TrialField, formalism::general>
142 {
143  // CRTP check
144  static_assert(std::is_base_of<kernel_base<Kernel>, Kernel>::value,
145  "The kernel field must be derived from kernel_base<Kernel>");
146  static_assert(std::is_base_of<field_base<TestField>, TestField>::value,
147  "The test field must be derived from field_base<TestField>");
148  static_assert(std::is_base_of<field_base<TrialField>, TrialField>::value,
149  "The trial field must be derived from field_base<TrialField>");
150 public:
152  typedef Kernel kernel_t;
154  typedef TestField test_field_t;
156  typedef TrialField trial_field_t;
157 
159  typedef typename test_field_t::elem_t test_elem_t;
160 
163 
165  typedef typename test_field_t::elem_t::lset_t test_lset_t;
167  typedef typename trial_field_t::elem_t::lset_t trial_lset_t;
168 
170  typedef typename test_field_t::elem_t::domain_t test_domain_t;
172  typedef typename trial_field_t::elem_t::domain_t trial_domain_t;
173 
175  static unsigned const domain_dimension = test_domain_t::dimension;
176  // report compiler error if test and trial domain dimensions do not match
177  static_assert(domain_dimension == trial_domain_t::dimension,
178  "The test and trial domain dimensions must match");
179 
181  static unsigned const n_test_corners = test_domain_t::num_corners;
183  static unsigned const n_trial_corners = trial_domain_t::num_corners;
184 
186  typedef typename test_domain_t::scalar_t scalar_t;
187  // report compiler error if the trial and test scalar types are different
188  static_assert(std::is_same<scalar_t, typename trial_domain_t::scalar_t>::value,
189  "The test and trial domain scalar types must match");
190 
193 
196 
201 
203  typedef typename test_quadrature_t::quadrature_elem_t quadrature_elem_t;
204  // report compiler error if the trial and test quadrature elements are different
205  static_assert(std::is_same<quadrature_elem_t, typename trial_quadrature_t::quadrature_elem_t>::value,
206  "The trial and test quadrature elements must be of the same type");
207 
210  typename test_quadrature_t::const_iterator,
211  typename trial_quadrature_t::const_iterator> iterator;
212 
214  static const bool face_match_possible = std::is_same<test_field_t, trial_field_t>::value;
216  static unsigned const singular_quadrature_order = singular_kernel_traits<kernel_t>::singular_quadrature_order;
217 
222  iterator begin(element_match const &elem_match) const
223  {
224  switch (elem_match.get_match_dimension())
225  {
226  case domain_dimension:
227  return iterator(
228  m_test_quadratures[domain_dimension][0].begin(),
229  m_trial_quadratures[domain_dimension][0].begin());
230  break;
231  case -1:
232  throw std::logic_error("Cannot return singular quadrature for NO_MATCH type");
233  break;
234  default:
235  unsigned test_domain_corner =
236  test_lset_t::node_to_domain_corner(elem_match.get_overlap().get_ind1());
237  unsigned trial_domain_corner =
238  trial_lset_t::node_to_domain_corner(elem_match.get_overlap().get_ind2());
239  return iterator(
240  m_test_quadratures[elem_match.get_match_dimension()][test_domain_corner].begin(),
241  m_trial_quadratures[elem_match.get_match_dimension()][trial_domain_corner].begin());
242  break;
243  }
244  }
245 
250  iterator end(element_match const &elem_match) const
251  {
252  switch (elem_match.get_match_dimension())
253  {
254  case domain_dimension:
255  return iterator(
256  m_test_quadratures[domain_dimension][0].end(),
257  m_trial_quadratures[domain_dimension][0].end());
258  break;
259  case -1:
260  throw std::logic_error("Cannot return singular quadrature for NO_MATCH type");
261  break;
262  default:
263  unsigned test_domain_corner =
264  test_lset_t::node_to_domain_corner(elem_match.get_overlap().get_ind1());
265  unsigned trial_domain_corner =
266  trial_lset_t::node_to_domain_corner(elem_match.get_overlap().get_ind2());
267  return iterator(
268  m_test_quadratures[elem_match.get_match_dimension()][test_domain_corner].end(),
269  m_trial_quadratures[elem_match.get_match_dimension()][trial_domain_corner].end());
270  break;
271  }
272  }
273 
274 private:
275  template <class Match>
276  void generate(Match, std::false_type)
277  {
278  int d = Match::value;
279  if (d == domain_dimension) // face (only one)
280  {
281  m_test_quadratures[d].push_back(test_quadrature_t());
282  m_trial_quadratures[d].push_back(trial_quadrature_t());
283  quad_factory_t::template generate<Match>(
284  m_test_quadratures[d][0],
285  m_trial_quadratures[d][0],
286  singular_quadrature_order);
287  }
288  else // corner or edge, lots of
289  {
290  test_quadrature_t test_q;
291  trial_quadrature_t trial_q;
292  quad_factory_t::template generate<Match>(
293  test_q, trial_q, singular_quadrature_order);
294 
295  for (unsigned i = 0; i < n_test_corners; ++i)
296  {
297  Eigen::Matrix<scalar_t, n_test_corners, domain_dimension> test_corners;
298  for (unsigned k = 0; k < n_test_corners; ++k)
299  test_corners.row(k) = test_domain_t::get_corner((i+k) % n_test_corners);
300  m_test_quadratures[d].push_back(
301  test_q.template transform<isoparam_shape_set<test_domain_t>, !is_surface>(test_corners)
302  );
303  }
304 
305  for (unsigned i = 0; i < n_trial_corners; ++i)
306  {
307  Eigen::Matrix<scalar_t, n_trial_corners, domain_dimension> trial_corners;
308  for (unsigned k = 0; k < n_trial_corners; ++k)
309  {
310  unsigned idx;
311  if (domain_dimension == 2 && d == 1) // quad or tria edge match
312  idx = (i+1+n_trial_corners-k) % n_trial_corners;
313  else
314  idx = (i+k) % n_trial_corners;
315  trial_corners.row(k) = trial_domain_t::get_corner(idx);
316  }
317  m_trial_quadratures[d].push_back(
318  trial_q.template transform<isoparam_shape_set<trial_domain_t>, !is_surface>(trial_corners)
319  );
320  }
321  }
322  }
323 
324  template <class Match>
325  void generate(Match, std::true_type)
326  {
327  }
328 
329 
330 private:
331  template <class Match>
332  struct generate_wrapper { struct type
333  {
334  typedef typename is_specialisation<
336  >::type spec;
337 
338  void operator()(singular_accelerator &obj)
339  {
340  obj.generate(Match(), spec());
341  }
342  }; };
343 
344 public:
347  {
348  tmp::call_each<
350  generate_wrapper<tmp::_1>,
352  >(*this);
353  }
354 
355 private:
356  std::vector<test_quadrature_t> m_test_quadratures[domain_dimension + 1];
357  std::vector<trial_quadrature_t> m_trial_quadratures[domain_dimension + 1];
358 };
359 
360 
367 template <class Kernel, class TestField, class TrialField>
368 class singular_accelerator<Kernel, TestField, TrialField, formalism::collocational>
369 {
370  // CRTP check
371  static_assert(std::is_base_of<kernel_base<Kernel>, Kernel>::value,
372  "The kernel must be derived from kernel_base<Kernel>");
373  static_assert(std::is_base_of<field_base<TrialField>, TrialField>::value,
374  "The trial field must be derived from field_base<TrialField>");
375 public:
377  typedef Kernel kernel_t;
379  typedef TestField test_field_t;
381  typedef TrialField trial_field_t;
382 
384  typedef typename test_field_t::elem_t test_elem_t;
386  typedef typename trial_field_t::elem_t trial_elem_t;
387 
389  typedef typename trial_elem_t::domain_t trial_domain_t;
390 
392  typedef typename trial_elem_t::lset_t trial_lset_t;
394  typedef typename test_field_t::nset_t test_nset_t;
395 
399  typedef typename quadrature_type<
403  typedef typename trial_quadrature_t::quadrature_elem_t quadrature_elem_t;
405  static unsigned const singular_quadrature_order = singular_kernel_traits<kernel_t>::singular_quadrature_order;
406 
408  typedef typename blind_transform_selector<
412 
414  typedef typename blind_singular_quadrature<
418  >::type trial_blind_t;
419 
421  typedef typename trial_quadrature_t::const_iterator iterator;
422 
423 
425  static const bool face_match_possible = std::is_same<test_elem_t, trial_elem_t>::value;
426 
431  trial_quadrature_t const &get_trial_quadrature(unsigned idx) const
432  {
433  return m_face_trial_quadratures[idx];
434  }
435 
440  {
441  if (face_match_possible)
442  {
443  for (unsigned idx = 0; idx < test_nset_t::num_nodes; ++idx)
444  m_face_trial_quadratures[idx] += trial_blind_t::on_face(
445  singular_quadrature_order, test_nset_t::corner_at(idx));
446  }
447  }
448 
449 protected:
451  trial_quadrature_t m_face_trial_quadratures[test_nset_t::num_nodes];
452 };
453 
454 
455 template <
456  class TestField,
457  class TrialField,
458  class SingularityDimension,
460 >
462 
463 template <class TestField, class TrialField, class SingularityDimension>
464 struct double_integral_free_dimensions<TestField, TrialField, SingularityDimension, formalism::general>
465  : std::integral_constant<int,
466  TestField::elem_t::domain_t::dimension + TrialField::elem_t::domain_t::dimension - SingularityDimension::value
467 > {};
468 
469 
470 template <class TestField, class TrialField, class SingularityDimension>
471 struct double_integral_free_dimensions<TestField, TrialField, SingularityDimension, formalism::collocational>
472  : std::integral_constant<unsigned,
473  TrialField::elem_t::domain_t::dimension
474 > {};
475 
476 
482 template <class Kernel, class TestField, class TrialField, class SingularityDimension, class = void>
484 {
486 };
487 
494 template <class Kernel, class TestField, class TrialField, class SingularityDimension>
495 struct select_singular_accelerator <Kernel, TestField, TrialField, SingularityDimension, typename std::enable_if<
496  minimal_reference_dimension<
497  typename singular_kernel_traits<Kernel>::singularity_type_t
498  >::value <= double_integral_free_dimensions<TestField, TrialField, SingularityDimension>::value
499 >::type>
500 {
502 };
503 
504 }
505 
506 #endif // SINGULAR_ACCELERATOR_HPP_INCLUDED
507 
NiHu::invalid_singular_accelerator::end
invalid_singular_iterator end(match const &) const
return the end iterator
Definition: singular_accelerator.hpp:109
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::blind_singular_transform_tag_t
blind_transform_selector< typename singular_kernel_traits< kernel_t >::singularity_type_t, trial_domain_t >::type blind_singular_transform_tag_t
the blind transformation tag that governs the singular quadrature transformation method
Definition: singular_accelerator.hpp:411
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::test_elem_t
test_field_t::elem_t test_elem_t
the test eleme type
Definition: singular_accelerator.hpp:159
NiHu::select_singular_accelerator
select a singular accelerator for a kernel and test and trial fields
Definition: singular_accelerator.hpp:483
NiHu::singular_quadrature_iterator::base_t
dual_iterator< iteration::diagonal, test_iterator_t, trial_iterator_t > base_t
the base type
Definition: singular_accelerator.hpp:56
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_field_t
TrialField trial_field_t
template argument as nested type
Definition: singular_accelerator.hpp:381
NiHu::match_type_vector
matafunction assigning a match type vector to two fields
Definition: match_types.hpp:50
NiHu::singular_quadrature_iterator
a dual iterator to point to a test and a trial quadrature element
Definition: singular_accelerator.hpp:51
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_domain_t
trial_elem_t::domain_t trial_domain_t
trial domain type
Definition: singular_accelerator.hpp:389
NiHu::double_integral_free_dimensions
Definition: singular_accelerator.hpp:461
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::test_domain_t
test_field_t::elem_t::domain_t test_domain_t
test domain
Definition: singular_accelerator.hpp:170
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::scalar_t
test_domain_t::scalar_t scalar_t
the scalar type of the quadrature
Definition: singular_accelerator.hpp:186
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_quadrature_t
quadrature_type< quadrature_family_t, trial_domain_t >::type trial_quadrature_t
the trial quadrature type
Definition: singular_accelerator.hpp:401
kernel.hpp
implementation of class kernel and its traits
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::iterator
singular_quadrature_iterator< typename test_quadrature_t::const_iterator, typename trial_quadrature_t::const_iterator > iterator
the dual iterator type of the singular quadrature
Definition: singular_accelerator.hpp:206
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::test_elem_t
test_field_t::elem_t test_elem_t
the test elem type
Definition: singular_accelerator.hpp:384
singular_galerkin_quadrature.hpp
implementation of singular Galerkin quadratures
formalism.hpp
return weak form formalism from the test and trial field types
NiHu::dual_iterator
Definition: dual_range.hpp:41
blind_transform_selector.hpp
select a blind transform method to a singularity type and a reference domain
NiHu::singular_kernel_traits
singular traits class of a kernel
Definition: kernel.hpp:101
NiHu::singular_quadrature_iterator::value_type
test_iterator_t::value_type value_type
the value type of both quadratures
Definition: singular_accelerator.hpp:58
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::test_field_t
TestField test_field_t
template argument as nested type
Definition: singular_accelerator.hpp:154
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::trial_field_t
TrialField trial_field_t
template argument as nested type
Definition: singular_accelerator.hpp:156
NiHu::element_traits::is_surface_element
Indicates if the element is a surface element or not.
Definition: element.hpp:106
NiHu::invalid_singular_accelerator
an invalid singular accelerator assigned to nonexisting integrals
Definition: singular_accelerator.hpp:91
NiHu::element_match::get_match_dimension
int get_match_dimension() const
return singularity type
Definition: element_match.hpp:55
NiHu::element_match::get_overlap
const element_overlapping & get_overlap() const
return overlapping state
Definition: element_match.hpp:58
NiHu::kernel_base
CRTP base class of all BEM kernels.
Definition: kernel.hpp:133
field.hpp
implementation of fields and field views
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::test_lset_t
test_field_t::elem_t::lset_t test_lset_t
the L-set of the test domain
Definition: singular_accelerator.hpp:165
NiHu::kernel_traits
traits class of a kernel
Definition: kernel.hpp:71
NiHu::quadrature_type
metafunction to assign a quadrature type to a quadrature family and a domain
Definition: quadrature.hpp:326
NiHu::singular_accelerator
an accelerator class that stores singular quadratures for different singularity types
Definition: singular_accelerator.hpp:127
NiHu::singular_kernel_traits::singularity_type_t
kernel_traits_ns::singularity_type< Derived >::type singularity_type_t
the kernel's singularity type
Definition: kernel.hpp:104
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::kernel_t
Kernel kernel_t
template argument as nested type
Definition: singular_accelerator.hpp:145
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::trial_lset_t
trial_field_t::elem_t::lset_t trial_lset_t
the L-set of the trial domain
Definition: singular_accelerator.hpp:167
NiHu::get_formalism
return formalism from Test and Trial field types
Definition: formalism.hpp:47
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::quadrature_elem_t
test_quadrature_t::quadrature_elem_t quadrature_elem_t
the quadrature element type (it should be the same for test and trial)
Definition: singular_accelerator.hpp:203
NiHu::element_match
class describing the adjacency (match) state of two elements
Definition: element_match.hpp:39
NiHu::invalid_singular_iterator
an invalid singular iterator assigned to nonexisting integrals
Definition: singular_accelerator.hpp:88
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::quadrature_family_t
kernel_traits< kernel_t >::quadrature_family_t quadrature_family_t
the quadrature family obtained from the kernel
Definition: singular_accelerator.hpp:189
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::iterator
trial_quadrature_t::const_iterator iterator
iterator type of the singular quadrature
Definition: singular_accelerator.hpp:421
NiHu::singular_integral_shortcut
a shortcut for the user to define customised singular integral methods
Definition: double_integral.hpp:709
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::quad_factory_t
singular_galerkin_quadrature< quadrature_family_t, test_domain_t, trial_domain_t > quad_factory_t
the singular galerkin quadrature generator class
Definition: singular_accelerator.hpp:195
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::get_trial_quadrature
const trial_quadrature_t & get_trial_quadrature(unsigned idx) const
return begin iterator of the singular quadrature
Definition: singular_accelerator.hpp:431
blind_singular_quadrature.hpp
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_lset_t
trial_elem_t::lset_t trial_lset_t
trial L-set type
Definition: singular_accelerator.hpp:392
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::test_nset_t
test_field_t::nset_t test_nset_t
test N-set type
Definition: singular_accelerator.hpp:394
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::end
iterator end(element_match const &elem_match) const
return end iterator of the singular quadrature
Definition: singular_accelerator.hpp:250
NiHu::element_overlapping::get_ind2
unsigned get_ind2(void) const
return index of first coincident node in element 2
Definition: element.hpp:55
NiHu::field_base
CRTP base class of all fields.
Definition: field.hpp:111
NiHu::blind_singular_quadrature
Definition: blind_singular_quadrature.hpp:34
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::trial_quadrature_t
quadrature_type< quadrature_family_t, trial_domain_t >::type trial_quadrature_t
the trial quadrature type
Definition: singular_accelerator.hpp:200
NiHu::is_specialisation
Metafunction that determines if a type is a specialisation.
Definition: is_specialisation.hpp:56
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::quadrature_elem_t
trial_quadrature_t::quadrature_elem_t quadrature_elem_t
quadrature element type (it should be the same for test and trial)
Definition: singular_accelerator.hpp:403
NiHu::element_overlapping::get_ind1
unsigned get_ind1(void) const
return index of first coincident node in element 1
Definition: element.hpp:49
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_blind_t
blind_singular_quadrature< blind_singular_transform_tag_t, quadrature_family_t, trial_lset_t >::type trial_blind_t
the blind quadrature type
Definition: singular_accelerator.hpp:418
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::test_quadrature_t
quadrature_type< quadrature_family_t, test_domain_t >::type test_quadrature_t
the test quadrature type
Definition: singular_accelerator.hpp:198
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::trial_elem_t
trial_field_t::elem_t trial_elem_t
trial elem type
Definition: singular_accelerator.hpp:386
NiHu::singular_quadrature_iterator::get_trial_quadrature_elem
const value_type & get_trial_quadrature_elem(void) const
return the trial quadrature element
Definition: singular_accelerator.hpp:80
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::singular_accelerator
singular_accelerator(void)
constructor allocating memory for the quadratures
Definition: singular_accelerator.hpp:439
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::kernel_t
Kernel kernel_t
template argument as nested type
Definition: singular_accelerator.hpp:372
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::begin
iterator begin(element_match const &elem_match) const
return begin iterator of the singular quadrature
Definition: singular_accelerator.hpp:222
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::test_field_t
TestField test_field_t
the test field type
Definition: singular_accelerator.hpp:379
NiHu::singular_quadrature_iterator::get_test_quadrature_elem
const value_type & get_test_quadrature_elem(void) const
return the test quadrature element
Definition: singular_accelerator.hpp:72
NiHu::singular_quadrature_iterator::singular_quadrature_iterator
singular_quadrature_iterator(test_iterator_t test, trial_iterator_t trial)
constructor initialising members
Definition: singular_accelerator.hpp:64
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::trial_domain_t
trial_field_t::elem_t::domain_t trial_domain_t
trial domain
Definition: singular_accelerator.hpp:172
NiHu::invalid_singular_accelerator::begin
invalid_singular_iterator begin(match const &) const
return the begin iterator
Definition: singular_accelerator.hpp:99
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::collocational >::quadrature_family_t
kernel_traits< kernel_t >::quadrature_family_t quadrature_family_t
quadrature family
Definition: singular_accelerator.hpp:397
NiHu::singular_galerkin_quadrature
class computing singular Galerkin type quadratures for different domains
Definition: singular_galerkin_quadrature.hpp:50
asymptotic_types.hpp
definition of different asymptotic function behaviour types
NiHu::singular_accelerator< Kernel, TestField, TrialField, formalism::general >::singular_accelerator
singular_accelerator(void)
constructor allocating and generating the quadratures
Definition: singular_accelerator.hpp:346
NiHu::blind_transform_selector
assign a blind transformation method to a singularity type and a reference domain
Definition: blind_transform_selector.hpp:46