52 #ifndef SACADO_CACHEFAD_GENERALFAD_HPP
53 #define SACADO_CACHEFAD_GENERALFAD_HPP
74 template <
typename T,
typename Storage>
109 Storage(sz, x, zero_out) {}
133 template <
typename S>
139 const int sz = x.size();
141 this->
val() = x.val();
144 if (x.hasFastAccess())
145 for(
int i=0; i<sz; ++i)
148 for(
int i=0; i<sz; ++i)
165 void diff(
const int ith,
const int n) {
166 if (this->size() !=
n)
186 template <
typename S>
190 if (x.size() != this->size())
return false;
191 bool eq = IE::eval(x.val(), this->
val());
192 for (
int i=0; i<this->size(); i++)
193 eq = eq && IE::eval(x.dx(i), this->
dx(i));
222 if (is_const && this->size()!=0)
234 template <
typename S>
238 if (this->size()) this->resize(0);
247 Storage::operator=(x);
252 template <
typename S>
257 const int xsz = x.size();
259 if (xsz != this->size())
260 this->resizeAndZero(xsz);
262 const int sz = this->size();
270 if (x.hasFastAccess())
271 for(
int i=0; i<sz; ++i)
274 for(
int i=0; i<sz; ++i)
278 this->
val() = x.val();
291 template <
typename S>
299 template <
typename S>
307 template <
typename S>
310 const int sz = this->size();
312 for (
int i=0; i<sz; ++i)
318 template <
typename S>
321 const int sz = this->size();
323 for (
int i=0; i<sz; ++i)
331 const int xsz = x.size(), sz = this->size();
333 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
334 if ((xsz != sz) && (xsz != 0) && (sz != 0))
335 throw "Fad Error: Attempt to assign with incompatible sizes";
340 for (
int i=0; i<sz; ++i)
344 this->resizeAndZero(xsz);
345 for (
int i=0; i<xsz; ++i)
350 this->
val() += x.val();
358 const int xsz = x.size(), sz = this->size();
360 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
361 if ((xsz != sz) && (xsz != 0) && (sz != 0))
362 throw "Fad Error: Attempt to assign with incompatible sizes";
367 for(
int i=0; i<sz; ++i)
371 this->resizeAndZero(xsz);
372 for(
int i=0; i<xsz; ++i)
377 this->
val() -= x.val();
386 const int xsz = x.size(), sz = this->size();
390 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
391 if ((xsz != sz) && (xsz != 0) && (sz != 0))
392 throw "Fad Error: Attempt to assign with incompatible sizes";
397 for(
int i=0; i<sz; ++i)
401 this->resizeAndZero(xsz);
402 for(
int i=0; i<xsz; ++i)
408 for (
int i=0; i<sz; ++i)
421 const int xsz = x.size(), sz = this->size();
425 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
426 if ((xsz != sz) && (xsz != 0) && (sz != 0))
427 throw "Fad Error: Attempt to assign with incompatible sizes";
432 for(
int i=0; i<sz; ++i)
434 ( this->
fastAccessDx(i)*xval - v*x.fastAccessDx(i) )/ (xval*xval);
437 this->resizeAndZero(xsz);
438 for(
int i=0; i<xsz; ++i)
439 this->
fastAccessDx(i) = - v*x.fastAccessDx(i) / (xval*xval);
444 for (
int i=0; i<sz; ++i)
455 template <
typename S>
460 const int xsz = x.size(), sz = this->size();
462 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
463 if ((xsz != sz) && (xsz != 0) && (sz != 0))
464 throw "Fad Error: Attempt to assign with incompatible sizes";
469 if (x.hasFastAccess())
470 for (
int i=0; i<sz; ++i)
473 for (
int i=0; i<sz; ++i)
477 this->resizeAndZero(xsz);
478 if (x.hasFastAccess())
479 for (
int i=0; i<xsz; ++i)
482 for (
int i=0; i<xsz; ++i)
487 this->
val() += x.val();
493 template <
typename S>
498 const int xsz = x.size(), sz = this->size();
500 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
501 if ((xsz != sz) && (xsz != 0) && (sz != 0))
502 throw "Fad Error: Attempt to assign with incompatible sizes";
507 if (x.hasFastAccess())
508 for(
int i=0; i<sz; ++i)
511 for (
int i=0; i<sz; ++i)
515 this->resizeAndZero(xsz);
516 if (x.hasFastAccess())
517 for(
int i=0; i<xsz; ++i)
520 for (
int i=0; i<xsz; ++i)
525 this->
val() -= x.val();
532 template <
typename S>
537 const int xsz = x.size(), sz = this->size();
540 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
541 if ((xsz != sz) && (xsz != 0) && (sz != 0))
542 throw "Fad Error: Attempt to assign with incompatible sizes";
547 if (x.hasFastAccess())
548 for(
int i=0; i<sz; ++i)
551 for (
int i=0; i<sz; ++i)
555 this->resizeAndZero(xsz);
556 if (x.hasFastAccess())
557 for(
int i=0; i<xsz; ++i)
560 for (
int i=0; i<xsz; ++i)
566 for (
int i=0; i<sz; ++i)
577 template <
typename S>
582 const int xsz = x.size(), sz = this->size();
585 #if defined(SACADO_DEBUG) && !defined(__CUDA_ARCH__ )
586 if ((xsz != sz) && (xsz != 0) && (sz != 0))
587 throw "Fad Error: Attempt to assign with incompatible sizes";
592 if (x.hasFastAccess())
593 for(
int i=0; i<sz; ++i)
596 for (
int i=0; i<sz; ++i)
600 this->resizeAndZero(xsz);
601 if (x.hasFastAccess())
602 for(
int i=0; i<xsz; ++i)
605 for (
int i=0; i<xsz; ++i)
611 for (
int i=0; i<sz; ++i)
629 #endif // SACADO_CACHEFAD_GENERALFAD_HPP