32 #ifndef OPM_MATERIAL_MATH_TOOLBOX_HPP 33 #define OPM_MATERIAL_MATH_TOOLBOX_HPP 37 #include <type_traits> 47 template <
class ScalarT>
50 static_assert(std::is_floating_point<ScalarT>::value,
51 "This class expects floating point scalars! (specialization missing?)");
125 template <
class LhsEval>
128 static_assert(std::is_floating_point<LhsEval>::value,
129 "The left-hand side must be a primitive floating point type!");
140 Scalar denom = std::max<Scalar>(1.0, std::abs(a + b));
142 return std::abs(valueDiff) < tolerance || std::abs(valueDiff)/denom < tolerance;
151 {
return std::max(arg1, arg2); }
155 {
return std::min(arg1, arg2); }
159 {
return std::abs(arg); }
163 {
return std::tan(arg); }
167 {
return std::atan(arg); }
171 {
return std::atan2(arg1, arg2); }
175 {
return std::sin(arg); }
179 {
return std::asin(arg); }
183 {
return std::cos(arg); }
187 {
return std::acos(arg); }
191 {
return std::sqrt(arg); }
195 {
return std::exp(arg); }
199 {
return std::log(arg); }
203 {
return std::pow(base,
exp); }
207 {
return std::isfinite(arg); }
211 {
return std::isnan(arg); }
214 template <
class Eval1,
class Eval2>
217 typedef typename std::remove_const< typename std::remove_reference<Eval1>::type >::type T;
218 typedef typename std::remove_const< typename std::remove_reference<Eval2>::type >::type U;
223 typedef typename std::conditional<std::is_constructible<T, U>::value,
229 template <
class Evaluation,
class Scalar>
230 Evaluation constant(
const Scalar& value)
233 template <
class Evaluation,
class Scalar>
234 Evaluation variable(
const Scalar& value,
unsigned idx)
237 template <
class ResultEval,
class Evaluation>
238 auto decay(
const Evaluation& value)
242 template <
class Evaluation>
243 auto getValue(
const Evaluation& val)
247 template <
class Evaluation>
248 auto scalarValue(
const Evaluation& val)
252 template <
class Evaluation1,
class Evaluation2>
253 typename ReturnEval_<Evaluation1, Evaluation2>::type
254 max(
const Evaluation1& arg1,
const Evaluation2& arg2)
257 template <
class Evaluation1,
class Evaluation2>
258 typename ReturnEval_<Evaluation1, Evaluation2>::type
259 min(
const Evaluation1& arg1,
const Evaluation2& arg2)
262 template <
class Evaluation>
263 Evaluation abs(
const Evaluation& value)
266 template <
class Evaluation>
267 Evaluation tan(
const Evaluation& value)
270 template <
class Evaluation>
271 Evaluation atan(
const Evaluation& value)
274 template <
class Evaluation1,
class Evaluation2>
275 typename ReturnEval_<Evaluation1, Evaluation2>::type
276 atan2(
const Evaluation1& value1,
const Evaluation2& value2)
279 template <
class Evaluation>
280 Evaluation sin(
const Evaluation& value)
283 template <
class Evaluation>
284 Evaluation asin(
const Evaluation& value)
287 template <
class Evaluation>
288 Evaluation cos(
const Evaluation& value)
291 template <
class Evaluation>
292 Evaluation acos(
const Evaluation& value)
295 template <
class Evaluation>
296 Evaluation sqrt(
const Evaluation& value)
299 template <
class Evaluation>
300 Evaluation exp(
const Evaluation& value)
303 template <
class Evaluation>
304 Evaluation log(
const Evaluation& value)
307 template <
class Evaluation1,
class Evaluation2>
308 typename ReturnEval_<Evaluation1, Evaluation2>::type
309 pow(
const Evaluation1& base,
const Evaluation2& exp)
312 template <
class Evaluation>
313 bool isfinite(
const Evaluation& value)
316 template <
class Evaluation>
317 bool isnan(
const Evaluation& value)
Definition: MathToolbox.hpp:215
Definition: Air_Mesitylene.hpp:33