libMesh
include
base
libmesh_augment_std_namespace.h
Go to the documentation of this file.
1
// The libMesh Finite Element Library.
2
// Copyright (C) 2002-2019 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4
// This library is free software; you can redistribute it and/or
5
// modify it under the terms of the GNU Lesser General Public
6
// License as published by the Free Software Foundation; either
7
// version 2.1 of the License, or (at your option) any later version.
8
9
// This library is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
// Lesser General Public License for more details.
13
14
// You should have received a copy of the GNU Lesser General Public
15
// License along with this library; if not, write to the Free Software
16
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20
#ifndef LIBMESH_LIBMESH_AUGMENT_STD_NAMESPACE_H
21
#define LIBMESH_LIBMESH_AUGMENT_STD_NAMESPACE_H
22
23
#include "
libmesh_common.h
"
24
25
26
// For some reason the real std::max, std::min
27
// don't handle mixed compatible types
28
#define LIBMESH_DEFINE_MAX_MIN(type1, type2) \
29
inline auto max(type1 a, type2 b) -> decltype(a>b?a:b) \
30
{ return (a>b?a:b); } \
31
inline auto min(type1 a, type2 b) -> decltype(a<b?a:b) \
32
{ return (a<b?a:b); }
33
34
#define LIBMESH_DEFINE_BOTH_MAX_MIN(type1, type2) \
35
LIBMESH_DEFINE_MAX_MIN(type1, type2) \
36
LIBMESH_DEFINE_MAX_MIN(type2, type1)
37
38
namespace
std
{
39
LIBMESH_DEFINE_BOTH_MAX_MIN
(
long
double
,
double
)
40
LIBMESH_DEFINE_BOTH_MAX_MIN
(
long
double
,
float
)
41
LIBMESH_DEFINE_BOTH_MAX_MIN
(
double
,
float
)
42
43
#ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION
44
LIBMESH_DEFINE_BOTH_MAX_MIN
(
libMesh::Real
,
long
double
)
45
LIBMESH_DEFINE_BOTH_MAX_MIN
(
libMesh::Real
,
double
)
46
LIBMESH_DEFINE_BOTH_MAX_MIN
(
libMesh::Real
,
float
)
47
#endif
48
49
// fix for std::abs() overload ambiguity
50
#if defined (__SUNPRO_CC) || defined(__PGI)
51
inline
double
abs
(
double
a)
52
{ return ::fabs(a); }
53
54
#endif
55
56
// fix for std::pow() overload ambiguity
57
#if defined (__SUNPRO_CC)
58
inline
double
pow
(
double
a,
int
b)
59
{
return
std::pow
(a, static_cast<double>(b)); }
60
#endif
61
}
62
63
#endif // #define LIBMESH_LIBMESH_AUGMENT_STD_NAMESPACE_H
std::abs
MetaPhysicL::DualNumber< T, D > abs(const MetaPhysicL::DualNumber< T, D > &in)
std::pow
double pow(double a, int b)
Definition:
libmesh_augment_std_namespace.h:58
std::LIBMESH_DEFINE_BOTH_MAX_MIN
LIBMESH_DEFINE_BOTH_MAX_MIN(long double, double) LIBMESH_DEFINE_BOTH_MAX_MIN(long double
libmesh_common.h
std
Definition:
float128_shims.h:27
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition:
libmesh_common.h:121
Generated on Sat Jan 25 2020 12:06:52 for libMesh by
1.8.16