Changeset 1343 in Sophya for trunk/SophyaProg/Tests/lpk.cc
- Timestamp:
- Nov 24, 2000, 10:48:18 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaProg/Tests/lpk.cc
r1248 r1343 11 11 12 12 13 int lpk_tarr(int n); 14 int lpk_tmtx(int n); 13 int lpk_rzt_arr(int n); 14 int lpk_linsolve_mtx(int n); 15 int lpk_svd_mtx(int l, int c, int wsf, bool covu=true); 15 16 16 17 static double TOLERANCE = 1.e-6; … … 25 26 26 27 if (narg < 2) { 27 cout << " lpk - LinAlg/LapackServer test - Usage lpk t/s [size=5] [prtlev=0] [nprtmax=100]\n" 28 << " t: lpk_tarr() rztest_lapack with TArray<r_4> \n" 29 << " s: lpk_tmtx() LapackServer with TMatrix<r_8> \n" << endl; 28 cout << " lpk - LinAlg/LapackServer test \n" 29 << " Usage: lpk linsolve/svd/rzt [sizeL,C=5,5] [prtlev=0] \n" 30 << " [nprtmax=100] [WorkSpaceSizeFactor=2] \n" 31 << " linsolve: lpk_linsolve_mtx() LapackServer::LinSolve with TMatrix<r_8> \n" 32 << " svd: lpk_svd_mtx() LapackServer::SVD(a,s,u,vt) with TMatrix<r_8> \n" 33 << " svds: lpk_svd_mtx() LapackServer::SVD(a,s); with TMatrix<r_8> \n" 34 << " rzt: lpk_rzt_tarr() rztest_lapack with TArray<r_4> \n" << endl; 30 35 exit(0); 31 36 } 32 int n = 5; 33 int opt = 's'; 34 opt = *(arg[1]); 35 if (narg > 2) n = atoi(arg[2]); 37 int l,c; 38 l = c = 5; 39 int wsf = 2; 40 string opt = arg[1]; 41 if (narg > 2) sscanf(arg[2], "%d,%d", &l, &c); 36 42 int nprt = 100; 37 43 int prtlev = 1; 38 44 if (narg > 3) prtlev = atoi(arg[3]); 39 45 if (narg > 4) nprt = atoi(arg[4]); 46 if (narg > 5) wsf = atoi(arg[5]); 40 47 41 48 int rc = 0; 42 49 BaseArray::SetMaxPrint(nprt, prtlev); 43 50 try { 44 if (opt == 's') rc = lpk_tmtx(n); 45 else rc = lpk_tarr(n); 51 if (opt == "linsolve") rc = lpk_linsolve_mtx(l); 52 else if (opt == "svd") rc = lpk_svd_mtx(l,c,wsf,true); 53 else if (opt == "svds") rc = lpk_svd_mtx(l,c,wsf,false); 54 else if (opt == "rzt") rc = lpk_rzt_arr(l); 55 else { cout << " Unknown option " << opt << " ! " << endl; rc = 66; } 46 56 } 47 57 catch (PThrowable exc) { … … 55 65 56 66 PrtTim(" End of lpk LinAlg/Lapack test "); 57 cout << " --------------- END of Programme -------------- " << endl; 67 cout << " --------------- END of Programme -------- (Rc= " 68 << rc << ") --- " << endl; 58 69 return(rc); 59 70 } 60 71 61 62 int lpk_tmtx(int n) 72 // ----------------------------------------------------------------------- 73 /* Nouvelle-Fonction */ 74 int lpk_linsolve_mtx(int n) 63 75 { 64 int i,j ,k;76 int i,j; 65 77 BaseArray::SetDefaultMemoryMapping(BaseArray::FortranMemoryMapping); 78 cout << " lpk_linsolve_mtx() - Test of LapackServer::LinSolve() " << endl; 66 79 Matrix a(n,n); 67 80 for(i=0; i<n; i++) 68 81 for(j=0; j<n; j++) a(j,i) = GauRnd(0., 1.); 69 cout << " ------------ Matrix A = \n " << a << "\n" << endl;70 82 71 83 Vector x(n), b; … … 75 87 b = a*x; 76 88 77 // cout << ":::::::: rztest_lapack - Size=" << n << " ::::::::: " << endl; 78 cout << " ------- lpk_tmtx() LapackServerTest Using TMatrix<r_8> -------- " << endl; 89 cout << " ---- lpk_tmtx() LapackServer::LinSolve Test Using TMatrix<r_8> ----- " << endl; 79 90 cout << " ------------ Matrix A = \n " << a << "\n" << endl; 80 91 cout << " ------------ Matrix X = \n " << x << "\n" << endl; … … 88 99 cout << " ------------ Result B(=X ?) = \n " << b << "\n" << endl; 89 100 Vector diff = b-x; 101 PrtTim(" End of Compute(diff)"); 90 102 cout << " ------------ Vector diff B-X = \n " << diff << "\n" << endl; 91 103 double min,max; … … 102 114 } 103 115 104 int lpk_tarr(int n) 116 // ----------------------------------------------------------------------- 117 /* Nouvelle-Fonction */ 118 int lpk_svd_mtx(int m, int n, int wsf, bool covu) 105 119 { 106 int i,j,k; 120 BaseArray::SetDefaultMemoryMapping(BaseArray::FortranMemoryMapping); 121 cout << " lpk_svd_mtx() - Test of LapackServer::SVD " << endl; 122 123 Matrix a(m , n), aa; 124 a = RandomSequence(RandomSequence::Gaussian, 0., 4.); 125 aa = a; 126 Vector s; 127 Matrix u, vt; 128 cout << " ---- lpk_svd_tmtx() LapackServer::SVD Test Using TMatrix<r_8> ---- " << endl; 129 cout << " ------------ Matrix A = \n " << a << "\n" << endl; 130 131 cout << "\n Calling LapackSVD(a,s,u,vt) .... " << endl; 132 PrtTim(" Calling LapackSVD() "); 133 LapackServer<r_8> lpks; 134 lpks.SetWorkSpaceSizeFactor(wsf); 135 if (covu) lpks.SVD(aa, s, u, vt); 136 else lpks.SVD(aa, s); 137 PrtTim(" End LapackSVD() "); 138 139 cout << " ------------ Result S = \n " << s << "\n" << endl; 140 if (!covu) return(0); 141 cout << " ------------ Result U = \n " << u << "\n" << endl; 142 cout << " ------------ Result VT = \n " << vt << "\n" << endl; 143 Matrix sm(m,n); 144 int minmn = (m<n) ? m : n ; 145 for(int k=0; k< minmn ; k++) sm(k,k) = s(k); 146 Matrix diff = u*(sm*vt) - a; 147 PrtTim(" End of Compute(diff)"); 148 cout << " ------------ Matrix diff U*S*Vt - A = \n " << diff << "\n" << endl; 149 double min,max; 150 diff.MinMax(min, max); 151 cout << " Min/Max difference Matrix (?=0) , Min= " << min 152 << " Max= " << max << endl; 153 if ((fabs(min) > TOLERANCE) || (fabs(max) > TOLERANCE)) { 154 cout << " !!! Difference exceeding tolerance (=" << TOLERANCE << ") !!!" 155 << endl; 156 return(99); 157 } 158 return(0); 159 160 } 161 162 int lpk_rzt_arr(int n) 163 { 164 int i,j; 107 165 TArray<r_4> a(n,n); 108 166 for(i=0; i<n; i++)
Note:
See TracChangeset
for help on using the changeset viewer.