amgcl icon indicating copy to clipboard operation
amgcl copied to clipboard

Documentation/listing of parameters for MPI AMG solve

Open DABH opened this issue 4 years ago • 1 comments

It seems like the parameter names used to control AMG and solver settings are pretty different for the MPI vs. non-MPI versions of the runtime AMGCL interface. For example, in examples/mpi/solve_mm_mpi.cpp, we have

prm.put("local.coarsening.type", coarsening);
prm.put("local.relax.type",      relaxation);
prm.put("isolver.type",          iterative_solver);

but these parameters like local and isolver don't exist in the non-MPI runtime interface, for example in examples/call_lib.cpp there is

amgcl_params_sets(prm, "precond.relax.type", "spai0");
amgcl_params_sets(prm, "solver.type", "bicgstabl");
amgcl_params_seti(prm, "solver.L", 1);
amgcl_params_seti(prm, "solver.maxiter", 100);

I can guess some mappings from non-MPI to MPI, like

solver.type -> isolver.type
precond.relax.type -> local.relax.type (but is there also global relax type?)

but in general I'm not sure of all the different parameters that can be set, especially in the MPI case which is what I'm most interested in. The docs don't really seem to have any comprehensive list of all the possible parameters names and descriptions. Is it possible to put together a quick list of the possible parameters for the runtime MPI solver interface (especially with AMG), and maybe how those map to the similar parameters in the non-MPI interface?

Or, even informally like in this issue, can you suggest what are the main parameters I should experiment with in the MPI case in order to try to reduce the iteration count / solution time of my system?

Happy to help in any way I can. Thank you in advance!

DABH avatar Dec 02 '19 01:12 DABH

examples/mpi/solve_mm_mpi.cpp uses subdomain deflation preconditioner (http://ta.twi.tudelft.nl/users/vuik/pub_it_def.html, amgcl/mpi/subdomain_deflation.hpp), hence the difference in parameters. examples/mpi/mpi_amg.cpp is the one using amgcl::mpi::amg, which has a set of parameters closely resembling that of the serial amgcl::amg.

Any component in amgcl defines its own set of parameters (as a params subclass), so you can peek at possible parameters in the corresponding header file. For example, here is the definition of amgcl::mpi::amg::params.

Or, even informally like in this issue, can you suggest what are the main parameters I should experiment with in the MPI case in order to try to reduce the iteration count / solution time of my system?

This mostly depends on the system you are solving.

ddemidov avatar Dec 02 '19 06:12 ddemidov