| [2814] | 1 | #include<iostream>
 | 
|---|
 | 2 | #include"CLHEP/Matrix/Matrix.h"
 | 
|---|
 | 3 | #include"CLHEP/Matrix/SymMatrix.h"
 | 
|---|
 | 4 | 
 | 
|---|
 | 5 | /* -------------------------------------------------
 | 
|---|
 | 6 |     Test comparatif (pour SOPHYA) des matrices CLHep
 | 
|---|
 | 7 |                             R. Ansari , Juin 2005
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 |     Pour compiler :
 | 
|---|
 | 10 |     definir flag/chemin include et librariries CLHep,
 | 
|---|
 | 11 |     Au CC-IN2P3 par exemple, 
 | 
|---|
 | 12 |     csh> set inchep = '-I/usr/local/lhcxx/CLHEP/pro/include/'
 | 
|---|
 | 13 |     csh> set libhep = '-L/usr/local/lhcxx/CLHEP/pro/lib -lCLHEP'
 | 
|---|
 | 14 |     csh> cc -c timing.c 
 | 
|---|
 | 15 |     csh> g++ -c $inchep mtxclhep.cc
 | 
|---|
 | 16 |     csh> g++ -o mtxclhep mtxclhep.o timing.o $libhep
 | 
|---|
 | 17 | 
 | 
|---|
 | 18 |     Execution :
 | 
|---|
 | 19 |     Acces aux elements et operation add/multcst
 | 
|---|
 | 20 |     csh> time ./mtxclhep 50 1000 500
 | 
|---|
 | 21 |     Inversion / multiplication
 | 
|---|
 | 22 |     csh> time ./mtxclhep 1 1000 1000
 | 
|---|
 | 23 |     ------------------------------------------- */
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 | 
 | 
|---|
 | 26 | extern "C" {
 | 
|---|
 | 27 | void InitTim(void);
 | 
|---|
 | 28 | void PrtTim(const char *Comm);
 | 
|---|
 | 29 | }
 | 
|---|
 | 30 | 
 | 
|---|
 | 31 | using namespace std;
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 | int main(int narg, char* arg[])
 | 
|---|
 | 34 | {
 | 
|---|
 | 35 |   
 | 
|---|
 | 36 |   if (narg < 3) {
 | 
|---|
 | 37 |     cout << "\n mtxclhep - missing arguments\n" 
 | 
|---|
 | 38 |          << "     Usage:  mtxclhep NLoop NRow NCol \n"  
 | 
|---|
 | 39 |          << " if nrow==ncol ==>  test inverse/mtx multiply (one time)" << endl;
 | 
|---|
 | 40 |     return 1;
 | 
|---|
 | 41 |   }
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 |   int N = 10;
 | 
|---|
 | 44 |   int nrow = 2; 
 | 
|---|
 | 45 |   int ncol = 2;
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 |   N = atoi(arg[1]);
 | 
|---|
 | 48 | 
 | 
|---|
 | 49 |   nrow = atoi(arg[2]);
 | 
|---|
 | 50 |   ncol = atoi(arg[3]);
 | 
|---|
 | 51 | 
 | 
|---|
 | 52 |   cout << " ---- mtxclhep: NLoop=" << N << " NRow= " << nrow 
 | 
|---|
 | 53 |        << " NCol= " << ncol << " ---- " << endl;
 | 
|---|
 | 54 |   
 | 
|---|
 | 55 |   InitTim();
 | 
|---|
 | 56 |   srand48(10);
 | 
|---|
 | 57 | 
 | 
|---|
 | 58 |   //ATTENTION :  L'indexage commence a 1 
 | 
|---|
 | 59 |   try {
 | 
|---|
 | 60 |     int i,j,k;
 | 
|---|
 | 61 | 
 | 
|---|
 | 62 |     HepMatrix m1(nrow, ncol);
 | 
|---|
 | 63 |     HepMatrix m2(nrow, ncol);
 | 
|---|
 | 64 |     HepMatrix m3(nrow, ncol);
 | 
|---|
 | 65 |     HepMatrix m4(nrow, ncol);
 | 
|---|
 | 66 |     HepMatrix m5(nrow, ncol);
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 |  
 | 
|---|
 | 69 |     for(k=0; k<N; k++) {
 | 
|---|
 | 70 |       double xxr = drand48();
 | 
|---|
 | 71 |       double yyr = 2.*drand48();
 | 
|---|
 | 72 |       for(i=1; i<=nrow; i++)
 | 
|---|
 | 73 |         for(j=1; j<=ncol; j++) {
 | 
|---|
 | 74 |           m1(i,j) = k*300+10.*i+j+xxr;  
 | 
|---|
 | 75 |           m2(i,j) = k*550+20.*i+2.*j+yyr;
 | 
|---|
 | 76 |           m3(i,j) = k*860.+40.*i+7.*j+yyr*3.14;
 | 
|---|
 | 77 |         }
 | 
|---|
 | 78 |     }
 | 
|---|
 | 79 |     cout << " (1) Element access done ---" << endl;
 | 
|---|
 | 80 |     PrtTim(" (1) -- ");
 | 
|---|
 | 81 |  
 | 
|---|
 | 82 |     for(k=0; k<N; k++) {
 | 
|---|
 | 83 |       double c1 = drand48() + 1.2;
 | 
|---|
 | 84 |       double c2 = drand48() + 3.5;
 | 
|---|
 | 85 |       double c3 = drand48() + 6.7;
 | 
|---|
 | 86 |       m5 = m1*c1+m2*c2+m3*c3;
 | 
|---|
 | 87 |     }
 | 
|---|
 | 88 |     cout << " (3) Add/CstMult: m1*c1 + m2*c2 + m3*c3 done ---" << endl;
 | 
|---|
 | 89 |     PrtTim(" (3) -- ");
 | 
|---|
 | 90 | 
 | 
|---|
 | 91 |   
 | 
|---|
 | 92 |   
 | 
|---|
 | 93 |     if (nrow == ncol) {
 | 
|---|
 | 94 |       cout << " mtxclhep/inverse , mtx multiply A(N,N)  N=" << nrow << endl;
 | 
|---|
 | 95 |       HepMatrix A(nrow, nrow);
 | 
|---|
 | 96 |       
 | 
|---|
 | 97 |       for(i=1; i<=nrow; i++)
 | 
|---|
 | 98 |         for(j=0; j<=nrow; j++)   A(i,j) = drand48();
 | 
|---|
 | 99 |       
 | 
|---|
 | 100 |       cout << " (91)  A(i,j) = drand48() done ---" << endl;
 | 
|---|
 | 101 |       PrtTim(" (91) -- ");
 | 
|---|
 | 102 |       
 | 
|---|
 | 103 |       int ierr;
 | 
|---|
 | 104 |       HepMatrix Ainv = A.inverse(ierr);
 | 
|---|
 | 105 |       cout << " (92)  Ainv = A.inverse() done ---" << endl;
 | 
|---|
 | 106 |       PrtTim(" (92) -- ");
 | 
|---|
 | 107 |       if (ierr == 0) {
 | 
|---|
 | 108 |         cout << " A.inverse(ierr) OK computing A*Ainv ..." << endl; 
 | 
|---|
 | 109 |         HepMatrix mxx = A*Ainv;
 | 
|---|
 | 110 |         cout << " (93)  mxx = A*Ainv done ---" << endl;
 | 
|---|
 | 111 |         PrtTim(" (93) -- ");
 | 
|---|
 | 112 |       }
 | 
|---|
 | 113 |     }
 | 
|---|
 | 114 |   }
 | 
|---|
 | 115 |   catch (std::exception & sex) {
 | 
|---|
 | 116 |     cerr << " mtxclhep/ catched std::exception what()=" << sex.what() << endl;
 | 
|---|
 | 117 |   }  
 | 
|---|
 | 118 |   catch (...) {
 | 
|---|
 | 119 |     cerr << " mtxclhep/catched unknown (...) exception " << endl; 
 | 
|---|
 | 120 |   }  
 | 
|---|
 | 121 |   cout << " ------ FIN mtxclhep -------- " << endl;
 | 
|---|
 | 122 |   return 0;
 | 
|---|
 | 123 | }
 | 
|---|