1 /// @file
2 /// Test QR Factorization
3 /// \test Test QR Factorization
4
5 //TESTARGS(only="cpu") {ceed_resource}
6 #include <ceed.h>
7 #include <ceed/backend.h>
8 #include <math.h>
9 #include <stdio.h>
10
main(int argc,char ** argv)11 int main(int argc, char **argv) {
12 Ceed ceed;
13 CeedScalar A[12] = {1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0};
14 CeedScalar qr[12] = {1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0};
15 CeedScalar A_qr[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
16 CeedScalar tau[4];
17
18 CeedInit(argv[1], &ceed);
19
20 CeedQRFactorization(ceed, qr, tau, 4, 3);
21 for (CeedInt i = 0; i < 3; i++) {
22 for (CeedInt j = i; j < 3; j++) A_qr[i * 3 + j] = qr[i * 3 + j];
23 }
24 CeedHouseholderApplyQ(A_qr, qr, tau, CEED_NOTRANSPOSE, 4, 3, 3, 3, 1);
25
26 for (CeedInt i = 0; i < 12; i++) {
27 if (fabs(A_qr[i] - A[i]) > 100. * CEED_EPSILON) {
28 // LCOV_EXCL_START
29 printf("Error in QR factorization A_qr[%" CeedInt_FMT "] = %f != A[%" CeedInt_FMT "] = %f\n", i, A_qr[i], i, A[i]);
30 // LCOV_EXCL_STOP
31 }
32 }
33
34 CeedDestroy(&ceed);
35 return 0;
36 }
37