Changeset 1343 in Sophya for trunk/SophyaProg/Tests/lpk.cc


Ignore:
Timestamp:
Nov 24, 2000, 10:48:18 AM (25 years ago)
Author:
ansari
Message:

Ajout test LapackServer::SVD() ds lpk.cc - Reza 24/11/2000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaProg/Tests/lpk.cc

    r1248 r1343  
    1111
    1212
    13 int lpk_tarr(int n);
    14 int lpk_tmtx(int n);
     13int lpk_rzt_arr(int n);
     14int lpk_linsolve_mtx(int n);
     15int lpk_svd_mtx(int l, int c, int wsf, bool covu=true);
    1516
    1617static double TOLERANCE = 1.e-6;
     
    2526
    2627  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;
    3035    exit(0);
    3136  }
    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);
    3642  int nprt = 100;
    3743  int prtlev = 1;
    3844  if (narg > 3) prtlev = atoi(arg[3]);
    3945  if (narg > 4) nprt = atoi(arg[4]);
     46  if (narg > 5) wsf = atoi(arg[5]);
    4047
    4148  int rc = 0;
    4249  BaseArray::SetMaxPrint(nprt, prtlev);
    4350  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; }
    4656  }
    4757  catch (PThrowable exc) {
     
    5565 
    5666  PrtTim(" End of lpk LinAlg/Lapack test ");
    57   cout << " ---------------  END of Programme -------------- " << endl;
     67  cout << " ---------------  END of Programme -------- (Rc= "
     68       << rc << ") --- " << endl;
    5869  return(rc);
    5970}
    6071
    61 
    62 int lpk_tmtx(int n)
     72// -----------------------------------------------------------------------
     73/* Nouvelle-Fonction */
     74int lpk_linsolve_mtx(int n)
    6375{
    64   int i,j,k;
     76  int i,j;
    6577  BaseArray::SetDefaultMemoryMapping(BaseArray::FortranMemoryMapping);
     78  cout << " lpk_linsolve_mtx() - Test of LapackServer::LinSolve()  " << endl;
    6679  Matrix a(n,n);
    6780  for(i=0; i<n; i++)
    6881    for(j=0; j<n; j++)  a(j,i) = GauRnd(0., 1.);
    69   cout << " ------------ Matrix A = \n " << a << "\n" << endl;
    7082 
    7183  Vector x(n), b;
     
    7587  b = a*x;
    7688
    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;
    7990  cout << " ------------ Matrix A = \n " << a << "\n" << endl;
    8091  cout << " ------------ Matrix X = \n " << x << "\n" << endl;
     
    8899  cout << " ------------ Result B(=X ?) = \n " << b << "\n" << endl;
    89100  Vector diff = b-x;
     101  PrtTim(" End of Compute(diff)");
    90102  cout << " ------------ Vector diff B-X = \n " << diff << "\n" << endl;
    91103  double min,max;
     
    102114}
    103115
    104 int  lpk_tarr(int n)
     116// -----------------------------------------------------------------------
     117/* Nouvelle-Fonction */
     118int lpk_svd_mtx(int m, int n, int wsf, bool covu)
    105119{
    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
     162int  lpk_rzt_arr(int n)
     163{
     164  int i,j;
    107165  TArray<r_4> a(n,n);
    108166  for(i=0; i<n; i++)
Note: See TracChangeset for help on using the changeset viewer.