Changeset 3570 in Sophya for trunk/SophyaProg


Ignore:
Timestamp:
Feb 7, 2009, 10:30:29 PM (17 years ago)
Author:
ansari
Message:

Ajouts nouveaux tests avec Rc sur operations TArray, Reza 07/02/2009

File:
1 edited

Legend:

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

    r3569 r3570  
    525525    rc += 4;
    526526  }
    527 
     527 
     528  if (prtlev > 0) 
     529    cout << " CheckArry: Starting Test-4 ArrayOp <float> " << endl;  nerr = 0;
     530  NX = 7;
     531  NY = 5;
     532  NZ = 3; 
     533  TArray<float> FA(NX,NY,NZ), FB, FM1(NX,NY,NZ), FM2(NX,NY,NZ);
     534  for(int iz=0; iz<NZ; iz++) 
     535    FM1(Range::all(), Range::all(), Range(iz, iz)) = M_PI*(iz+0.75);
     536  for(int iy=0; iy<NY; iy++) 
     537    FM2(Range::all(), Range(iy, iy), Range::all()) = (iy+2.22)*78.654;
     538
     539  FA = RandomSequence(RandomSequence::Gaussian, 7., 2.7);
     540  FB = FA; 
     541
     542  float cst[3] = {6., 4., 8.2};
     543
     544  for(int ix=0; ix<NX; ix++)
     545    for(int iy=0; iy<NY; iy++)
     546      for(int iz=0; iz<NZ; iz++)
     547        FB(ix,iy,iz) = FB(ix,iy,iz)*FM1(ix,iy,iz)+cst[0]*FM2(ix,iy,iz);         
     548
     549  nerr = 0;
     550  TArray<float> FD = ((FA&&FM1) + (cst[0]*FM2))/cst[1];
     551  TArray<float> FE = (FD*cst[1] - FB);
     552  float fmin, fmax;
     553  FE.MinMax(fmin, fmax);
     554 
     555//  cout << FM1 << FM2;
     556//  cout << FB << FD ;
     557//  cout << " ---- Resultat FE: " << FE;
     558  if ((fabs(fmin)>1.e-5) || (fabs(fmax)>1e-5)) nerr++;
     559  if (nerr == 0)
     560    cout << "(4) CheckTArray <int>  ArrayOp <float> OK " << endl;
     561  else {
     562    cout << "(4) CheckTArray <int>  ArrayOp <float>  ERROR  Rc += 8 !!! fmin="
     563         << fmin << " fmax=" << fmax << endl;
     564    rc += 8;
     565  }
     566
     567  if (prtlev > 0) 
     568    cout << " CheckArry: Starting Test-5 PPF_Array IO " << endl; 
     569  nerr = 0;
     570  {
     571    POutPersist po("arrt_ck.ppf");
     572    TArray<float> FAS = FA(Range::all(), Range::all(), Range(0,0));
     573    po << FA << FAS;   
     574  }
     575  {
     576    PInPersist pin("arrt_ck.ppf");
     577    TArray<float> RFA, RFAS;
     578    pin >> RFA >> RFAS;
     579    TArray<float> DA = RFA - FA;
     580    TArray<float> DAS = RFAS - FA(Range::all(), Range::all(), Range(0,0));
     581    DA.MinMax(fmin, fmax);
     582    if ((fabs(fmin)>1.e-8) || (fabs(fmax)>1e-8)) nerr++;
     583    DAS.MinMax(fmin, fmax);
     584    if ((fabs(fmin)>1.e-8) || (fabs(fmax)>1e-8)) nerr++;
     585  }
     586  if (nerr == 0)
     587    cout << "(5) CheckTArray <float>  PPF_Array IO OK " << endl;
     588  else {
     589    cout << "(5) CheckTArray <float>  PPF_Array IO  ERROR  Rc += 16 !!!  nerr="
     590         << nerr << endl;
     591    rc += 16;
     592  }
     593
     594  if (prtlev > 0) 
     595    cout << " CheckArry: Starting Test-6 Matrix inverse/multiply " << endl; 
     596  nerr = 0;
     597 
     598  sa_size_t MSZ = 32;
     599  Matrix A(MSZ,MSZ), B(MSZ, MSZ);
     600  A = 0.;
     601  for(sa_size_t cc=0; cc<MSZ; cc+=2) {
     602        sa_size_t ca = cc;
     603        sa_size_t ra = MSZ-ca-2;
     604        A(ra,ca) = 1.;   B(ca, ra) = 0.5;
     605        A(ra+1,ca) = 1.;   B(ca, ra+1) = 0.5;
     606        A(ra,ca+1) = 1.;   B(ca+1, ra) = 0.5;
     607        A(ra+1,ca+1) = -1.;   B(ca+1, ra+1) = -0.5;
     608  }
     609//  cout << A << B;
     610  Matrix C = A*B;
     611  Matrix Identite(MSZ,MSZ);
     612  Identite = IdentityMatrix(1., MSZ);
     613  Matrix D = C-Identite;
     614//  cout << "---- C=A*B=" << C ;
     615  Matrix Ainv = Inverse(A);
     616  Matrix E =B-Ainv;
     617  double dmin, dmax;
     618  D.MinMax(dmin, dmax);
     619  if ((fabs(dmin)>1.e-7) || (fabs(dmax)>1e-7)) nerr++;
     620  E.MinMax(dmin, dmax);
     621  if ((fabs(dmin)>1.e-7) || (fabs(dmax)>1e-7)) nerr++;
     622  if (nerr == 0)
     623    cout << "(6) CheckTArray <double>  Matrix inverse/multiply OK " << endl;
     624  else {
     625    cout << "(6) CheckTArray <double>  Matrix inverse/multiply  ERROR  Rc += 32 !!!  nerr="
     626         << nerr << endl;
     627    rc += 32;
     628  }
     629 
    528630  return rc;
    529631}
Note: See TracChangeset for help on using the changeset viewer.