23 #ifndef FIELD_TYPE_ACCELERATOR_HPP_INCLUDED
24 #define FIELD_TYPE_ACCELERATOR_HPP_INCLUDED
30 #include "../util/casted_iterator.hpp"
31 #include "../util/dual_range.hpp"
32 #include "../util/pool_pattern.hpp"
45 template<
class Field,
class Family,
class Acceleration>
49 template <
class Field,
class Family>
52 typename Field::elem_t::domain_t::xi_t,
53 typename Field::elem_t::domain_t::scalar_t
59 typename Field::elem_t::domain_t::xi_t,
typename Field::domain_t::scalar_t
65 typename Field::nset_t::shape_t
get_N(
void)
const
67 return Field::nset_t::template eval_shape<0>(base_t::get_xi());
73 template <
class Field,
class Family>
76 typename Field::elem_t::domain_t::xi_t,
77 typename Field::elem_t::domain_t::scalar_t
83 typename Field::elem_t::domain_t::xi_t,
84 typename Field::elem_t::domain_t::scalar_t
92 m_nset(Field::nset_t::template eval_shape<0>(
base_t::get_xi()))
99 typename Field::nset_t::shape_t
const &
get_N(
void)
const
112 template <
class Field,
class Family,
class Acceleration,
class Enable =
void>
119 template <
class Field,
class Family>
121 Field, Family, acceleration::hard,
122 typename std::enable_if<!field_traits::is_dirac<Field>::value>::type
125 field_type_accelerator_elem<Field, Family, acceleration::hard>
134 typedef typename eigen_std_vector<accelerator_elem_t>::type
base_t;
138 Family,
typename Field::elem_t::domain_t
146 this->reserve(quadrature.size());
147 for (
unsigned i = 0; i < quadrature.size(); ++i)
165 template <
class Field,
class Family>
167 typename std::enable_if<!field_traits::is_dirac<Field>::value>::type
178 typename base_t::const_iterator,
187 return base_t::cbegin();
195 return base_t::cend();
213 template <
class NSet>
221 constexpr
typename NSet::scalar_t
get_w(
void)
const
229 constexpr
typename NSet::shape_t
get_N(
void)
const
237 constexpr
typename NSet::xi_t
get_xi(
void)
const
245 :
public std::iterator<std::input_iterator_tag, index_t>
281 return !(*
this != other);
309 template <
class Field,
class Family,
class Acceleration>
311 typename std::enable_if<field_traits::is_dirac<Field>::value>::type
316 typename Field::nset_t
347 template <
class Field,
class Family,
class Acceleration,
unsigned MaxOrder>
349 public pool<field_type_accelerator<Field, Family, acceleration::hard>, MaxOrder>
366 template <
class Field,
class Family,
unsigned MaxOrder>
368 public pool<typename quadrature_type<Family, typename Field::elem_t::domain_t>::type, MaxOrder>
388 template <
class TestAccelerator,
class TrialAccelerator,
class IterationMode>
392 typename TestAccelerator::const_iterator,
393 typename TrialAccelerator::const_iterator
399 typename TestAccelerator::const_iterator,
400 typename TrialAccelerator::const_iterator
404 TestAccelerator
const &test_accelerator,
405 TrialAccelerator
const &trial_accelerator
407 test_accelerator.begin(), test_accelerator.end(),
408 trial_accelerator.begin(), trial_accelerator.end())
413 template <
class TestAccelerator,
class TrialAccelerator,
class IterationMode>
415 create_dual_field_type_accelerator(
416 TestAccelerator
const &test_acc,
417 TrialAccelerator
const &trial_acc,
422 test_acc, trial_acc);
428 #endif // FIELD_TYPE_ACCELERATOR_HPP_INCLUDED