1 #ifndef VERTEXCFD_UTILS_SMOOTHRAMP_HPP
2 #define VERTEXCFD_UTILS_SMOOTHRAMP_HPP
4 #include "VertexCFD_Utils_Constants.hpp"
7 #include <Sacado_Fad_Exp_Expression.hpp>
8 #include <Sacado_Fad_Exp_ExpressionTraits.hpp>
17 template<
typename T,
typename ExprSpec>
24 :
public Sacado::Fad::Exp::Expr<
25 SmoothRampOp<T, Sacado::Fad::Exp::ExprSpecDefault>>
28 using ExprT =
typename std::remove_cv<T>::type;
29 using value_type =
typename ExprT::value_type;
30 using scalar_type =
typename ExprT::scalar_type;
31 using expr_spec_type = Sacado::Fad::Exp::ExprSpecDefault;
42 SACADO_INLINE_FUNCTION
int size()
const {
return x_.size(); }
44 SACADO_INLINE_FUNCTION
bool hasFastAccess()
const
46 return x_.hasFastAccess();
49 SACADO_INLINE_FUNCTION value_type val()
const
52 constexpr
double half_pi = 0.5 * Constants::pi;
64 * (sin(half_pi * (2.0 * x_.val() - (start_ + end_))
70 SACADO_INLINE_FUNCTION value_type dx(
int i)
const
73 constexpr
double half_pi = 0.5 * Constants::pi;
84 return (half_pi / (end_ - start_))
85 * (cos(half_pi * (2.0 * x_.dx(i) - (start_ + end_))
90 SACADO_INLINE_FUNCTION value_type fastAccessDx(
int i)
const
93 constexpr
double half_pi = 0.5 * Constants::pi;
104 return (half_pi / (end_ - start_))
105 * (cos(half_pi * (2.0 * x_.fastAccessDx(i) - (start_ + end_))
118 SACADO_INLINE_FUNCTION
119 typename std::enable_if<std::is_trivial<T>::value, T>::type
120 ramp(
const T x,
const double start,
const double end)
123 constexpr
double half_pi = 0.5 * Constants::pi;
135 * (sin(half_pi * (2.0 * x - (start + end)) / (end - start))
140 using Sacado::Fad::Exp::Expr;
144 SACADO_INLINE_FUNCTION
145 SmoothRampOp<typename Expr<T>::derived_type,
typename T::expr_spec_type>
146 ramp(
const Expr<T>& x,
double start,
double end)
148 using expr_t = SmoothRampOp<typename Expr<T>::derived_type,
149 typename T::expr_spec_type>;
150 return expr_t(x.derived(), start, end);
170 template<
typename T,
typename E>
173 static const unsigned value = ExprLevel<T>::value;
176 template<
typename T,
typename E>
179 static const unsigned value =
true;
185 template<
typename T,
typename E>
188 static const unsigned value =
true;
191 template<
typename T,
typename E>
194 using type =
typename BaseExprType<T>::type;
197 template<
typename T,
typename E>
200 static const bool value
201 = IsSimdType<typename SmoothRampOp<T, E>::scalar_type>::value;
204 template<
typename T,
typename E>
210 template<
typename T,
typename E>
218 #endif // end VERTEXCFD_UTILS_SMOOTHRAMP_HPP