inline Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >& Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >:: operator /= (const Sacado::CacheFad::Expr<S>& x) { T xval = x.val(); #ifdef SACADO_DEBUG if (x.size() != Num) throw "CacheFad::operator/=() Error: Attempt to assign with incompatible sizes"; #endif for(int i=0; i<Num; ++i) dx_[i] = ( dx_[i]*xval - val_*x.fastAccessDx(i) )/ (xval*xval); val_ /= xval; return *this; }
inline Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >& Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >:: operator -= (const Sacado::CacheFad::Expr<S>& x) { #ifdef SACADO_DEBUG if (x.size() != Num) throw "CacheFad::operator-=() Error: Attempt to assign with incompatible sizes"; #endif // Compute value T xval = x.val(); for(int i=0; i<Num; ++i) dx_[i] -= x.fastAccessDx(i); val_ -= xval; return *this; }
inline Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >& Sacado::CacheFad::Expr< Sacado::CacheFad::SFadExprTag<T,Num> >:: operator += (const Sacado::CacheFad::Expr<S>& x) { #ifdef SACADO_DEBUG if (x.size() != Num) throw "CacheFad::operator+=() Error: Attempt to assign with incompatible sizes"; #endif x.cache(); for (int i=0; i<Num; ++i) dx_[i] += x.fastAccessDx(i); update_val_ = x.updateValue(); if (update_val_) val_ += x.val(); return *this; }