Skip to content

Commit 8499b1a

Browse files
authored
Merge pull request #33 from fdrmrc/trilinos_over_PETSc
Prefer Trilinos over PETSc
2 parents 535e526 + 16d24ff commit 8499b1a

13 files changed

+115
-261
lines changed

examples/cut_fem/1d2d/non_smooth_disk.cc

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@
2929
#include <deal.II/cgal/triangulation.h>
3030
#include <deal.II/distributed/shared_tria.h>
3131
#include <deal.II/grid/grid_out.h>
32-
#include <deal.II/lac/petsc_precondition.h>
33-
#include <deal.II/lac/petsc_solver.h>
34-
#include <deal.II/lac/petsc_sparse_matrix.h>
35-
#include <deal.II/lac/petsc_vector.h>
32+
#include <deal.II/lac/generic_linear_algebra.h>
3633

3734
#include <deal.II/dofs/dof_tools.h>
3835

@@ -157,9 +154,9 @@ template <int dim> class LaplaceSolver {
157154
NonMatching::MeshClassifier<dim> mesh_classifier;
158155

159156
SparsityPattern sparsity_pattern;
160-
PETScWrappers::MPI::SparseMatrix stiffness_matrix;
161-
PETScWrappers::MPI::Vector rhs;
162-
PETScWrappers::MPI::Vector solution;
157+
LinearAlgebraTrilinos::MPI::SparseMatrix stiffness_matrix;
158+
LinearAlgebraTrilinos::MPI::Vector rhs;
159+
LinearAlgebraTrilinos::MPI::Vector solution;
163160
MPI_Comm mpi_communicator;
164161

165162
const unsigned int n_mpi_processes;
@@ -890,12 +887,10 @@ template <int dim> void LaplaceSolver<dim>::assemble_system() {
890887
template <int dim> void LaplaceSolver<dim>::solve() {
891888
std::cout << "Solving system" << std::endl;
892889

893-
PETScWrappers::PreconditionBoomerAMG preconditioner;
894-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
895-
data.symmetric_operator = true;
896-
preconditioner.initialize(stiffness_matrix, data);
890+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
891+
preconditioner.initialize(stiffness_matrix);
897892
SolverControl solver_control(solution.size(), 1e-12);
898-
PETScWrappers::SolverCG solver(solver_control);
893+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
899894
solver.solve(stiffness_matrix, solution, rhs, preconditioner);
900895
std::cout << "Solved in " << solver_control.last_step() << " iterations."
901896
<< std::endl;

examples/cut_fem/1d2d/smooth_disk.cc

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030
#include <deal.II/distributed/shared_tria.h>
3131
#include <deal.II/grid/grid_in.h>
3232
#include <deal.II/grid/grid_out.h>
33-
#include <deal.II/lac/petsc_precondition.h>
34-
#include <deal.II/lac/petsc_solver.h>
35-
#include <deal.II/lac/petsc_sparse_matrix.h>
36-
#include <deal.II/lac/petsc_vector.h>
33+
#include <deal.II/lac/generic_linear_algebra.h>
3734

3835
#include <deal.II/dofs/dof_tools.h>
3936

@@ -148,9 +145,9 @@ template <int dim> class LaplaceSolver {
148145
NonMatching::MeshClassifier<dim> mesh_classifier;
149146

150147
SparsityPattern sparsity_pattern;
151-
PETScWrappers::MPI::SparseMatrix stiffness_matrix;
152-
PETScWrappers::MPI::Vector rhs;
153-
PETScWrappers::MPI::Vector solution;
148+
LinearAlgebraTrilinos::MPI::SparseMatrix stiffness_matrix;
149+
LinearAlgebraTrilinos::MPI::Vector rhs;
150+
LinearAlgebraTrilinos::MPI::Vector solution;
154151
MPI_Comm mpi_communicator;
155152

156153
const unsigned int n_mpi_processes;
@@ -904,12 +901,10 @@ template <int dim> void LaplaceSolver<dim>::assemble_system() {
904901
template <int dim> void LaplaceSolver<dim>::solve() {
905902
std::cout << "Solving system" << std::endl;
906903

907-
PETScWrappers::PreconditionBoomerAMG preconditioner;
908-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
909-
data.symmetric_operator = true;
910-
preconditioner.initialize(stiffness_matrix, data);
904+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
905+
preconditioner.initialize(stiffness_matrix);
911906
SolverControl solver_control(solution.size(), 1e-12);
912-
PETScWrappers::SolverCG solver(solver_control);
907+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
913908
solver.solve(stiffness_matrix, solution, rhs, preconditioner);
914909
std::cout << "Solved in " << solver_control.last_step() << " iterations."
915910
<< std::endl;

examples/cut_fem/1d2d/smooth_flower.cc

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030
#include <deal.II/distributed/shared_tria.h>
3131
#include <deal.II/grid/grid_in.h>
3232
#include <deal.II/grid/grid_out.h>
33-
#include <deal.II/lac/petsc_precondition.h>
34-
#include <deal.II/lac/petsc_solver.h>
35-
#include <deal.II/lac/petsc_sparse_matrix.h>
36-
#include <deal.II/lac/petsc_vector.h>
33+
#include <deal.II/lac/generic_linear_algebra.h>
3734

3835
#include <deal.II/dofs/dof_tools.h>
3936

@@ -147,9 +144,9 @@ template <int dim> class LaplaceSolver {
147144
NonMatching::MeshClassifier<dim> mesh_classifier;
148145

149146
SparsityPattern sparsity_pattern;
150-
PETScWrappers::MPI::SparseMatrix stiffness_matrix;
151-
PETScWrappers::MPI::Vector rhs;
152-
PETScWrappers::MPI::Vector solution;
147+
LinearAlgebraTrilinos::MPI::SparseMatrix stiffness_matrix;
148+
LinearAlgebraTrilinos::MPI::Vector rhs;
149+
LinearAlgebraTrilinos::MPI::Vector solution;
153150
MPI_Comm mpi_communicator;
154151

155152
const unsigned int n_mpi_processes;
@@ -885,12 +882,10 @@ template <int dim> void LaplaceSolver<dim>::assemble_system() {
885882
template <int dim> void LaplaceSolver<dim>::solve() {
886883
std::cout << "Solving system" << std::endl;
887884

888-
PETScWrappers::PreconditionBoomerAMG preconditioner;
889-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
890-
data.symmetric_operator = true;
891-
preconditioner.initialize(stiffness_matrix, data);
885+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
886+
preconditioner.initialize(stiffness_matrix);
892887
SolverControl solver_control(solution.size(), 1e-12);
893-
PETScWrappers::SolverCG solver(solver_control);
888+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
894889
solver.solve(stiffness_matrix, solution, rhs, preconditioner);
895890
std::cout << "Solved in " << solver_control.last_step() << " iterations."
896891
<< std::endl;

examples/cut_fem/2d3d/non_smooth_sphere.cc

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,11 @@
3434
#include <deal.II/fe/fe_values.h>
3535
#include <deal.II/grid/grid_tools_cache.h>
3636
#include <deal.II/hp/q_collection.h>
37-
#include <deal.II/lac/petsc_solver.h>
38-
#include <deal.II/lac/petsc_sparse_matrix.h>
39-
#include <deal.II/lac/petsc_vector.h>
37+
#include <deal.II/lac/generic_linear_algebra.h>
4038

4139
#include <deal.II/grid/filtered_iterator.h>
4240
#include <deal.II/grid/grid_generator.h>
4341
#include <deal.II/grid/tria.h>
44-
#include <deal.II/lac/petsc_precondition.h>
4542

4643
#include <deal.II/hp/fe_collection.h>
4744
#include <deal.II/hp/q_collection.h>
@@ -155,9 +152,9 @@ template <int dim> class LaplaceSolver {
155152
NonMatching::MeshClassifier<dim> mesh_classifier;
156153

157154
SparsityPattern sparsity_pattern;
158-
PETScWrappers::MPI::SparseMatrix stiffness_matrix;
159-
PETScWrappers::MPI::Vector rhs;
160-
PETScWrappers::MPI::Vector solution;
155+
LinearAlgebraTrilinos::MPI::SparseMatrix stiffness_matrix;
156+
LinearAlgebraTrilinos::MPI::Vector rhs;
157+
LinearAlgebraTrilinos::MPI::Vector solution;
161158
MPI_Comm mpi_communicator;
162159

163160
const unsigned int n_mpi_processes;
@@ -898,19 +895,11 @@ template <int dim> void LaplaceSolver<dim>::assemble_system() {
898895
template <int dim> void LaplaceSolver<dim>::solve() {
899896
std::cout << "Solving system" << std::endl;
900897
TimerOutput::Scope timer_section(timer, "Solve");
901-
// const unsigned int max_iterations = solution.size();
902-
// SolverControl solver_control(max_iterations);
903-
// SolverCG<> solver(solver_control);
904-
// solver.solve(stiffness_matrix, solution, rhs, PreconditionIdentity());
905-
// std::cout << "Solved in " << solver_control.last_step() << " iterations."
906-
// << std::endl;
907-
// constraints.distribute(solution);
908-
PETScWrappers::PreconditionBoomerAMG preconditioner;
909-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
910-
data.symmetric_operator = true;
911-
preconditioner.initialize(stiffness_matrix, data);
898+
899+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
900+
preconditioner.initialize(stiffness_matrix);
912901
SolverControl solver_control(solution.size(), 1e-12);
913-
PETScWrappers::SolverCG solver(solver_control);
902+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
914903
solver.solve(stiffness_matrix, solution, rhs, preconditioner);
915904
std::cout << "Solved in " << solver_control.last_step() << " iterations."
916905
<< std::endl;

examples/cut_fem/2d3d/smooth_sphere.cc

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,11 @@
3434
#include <deal.II/fe/fe_values.h>
3535
#include <deal.II/grid/grid_tools_cache.h>
3636
#include <deal.II/hp/q_collection.h>
37-
#include <deal.II/lac/petsc_solver.h>
38-
#include <deal.II/lac/petsc_sparse_matrix.h>
39-
#include <deal.II/lac/petsc_vector.h>
4037

4138
#include <deal.II/grid/filtered_iterator.h>
4239
#include <deal.II/grid/grid_generator.h>
4340
#include <deal.II/grid/tria.h>
44-
#include <deal.II/lac/petsc_precondition.h>
41+
#include <deal.II/lac/generic_linear_algebra.h>
4542

4643
#include <deal.II/hp/fe_collection.h>
4744
#include <deal.II/hp/q_collection.h>
@@ -155,9 +152,9 @@ template <int dim> class LaplaceSolver {
155152
NonMatching::MeshClassifier<dim> mesh_classifier;
156153

157154
SparsityPattern sparsity_pattern;
158-
PETScWrappers::MPI::SparseMatrix stiffness_matrix;
159-
PETScWrappers::MPI::Vector rhs;
160-
PETScWrappers::MPI::Vector solution;
155+
LinearAlgebraTrilinos::MPI::SparseMatrix stiffness_matrix;
156+
LinearAlgebraTrilinos::MPI::Vector rhs;
157+
LinearAlgebraTrilinos::MPI::Vector solution;
161158
MPI_Comm mpi_communicator;
162159

163160
const unsigned int n_mpi_processes;
@@ -901,12 +898,10 @@ template <int dim> void LaplaceSolver<dim>::solve() {
901898
std::cout << "Solving system" << std::endl;
902899
TimerOutput::Scope timer_section(timer, "Solve");
903900

904-
PETScWrappers::PreconditionBoomerAMG preconditioner;
905-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
906-
data.symmetric_operator = true;
907-
preconditioner.initialize(stiffness_matrix, data);
901+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
902+
preconditioner.initialize(stiffness_matrix);
908903
SolverControl solver_control(solution.size(), 1e-12);
909-
PETScWrappers::SolverCG solver(solver_control);
904+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
910905
solver.solve(stiffness_matrix, solution, rhs, preconditioner);
911906
std::cout << "Solved in " << solver_control.last_step() << " iterations."
912907
<< std::endl;
@@ -1273,7 +1268,8 @@ template <int dim> void LaplaceSolver<dim>::run() {
12731268
solve();
12741269
// if (cycle == 3)
12751270
}
1276-
output_results();
1271+
if (cycle <= 2)
1272+
output_results();
12771273
const double error_L2_inside = compute_L2_error_from_inside();
12781274
const double error_L2_outside = compute_L2_error_from_outside();
12791275
const double error_L2 = std::sqrt(error_L2_outside * error_L2_outside +

examples/interface_penalisation/1d2d/non_smooth_disk.cc

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@
2525
#include <deal.II/fe/fe_system.h>
2626
#include <deal.II/fe/mapping_fe_field.h>
2727
#include <deal.II/grid/grid_in.h>
28+
#include <deal.II/lac/generic_linear_algebra.h>
2829
#include <deal.II/lac/linear_operator_tools.h>
29-
#include <deal.II/lac/petsc_precondition.h>
30-
#include <deal.II/lac/petsc_solver.h>
31-
#include <deal.II/lac/petsc_sparse_matrix.h>
32-
#include <deal.II/lac/petsc_vector.h>
3330
#include <deal.II/numerics/error_estimator.h>
3431

3532
#include <deal.II/dofs/dof_handler.h>
@@ -184,9 +181,9 @@ template <int dim, int spacedim = dim> class PoissonNitscheInterface {
184181
AffineConstraints<double> space_constraints;
185182
SparsityPattern sparsity_pattern;
186183

187-
PETScWrappers::MPI::SparseMatrix system_matrix;
188-
PETScWrappers::MPI::Vector solution;
189-
PETScWrappers::MPI::Vector system_rhs;
184+
LinearAlgebraTrilinos::MPI::SparseMatrix system_matrix;
185+
LinearAlgebraTrilinos::MPI::Vector solution;
186+
LinearAlgebraTrilinos::MPI::Vector system_rhs;
190187

191188
mutable TimerOutput timer;
192189

@@ -360,8 +357,7 @@ void PoissonNitscheInterface<dim, spacedim>::setup_system() {
360357

361358
// This is where we apply essential boundary conditions.
362359
VectorTools::interpolate_boundary_values(
363-
space_dh, 0,
364-
Solution<spacedim>(),
360+
space_dh, 0, Solution<spacedim>(),
365361
space_constraints); // zero Dirichlet on the boundary
366362

367363
space_constraints.close();
@@ -422,7 +418,6 @@ void PoissonNitscheInterface<dim, spacedim>::assemble_system() {
422418
local_dof_indices,
423419
system_matrix, system_rhs);
424420
}
425-
426421
}
427422
}
428423

@@ -435,7 +430,6 @@ void PoissonNitscheInterface<dim, spacedim>::assemble_system() {
435430
embedded_dh.distribute_dofs(embedded_fe);
436431
std::cout << "Embedded DoFs: " << embedded_dh.n_dofs() << std::endl;
437432

438-
439433
// Add Nitsche's contribution to the system matrix.
440434
NonMatching::assemble_nitsche_with_exact_intersections<spacedim, dim,
441435
spacedim>(
@@ -465,12 +459,10 @@ void PoissonNitscheInterface<dim, spacedim>::solve() {
465459
TimerOutput::Scope timer_section(timer, "Solve system");
466460
std::cout << "Solve system" << std::endl;
467461

468-
PETScWrappers::PreconditionBoomerAMG preconditioner;
469-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
470-
data.symmetric_operator = true;
471-
preconditioner.initialize(system_matrix, data);
462+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
463+
preconditioner.initialize(system_matrix);
472464
SolverControl solver_control(solution.size(), 1e-8);
473-
PETScWrappers::SolverCG solver(solver_control);
465+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
474466
solver.solve(system_matrix, solution, system_rhs, preconditioner);
475467

476468
std::cout << "Solver converged in: " << solver_control.last_step()
@@ -487,13 +479,15 @@ void PoissonNitscheInterface<dim, spacedim>::output_results(
487479
TimerOutput::Scope timer_section(timer, "Output results");
488480
// std::cout << "Output results" << std::endl;
489481
data_out.clear();
490-
data_out.attach_dof_handler(space_dh);
491-
data_out.add_data_vector(solution, "solution");
492-
data_out.build_patches();
493-
std::ofstream output("solution_nitsche" + std::to_string(dim) +
494-
std::to_string(spacedim) + std::to_string(cycle) +
495-
".vtu");
496-
data_out.write_vtu(output);
482+
if (cycle < 3) {
483+
data_out.attach_dof_handler(space_dh);
484+
data_out.add_data_vector(solution, "solution");
485+
data_out.build_patches();
486+
std::ofstream output("solution_nitsche" + std::to_string(dim) +
487+
std::to_string(spacedim) + std::to_string(cycle) +
488+
".vtu");
489+
data_out.write_vtu(output);
490+
}
497491
{
498492
Vector<double> difference_per_cell(space_triangulation.n_active_cells());
499493
VectorTools::integrate_difference(
@@ -539,7 +533,6 @@ void PoissonNitscheInterface<dim, spacedim>::run() {
539533
if (cycle == 0)
540534
adjust_grids();
541535

542-
543536
// Compute all the things we need to assemble the Nitsche's
544537
// contributions, namely the two cached triangulations and a degree to
545538
// integrate over the intersections.

examples/interface_penalisation/1d2d/smooth_disk.cc

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@
2525
#include <deal.II/fe/fe_system.h>
2626
#include <deal.II/fe/mapping_fe_field.h>
2727
#include <deal.II/grid/grid_in.h>
28+
#include <deal.II/lac/generic_linear_algebra.h>
2829
#include <deal.II/lac/linear_operator_tools.h>
29-
#include <deal.II/lac/petsc_precondition.h>
30-
#include <deal.II/lac/petsc_solver.h>
31-
#include <deal.II/lac/petsc_sparse_matrix.h>
32-
#include <deal.II/lac/petsc_vector.h>
3330
#include <deal.II/numerics/error_estimator.h>
3431

3532
#include <deal.II/dofs/dof_handler.h>
@@ -171,9 +168,9 @@ template <int dim, int spacedim = dim> class PoissonNitscheInterface {
171168
AffineConstraints<double> space_constraints;
172169
SparsityPattern sparsity_pattern;
173170

174-
PETScWrappers::MPI::SparseMatrix system_matrix;
175-
PETScWrappers::MPI::Vector solution;
176-
PETScWrappers::MPI::Vector system_rhs;
171+
LinearAlgebraTrilinos::MPI::SparseMatrix system_matrix;
172+
LinearAlgebraTrilinos::MPI::Vector solution;
173+
LinearAlgebraTrilinos::MPI::Vector system_rhs;
177174

178175
mutable TimerOutput timer;
179176

@@ -457,12 +454,10 @@ void PoissonNitscheInterface<dim, spacedim>::solve() {
457454
// PreconditionJacobi<SparseMatrix<double>> preconditioner;
458455
// preconditioner.initialize(system_matrix);
459456

460-
PETScWrappers::PreconditionBoomerAMG preconditioner;
461-
PETScWrappers::PreconditionBoomerAMG::AdditionalData data;
462-
data.symmetric_operator = true;
463-
preconditioner.initialize(system_matrix, data);
457+
LinearAlgebraTrilinos::MPI::PreconditionAMG preconditioner;
458+
preconditioner.initialize(system_matrix);
464459
SolverControl solver_control(solution.size(), 1e-8);
465-
PETScWrappers::SolverCG solver(solver_control);
460+
LinearAlgebraTrilinos::SolverCG solver(solver_control);
466461
solver.solve(system_matrix, solution, system_rhs, preconditioner);
467462

468463
std::cout << "Solver converged in: " << solver_control.last_step()

0 commit comments

Comments
 (0)