45 template<
class T>
void Fill(
int n,
const T alpha, T *x,
const int incx )
56 #define IM1 2147483563 57 #define IM2 2147483399 67 #define NDIV (1+IMM1/NTAB) 69 #define RNMX (1.0-EPS) 72 template<
class T> T
ran2 (
long* idum)
83 static long idum2=123456789;
89 if (-(*idum) < 1) *idum = 1;
90 else *idum = -(*idum);
92 for (j=
NTAB+7; j>=0; j--) {
95 if (*idum < 0) *idum +=
IM1;
96 if (j <
NTAB) iv[j] = *idum;
103 if (*idum < 0) *idum +=
IM1;
107 if (idum2 < 0) idum2 +=
IM2;
112 if (iy < 1) iy +=
IMM1;
133 #ifdef NEKTAR_USE_THREAD_SAFETY 134 static boost::mutex mutex;
140 const int incx,
int outseed)
142 #ifdef NEKTAR_USE_THREAD_SAFETY 144 boost::mutex::scoped_lock l(mutex);
150 static long seed = 0;
155 seed = long(outseed);
166 v1 = 2.0 * ran2<T> (&seed) - 1.0;
167 v2 = 2.0 * ran2<T> (&seed) - 1.0;
169 }
while (rsq >= 1.0 || rsq == 0.0);
170 fac = sqrt(-2.0 * log (rsq) / rsq);
186 template<
class T>
void Vmul(
int n,
const T *x,
const int incx,
const T *y,
187 const int incy, T*z,
const int incz)
190 if (incx == 1 && incy == 1 && incz == 1)
216 template<
class T>
void Smul(
int n,
const T alpha,
const T *x,
const int incx,
217 T *y,
const int incy)
220 if (incx == 1 && incy == 1)
244 template<
class T>
void Vdiv(
int n,
const T *x,
const int incx,
const T *y,
245 const int incy, T*z,
const int incz)
248 if (incx == 1 && incy == 1)
274 template<
class T>
void Sdiv(
int n,
const T alpha,
const T *x,
275 const int incx, T *y,
const int incy)
278 if (incx == 1 && incy == 1)
302 template<
class T>
void Vadd(
int n,
const T *x,
const int incx,
const T *y,
303 const int incy, T *z,
const int incz)
318 template<
class T>
void Sadd(
int n,
const T alpha,
const T *x,
319 const int incx, T *y,
const int incy)
322 if (incx == 1 && incy == 1)
346 template<
class T>
void Vsub(
int n,
const T *x,
const int incx,
const T *y,
347 const int incy, T *z,
const int incz)
350 if (incx == 1 && incy == 1 && incz == 1)
376 template<
class T>
void Zero(
int n, T *x,
const int incx)
380 std::memset(x,
'\0', n*
sizeof(T));
399 template<
class T>
void Neg(
int n, T *x,
const int incx)
411 template<
class T>
void Vsqrt(
int n,
const T *x,
const int incx,
412 T *y,
const int incy)
427 template<
class T>
void Vabs(
int n,
const T *x,
const int incx,
428 T *y,
const int incy)
432 *y = ( *x >0)? *x:-(*x);
446 const T *w,
const int incw,
447 const T *x,
const int incx,
448 const T *y,
const int incy,
449 T *z,
const int incz)
453 *z = (*w) * (*x) + (*y);
468 template<
class T>
void Vvtvm(
int n,
const T *w,
const int incw,
const T *x,
469 const int incx,
const T *y,
const int incy,
470 T *z,
const int incz)
474 *z = (*w) * (*x) - (*y);
489 const int incx,
const T *y,
const int incy,
490 T *z,
const int incz)
493 if (incx == 1 && incy == 1 && incz == 1)
497 *z = alpha * (*x) + (*y);
507 *z = alpha * (*x) + (*y);
521 template<
class T>
void Svtvm(
int n,
const T alpha,
const T *x,
522 const int incx,
const T *y,
const int incy,
523 T *z,
const int incz)
527 *z = alpha * (*x) - (*y);
541 const T* v,
int incv,
542 const T* w,
int incw,
543 const T* x,
int incx,
544 const T* y,
int incy,
549 *z = (*v) * (*w) + (*x) * (*y);
568 const T* v,
int incv,
569 const T* w,
int incw,
570 const T* x,
int incx,
571 const T* y,
int incy,
576 *z = (*v) * (*w) - (*x) * (*y);
596 const T* x,
int incx,
598 const T* y,
int incy,
603 *z = alpha * (*x) + beta * (*y);
622 const T* v,
int incv,
623 const T* w,
int incw,
624 const T* x,
int incx,
629 *z = alpha * (*v) + (*w) + (*x);
647 template<
class T>
void Gathr(
int n,
const T *x,
const int *y,
662 template<
class T>
void Gathr(
int n,
const T *
sign,
const T *x,
const int *y,
667 *z++ = *(sign++) * (*(x + *y++));
676 template<
class T>
void Scatr(
int n,
const T *x,
const int *y,
681 *(z + *(y++)) = *(x++);
689 template<
class T>
void Scatr(
int n,
const T *sign,
const T *x,
const int *y,
696 *(z + *(y++)) = *(sign++) * (*(x++));
712 template<
class T>
void Assmb(
int n,
const T *x,
const int *y,
717 *(z + *(y++)) += *(x++);
725 template<
class T>
void Assmb(
int n,
const T *sign,
const T *x,
const int *y,
730 *(z + *(y++)) += *(sign++) * (*(x++));
740 template<
class T> T
Vsum(
int n,
const T *x,
const int incx)
758 template<
class T>
int Imax(
int n,
const T *x,
const int incx)
761 int i, indx = ( n > 0 ) ? 0 : -1;
764 for (i = 0; i < n; i++)
782 template<
class T> T
Vmax(
int n,
const T *x,
const int incx)
803 template<
class T>
int Iamax(
int n,
const T *x,
const int incx)
806 int i, indx = ( n > 0 ) ? 0 : -1;
810 for (i = 0; i < n; i++)
812 xm = (*x > 0)? *x: -*x;
828 template<
class T> T
Vamax(
int n,
const T *x,
const int incx)
836 xm = (*x > 0)? *x: -*x;
850 template<
class T>
int Imin(
int n,
const T *x,
const int incx)
853 int i, indx = ( n > 0 ) ? 0 : -1;
874 template<
class T> T
Vmin(
int n,
const T *x,
const int incx)
895 template<
class T>
int Nnan(
int n,
const T *x,
const int incx)
917 template<
class T> T
Dot(
int n,
937 template<
class T> T
Dot(
int n,
938 const T *w,
const int incw,
939 const T *x,
const int incx)
957 template<
class T> T
Dot2(
int n,
966 sum += (*y == 1 ? (*w) * (*x) : 0 );
981 template<
class T> T
Dot2(
int n,
982 const T *w,
const int incw,
983 const T *x,
const int incx,
984 const int *y,
const int incy)
990 sum += (*y == 1 ? (*w) * (*x) : 0.0 );
1001 const int *y,
const int incy);
1063 template<
typename T>
1064 void Vcopy(
int n,
const T *x,
const int incx,
1065 T *y,
const int incy)
1067 if( incx ==1 && incy == 1)
1069 memcpy(y,x,n*
sizeof(T));
1083 template LIB_UTILITIES_EXPORT void Vcopy(
int n,
const unsigned int *x,
const int incx,
unsigned int *y,
const int incy);
1088 template<
class T>
void Reverse(
int n,
const T *x,
const int incx, T *y,
const int incy)
1098 y[nloop] = x[nloop];
1100 const T* x_end = x + (n-1)*incx;
1101 T* y_end = y + (n-1)*incy;
1102 for (i = 0; i < nloop; ++i) {
void Gathr(int n, const T *x, const int *y, T *z)
Gather vector z[i] = x[y[i]].
#define sign(a, b)
return the sign(b)*a
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
T Vmax(int n, const T *x, const int incx)
Return the maximum element in x – called vmax to avoid conflict with max.
T Vmin(int n, const T *x, const int incx)
Return the minimum element in x - called vmin to avoid conflict with min.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
int Imin(int n, const T *x, const int incx)
Return the index of the minimum element in x.
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
void Vdiv(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x/y.
void Vabs(int n, const T *x, const int incx, T *y, const int incy)
vabs: y = |x|
int Imax(int n, const T *x, const int incx)
Return the index of the maximum element in x.
void Reverse(int n, const T *x, const int incx, T *y, const int incy)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
T ran2(long *idum)
Generates a number from ~Normal(0,1)
#define LIB_UTILITIES_EXPORT
int Nnan(int n, const T *x, const int incx)
Return number of NaN elements of x.
void Svtvm(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x - y
void Scatr(int n, const T *x, const int *y, T *z)
Scatter vector z[y[i]] = x[i].
void Neg(int n, T *x, const int incx)
Negate x = -x.
void Assmb(int n, const T *x, const int *y, T *z)
Assemble z[y[i]] += x[i]; z should be zero'd first.
void Vvtvvtm(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtm (vector times vector minus vector times vector):
T Vamax(int n, const T *x, const int incx)
Return the maximum absolute element in x called vamax to avoid conflict with max. ...
int Iamax(int n, const T *x, const int incx)
Return the index of the maximum absolute element in x.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
T Dot(int n, const T *w, const T *x)
vvtvp (vector times vector times vector): z = w*x*y
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
void Vstvpp(int n, const T alpha, const T *v, int incv, const T *w, int incw, const T *x, int incx, T *z, int incz)
Vstvpp (scalar times vector plus vector plus vector):
void Vvtvvtp(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtp (vector times vector plus vector times vector):
void Vvtvm(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvm (vector times vector plus vector): z = w*x - y
T Dot2(int n, const T *w, const T *x, const int *y)
vvtvp (vector times vector times vector): z = w*x*y
void FillWhiteNoise(int n, const T eps, T *x, const int incx, int outseed)
Fills a vector with white noise.
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
vvtvvtp (scalar times vector plus scalar times vector):
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
void Zero(int n, T *x, const int incx)
Zero vector.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.