You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

xtrsyl.c 2.1 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "test.h"
  2. datatype *A[2], *B[2], *C[2], *Work, scale[2];
  3. int info;
  4. #define xlascl XPREF(LAPACK(lascl))
  5. void xlascl(const char *, const int *, const int *, const datatype *, const
  6. datatype *, const int *, const int *, datatype *, const int *, int *);
  7. void pre() {
  8. int i;
  9. x2matgen(n, n, A[0], A[1]);
  10. x2matgen(n, n, B[0], B[1]);
  11. x2matgen(n, n, C[0], C[1]);
  12. for (i = 0; i < n; i++) {
  13. // set diagonal
  14. A[0][x1 * (i + n * i)] =
  15. A[1][x1 * (i + n * i)] = (datatype) rand() / RAND_MAX;
  16. // clear first subdiagonal
  17. A[0][x1 * (i + 1 + n * i)] =
  18. A[1][x1 * (i + 1 + n * i)] =
  19. B[0][x1 * (i + 1 + n * i)] =
  20. B[1][x1 * (i + 1 + n * i)] =
  21. A[0][x1 * (i + 1 + n * i) + x1 - 1] =
  22. A[1][x1 * (i + 1 + n * i) + x1 - 1] =
  23. B[0][x1 * (i + 1 + n * i) + x1 - 1] =
  24. B[1][x1 * (i + 1 + n * i) + x1 - 1] = 0;
  25. }
  26. }
  27. void post() {
  28. if (scale[0] != 1 || scale[0] != 1)
  29. printf("scale[RELAPACK] = %12g\tscale[LAPACK] = %12g\n", scale[0], scale[1]);
  30. if (scale[0])
  31. xlascl("G", iZERO, iZERO, &scale[0], &scale[1], &n, &n, C[0], &n, &info);
  32. error = x2vecerr(n * n, C[0], C[1]);
  33. }
  34. void tests() {
  35. A[0] = xmalloc(n * n);
  36. A[1] = xmalloc(n * n);
  37. B[0] = xmalloc(n * n);
  38. B[1] = xmalloc(n * n);
  39. C[0] = xmalloc(n * n);
  40. C[1] = xmalloc(n * n);
  41. #define ROUTINE XPREF(trsyl)
  42. TEST("N", "N", iONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  43. TEST("N", "N", iONE, &n2, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  44. TEST("N", "N", iONE, &n, &n2, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  45. TEST("C", "N", iONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  46. TEST("N", "C", iONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  47. TEST("C", "C", iONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  48. TEST("N", "N", iMONE, &n, &n, A[i], &n, B[i], &n, C[i], &n, &scale[i], &info);
  49. free(A[0]);
  50. free(A[1]);
  51. free(B[0]);
  52. free(B[1]);
  53. free(C[0]);
  54. free(C[1]);
  55. }