Beispiel #1
0
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;
}