The finite element method using deal.II - 2021/2022
poisson.h
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------
2  *
3  * Copyright (C) 1999 - 2020 by the deal.II authors
4  *
5  * This file is part of the deal.II library.
6  *
7  * The deal.II library is free software; you can use it, redistribute
8  * it, and/or modify it under the terms of the GNU Lesser General
9  * Public License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  * The full text of the license can be found in the file LICENSE.md at
12  * the top level directory of deal.II.
13  *
14  * ---------------------------------------------------------------------
15  *
16  * Authors: Wolfgang Bangerth, 1999,
17  * Guido Kanschat, 2011
18  * Luca Heltai, 2021
19  */
20 
21 // Make sure we don't redefine things
22 #ifndef poisson_include_file
23 #define poisson_include_file
24 
25 #include <deal.II/base/function.h>
30 #include <deal.II/base/timer.h>
31 
34 
36 #include <deal.II/dofs/dof_tools.h>
37 
38 #include <deal.II/fe/fe_q.h>
39 #include <deal.II/fe/fe_values.h>
41 
43 #include <deal.II/grid/tria.h>
44 
50 #include <deal.II/lac/solver_cg.h>
52 #include <deal.II/lac/vector.h>
53 
56 
60 
61 #include <fstream>
62 #include <iostream>
63 
64 #define FORCE_USE_OF_TRILINOS
65 
66 namespace LA
67 {
68 #if defined(DEAL_II_WITH_PETSC) && !defined(DEAL_II_PETSC_WITH_COMPLEX) && \
69  !(defined(DEAL_II_WITH_TRILINOS) && defined(FORCE_USE_OF_TRILINOS))
70  using namespace dealii::LinearAlgebraPETSc;
71 # define USE_PETSC_LA
72 #elif defined(DEAL_II_WITH_TRILINOS)
73  using namespace dealii::LinearAlgebraTrilinos;
74 #else
75 # error DEAL_II_WITH_PETSC or DEAL_II_WITH_TRILINOS required
76 #endif
77 } // namespace LA
78 
79 
80 // Forward declare the tester class
81 template <typename Integral>
82 class PoissonTester;
83 
84 using namespace dealii;
85 
91 template <int dim>
93 {
94 public:
99  Poisson();
100 
101  void
102  print_system_info();
103 
104  void
105  run();
106 
107  void
108  initialize(const std::string &filename);
109 
110  void
111  parse_string(const std::string &par);
112 
115 
116 protected:
117  void
118  assemble_system_one_cell(
119  const typename DoFHandler<dim>::active_cell_iterator &cell,
120  ScratchData & scratch,
121  CopyData & copy);
122 
123 
124  void
125  copy_one_cell(const CopyData &copy);
126 
127  void
128  make_grid();
129 
130  void
131  refine_grid();
132 
133  void
134  setup_system();
135 
136  void
137  assemble_system();
138 
139  void
140  assemble_system_on_range(
143 
144  void
145  solve();
146  void
147  estimate();
148  void
149  mark();
150  void
151  output_results(const unsigned cycle) const;
152 
154 
157 
159  std::unique_ptr<FE_Q<dim>> fe;
160  std::unique_ptr<MappingQGeneric<dim>> mapping;
161  DoFHandler<dim> dof_handler;
163 
164  // Only needed changes for MPI
167 
172 
173 
175  std::string estimator_type = "exact";
176  std::string marking_strategy = "global";
177  std::pair<double, double> coarsening_and_refinement_factors = {0.03, 0.3};
178 
179 
180  FunctionParser<dim> forcing_term;
183  FunctionParser<dim> dirichlet_boundary_condition;
184  FunctionParser<dim> neumann_boundary_condition;
186 
187 
188  unsigned int fe_degree = 1;
189  unsigned int mapping_degree = 1;
190  unsigned int n_refinements = 4;
191  unsigned int n_refinement_cycles = 1;
192  std::string output_filename = "poisson";
193  int number_of_threads = -1;
194 
195  std::set<types::boundary_id> dirichlet_ids = {0};
196  std::set<types::boundary_id> neumann_ids;
197 
198  std::string forcing_term_expression = "1";
199  std::string coefficient_expression = "1";
200  std::string exact_solution_expression = "0";
201  std::string dirichlet_boundary_conditions_expression = "0";
202  std::string neumann_boundary_conditions_expression = "0";
203  std::string pre_refinement_expression = "0";
204  std::map<std::string, double> constants;
205 
206  std::string grid_generator_function = "hyper_cube";
207  std::string grid_generator_arguments = "0: 1: false";
208 
209  ParsedConvergenceTable error_table;
210 
211  bool use_direct_solver = true;
212 
214 
215  template <typename Integral>
216  friend class PoissonTester;
217 };
218 
219 #endif
LA
Definition: poisson.h:66
ParsedConvergenceTable
Poisson::locally_owned_dofs
IndexSet locally_owned_dofs
Definition: poisson.h:165
cycle
unsigned int cycle
parameter_acceptor.h
tria.h
dynamic_sparsity_pattern.h
Vector
Vector< double > Vector
MeshWorker::CopyData
TimerOutput
dealii
grid_generator.h
Poisson::locally_relevant_solution
LA::MPI::Vector locally_relevant_solution
Definition: poisson.h:169
Poisson::locally_relevant_dofs
IndexSet locally_relevant_dofs
Definition: poisson.h:166
Poisson::pcout
ConditionalOStream pcout
Definition: poisson.h:155
matrix_tools.h
begin
iterator begin()
SparseMatrix
friend friend class SparseMatrix
constraints
AffineConstraints< double > constraints
DoFHandler
fe_values.h
function.h
initialize
virtual void initialize(const std::string &vars, const std::vector< std::string > &expressions, const std::map< std::string, double > &constants, const bool time_dependent=false)
Poisson::exact_solution
FunctionParser< dim > exact_solution
Definition: poisson.h:182
MeshWorker::ScratchData
Poisson::mapping
std::unique_ptr< MappingQGeneric< dim > > mapping
Definition: poisson.h:160
sparse_matrix.h
vector_tools.h
generic_linear_algebra.h
Poisson::error_per_cell
Vector< float > error_per_cell
Definition: poisson.h:174
Poisson::triangulation
parallel::distributed::Triangulation< dim > triangulation
Definition: poisson.h:158
tria.h
Poisson::mpi_communicator
MPI_Comm mpi_communicator
Definition: poisson.h:153
run
virtual void run(ParameterHandler &prm)=0
parallel::distributed::Triangulation< dim >
copy_data.h
parsed_convergence_table.h
data_out.h
ParameterAcceptorProxy< ReductionControl >
mapping_q_generic.h
make_grid
void make_grid(Triangulation< 2 > &triangulation)
Definition: step-2.cc:41
IndexSet
function_parser.h
timer.h
fe_q.h
AffineConstraints< double >
affine_constraints.h
dof_tools.h
Poisson::system_matrix
LA::MPI::SparseMatrix system_matrix
Definition: poisson.h:168
scratch_data.h
precondition.h
grid_refinement.h
ConditionalOStream
PoissonTester
Definition: poisson-tester.cc:10
Poisson
Solve the Poisson problem, with Dirichlet or Neumann boundary conditions, on all geometries that can ...
Definition: poisson.h:55
Poisson::solver_control
ParameterAcceptorProxy< ReductionControl > solver_control
Definition: poisson.h:213
end
iterator end()
Poisson::coefficient
FunctionParser< dim > coefficient
Definition: poisson.h:181
Poisson::solution
LA::MPI::Vector solution
Definition: poisson.h:170
full_matrix.h
ParameterAcceptor
Poisson::pre_refinement
FunctionParser< dim > pre_refinement
Definition: poisson.h:185
dof_handler.h
Vector< float >
vector.h
solver_cg.h
FunctionParser
constants
std::map< std::string, double > constants
quadrature_lib.h
Poisson::timer
TimerOutput timer
Definition: poisson.h:156
Poisson::system_rhs
LA::MPI::Vector system_rhs
Definition: poisson.h:171