25 #ifndef PROJECTION_HPP_INCLUDED
26 #define PROJECTION_HPP_INCLUDED
28 #include "integral_transform_forward.hpp"
30 #include "../util/crtp_base.hpp"
42 template <
class Derived>
54 template <
class TestSpace,
class Result>
59 derived().test_on_into(test_space, result);
69 integral_transform_base<typename std::decay<Proj>::type>,
70 typename std::decay<Proj>::type
78 template <
class LDerived,
class RDerived>
88 m_lhs(std::forward<LDerived>(left)),
89 m_rhs(std::forward<RDerived>(right))
99 template <
class TestSpace,
class Result>
102 Result &result)
const
104 m_lhs.test_on_into(test_space, result);
105 m_rhs.test_on_into(test_space, result);
117 template <
class Left,
class Right>
118 integral_transform_sum<
119 typename std::enable_if<is_integral_transform<Left>::value, Left>::type,
120 typename std::enable_if<is_integral_transform<Right>::value, Right>::type
122 operator+(Left &&left, Right &&right)
125 std::forward<Left>(left),
126 std::forward<Right>(right));
133 template <
class Operator,
class TrialSpace>
144 m_trial_space(std::forward<TrialSpace>(trial))
150 template <
class TestSpace,
class Result>
151 void test_on_into_impl(
154 Result &result)
const
156 if (&test_space.
get_mesh() == &m_trial_space.get_mesh())
159 result, m_op, test_space, m_trial_space);
163 assembly<TestSpace, typename std::decay<TrialSpace>::type, std::false_type>::eval_into(
164 result, m_op, test_space, m_trial_space);
168 template <
class TestSpace,
class Result>
169 void test_on_into_impl(
171 function_space_base<TestSpace>
const &test_space,
172 Result &result)
const
174 assembly<TestSpace, typename std::decay<TrialSpace>::type, std::false_type>::eval_into(
175 result, m_op, test_space, m_trial_space);
185 template <
class TestSpace,
class Result>
188 Result &result)
const
191 typename std::is_same<
192 typename std::decay<TrialSpace>::type::mesh_t,
193 typename std::decay<TestSpace>::type::mesh_t
203 TrialSpace m_trial_space;