1 #include "test.h"
2
3 datatype *A[2], *B[2], *C[2], *D[2], *E[2], *F[2], *Work, scale[2], dif[2];
4 int *iWork, lWork, info;
5
6 #define xlascl XPREF(LAPACK(lascl))
7 void xlascl(const char *, const int *, const int *, const datatype *, const
8 datatype *, const int *, const int *, datatype *, const int *, int *);
9
10 #define xscal XPREF(LAPACK(scal))
11 void xscal(const int *, const datatype *, datatype *, const int *);
12
pre()13 void pre() {
14 int i;
15
16 x2matgen(n, n, A[0], A[1]);
17 x2matgen(n, n, B[0], B[1]);
18 x2matgen(n, n, C[0], C[1]);
19 x2matgen(n, n, D[0], D[1]);
20 x2matgen(n, n, E[0], E[1]);
21 x2matgen(n, n, F[0], F[1]);
22
23 for (i = 0; i < n; i++) {
24 // set diagonal
25 A[0][x1 * (i + n * i)] =
26 A[1][x1 * (i + n * i)] = (datatype) rand() / RAND_MAX;
27 E[0][x1 * (i + n * i)] =
28 E[1][x1 * (i + n * i)] = (datatype) rand() / RAND_MAX;
29 // clear first subdiagonal
30 A[0][x1 * (i + 1 + n * i)] =
31 A[1][x1 * (i + 1 + n * i)] =
32 B[0][x1 * (i + 1 + n * i)] =
33 B[1][x1 * (i + 1 + n * i)] =
34 A[0][x1 * (i + 1 + n * i) + x1 - 1] =
35 A[1][x1 * (i + 1 + n * i) + x1 - 1] =
36 B[0][x1 * (i + 1 + n * i) + x1 - 1] =
37 B[1][x1 * (i + 1 + n * i) + x1 - 1] = 0;
38 }
39 }
40
41
post()42 void post() {
43 if (scale[0] != 1 || scale[0] != 1)
44 printf("scale[RELAPACK] = %12g\tscale[LAPACK] = %12g\n", scale[0], scale[1]);
45 if (scale[0]) {
46 xlascl("G", iZERO, iZERO, &scale[0], &scale[1], &n, &n, C[0], &n, &info);
47 xlascl("G", iZERO, iZERO, &scale[0], &scale[1], &n, &n, F[0], &n, &info);
48 }
49 error = x2vecerr(n * n, C[0], C[1]) + x2vecerr(n * n, F[0], F[1]);
50 }
51
tests()52 void tests() {
53 lWork = 2 * n * n;
54 A[0] = xmalloc(n * n);
55 A[1] = xmalloc(n * n);
56 B[0] = xmalloc(n * n);
57 B[1] = xmalloc(n * n);
58 C[0] = xmalloc(n * n);
59 C[1] = xmalloc(n * n);
60 D[0] = xmalloc(n * n);
61 D[1] = xmalloc(n * n);
62 E[0] = xmalloc(n * n);
63 E[1] = xmalloc(n * n);
64 F[0] = xmalloc(n * n);
65 F[1] = xmalloc(n * n);
66 Work = xmalloc(lWork);
67 iWork = imalloc(n + n + 2);
68
69 #define ROUTINE XPREF(tgsyl)
70
71 TEST("N", iZERO, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
72 TEST("N", iZERO, &n2, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
73 TEST("N", iZERO, &n, &n2, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
74 TEST("N", iONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
75 TEST("N", iTWO, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
76 TEST("N", iTHREE, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
77 TEST("N", iFOUR, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
78 TEST(xCTRANS, iZERO, &n, &n, A[i], &n, B[i], &n, C[i], &n, D[i], &n, E[i], &n, F[i], &n, &scale[i], &dif[i], Work, &lWork, iWork, &info);
79
80 free(A[0]);
81 free(A[1]);
82 free(B[0]);
83 free(B[1]);
84 free(C[0]);
85 free(C[1]);
86 free(D[0]);
87 free(D[1]);
88 free(E[0]);
89 free(E[1]);
90 free(F[0]);
91 free(F[1]);
92 free(Work);
93 free(iWork);
94 }
95