From 4d0d14bd2cbe835c3cbadda8036d71a33d3ab54d Mon Sep 17 00:00:00 2001 From: Patrick Jaap <patrick.jaap@tu-dresden.de> Date: Wed, 20 Apr 2022 19:16:58 +0200 Subject: [PATCH] hyperdual: use call-by-reference in operators --- dune/elasticity/common/hyperdual.hh | 200 ++++++++++++++-------------- 1 file changed, 100 insertions(+), 100 deletions(-) diff --git a/dune/elasticity/common/hyperdual.hh b/dune/elasticity/common/hyperdual.hh index 0764ca0..a147aea 100644 --- a/dune/elasticity/common/hyperdual.hh +++ b/dune/elasticity/common/hyperdual.hh @@ -58,63 +58,63 @@ public: //basic manipulation hyperdual operator+ () const; - hyperdual operator+ (const hyperdual rhs) const; - friend hyperdual operator+ (const double lhs, const hyperdual rhs); + hyperdual operator+ (const hyperdual& rhs) const; + friend hyperdual operator+ (const double lhs, const hyperdual& rhs); hyperdual operator- () const; - hyperdual operator- (const hyperdual rhs) const; - friend hyperdual operator- (const double lhs, const hyperdual rhs); - hyperdual operator* (const hyperdual rhs)const; - friend hyperdual operator* (const double lhs, const hyperdual rhs); - friend hyperdual operator/ (const hyperdual lhs, const hyperdual rhs); - friend hyperdual operator/ (const double lhs, const hyperdual rhs); - friend hyperdual operator/ (const hyperdual lhs, const double rhs); - hyperdual& operator+= (hyperdual rhs); - hyperdual& operator-= (hyperdual rhs); - hyperdual& operator*= (hyperdual rhs); + hyperdual operator- (const hyperdual& rhs) const; + friend hyperdual operator- (const double lhs, const hyperdual& rhs); + hyperdual operator* (const hyperdual& rhs)const; + friend hyperdual operator* (const double lhs, const hyperdual& rhs); + friend hyperdual operator/ (const hyperdual& lhs, const hyperdual& rhs); + friend hyperdual operator/ (const double lhs, const hyperdual& rhs); + friend hyperdual operator/ (const hyperdual& lhs, const double rhs); + hyperdual& operator+= (const hyperdual& rhs); + hyperdual& operator-= (const hyperdual& rhs); + hyperdual& operator*= (const hyperdual& rhs); hyperdual& operator*= (double rhs); - hyperdual& operator/= (hyperdual rhs); + hyperdual& operator/= (const hyperdual& rhs); hyperdual& operator/= (double rhs); //math.h functions - friend hyperdual pow (hyperdual x, double a); - friend hyperdual pow (hyperdual x, hyperdual a); - friend hyperdual exp(hyperdual x); - friend hyperdual log(hyperdual x); - friend hyperdual sin(hyperdual x); - friend hyperdual cos(hyperdual x); - friend hyperdual tan(hyperdual x); - friend hyperdual asin(hyperdual x); - friend hyperdual acos(hyperdual x); - friend hyperdual atan(hyperdual x); - friend hyperdual sqrt(hyperdual x); - friend hyperdual fabs(hyperdual x); - friend hyperdual abs(hyperdual x); - friend hyperdual max(hyperdual x1, hyperdual x2); - friend hyperdual max(hyperdual x1, double x2); - friend hyperdual max(double x1, hyperdual x2); - friend hyperdual min(hyperdual x1, hyperdual x2); - friend hyperdual min(hyperdual x1, double x2); - friend hyperdual min(double x1, hyperdual x2); + friend hyperdual pow (const hyperdual& x, double a); + friend hyperdual pow (const hyperdual& x, const hyperdual& a); + friend hyperdual exp(const hyperdual& x); + friend hyperdual log(const hyperdual& x); + friend hyperdual sin(const hyperdual& x); + friend hyperdual cos(const hyperdual& x); + friend hyperdual tan(const hyperdual& x); + friend hyperdual asin(const hyperdual& x); + friend hyperdual acos(const hyperdual& x); + friend hyperdual atan(const hyperdual& x); + friend hyperdual sqrt(const hyperdual& x); + friend hyperdual fabs(const hyperdual& x); + friend hyperdual abs(const hyperdual& x); + friend hyperdual max(const hyperdual& x1, const hyperdual& x2); + friend hyperdual max(const hyperdual& x1, double x2); + friend hyperdual max(double x1, const hyperdual& x2); + friend hyperdual min(const hyperdual& x1, const hyperdual& x2); + friend hyperdual min(const hyperdual& x1, double x2); + friend hyperdual min(double x1, const hyperdual& x2); //comparisons - friend bool operator> (hyperdual lhs, hyperdual rhs); - friend bool operator> (double lhs, hyperdual rhs); - friend bool operator> (hyperdual lhs, double rhs); - friend bool operator>= (hyperdual lhs, hyperdual rhs); - friend bool operator>= (double lhs, hyperdual rhs); - friend bool operator>= (hyperdual lhs, double rhs); - friend bool operator< (hyperdual lhs, hyperdual rhs); - friend bool operator< (double lhs, hyperdual rhs); - friend bool operator< (hyperdual lhs, double rhs); - friend bool operator<= (hyperdual lhs, hyperdual rhs); - friend bool operator<= (double lhs, hyperdual rhs); - friend bool operator<= (hyperdual lhs, double rhs); - friend bool operator== (hyperdual lhs, hyperdual rhs); - friend bool operator== (double lhs, hyperdual rhs); - friend bool operator== (hyperdual lhs, double rhs); - friend bool operator!= (hyperdual lhs, hyperdual rhs); - friend bool operator!= (double lhs, hyperdual rhs); - friend bool operator!= (hyperdual lhs, double rhs); + friend bool operator> (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator> (double lhs, const hyperdual& rhs); + friend bool operator> (const hyperdual& lhs, double rhs); + friend bool operator>= (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator>= (double lhs, const hyperdual& rhs); + friend bool operator>= (const hyperdual& lhs, double rhs); + friend bool operator< (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator< (double lhs, const hyperdual& rhs); + friend bool operator< (const hyperdual& lhs, double rhs); + friend bool operator<= (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator<= (double lhs, const hyperdual& rhs); + friend bool operator<= (const hyperdual& lhs, double rhs); + friend bool operator== (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator== (double lhs, const hyperdual& rhs); + friend bool operator== (const hyperdual& lhs, double rhs); + friend bool operator!= (const hyperdual& lhs, const hyperdual& rhs); + friend bool operator!= (double lhs, const hyperdual& rhs); + friend bool operator!= (const hyperdual& lhs, double rhs); }; @@ -192,7 +192,7 @@ hyperdual hyperdual::operator+ () const { return *this; } -hyperdual hyperdual::operator+ (const hyperdual rhs) const +hyperdual hyperdual::operator+ (const hyperdual& rhs) const { hyperdual temp; temp.f0 = f0 + rhs.f0; @@ -201,7 +201,7 @@ hyperdual hyperdual::operator+ (const hyperdual rhs) const temp.f12 = f12 + rhs.f12; return temp; } -hyperdual operator+ (const double lhs, const hyperdual rhs) +hyperdual operator+ (const double lhs, const hyperdual& rhs) { hyperdual temp; temp.f0 = lhs + rhs.f0; @@ -219,7 +219,7 @@ hyperdual hyperdual::operator- () const temp.f12 = -f12; return temp; } -hyperdual hyperdual::operator- (const hyperdual rhs) const +hyperdual hyperdual::operator- (const hyperdual& rhs) const { hyperdual temp; temp.f0 = f0 - rhs.f0; @@ -228,7 +228,7 @@ hyperdual hyperdual::operator- (const hyperdual rhs) const temp.f12 = f12 - rhs.f12; return temp; } -hyperdual operator- (const double lhs, const hyperdual rhs) +hyperdual operator- (const double lhs, const hyperdual& rhs) { hyperdual temp; temp.f0 = lhs - rhs.f0; @@ -237,7 +237,7 @@ hyperdual operator- (const double lhs, const hyperdual rhs) temp.f12 = -rhs.f12; return temp; } -hyperdual hyperdual::operator* (const hyperdual rhs) const +hyperdual hyperdual::operator* (const hyperdual& rhs) const { hyperdual temp; temp.f0 = f0*rhs.f0; @@ -246,7 +246,7 @@ hyperdual hyperdual::operator* (const hyperdual rhs) const temp.f12 = f0*rhs.f12 + f1*rhs.f2 + f2*rhs.f1 + f12*rhs.f0; return temp; } -hyperdual operator* (const double lhs, const hyperdual rhs) +hyperdual operator* (const double lhs, const hyperdual& rhs) { hyperdual temp; temp.f0 = lhs*rhs.f0; @@ -255,7 +255,7 @@ hyperdual operator* (const double lhs, const hyperdual rhs) temp.f12 = lhs*rhs.f12; return temp; } -hyperdual operator/ (const hyperdual lhs, const hyperdual rhs) +hyperdual operator/ (const hyperdual& lhs, const hyperdual& rhs) { hyperdual inv; double prod; @@ -267,13 +267,13 @@ hyperdual operator/ (const hyperdual lhs, const hyperdual rhs) inv.f12 = 2.0*rhs.f1*rhs.f2/(prod*rhs.f0) - rhs.f12/prod; return lhs*inv; } -hyperdual operator/ (const double lhs, const hyperdual rhs) +hyperdual operator/ (const double lhs, const hyperdual& rhs) { hyperdual temp,inv; temp = hyperdual(lhs)/rhs; return temp; } -hyperdual operator/ (const hyperdual lhs, const double rhs) +hyperdual operator/ (const hyperdual& lhs, const double rhs) { hyperdual temp; double inv; @@ -284,7 +284,7 @@ hyperdual operator/ (const hyperdual lhs, const double rhs) temp.f12 = inv*lhs.f12; return temp; } -hyperdual& hyperdual::operator+= (hyperdual rhs) +hyperdual& hyperdual::operator+= (const hyperdual& rhs) { f0 += rhs.f0; f1 += rhs.f1; @@ -292,7 +292,7 @@ hyperdual& hyperdual::operator+= (hyperdual rhs) f12 += rhs.f12; return *this; } -hyperdual& hyperdual::operator-= (hyperdual rhs) +hyperdual& hyperdual::operator-= (const hyperdual& rhs) { f0 -= rhs.f0; f1 -= rhs.f1; @@ -300,7 +300,7 @@ hyperdual& hyperdual::operator-= (hyperdual rhs) f12 -= rhs.f12; return *this; } -hyperdual& hyperdual::operator*= (hyperdual rhs) +hyperdual& hyperdual::operator*= (const hyperdual& rhs) { double tf0,tf1,tf2,tf12; tf0=f0; @@ -321,7 +321,7 @@ hyperdual& hyperdual::operator*= (double rhs) f12 *= rhs; return *this; } -hyperdual& hyperdual::operator/= (hyperdual rhs) +hyperdual& hyperdual::operator/= (const hyperdual& rhs) { *this = *this / rhs; return *this; @@ -334,7 +334,7 @@ hyperdual& hyperdual::operator/= (double rhs) f12 /= rhs; return *this; } -hyperdual pow (hyperdual x, double a) +hyperdual pow (const hyperdual& x, double a) { hyperdual temp; double deriv,xval,tol; @@ -356,11 +356,11 @@ hyperdual pow (hyperdual x, double a) return temp; } -hyperdual pow (hyperdual x, hyperdual a) +hyperdual pow (const hyperdual& x, const hyperdual& a) { return exp(a*log(x)); } -hyperdual exp(hyperdual x) +hyperdual exp(const hyperdual& x) { hyperdual temp; double deriv; @@ -371,7 +371,7 @@ hyperdual exp(hyperdual x) temp.f12 = deriv*(x.f12 + x.f1*x.f2); return temp; } -hyperdual log(hyperdual x) +hyperdual log(const hyperdual& x) { hyperdual temp; double deriv1,deriv2; @@ -383,7 +383,7 @@ hyperdual log(hyperdual x) temp.f12 = x.f12/x.f0 - (deriv1*deriv2); return temp; } -hyperdual sin(hyperdual x) +hyperdual sin(const hyperdual& x) { hyperdual temp; double funval,deriv; @@ -395,7 +395,7 @@ hyperdual sin(hyperdual x) temp.f12 = deriv*x.f12 - funval*x.f1*x.f2; return temp; } -hyperdual cos(hyperdual x) +hyperdual cos(const hyperdual& x) { hyperdual temp; double funval,deriv; @@ -407,7 +407,7 @@ hyperdual cos(hyperdual x) temp.f12 = deriv*x.f12 - funval*x.f1*x.f2; return temp; } -hyperdual tan(hyperdual x) +hyperdual tan(const hyperdual& x) { hyperdual temp; double funval,deriv; @@ -419,7 +419,7 @@ hyperdual tan(hyperdual x) temp.f12 = deriv*x.f12 + x.f1*x.f2*(2*funval*deriv); return temp; } -hyperdual asin(hyperdual x) +hyperdual asin(const hyperdual& x) { hyperdual temp; double funval,deriv1,deriv; @@ -432,7 +432,7 @@ hyperdual asin(hyperdual x) temp.f12 = deriv*x.f12 + x.f1*x.f2*(x.f0*std::pow(deriv1,-1.5)); return temp; } -hyperdual acos(hyperdual x) +hyperdual acos(const hyperdual& x) { hyperdual temp; double funval,deriv1,deriv; @@ -445,7 +445,7 @@ hyperdual acos(hyperdual x) temp.f12 = deriv*x.f12 + x.f1*x.f2*(-x.f0*std::pow(deriv1,-1.5)); return temp; } -hyperdual atan(hyperdual x) +hyperdual atan(const hyperdual& x) { hyperdual temp; double funval,deriv1,deriv; @@ -458,7 +458,7 @@ hyperdual atan(hyperdual x) temp.f12 = deriv*x.f12 + x.f1*x.f2*(-2*x.f0/(deriv1*deriv1)); return temp; } -hyperdual sqrt(hyperdual x) +hyperdual sqrt(const hyperdual& x) { hyperdual temp; temp.f0 = std::sqrt(x.f0); @@ -467,7 +467,7 @@ hyperdual sqrt(hyperdual x) temp.f12 = 0.5*(x.f12 - 2.*temp.f1*temp.f2)/temp.f0; return temp; } -hyperdual fabs(hyperdual x) +hyperdual fabs(const hyperdual& x) { hyperdual temp; if (x < 0.0) @@ -477,11 +477,11 @@ hyperdual fabs(hyperdual x) return temp; } -hyperdual abs(hyperdual x) +hyperdual abs(const hyperdual& x) { return fabs(x); } -hyperdual max(hyperdual x1, hyperdual x2) +hyperdual max(const hyperdual& x1, const hyperdual& x2) { hyperdual temp; if (x1>x2) @@ -490,7 +490,7 @@ hyperdual max(hyperdual x1, hyperdual x2) temp = x2; return temp; } -hyperdual max(hyperdual x1, double x2) +hyperdual max(const hyperdual& x1, double x2) { hyperdual temp; if (x1>x2) @@ -499,7 +499,7 @@ hyperdual max(hyperdual x1, double x2) temp = x2; return temp; } -hyperdual max(double x1, hyperdual x2) +hyperdual max(double x1, const hyperdual& x2) { hyperdual temp; if (x1>x2) @@ -508,7 +508,7 @@ hyperdual max(double x1, hyperdual x2) temp = x2; return temp; } -hyperdual min(hyperdual x1, hyperdual x2) +hyperdual min(const hyperdual& x1, const hyperdual& x2) { hyperdual temp; if (x1<x2) @@ -517,7 +517,7 @@ hyperdual min(hyperdual x1, hyperdual x2) temp = x2; return temp; } -hyperdual min(hyperdual x1, double x2) +hyperdual min(const hyperdual& x1, double x2) { hyperdual temp; if (x1<x2) @@ -526,7 +526,7 @@ hyperdual min(hyperdual x1, double x2) temp = x2; return temp; } -hyperdual min(double x1, hyperdual x2) +hyperdual min(double x1, const hyperdual& x2) { hyperdual temp; if (x1<x2) @@ -536,75 +536,75 @@ hyperdual min(double x1, hyperdual x2) return temp; } -bool operator> (hyperdual lhs, hyperdual rhs) +bool operator> (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 > rhs.f0); } -bool operator> (double lhs, hyperdual rhs) +bool operator> (double lhs, const hyperdual& rhs) { return (lhs > rhs.f0); } -bool operator> (hyperdual lhs, double rhs) +bool operator> (const hyperdual& lhs, double rhs) { return (lhs.f0 > rhs); } -bool operator>= (hyperdual lhs, hyperdual rhs) +bool operator>= (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 >= rhs.f0); } -bool operator>= (double lhs, hyperdual rhs) +bool operator>= (double lhs, const hyperdual& rhs) { return (lhs >= rhs.f0); } -bool operator>= (hyperdual lhs, double rhs) +bool operator>= (const hyperdual& lhs, double rhs) { return (lhs.f0 >= rhs); } -bool operator< (hyperdual lhs, hyperdual rhs) +bool operator< (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 < rhs.f0); } -bool operator< (double lhs, hyperdual rhs) +bool operator< (double lhs, const hyperdual& rhs) { return (lhs < rhs.f0); } -bool operator< (hyperdual lhs, double rhs) +bool operator< (const hyperdual& lhs, double rhs) { return (lhs.f0 < rhs); } -bool operator<= (hyperdual lhs, hyperdual rhs) +bool operator<= (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 <= rhs.f0); } -bool operator<= (double lhs, hyperdual rhs) +bool operator<= (double lhs, const hyperdual& rhs) { return (lhs <= rhs.f0); } -bool operator<= (hyperdual lhs, double rhs) +bool operator<= (const hyperdual& lhs, double rhs) { return (lhs.f0 <= rhs); } -bool operator== (hyperdual lhs, hyperdual rhs) +bool operator== (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 == rhs.f0); } -bool operator== (double lhs, hyperdual rhs) +bool operator== (double lhs, const hyperdual& rhs) { return (lhs == rhs.f0); } -bool operator== (hyperdual lhs, double rhs) +bool operator== (const hyperdual& lhs, double rhs) { return (lhs.f0 == rhs); } -bool operator!= (hyperdual lhs, hyperdual rhs) +bool operator!= (const hyperdual& lhs, const hyperdual& rhs) { return (lhs.f0 != rhs.f0); } -bool operator!= (double lhs, hyperdual rhs) +bool operator!= (double lhs, const hyperdual& rhs) { return (lhs != rhs.f0); } -bool operator!= (hyperdual lhs, double rhs) +bool operator!= (const hyperdual& lhs, double rhs) { return (lhs.f0 != rhs); } -- GitLab