45 template <
class T>
void Fill(
int n,
const T alpha, T *x,
const int incx)
59 #define IM1 2147483563
60 #define IM2 2147483399
61 #define AM (1.0 / IM1)
62 #define IMM1 (IM1 - 1)
70 #define NDIV (1 + IMM1 / NTAB)
72 #define RNMX (1.0 - EPS)
75 template <
class T> T
ran2(
long *idum)
86 static long idum2 = 123456789;
98 for (j =
NTAB + 7; j >= 0; j--)
101 *idum =
IA1 * (*idum - k *
IQ1) - k *
IR1;
111 *idum =
IA1 * (*idum - k *
IQ1) - k *
IR1;
116 idum2 =
IA2 * (idum2 - k *
IQ2) - k *
IR2;
126 if ((temp =
AM * iy) >
RNMX)
147 #ifdef NEKTAR_USE_THREAD_SAFETY
148 static boost::mutex mutex;
157 #ifdef NEKTAR_USE_THREAD_SAFETY
159 boost::mutex::scoped_lock l(mutex);
165 static long seed = 0;
170 seed = long(outseed);
181 v1 = 2.0 * ran2<T>(&seed) - 1.0;
182 v2 = 2.0 * ran2<T>(&seed) - 1.0;
183 rsq = v1 * v1 + v2 * v2;
184 }
while (rsq >= 1.0 || rsq == 0.0);
185 fac =
sqrt(-2.0 *
log(rsq) / rsq);
201 const int incx,
int outseed);
205 const int incx,
int outseed);
209 void Vmul(
int n,
const T *x,
const int incx,
const T *y,
const int incy, T *z,
213 if (incx == 1 && incy == 1 && incz == 1)
248 void Smul(
int n,
const T alpha,
const T *x,
const int incx, T *y,
252 if (incx == 1 && incy == 1)
284 void Vdiv(
int n,
const T *x,
const int incx,
const T *y,
const int incy, T *z,
288 if (incx == 1 && incy == 1)
324 void Sdiv(
int n,
const T alpha,
const T *x,
const int incx, T *y,
328 if (incx == 1 && incy == 1)
359 void Vadd(
int n,
const T *x,
const int incx,
const T *y,
const int incy, T *z,
384 void Sadd(
int n,
const T alpha,
const T *x,
const int incx, T *y,
388 if (incx == 1 && incy == 1)
419 void Vsub(
int n,
const T *x,
const int incx,
const T *y,
const int incy, T *z,
423 if (incx == 1 && incy == 1 && incz == 1)
458 void Ssub(
int n,
const T alpha,
const T *x,
const int incx, T *y,
462 if (incx == 1 && incy == 1)
492 template <
class T>
void Zero(
int n, T *x,
const int incx)
496 std::memset(x,
'\0', n *
sizeof(T));
518 template <
class T>
void Neg(
int n, T *x,
const int incx)
534 void Vsqrt(
int n,
const T *x,
const int incx, T *y,
const int incy)
553 void Vabs(
int n,
const T *x,
const int incx, T *y,
const int incy)
557 *y = (*x > 0) ? *x : -(*x);
574 void Vvtvp(
int n,
const T *w,
const int incw,
const T *x,
const int incx,
575 const T *y,
const int incy, T *z,
const int incz)
579 *z = (*w) * (*x) + (*y);
598 void Vvtvm(
int n,
const T *w,
const int incw,
const T *x,
const int incx,
599 const T *y,
const int incy, T *z,
const int incz)
603 *z = (*w) * (*x) - (*y);
623 const int incx,
const T *y,
const int incy,
624 T *z,
const int incz)
627 if (incx == 1 && incy == 1 && incz == 1)
631 *z = alpha * (*x) + (*y);
641 *z = alpha * (*x) + (*y);
664 void Svtvm(
int n,
const T alpha,
const T *x,
const int incx,
const T *y,
665 const int incy, T *z,
const int incz)
669 *z = alpha * (*x) - (*y);
692 void Vvtvvtp(
int n,
const T *v,
int incv,
const T *w,
int incw,
const T *x,
693 int incx,
const T *y,
int incy, T *z,
int incz)
697 *z = (*v) * (*w) + (*x) * (*y);
721 void Vvtvvtm(
int n,
const T *v,
int incv,
const T *w,
int incw,
const T *x,
722 int incx,
const T *y,
int incy, T *z,
int incz)
726 *z = (*v) * (*w) - (*x) * (*y);
751 void Svtsvtp(
int n,
const T alpha,
const T *x,
int incx,
const T
beta,
752 const T *y,
int incy, T *z,
int incz)
756 *z = alpha * (*x) +
beta * (*y);
777 void Vstvpp(
int n,
const T alpha,
const T *v,
int incv,
const T *w,
int incw,
778 const T *x,
int incx, T *z,
int incz)
782 *z = alpha * (*v) + (*w) + (*x);
805 void Gathr(
int n,
const T *
sign,
const T *x,
const int *y, T *z)
809 *z++ = *(
sign++) * (*(x + *y++));
822 template <
class T>
void Scatr(
int n,
const T *x,
const int *y, T *z)
826 *(z + *(y++)) = *(x++);
837 void Scatr(
int n,
const T *
sign,
const T *x,
const int *y, T *z)
843 *(z + *(y++)) = *(
sign++) * (*(x++));
862 template <
class T>
void Assmb(
int n,
const T *x,
const int *y, T *z)
866 *(z + *(y++)) += *(x++);
877 void Assmb(
int n,
const T *
sign,
const T *x,
const int *y, T *z)
881 *(z + *(y++)) += *(
sign++) * (*(x++));
895 template <
class T> T
Vsum(
int n,
const T *x,
const int incx)
918 template <
class T>
int Imax(
int n,
const T *x,
const int incx)
921 int i, indx = (n > 0) ? 0 : -1;
924 for (i = 0; i < n; i++)
945 template <
class T> T
Vmax(
int n,
const T *x,
const int incx)
971 template <
class T>
int Iamax(
int n,
const T *x,
const int incx)
974 int i, indx = (n > 0) ? 0 : -1;
978 for (i = 0; i < n; i++)
980 xm = (*x > 0) ? *x : -*x;
999 template <
class T> T
Vamax(
int n,
const T *x,
const int incx)
1007 xm = (*x > 0) ? *x : -*x;
1023 template <
class T>
int Imin(
int n,
const T *x,
const int incx)
1026 int i, indx = (n > 0) ? 0 : -1;
1029 for (i = 0; i < n; i++)
1050 template <
class T> T
Vmin(
int n,
const T *x,
const int incx)
1076 template <
class T>
int Nnan(
int n,
const T *x,
const int incx)
1100 template <
class T> T
Dot(
int n,
const T *w,
const T *x)
1122 T
Dot(
int n,
const T *w,
const int incw,
const T *x,
const int incx)
1147 template <
class T> T
Dot2(
int n,
const T *w,
const T *x,
const int *y)
1153 sum += (*y == 1 ? (*w) * (*x) : 0);
1172 T
Dot2(
int n,
const T *w,
const int incw,
const T *x,
const int incx,
1173 const int *y,
const int incy)
1179 sum += (*y == 1 ? (*w) * (*x) : 0.0);
1254 template <
typename T>
1255 void Vcopy(
int n,
const T *x,
const int incx, T *y,
const int incy)
1257 if (incx == 1 && incy == 1)
1259 memcpy(y, x, n *
sizeof(T));
1273 int *y,
const int incy);
1275 const int incx,
unsigned int *y,
1286 void Reverse(
int n,
const T *x,
const int incx, T *y,
const int incy)
1296 y[nloop] = x[nloop];
1298 const T *x_end = x + (n - 1) * incx;
1299 T *y_end = y + (n - 1) * incy;
1300 for (i = 0; i < nloop; ++i)
#define LIB_UTILITIES_EXPORT
#define sign(a, b)
return the sign(b)*a
@ beta
Gauss Radau pinned at x=-1,.
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
void Ssub(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Substract vector y = alpha - x.
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
svtvvtp (scalar times vector plus scalar times vector):
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.
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 Vabs(int n, const T *x, const int incx, T *y, const int incy)
vabs: y = |x|
T Dot2(int n, const T *w, const T *x, const int *y)
dot2 (vector times vector times vector): z = w*x*y
void Neg(int n, T *x, const int incx)
Negate x = -x.
T Vmin(int n, const T *x, const int incx)
Return the minimum element in x - called vmin to avoid conflict with min.
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
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
void Scatr(int n, const T *x, const int *y, T *z)
Scatter vector z[y[i]] = x[i].
T Dot(int n, const T *w, const T *x)
dot (vector times vector): z = w*x
void Gathr(int n, const T *sign, const T *x, const int *y, T *z)
Gather vector z[i] = sign[i]*x[y[i]].
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 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 minus vector): z = alpha*x - y
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 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 minus vector): z = w*x - y
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):
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
int Imax(int n, const T *x, const int incx)
Return the index of the maximum element in x.
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.
int Imin(int n, const T *x, const int incx)
Return the index of the minimum element in x.
void Zero(int n, T *x, const int incx)
Zero vector.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
T ran2(long *idum)
Generates a number from ~Normal(0,1)
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 FillWhiteNoise(int n, const T eps, T *x, const int incx, int outseed)
Fills a vector with white noise.
int Nnan(int n, const T *x, const int incx)
Return number of NaN elements of x.
T Vamax(int n, const T *x, const int incx)
Return the maximum absolute element in x called vamax to avoid conflict with max.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add scalar y = alpha + x.
void Reverse(int n, const T *x, const int incx, T *y, const int incy)
T Vmax(int n, const T *x, const int incx)
Return the maximum element in x – called vmax to avoid conflict with max.
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 Vcopy(int n, const T *x, const int incx, T *y, const int incy)
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.
int Iamax(int n, const T *x, const int incx)
Return the index of the maximum absolute element in x.
scalarT< T > log(scalarT< T > in)
scalarT< T > sqrt(scalarT< T > in)