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