1 #ifndef DUNE_FEM_DOUBLE_HH
2 #define DUNE_FEM_DOUBLE_HH
11 #include <dune/common/version.hh>
12 #include <dune/common/typetraits.hh>
27 template<
class FloatImp >
31 template <
class FloatImp>
34 typedef FlOpSummary< FloatImp > ThisType;
37 ThreadSafeValue< unsigned long > count_;
39 FlOpSummary(
const std::string& name) : name_(name), count_( 0 ) {}
43 unsigned long totalCount = 0;
44 for(
size_t i=0; i<count_.size(); ++i )
46 std::cout << name_ <<
" thread[ " << i <<
" ]: " << count_[ i ] << std::endl;
47 totalCount += count_[ i ];
50 std :: cout <<
"Total number of floating point operations (" << name_ <<
"): "
51 << totalCount << std :: endl;
54 inline void add(
const unsigned long count,
const int thread )
56 count_[ thread ] += count ;
61 static ThisType&
instance(
const std::string& name )
68 template<
class FloatImp >
75 typedef FlOpCounter< FloatType > ThisType;
85 FlOpSummary< FloatImp > :: instance( FloatImp::typeName() ) ;
91 FlOpSummary< FloatImp > :: instance( FloatImp::typeName() ).add( count_, thread_ );
100 inline ThisType &
operator += (
const unsigned long i )
110 static thread_local ThisType
instance;
120 template<
class FloatImp >
161 static double log (
const Double& v);
163 static double sqrt(
const Double& v);
165 static double cos (
const Double& v);
167 static double sin(
const Double& v);
170 static inline double min (
const Double& v,
const double p);
172 static inline double min (
const double v,
const Double& p);
174 static inline double max (
const Double& v,
const double p);
176 static inline double max (
const double v,
const Double& p);
270 template<
class Traits >
273 template<
class Traits >
277 friend double pow (
const Double& v,
const double p);
285 friend double min(
const Double&,
const double);
286 friend double min(
const double,
const Double&);
287 friend double max(
const Double&,
const double);
288 friend double max(
const double,
const Double&);
290 friend double real(
const std::complex<Double>& );
292 friend double imag(
const std::complex<Double>& );
295 #if DUNE_FEM_COMPATIBILITY
296 friend struct XdrIO<
Double >;
308 operator double ()
const
386 static inline double min (
const Double& v,
const double p)
392 static inline double min (
const double v,
const Double& p)
398 static inline double max (
const Double& v,
const double p)
404 static inline double max (
const double v,
const Double& p)
850 template<
class Traits >
858 template<
class Traits >
859 inline InStreamInterface< Traits > &
883 return std::pow(a.
value_, b);
888 return std::sqrt(v.
value_);
906 inline double real (
const std::complex<Double>& x)
908 return x.real().value_;
916 inline double imag (
const std::complex<Double>& x)
918 return x.imag().value_;
928 using Fem :: Double ;
931 struct IsNumber< Double > :
public IsNumber< double > {};
932 #if DUNE_VERSION_GT(DUNE_COMMON, 2, 6)
934 struct HasNaN < Double > :
public HasNaN < double > {};
983 inline double real (
const complex<Dune::Fem::Double>& x)
995 inline double imag (
const complex<Dune::Fem::Double>& x)
1012 struct numeric_limits<
Dune::Fem::Double >
1014 static const bool is_specialized =
true;
1016 static const int radix = numeric_limits< double > :: radix;
1017 static const int digits = numeric_limits< double > :: digits;
1018 static const int digits10 = numeric_limits< double > :: digits10;
1020 static const bool is_signed = numeric_limits< double > :: is_signed;
1021 static const bool is_integer = numeric_limits< double > :: is_integer;
1022 static const bool is_exact = numeric_limits< double > :: is_exact;
1064 static const int min_exponent = numeric_limits< double > :: min_exponent;
1065 static const int max_exponent = numeric_limits< double > :: max_exponent;
1066 static const int min_exponent10 = numeric_limits< double > :: min_exponent10;
1067 static const int max_exponent10 = numeric_limits< double > :: max_exponent10;
1069 static const bool has_infinity = numeric_limits< double > :: has_infinity;
1070 static const bool has_quiet_NaN = numeric_limits< double > :: has_quiet_NaN;
1071 static const bool has_signaling_NaN = numeric_limits< double > :: has_signaling_NaN;
1072 static const float_denorm_style has_denorm = numeric_limits< double > :: has_denorm;
1073 static const bool has_denorm_loss = numeric_limits< double > :: has_denorm_loss;
1075 static const bool is_iec559 = numeric_limits< double > :: is_iec559;
1076 static const bool is_bounded = numeric_limits< double > :: is_bounded;
1077 static const bool is_modulo = numeric_limits< double > :: is_modulo;
1079 static const bool traps = numeric_limits< double > :: traps;
1080 static const bool tinyness_before = numeric_limits< double > :: tinyness_before;
1081 static const float_round_style round_style
1082 = numeric_limits< double > :: round_style;
1087 struct is_floating_point<
Dune::Fem::Double > :
public is_floating_point< double > {};
Definition: bindguard.hh:11
double imag(const std::complex< Double > &x)
Definition: double.hh:916
OutStreamInterface< StreamTraits > & operator<<(OutStreamInterface< StreamTraits > &out, const DiscreteFunctionInterface< Impl > &df)
write a discrete function into an output stream
Definition: discretefunction_inline.hh:397
Double operator/(const Double &a, const Double &b)
Definition: double.hh:553
bool operator<(const Double &a, const Double &b)
Definition: double.hh:680
double real(const std::complex< Double > &x)
Definition: double.hh:906
double pow(const Double &a, const double b)
Definition: double.hh:881
Double operator*(const Double &a, const Double &b)
Definition: double.hh:506
bool operator<=(const Double &a, const Double &b)
Definition: double.hh:720
static double cos(const Double &v)
Definition: double.hh:896
static double min(const Double &v, const double p)
Definition: double.hh:386
Double abs(const Double &a)
Definition: double.hh:871
static double sqrt(const Double &v)
Definition: double.hh:886
void field_cast(const Double &f1, double &f2)
Definition: double.hh:901
static double sin(const Double &v)
Definition: double.hh:891
bool operator==(const Double &a, const Double &b)
Definition: double.hh:600
bool operator>=(const Double &a, const Double &b)
Definition: double.hh:800
bool operator>(const Double &a, const Double &b)
Definition: double.hh:760
static double log(const Double &v)
Definition: double.hh:876
bool operator!=(const Double &a, const Double &b)
Definition: double.hh:640
Double operator+(const Double &a, const Double &b)
Definition: double.hh:412
Double operator-(const Double &a, const Double &b)
Definition: double.hh:459
static double max(const Double &v, const double p)
Definition: double.hh:398
InStreamInterface< StreamTraits > & operator>>(InStreamInterface< StreamTraits > &in, DiscreteFunctionInterface< Impl > &df)
read a discrete function from an input stream
Definition: discretefunction_inline.hh:417
abstract interface for an output stream
Definition: streams.hh:46
abstract interface for an input stream
Definition: streams.hh:179
Definition: double.hh:122
FlOpCounter()
Definition: double.hh:130
ThisType & operator++()
Definition: double.hh:135
ThisType & operator+=(const unsigned long i)
Definition: double.hh:140
static DUNE_EXPORT ThisType & instance()
Definition: double.hh:145
FloatImp FloatType
Definition: double.hh:124
Definition: double.hh:183
ThisType & operator+=(const ThisType other)
Definition: double.hh:336
ThisType & operator=(const ThisType other)
Definition: double.hh:329
Double operator-() const
Definition: double.hh:364
friend bool operator<=(const Double &, const Double &)
Definition: double.hh:720
friend void field_cast(const Double &, double &)
Definition: double.hh:901
friend bool operator>(const Double &, const Double &)
Definition: double.hh:760
friend double real(const std::complex< Double > &)
Definition: double.hh:906
static std ::string typeName()
Definition: double.hh:370
friend double sin(const Double &v)
Definition: double.hh:891
FlOpCounter< ThisType > FlOpCounterType
Definition: double.hh:302
ThisType & operator/=(const ThisType other)
Definition: double.hh:357
friend Double operator*(const Double &, const Double &)
Definition: double.hh:506
friend double pow(const Double &v, const double p)
Definition: double.hh:881
friend double sqrt(const Double &v)
Definition: double.hh:886
friend double log(const Double &v)
Definition: double.hh:876
ThisType & operator-=(const ThisType other)
Definition: double.hh:343
friend bool operator>=(const Double &, const Double &)
Definition: double.hh:800
friend double min(const Double &, const double)
Definition: double.hh:386
friend double max(const Double &, const double)
Definition: double.hh:398
friend bool operator!=(const Double &, const Double &)
Definition: double.hh:640
friend std ::istream & operator>>(std ::istream &, Double &)
Definition: double.hh:845
friend Double operator+(const Double &, const Double &)
Definition: double.hh:412
Double(const double value)
Definition: double.hh:321
friend std ::ostream & operator<<(std ::ostream &, const Double &)
Definition: double.hh:840
Double()
Definition: double.hh:313
double value_
Definition: double.hh:305
Double(const ThisType &other)
Definition: double.hh:325
friend bool operator==(const Double &, const Double &)
Definition: double.hh:600
ThisType & operator*=(const ThisType other)
Definition: double.hh:350
friend Double abs(const Double &)
Definition: double.hh:871
friend Double operator/(const Double &, const Double &)
Definition: double.hh:553
friend bool operator<(const Double &, const Double &)
Definition: double.hh:680
static void flOp()
Definition: double.hh:376
friend double cos(const Double &v)
Definition: double.hh:896
friend double imag(const std::complex< Double > &)
Definition: double.hh:916
static Dune::Fem::Double quiet_NaN()
Definition: double.hh:1049
static Dune::Fem::Double signaling_NaN()
Definition: double.hh:1054
static Dune::Fem::Double max()
Definition: double.hh:1029
static Dune::Fem::Double infinity()
Definition: double.hh:1044
static Dune::Fem::Double min()
Definition: double.hh:1024
static Dune::Fem::Double denorm_min()
Definition: double.hh:1059
static Dune::Fem::Double epsilon()
Definition: double.hh:1034
static Dune::Fem::Double round_error()
Definition: double.hh:1039
return singleton instance of given Object type.
Definition: singleton.hh:71
static Object & instance(Args &&... args)
return singleton instance of given Object type.
Definition: singleton.hh:101
The ThreadManager wrapps basic shared memory functionality provided by OpenMP or pthreads such as thr...