libMesh
Functions
matrixsolve.C File Reference

Go to the source code of this file.

Functions

void usage (const std::string &prog_name)
 
int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 33 of file matrixsolve.C.

References libMesh::LinearSolver< T >::build(), libMesh::SparseMatrix< T >::build(), libMesh::NumericVector< T >::build(), libMesh::TriangleWrapper::init(), libMesh::out, libMesh::Real, libMesh::LinearSolver< T >::solve(), and usage().

34 {
35  LibMeshInit init(argc, argv);
36 
37  if (argc < 3)
38  usage(argv[0]);
39 
40  // Create a GetPot object to parse the command line
41  GetPot command_line (argc, argv);
42 
43  std::string matfile, rhsfile;
44  if (command_line.search(1, "-m"))
45  matfile = command_line.next(matfile);
46  else
47  usage(argv[0]);
48 
49  if (command_line.search(1, "-r"))
50  rhsfile = command_line.next(rhsfile);
51  else
52  usage(argv[0]);
53 
54  auto mat = SparseMatrix<Number>::build(init.comm());
55 
56  LOG_CALL("mat.read()", "main", mat->read(matfile));
57 
58  libMesh::out << "Loaded " << mat->m() << " by " << mat->n() <<
59  " matrix " << matfile << std::endl;
60 
61  auto rhs = NumericVector<Number>::build(init.comm()),
62  solution = NumericVector<Number>::build(init.comm());
63 
64  LOG_CALL("rhs.read()", "main", rhs->read_matlab(rhsfile));
65 
66  libMesh::out << "Loaded length-" << rhs->size() <<
67  " vector " << rhsfile << std::endl;
68 
69  solution->init(rhs->size(), rhs->local_size());
70 
71  auto solver = LinearSolver<Number>::build(init.comm());
72 
73  Real tol = 1e-9;
74  if (command_line.search(1, "-t"))
75  tol = command_line.next(tol);
76 
77  unsigned int n_iters = 1e3;
78  if (command_line.search(1, "-n"))
79  n_iters = command_line.next(n_iters);
80 
81  auto [iters, res] = solver->solve(*mat, *solution, *rhs, tol, n_iters);
82 
83  libMesh::out << "Finished in " << iters << " iterations with " << res
84  << " residual " << std::endl;
85 
86  return 0;
87 }
Provides a uniform interface to vector storage schemes for different linear algebra libraries...
Definition: vector_fe_ex5.C:44
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g.
Definition: libmesh.h:90
Generic sparse matrix.
Definition: vector_fe_ex5.C:46
This base class can be inherited from to provide interfaces to linear solvers from different packages...
void init(triangulateio &t)
Initializes the fields of t to nullptr/0 as necessary.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OStreamProxy out
void usage(const std::string &prog_name)
Definition: matrixsolve.C:90

◆ usage()

void usage ( const std::string &  prog_name)

Definition at line 90 of file matrixsolve.C.

References libMesh::out.

Referenced by main().

91 {
92  std::ostringstream helpList;
93  helpList <<
94  "Usage: " << prog_name <<
95  " [options]\n"
96  "\n"
97  "options:\n"
98  " -m <string> Matrix filename (required)\n"
99  " -r <string> RHS Vector filename (required)\n"
100  " -t <tol> Linear Solver tolerance (default 1e-9)\n"
101  " -n <n_iter> Linear Solver max iterations (default 1e3)\n";
102 
103  libMesh::out << helpList.str();
104  exit(0);
105 }
OStreamProxy out