Changeset 3570 in Sophya for trunk/SophyaProg
- Timestamp:
- Feb 7, 2009, 10:30:29 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaProg/Tests/arrt.cc
r3569 r3570 525 525 rc += 4; 526 526 } 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 528 630 return rc; 529 631 }
Note:
See TracChangeset
for help on using the changeset viewer.