mpi/solvers/direct_solver_test.cc File Reference
#include "generic.h"
#include "poisson.h"
#include "meshes/one_d_mesh.h"

Classes

class  OneDPoissonProblem< ELEMENT >
 1D Poisson problem in unit interval. More...
 

Namespaces

 FishSolnOneDPoisson
 Namespace for fish-shaped solution of 1D Poisson equation.
 

Functions

void FishSolnOneDPoisson::get_exact_u (const Vector< double > &x, Vector< double > &u)
 Exact, fish-shaped solution as a 1D vector. More...
 
void FishSolnOneDPoisson::source_function (const Vector< double > &x, double &source)
 Source function required to make the fish shape an exact solution. More...
 
int main (int argc, char **argv)
 Driver for 1D Poisson problem. More...
 

Function Documentation

◆ main()

int main ( int argc  ,
char **  argv 
)

Driver for 1D Poisson problem.

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////

274 {
275 #ifdef OOMPH_HAS_MPI
276  // Setup mpi but don't make a copy of mpi_comm_world because
277  // mumps wants to work with the real thing.
278  bool make_copy_of_mpi_comm_world=false;
279  MPI_Helpers::init(argc,argv,make_copy_of_mpi_comm_world);
280 #endif
281 
282  //Number of elements
283  unsigned n_element=40;
284 
285  // global distribution
286  // LinearAlgebraDistribution
287  // distributed_dist(problem.communicator_pt(),ndof,true);
288 
289  // the doc info
290  DocInfo doc_info;
291  doc_info.set_directory("RESLT");
292 
293 #ifdef OOMPH_HAS_MPI
295  // SuperLU_dist Test
297 
298  // MATRIX BASED SOLVE / CRDoubleMatrix (global)
299  {
300  oomph_info
301  << "///////////////////////////////////////////////////////////////////////"
302  << std::endl;
303  oomph_info
304  << "TESTING: SuperLU_dist matrix based solve w/ global CRDoubleMatrix"
305  << std::endl;
306  oomph_info
307  << "///////////////////////////////////////////////////////////////////////"
308  << std::endl << std::endl;
311  unsigned ndof = problem.ndof();
312  LinearAlgebraDistribution global_dist(problem.communicator_pt(),ndof,false);
313  CRDoubleMatrix A(&global_dist);
314  DoubleVector b(&global_dist,0.0);
315  DoubleVector x(&global_dist,0.0);
317  solver.set_solver_type(SuperLUSolver::Distributed);
318  problem.get_jacobian(b,A);
319  solver.enable_doc_time();
320  solver.solve(&A,b,x);
321  x.output("RESLT/SuperLU_dist_CRDoubleMatrix_global.dat");
322  }
323 
324  // MATRIX BASED SOLVE / CRDoubleMatrix (distributed)
325  {
326  oomph_info
327  << "///////////////////////////////////////////////////////////////////////"
328  << std::endl;
329  oomph_info
330  << "TESTING: SuperLU_dist matrix based solve w/ dist CRDoubleMatrix"
331  << std::endl;
332  oomph_info
333  << "///////////////////////////////////////////////////////////////////////"
334  << std::endl << std::endl;
337  unsigned ndof = problem.ndof();
338  LinearAlgebraDistribution distributed_dist(problem.communicator_pt(),
339  ndof,true);
340  CRDoubleMatrix A(&distributed_dist);
341  DoubleVector b(&distributed_dist,0.0);
342  DoubleVector x(&distributed_dist,0.0);
344  solver.set_solver_type(SuperLUSolver::Distributed);
345  problem.get_jacobian(b,A);
346  solver.enable_doc_time();
347  solver.solve(&A,b,x);
348  x.output("RESLT/SuperLU_dist_CRDoubleMatrix_distributed.dat");
349  }
350 
351  // PROBLEM BASED SOLVE (global)
352  {
353  oomph_info
354  << "///////////////////////////////////////////////////////////////////////"
355  << std::endl;
356  oomph_info << "TESTING: SuperLU_dist global problem based solve"
357  << std::endl;
358  oomph_info
359  << "///////////////////////////////////////////////////////////////////////"
360  << std::endl << std::endl;
363  DoubleVector x;
365  solver.set_solver_type(SuperLUSolver::Distributed);
366  solver.use_global_solve_in_superlu_dist();
367  problem.linear_solver_pt() = &solver;
368  problem.newton_solve();
369  doc_info.number()++;
370  problem.doc_solution(doc_info);
371  problem.zero_dofs();
372  }
373 
374  // PROBLEM BASED SOLVE (distributed)
375  {
376  oomph_info
377  << "///////////////////////////////////////////////////////////////////////"
378  << std::endl;
379  oomph_info << "TESTING: SuperLU_dist distributed solve"
380  << std::endl;
381  oomph_info
382  << "///////////////////////////////////////////////////////////////////////"
383  << std::endl << std::endl;
386  DoubleVector x;
388  solver.set_solver_type(SuperLUSolver::Distributed);
389  solver.use_distributed_solve_in_superlu_dist();
390  problem.linear_solver_pt() = &solver;
391  problem.newton_solve();
392  doc_info.number()++;
393  problem.doc_solution(doc_info);
394  problem.zero_dofs();
395  }
396 #endif
397 
398 
399 #ifdef OOMPH_HAS_MUMPS
400 
401  // PROBLEM BASED SOLVE (distributed, using mumps)
402  {
403  oomph_info
404  << "///////////////////////////////////////////////////////////////////////"
405  << std::endl;
406  oomph_info << "TESTING: MUMPS global problem based solve"
407  << std::endl;
408  oomph_info
409  << "///////////////////////////////////////////////////////////////////////"
410  << std::endl << std::endl;
413  DoubleVector x;
415  problem.linear_solver_pt() = &solver;
416  problem.newton_solve();
417  doc_info.number()++;
418  problem.doc_solution(doc_info);
419  problem.zero_dofs();
420  }
421 
422 #else
423 
424  ofstream some_file;
425  char filename[100];
426 
427  // Output solution with specified number of plot points per element
428  sprintf(filename,"RESLT/dummy_mumps.dat");
429  some_file.open(filename);
430  some_file << "dummy data for missing mumps\n";
431  some_file.close();
432 
433 #endif
434 
435 
436 #ifdef OOMPH_HAS_MPI
437  MPI_Helpers::finalize();
438 #endif
439 } // end of main
BiCGSTAB< SparseMatrix< double > > solver
Definition: BiCGSTAB_simple.cpp:5
Scalar * b
Definition: benchVecAdd.cpp:17
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
1D Poisson problem in unit interval.
Definition: linear_solvers/direct_solver_test.cc:81
Definition: matrices.h:888
Definition: oomph_utilities.h:499
void set_directory(const std::string &directory)
Definition: oomph_utilities.cc:298
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: double_vector.h:58
Definition: linear_algebra_distribution.h:64
Wrapper to Mumps solver.
Definition: mumps_solver.h:62
Definition: linear_solver.h:486
void source_function(const Vector< double > &x, double &source)
Source function required to make the fish shape an exact solution.
Definition: linear_solvers/direct_solver_test.cc:63
string filename
Definition: MergeRestartFiles.py:39
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
list x
Definition: plotDoE.py:28
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References b, MergeRestartFiles::filename, oomph::DocInfo::number(), oomph::oomph_info, problem, oomph::DocInfo::set_directory(), solver, FishSolnOneDPoisson::source_function(), and plotDoE::x.