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 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