inline Sacado::Fad::GeneralFad<T,Storage>& Sacado::Fad::GeneralFad<T,Storage>::operator -= (const Sacado::Fad::Expr<S>& x) { int xsz = x.size(), sz = s_.size(); #ifdef SACADO_DEBUG if ((xsz != sz) && (xsz != 0) && (sz != 0)) throw "Fad Error: Attempt to assign with incompatible sizes"; #endif if (xsz) { if (sz) { if (x.hasFastAccess()) for(int i=0; i<sz; ++i) s_.dx_[i] -= x.fastAccessDx(i); else for (int i=0; i<sz; ++i) s_.dx_[i] -= x.dx(i); } else { s_.resize(xsz); if (x.hasFastAccess()) for(int i=0; i<xsz; ++i) s_.dx_[i] = -x.fastAccessDx(i); else for (int i=0; i<xsz; ++i) s_.dx_[i] = -x.dx(i); } } s_.val_ -= x.val(); return *this; }
inline Sacado::Fad::Expr< Sacado::Fad::SFadExprTag<T,Num> >& Sacado::Fad::Expr< Sacado::Fad::SFadExprTag<T,Num> >:: operator -= (const Sacado::Fad::Expr<S>& x) { #ifdef SACADO_DEBUG if (x.size() != Num) throw "SFad::operator-=() Error: Attempt to assign with incompatible sizes"; #endif for(int i=0; i<Num; ++i) dx_[i] -= x.fastAccessDx(i); val_ -= x.val(); return *this; }
KOKKOS_INLINE_FUNCTION Sacado::Fad::Expr< Sacado::Fad::SFadExprTag<T,Num> >& Sacado::Fad::Expr< Sacado::Fad::SFadExprTag<T,Num> >:: operator -= (const Sacado::Fad::Expr<S>& x) { #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ ) if (x.size() != Num) throw "SFad::operator-=() Error: Attempt to assign with incompatible sizes"; #endif for(int i=0; i<Num; ++i) dx_[i] -= x.fastAccessDx(i); update_val_ = x.updateValue(); if (update_val_) val_ -= x.val(); return *this; }