Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_sparseLU.cpp   Sprache: C

 
// Small bench routine for Eigen available in Eigen
// (C) Desire NUENTSA WAKAM, INRIA

#include <iostream>
#include <fstream>
#include <iomanip>
#include <unsupported/Eigen/SparseExtra>
#include <Eigen/SparseLU>
#include <bench/BenchTimer.h>
#ifdef EIGEN_METIS_SUPPORT
#include <Eigen/MetisSupport>
#endif

using namespace std;
using namespace Eigen;

int main(int argc, char **args)
{
//   typedef complex<double> scalar; 
  typedef double scalar; 
  SparseMatrix<scalar, ColMajor> A; 
  typedef SparseMatrix<scalar, ColMajor>::Index Index;
  typedef Matrix<scalar, Dynamic, Dynamic> DenseMatrix;
  typedef Matrix<scalar, Dynamic, 1> DenseRhs;
  Matrix<scalar, Dynamic, 1> b, x, tmp;
//   SparseLU<SparseMatrix<scalar, ColMajor>, AMDOrdering<int> >   solver;
// #ifdef EIGEN_METIS_SUPPORT
//   SparseLU<SparseMatrix<scalar, ColMajor>, MetisOrdering<int> > solver; 
//   std::cout<< "ORDERING : METIS\n"; 
// #else
  SparseLU<SparseMatrix<scalar, ColMajor>, COLAMDOrdering<int> >  solver;
  std::cout<< "ORDERING : COLAMD\n"
// #endif
  
  ifstream matrix_file; 
  string line;
  int  n;
  BenchTimer timer; 
  
  // Set parameters
  /* Fill the matrix with sparse matrix stored in Matrix-Market coordinate column-oriented format */
  if (argc < 2) assert(false && "please, give the matrix market file ");
  loadMarket(A, args[1]);
  cout << "End charging matrix " << endl;
  bool iscomplex=false, isvector=false;
  int sym;
  getMarketHeader(args[1], sym, iscomplex, isvector);
//   if (iscomplex) { cout<< " Not for complex matrices \n"; return -1; }
  if (isvector) { cout << "The provided file is not a matrix file\n"return -1;}
  if (sym != 0) { // symmetric matrices, only the lower part is stored
    SparseMatrix<scalar, ColMajor> temp; 
    temp = A;
    A = temp.selfadjointView<Lower>();
  }
  n = A.cols();
  /* Fill the right hand side */

  if (argc > 2)
    loadMarketVector(b, args[2]);
  else 
  {
    b.resize(n);
    tmp.resize(n);
//       tmp.setRandom();
    for (int i = 0; i < n; i++) tmp(i) = i; 
    b = A * tmp ;
  }

  /* Compute the factorization */
//   solver.isSymmetric(true);
  timer.start(); 
//   solver.compute(A);
  solver.analyzePattern(A); 
  timer.stop(); 
  cout << "Time to analyze " << timer.value() << std::endl;
  timer.reset(); 
  timer.start(); 
  solver.factorize(A); 
  timer.stop(); 
  cout << "Factorize Time " << timer.value() << std::endl;
  timer.reset(); 
  timer.start(); 
  x = solver.solve(b);
  timer.stop();
  cout << "solve time " << timer.value() << std::endl; 
  /* Check the accuracy */
  Matrix<scalar, Dynamic, 1> tmp2 = b - A*x;
  scalar tempNorm = tmp2.norm()/b.norm();
  cout << "Relative norm of the computed solution : " << tempNorm <<"\n";
  cout << "Number of nonzeros in the factor : " << solver.nnzL() + solver.nnzU() << std::endl; 
  
  return 0;
}

98%


¤ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge