The finite element method using deal.II - 2021/2022
Poisson< dim > Class Template Reference

Solve the Poisson problem, with Dirichlet or Neumann boundary conditions, on all geometries that can be generated by the functions in the GridGenerator namespace. More...

#include <poisson.h>

Inheritance diagram for Poisson< dim >:
[legend]

Public Types

using CopyData = MeshWorker::CopyData< 1, 1, 1 >
 
using ScratchData = MeshWorker::ScratchData< dim >
 

Public Member Functions

 Poisson ()
 
void run ()
 
 Poisson ()
 
void run ()
 
void initialize (const std::string &filename)
 
void parse_string (const std::string &par)
 
 Poisson ()
 Constructor. More...
 
void print_system_info ()
 
void run ()
 
void initialize (const std::string &filename)
 
void parse_string (const std::string &par)
 

Protected Member Functions

void make_grid ()
 
void setup_system ()
 
void assemble_system ()
 
void solve ()
 
void output_results () const
 
void make_grid ()
 
void refine_grid ()
 
void setup_system ()
 
void assemble_system ()
 
void solve ()
 
void output_results (const unsigned cycle) const
 
void assemble_system_one_cell (const typename DoFHandler< dim >::active_cell_iterator &cell, ScratchData &scratch, CopyData &copy)
 
void copy_one_cell (const CopyData &copy)
 
void make_grid ()
 
void refine_grid ()
 
void setup_system ()
 
void assemble_system ()
 
void assemble_system_on_range (const typename DoFHandler< dim >::active_cell_iterator &begin, const typename DoFHandler< dim >::active_cell_iterator &end)
 
void solve ()
 
void estimate ()
 
void mark ()
 
void output_results (const unsigned cycle) const
 

Protected Attributes

Triangulation< 2 > triangulation
 
FE_Q< 2 > fe
 
DoFHandler< 2 > dof_handler
 
SparsityPattern sparsity_pattern
 
SparseMatrix< double > system_matrix
 
Vector< double > solution
 
Vector< double > system_rhs
 
Triangulation< dim > triangulation
 
std::unique_ptr< FE_Q< dim > > fe
 
DoFHandler< dim > dof_handler
 
AffineConstraints< double > constraints
 
FunctionParser< dim > forcing_term
 
FunctionParser< dim > dirichlet_boundary_condition
 
FunctionParser< dim > neumann_boundary_condition
 
unsigned int fe_degree = 1
 
unsigned int n_refinements = 4
 
unsigned int n_refinement_cycles = 1
 
std::string output_filename = "poisson"
 
std::set< types::boundary_iddirichlet_ids = {0}
 
std::set< types::boundary_idneumann_ids
 
std::string forcing_term_expression = "1"
 
std::string dirichlet_boundary_conditions_expression = "0"
 
std::string neumann_boundary_conditions_expression = "0"
 
std::map< std::string, double > constants
 
std::string grid_generator_function = "hyper_cube"
 
std::string grid_generator_arguments = "0: 1: false"
 
ParsedConvergenceTable error_table
 
MPI_Comm mpi_communicator
 
ConditionalOStream pcout
 
TimerOutput timer
 
parallel::distributed::Triangulation< dim > triangulation
 
std::unique_ptr< MappingQGeneric< dim > > mapping
 
IndexSet locally_owned_dofs
 
IndexSet locally_relevant_dofs
 
LA::MPI::SparseMatrix system_matrix
 
LA::MPI::Vector locally_relevant_solution
 
LA::MPI::Vector solution
 
LA::MPI::Vector system_rhs
 
Vector< float > error_per_cell
 
std::string estimator_type = "exact"
 
std::string marking_strategy = "global"
 
std::pair< double, double > coarsening_and_refinement_factors = {0.03, 0.3}
 
FunctionParser< dim > coefficient
 
FunctionParser< dim > exact_solution
 
FunctionParser< dim > pre_refinement
 
unsigned int mapping_degree = 1
 
int number_of_threads = -1
 
std::string coefficient_expression = "1"
 
std::string exact_solution_expression = "0"
 
std::string pre_refinement_expression = "0"
 
bool use_direct_solver = true
 
ParameterAcceptorProxy< ReductionControlsolver_control
 

Friends

class PoissonTester
 

Detailed Description

template<int dim>
class Poisson< dim >

Solve the Poisson problem, with Dirichlet or Neumann boundary conditions, on all geometries that can be generated by the functions in the GridGenerator namespace.

Definition at line 55 of file poisson.h.

Member Typedef Documentation

◆ CopyData

template<int dim>
using Poisson< dim >::CopyData = MeshWorker::CopyData<1, 1, 1>

Definition at line 113 of file poisson.h.

◆ ScratchData

template<int dim>
using Poisson< dim >::ScratchData = MeshWorker::ScratchData<dim>

Definition at line 114 of file poisson.h.

Constructor & Destructor Documentation

◆ Poisson() [1/3]

template<int dim>
Poisson< dim >::Poisson

Definition at line 24 of file poisson.cc.

25  : fe(1)
27 {}

◆ Poisson() [2/3]

template<int dim>
Poisson< dim >::Poisson ( )

◆ Poisson() [3/3]

template<int dim>
Poisson< dim >::Poisson ( )

Constructor.

Initialize all parameters, and make sure the class is ready to run.

Member Function Documentation

◆ run() [1/3]

template<int dim>
void Poisson< dim >::run

Definition at line 133 of file poisson.cc.

134 {
135  make_grid();
136  setup_system();
137  assemble_system();
138  solve();
139  output_results();
140 }

◆ make_grid() [1/3]

template<int dim>
void Poisson< dim >::make_grid
protected

Definition at line 32 of file poisson.cc.

33 {
36  std::cout << "Number of active cells: " << triangulation.n_active_cells()
37  << std::endl;
38 }

◆ setup_system() [1/3]

template<int dim>
void Poisson< dim >::setup_system
protected

Definition at line 43 of file poisson.cc.

44 {
46  std::cout << "Number of degrees of freedom: " << dof_handler.n_dofs()
47  << std::endl;
54 }

◆ assemble_system() [1/3]

template<int dim>
void Poisson< dim >::assemble_system
protected

Definition at line 59 of file poisson.cc.

60 {
61  QGauss<2> quadrature_formula(fe.degree + 1);
62  FEValues<2> fe_values(fe,
63  quadrature_formula,
64  update_values | update_gradients | update_JxW_values);
65  const unsigned int dofs_per_cell = fe.n_dofs_per_cell();
66  FullMatrix<double> cell_matrix(dofs_per_cell, dofs_per_cell);
67  Vector<double> cell_rhs(dofs_per_cell);
68  std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
69  for (const auto &cell : dof_handler.active_cell_iterators())
70  {
71  fe_values.reinit(cell);
72  cell_matrix = 0;
73  cell_rhs = 0;
74  for (const unsigned int q_index : fe_values.quadrature_point_indices())
75  {
76  for (const unsigned int i : fe_values.dof_indices())
77  for (const unsigned int j : fe_values.dof_indices())
78  cell_matrix(i, j) +=
79  (fe_values.shape_grad(i, q_index) * // grad phi_i(x_q)
80  fe_values.shape_grad(j, q_index) * // grad phi_j(x_q)
81  fe_values.JxW(q_index)); // dx
82  for (const unsigned int i : fe_values.dof_indices())
83  cell_rhs(i) += (fe_values.shape_value(i, q_index) * // phi_i(x_q)
84  1. * // f(x_q)
85  fe_values.JxW(q_index)); // dx
86  }
87  cell->get_dof_indices(local_dof_indices);
88  for (const unsigned int i : fe_values.dof_indices())
89  for (const unsigned int j : fe_values.dof_indices())
90  system_matrix.add(local_dof_indices[i],
91  local_dof_indices[j],
92  cell_matrix(i, j));
93  for (const unsigned int i : fe_values.dof_indices())
94  system_rhs(local_dof_indices[i]) += cell_rhs(i);
95  }
96  std::map<types::global_dof_index, double> boundary_values;
98  0,
100  boundary_values);
101  MatrixTools::apply_boundary_values(boundary_values,
103  solution,
104  system_rhs);
105 }

◆ solve() [1/3]

template<int dim>
void Poisson< dim >::solve
protected

Definition at line 110 of file poisson.cc.

111 {
112  SolverControl solver_control(1000, 1e-12);
115 }

◆ output_results() [1/3]

template<int dim>
void Poisson< dim >::output_results ( ) const
protected

Definition at line 120 of file poisson.cc.

121 {
122  DataOut<2> data_out;
124  data_out.add_data_vector(solution, "solution");
125  data_out.build_patches();
126  std::ofstream output("solution.vtk");
127  data_out.write_vtk(output);
128 }

◆ run() [2/3]

template<int dim>
void Poisson< dim >::run ( )

◆ initialize() [1/2]

template<int dim>
void Poisson< dim >::initialize ( const std::string &  filename)

Definition at line 53 of file poisson.cc.

54 {
56 }

◆ parse_string() [1/2]

template<int dim>
void Poisson< dim >::parse_string ( const std::string &  par)

◆ make_grid() [2/3]

template<int dim>
void Poisson< dim >::make_grid ( )
protected

◆ refine_grid() [1/2]

template<int dim>
void Poisson< dim >::refine_grid
protected

Definition at line 86 of file poisson.cc.

87 {
89 }

◆ setup_system() [2/3]

template<int dim>
void Poisson< dim >::setup_system ( )
protected

◆ assemble_system() [2/3]

template<int dim>
void Poisson< dim >::assemble_system ( )
protected

◆ solve() [2/3]

template<int dim>
void Poisson< dim >::solve ( )
protected

◆ output_results() [2/3]

template<int dim>
void Poisson< dim >::output_results ( const unsigned  cycle) const
protected

Definition at line 223 of file poisson.cc.

224 {
225  DataOut<dim> data_out;
227  data_out.add_data_vector(solution, "solution");
228  data_out.build_patches();
229  std::string fname = output_filename + "_" + std::to_string(cycle) + ".vtu";
230  std::ofstream output(fname);
231  data_out.write_vtu(output);
232 }

◆ print_system_info()

template<int dim>
void Poisson< dim >::print_system_info

Definition at line 550 of file poisson.cc.

551 {
552  if (number_of_threads != -1 && number_of_threads > 0)
554  static_cast<unsigned int>(number_of_threads));
555 
556  std::cout << "Number of cores : " << MultithreadInfo::n_cores() << std::endl
557  << "Number of threads: " << MultithreadInfo::n_threads()
558  << std::endl;
559 }

◆ run() [3/3]

template<int dim>
void Poisson< dim >::run ( )

◆ initialize() [2/2]

template<int dim>
void Poisson< dim >::initialize ( const std::string &  filename)

◆ parse_string() [2/2]

template<int dim>
void Poisson< dim >::parse_string ( const std::string &  par)

◆ assemble_system_one_cell()

template<int dim>
void Poisson< dim >::assemble_system_one_cell ( const typename DoFHandler< dim >::active_cell_iterator cell,
ScratchData scratch,
CopyData copy 
)
protected

Definition at line 226 of file poisson.cc.

230 {
231  auto &cell_matrix = copy.matrices[0];
232  auto &cell_rhs = copy.vectors[0];
233 
234  cell->get_dof_indices(copy.local_dof_indices[0]);
235 
236  const auto &fe_values = scratch.reinit(cell);
237  cell_matrix = 0;
238  cell_rhs = 0;
239 
240  for (const unsigned int q_index : fe_values.quadrature_point_indices())
241  {
242  for (const unsigned int i : fe_values.dof_indices())
243  for (const unsigned int j : fe_values.dof_indices())
244  cell_matrix(i, j) +=
245  (coefficient.value(fe_values.quadrature_point(q_index)) * // a(x_q)
246  fe_values.shape_grad(i, q_index) * // grad phi_i(x_q)
247  fe_values.shape_grad(j, q_index) * // grad phi_j(x_q)
248  fe_values.JxW(q_index)); // dx
249  for (const unsigned int i : fe_values.dof_indices())
250  cell_rhs(i) +=
251  (fe_values.shape_value(i, q_index) * // phi_i(x_q)
252  forcing_term.value(fe_values.quadrature_point(q_index)) * // f(x_q)
253  fe_values.JxW(q_index)); // dx
254  }
255 
256  if (cell->at_boundary())
257  // for(const auto face: cell->face_indices())
258  for (unsigned int f = 0; f < GeometryInfo<dim>::faces_per_cell; ++f)
259  if (neumann_ids.find(cell->face(f)->boundary_id()) != neumann_ids.end())
260  {
261  auto &fe_face_values = scratch.reinit(cell, f);
262  for (const unsigned int q_index :
263  fe_face_values.quadrature_point_indices())
264  for (const unsigned int i : fe_face_values.dof_indices())
265  cell_rhs(i) += fe_face_values.shape_value(i, q_index) *
267  fe_face_values.quadrature_point(q_index)) *
268  fe_face_values.JxW(q_index);
269  }
270 }

◆ copy_one_cell()

template<int dim>
void Poisson< dim >::copy_one_cell ( const CopyData copy)
protected

Definition at line 276 of file poisson.cc.

277 {
279  copy.vectors[0],
280  copy.local_dof_indices[0],
282  system_rhs);
283 }

◆ make_grid() [3/3]

template<int dim>
void Poisson< dim >::make_grid ( )
protected

◆ refine_grid() [2/2]

template<int dim>
void Poisson< dim >::refine_grid ( )
protected

◆ setup_system() [3/3]

template<int dim>
void Poisson< dim >::setup_system ( )
protected

◆ assemble_system() [3/3]

template<int dim>
void Poisson< dim >::assemble_system ( )
protected

◆ assemble_system_on_range()

template<int dim>
void Poisson< dim >::assemble_system_on_range ( const typename DoFHandler< dim >::active_cell_iterator begin,
const typename DoFHandler< dim >::active_cell_iterator end 
)
protected

Definition at line 289 of file poisson.cc.

292 {
293  QGauss<dim> quadrature_formula(fe->degree + 1);
294  QGauss<dim - 1> face_quadrature_formula(fe->degree + 1);
295 
296  ScratchData scratch(*mapping,
297  *fe,
298  quadrature_formula,
299  update_values | update_gradients |
300  update_quadrature_points | update_JxW_values,
301  face_quadrature_formula,
302  update_values | update_quadrature_points |
303  update_JxW_values);
304 
306 
307  static Threads::Mutex assemble_mutex;
308 
309  for (auto cell = begin; cell != end; ++cell)
310  {
311  assemble_system_one_cell(cell, scratch, copy);
312  assemble_mutex.lock();
313  copy_one_cell(copy);
314  assemble_mutex.unlock();
315  }
316 }

◆ solve() [3/3]

template<int dim>
void Poisson< dim >::solve ( )
protected

◆ estimate()

template<int dim>
void Poisson< dim >::estimate
protected

Definition at line 380 of file poisson.cc.

381 {
382  TimerOutput::Scope timer_section(timer, "estimate");
383  if (estimator_type == "exact")
384  {
385  error_per_cell = 0;
386  QGauss<dim> quad(fe->degree + 1);
388  dof_handler,
392  quad,
394  }
395  else if (estimator_type == "kelly")
396  {
397  std::map<types::boundary_id, const Function<dim> *> neumann;
398  for (const auto id : neumann_ids)
399  neumann[id] = &neumann_boundary_condition;
400 
401  QGauss<dim - 1> face_quad(fe->degree + 1);
403  dof_handler,
404  face_quad,
405  neumann,
408  ComponentMask(),
409  &coefficient);
410  }
411  else if (estimator_type == "residual")
412  {
413  // h_T || f+\Delta u_h ||_0,T
414  // + \sum over faces
415  // 1/2 (h_F)^{1/2} || [n.\nabla u_h] ||_0,F
416 
417  QGauss<dim - 1> face_quad(fe->degree + 1);
418  QGauss<dim> quad(fe->degree + 1);
419 
420  std::map<types::boundary_id, const Function<dim> *> neumann;
421  for (const auto id : neumann_ids)
422  neumann[id] = &neumann_boundary_condition;
423 
425  dof_handler,
426  face_quad,
427  neumann,
430  ComponentMask(),
431  &coefficient);
432 
433  FEValues<dim> fe_values(*mapping,
434  *fe,
435  quad,
436  update_hessians | update_JxW_values |
437  update_quadrature_points);
438 
439  std::vector<double> local_laplacians(quad.size());
440 
441 
442  double residual_L2_norm = 0;
443 
444  unsigned int cell_index = 0;
445  for (const auto &cell : dof_handler.active_cell_iterators())
446  {
447  fe_values.reinit(cell);
448 
449  fe_values.get_function_laplacians(locally_relevant_solution,
450  local_laplacians);
451  residual_L2_norm = 0;
452  for (const auto q_index : fe_values.quadrature_point_indices())
453  {
454  const auto arg =
455  (local_laplacians[q_index] +
456  forcing_term.value(fe_values.quadrature_point(q_index)));
457  residual_L2_norm += arg * arg * fe_values.JxW(q_index);
458  }
460  cell->diameter() * std::sqrt(residual_L2_norm);
461 
462  ++cell_index;
463  }
464  }
465  else
466  {
467  AssertThrow(false, ExcNotImplemented());
468  }
469  auto global_estimator = error_per_cell.l2_norm();
470  error_table.add_extra_column("estimator", [global_estimator]() {
471  return global_estimator;
472  });
474  dof_handler,
477 }

◆ mark()

template<int dim>
void Poisson< dim >::mark
protected

Definition at line 483 of file poisson.cc.

484 {
485  TimerOutput::Scope timer_section(timer, "mark");
486  if (marking_strategy == "global")
487  {
488  for (const auto &cell : triangulation.active_cell_iterators())
489  cell->set_refine_flag();
490  }
491  else if (marking_strategy == "fixed_fraction")
492  {
498  }
499  else if (marking_strategy == "fixed_number")
500  {
506  }
507  else
508  {
509  Assert(false, ExcInternalError());
510  }
511 }

◆ output_results() [3/3]

template<int dim>
void Poisson< dim >::output_results ( const unsigned  cycle) const
protected

Friends And Related Function Documentation

◆ PoissonTester

template<typename Integral >
PoissonTester
friend

Definition at line 82 of file poisson.h.

Member Data Documentation

◆ triangulation [1/3]

template<int dim>
Triangulation<2> Poisson< dim >::triangulation
protected

Definition at line 74 of file poisson.h.

◆ fe [1/2]

template<int dim>
std::unique_ptr< FE_Q< dim > > Poisson< dim >::fe
protected

Definition at line 75 of file poisson.h.

◆ dof_handler [1/2]

template<int dim>
DoFHandler< dim > Poisson< dim >::dof_handler
protected

Definition at line 76 of file poisson.h.

◆ sparsity_pattern

template<int dim>
SparsityPattern Poisson< dim >::sparsity_pattern
protected

Definition at line 77 of file poisson.h.

◆ system_matrix [1/2]

template<int dim>
SparseMatrix< double > Poisson< dim >::system_matrix
protected

Definition at line 78 of file poisson.h.

◆ solution [1/2]

template<int dim>
Vector< double > Poisson< dim >::solution
protected

Definition at line 79 of file poisson.h.

◆ system_rhs [1/2]

template<int dim>
Vector< double > Poisson< dim >::system_rhs
protected

Definition at line 80 of file poisson.h.

◆ triangulation [2/3]

template<int dim>
Triangulation<dim> Poisson< dim >::triangulation
protected

Definition at line 89 of file poisson.h.

◆ fe [2/2]

template<int dim>
std::unique_ptr<FE_Q<dim> > Poisson< dim >::fe
protected

Definition at line 90 of file poisson.h.

◆ dof_handler [2/2]

template<int dim>
DoFHandler<dim> Poisson< dim >::dof_handler
protected

Definition at line 91 of file poisson.h.

◆ constraints

template<int dim>
AffineConstraints< double > Poisson< dim >::constraints
protected

Definition at line 92 of file poisson.h.

◆ forcing_term

template<int dim>
FunctionParser< dim > Poisson< dim >::forcing_term
protected

Definition at line 98 of file poisson.h.

◆ dirichlet_boundary_condition

template<int dim>
FunctionParser< dim > Poisson< dim >::dirichlet_boundary_condition
protected

Definition at line 99 of file poisson.h.

◆ neumann_boundary_condition

template<int dim>
FunctionParser< dim > Poisson< dim >::neumann_boundary_condition
protected

Definition at line 100 of file poisson.h.

◆ fe_degree

template<int dim>
unsigned int Poisson< dim >::fe_degree = 1
protected

Definition at line 103 of file poisson.h.

◆ n_refinements

template<int dim>
unsigned int Poisson< dim >::n_refinements = 4
protected

Definition at line 104 of file poisson.h.

◆ n_refinement_cycles

template<int dim>
unsigned int Poisson< dim >::n_refinement_cycles = 1
protected

Definition at line 105 of file poisson.h.

◆ output_filename

template<int dim>
std::string Poisson< dim >::output_filename = "poisson"
protected

Definition at line 106 of file poisson.h.

◆ dirichlet_ids

template<int dim>
std::set< types::boundary_id > Poisson< dim >::dirichlet_ids = {0}
protected

Definition at line 108 of file poisson.h.

◆ neumann_ids

template<int dim>
std::set< types::boundary_id > Poisson< dim >::neumann_ids
protected

Definition at line 109 of file poisson.h.

◆ forcing_term_expression

template<int dim>
std::string Poisson< dim >::forcing_term_expression = "1"
protected

Definition at line 111 of file poisson.h.

◆ dirichlet_boundary_conditions_expression

template<int dim>
std::string Poisson< dim >::dirichlet_boundary_conditions_expression = "0"
protected

Definition at line 112 of file poisson.h.

◆ neumann_boundary_conditions_expression

template<int dim>
std::string Poisson< dim >::neumann_boundary_conditions_expression = "0"
protected

Definition at line 113 of file poisson.h.

◆ constants

template<int dim>
std::map< std::string, double > Poisson< dim >::constants
protected

Definition at line 114 of file poisson.h.

◆ grid_generator_function

template<int dim>
std::string Poisson< dim >::grid_generator_function = "hyper_cube"
protected

Definition at line 116 of file poisson.h.

◆ grid_generator_arguments

template<int dim>
std::string Poisson< dim >::grid_generator_arguments = "0: 1: false"
protected

Definition at line 117 of file poisson.h.

◆ error_table

template<int dim>
ParsedConvergenceTable Poisson< dim >::error_table
protected

Definition at line 119 of file poisson.h.

◆ mpi_communicator

template<int dim>
MPI_Comm Poisson< dim >::mpi_communicator
protected

Definition at line 153 of file poisson.h.

◆ pcout

template<int dim>
ConditionalOStream Poisson< dim >::pcout
protected

Definition at line 155 of file poisson.h.

◆ timer

template<int dim>
TimerOutput Poisson< dim >::timer
mutableprotected

Definition at line 156 of file poisson.h.

◆ triangulation [3/3]

template<int dim>
parallel::distributed::Triangulation<dim> Poisson< dim >::triangulation
protected

Definition at line 158 of file poisson.h.

◆ mapping

template<int dim>
std::unique_ptr<MappingQGeneric<dim> > Poisson< dim >::mapping
protected

Definition at line 160 of file poisson.h.

◆ locally_owned_dofs

template<int dim>
IndexSet Poisson< dim >::locally_owned_dofs
protected

Definition at line 165 of file poisson.h.

◆ locally_relevant_dofs

template<int dim>
IndexSet Poisson< dim >::locally_relevant_dofs
protected

Definition at line 166 of file poisson.h.

◆ system_matrix [2/2]

template<int dim>
LA::MPI::SparseMatrix Poisson< dim >::system_matrix
protected

Definition at line 168 of file poisson.h.

◆ locally_relevant_solution

template<int dim>
LA::MPI::Vector Poisson< dim >::locally_relevant_solution
protected

Definition at line 169 of file poisson.h.

◆ solution [2/2]

template<int dim>
LA::MPI::Vector Poisson< dim >::solution
protected

Definition at line 170 of file poisson.h.

◆ system_rhs [2/2]

template<int dim>
LA::MPI::Vector Poisson< dim >::system_rhs
protected

Definition at line 171 of file poisson.h.

◆ error_per_cell

template<int dim>
Vector<float> Poisson< dim >::error_per_cell
protected

Definition at line 174 of file poisson.h.

◆ estimator_type

template<int dim>
std::string Poisson< dim >::estimator_type = "exact"
protected

Definition at line 175 of file poisson.h.

◆ marking_strategy

template<int dim>
std::string Poisson< dim >::marking_strategy = "global"
protected

Definition at line 176 of file poisson.h.

◆ coarsening_and_refinement_factors

template<int dim>
std::pair<double, double> Poisson< dim >::coarsening_and_refinement_factors = {0.03, 0.3}
protected

Definition at line 177 of file poisson.h.

◆ coefficient

template<int dim>
FunctionParser<dim> Poisson< dim >::coefficient
protected

Definition at line 181 of file poisson.h.

◆ exact_solution

template<int dim>
FunctionParser<dim> Poisson< dim >::exact_solution
protected

Definition at line 182 of file poisson.h.

◆ pre_refinement

template<int dim>
FunctionParser<dim> Poisson< dim >::pre_refinement
protected

Definition at line 185 of file poisson.h.

◆ mapping_degree

template<int dim>
unsigned int Poisson< dim >::mapping_degree = 1
protected

Definition at line 189 of file poisson.h.

◆ number_of_threads

template<int dim>
int Poisson< dim >::number_of_threads = -1
protected

Definition at line 193 of file poisson.h.

◆ coefficient_expression

template<int dim>
std::string Poisson< dim >::coefficient_expression = "1"
protected

Definition at line 199 of file poisson.h.

◆ exact_solution_expression

template<int dim>
std::string Poisson< dim >::exact_solution_expression = "0"
protected

Definition at line 200 of file poisson.h.

◆ pre_refinement_expression

template<int dim>
std::string Poisson< dim >::pre_refinement_expression = "0"
protected

Definition at line 203 of file poisson.h.

◆ use_direct_solver

template<int dim>
bool Poisson< dim >::use_direct_solver = true
protected

Definition at line 211 of file poisson.h.

◆ solver_control

template<int dim>
ParameterAcceptorProxy<ReductionControl> Poisson< dim >::solver_control
protected

Definition at line 213 of file poisson.h.


The documentation for this class was generated from the following files:
SparseMatrix< double >::add
void add(const size_type i, const size_type j, const double value)
ParameterAcceptor::parse_all_parameters
static void parse_all_parameters(ParameterHandler &prm=ParameterAcceptor::prm)
local_dof_indices
std::vector< types::global_dof_index > local_dof_indices
cycle
unsigned int cycle
Poisson::marking_strategy
std::string marking_strategy
Definition: poisson.h:176
DataOut::write_vtu
void write_vtu(std::ostream &out) const
Triangulation::active_cell_iterators
IteratorRange< active_cell_iterator > active_cell_iterators() const
Poisson::dof_handler
DoFHandler< 2 > dof_handler
Definition: poisson.h:76
SolverCG
TimerOutput::Scope
Poisson::estimator_type
std::string estimator_type
Definition: poisson.h:175
PreconditionIdentity
PreconditionIdentity()
MultithreadInfo::n_threads
static unsigned int n_threads()
SolverControl
Poisson::error_table
ParsedConvergenceTable error_table
Definition: poisson.h:119
Threads::Mutex
ExcNotImplemented
static ::ExceptionBase & ExcNotImplemented()
parallel::distributed::GridRefinement::refine_and_coarsen_fixed_number
void refine_and_coarsen_fixed_number(parallel::distributed::Triangulation< dim, spacedim > &tria, const ::Vector< Number > &criteria, const double top_fraction_of_cells, const double bottom_fraction_of_cells, const types::global_cell_index max_n_cells=std::numeric_limits< types::global_cell_index >::max())
Poisson::locally_relevant_solution
LA::MPI::Vector locally_relevant_solution
Definition: poisson.h:169
Poisson::system_matrix
SparseMatrix< double > system_matrix
Definition: poisson.h:78
Poisson::sparsity_pattern
SparsityPattern sparsity_pattern
Definition: poisson.h:77
Triangulation::refine_global
void refine_global(const unsigned int times=1)
Poisson::CopyData
MeshWorker::CopyData< 1, 1, 1 > CopyData
Definition: poisson.h:113
MatrixTools::apply_boundary_values
void apply_boundary_values(const std::map< types::global_dof_index, number > &boundary_values, SparseMatrix< number > &matrix, Vector< number > &solution, Vector< number > &right_hand_side, const bool eliminate_columns=true)
Poisson::assemble_system_one_cell
void assemble_system_one_cell(const typename DoFHandler< dim >::active_cell_iterator &cell, ScratchData &scratch, CopyData &copy)
Definition: poisson.cc:226
VectorTools::integrate_difference
void integrate_difference(const Mapping< dim, spacedim > &mapping, const DoFHandler< dim, spacedim > &dof, const InVector &fe_function, const Function< spacedim, typename InVector::value_type > &exact_solution, OutVector &difference, const Quadrature< dim > &q, const NormType &norm, const Function< spacedim, double > *weight=nullptr, const double exponent=2.)
Poisson::system_rhs
Vector< double > system_rhs
Definition: poisson.h:80
Poisson::solve
void solve()
Definition: poisson.cc:110
ComponentMask
Poisson::fe
FE_Q< 2 > fe
Definition: poisson.h:75
DataOut::write_vtk
void write_vtk(std::ostream &out) const
cell_matrix
void cell_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, const ArrayView< const std::vector< double >> &velocity, const double factor=1.)
ParsedConvergenceTable::add_extra_column
void add_extra_column(const std::string &column_name, const std::function< double()> &custom_function, const bool compute_rate=true)
begin
iterator begin()
DataOut::attach_dof_handler
void attach_dof_handler(const DoFHandler< dim, spacedim > &)
MultithreadInfo::n_cores
static unsigned int n_cores()
Poisson::neumann_boundary_condition
FunctionParser< dim > neumann_boundary_condition
Definition: poisson.h:100
DoFHandler::distribute_dofs
void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
FEValues
ParsedConvergenceTable::error_from_exact
void error_from_exact(const DoFHandler< dim, spacedim > &vspace, const VectorType &solution, const Function< spacedim > &exact, const Function< spacedim > *weight=nullptr)
FE_Q::degree
const unsigned int degree
cell_index
unsigned int cell_index
Poisson::exact_solution
FunctionParser< dim > exact_solution
Definition: poisson.h:182
Poisson::mapping
std::unique_ptr< MappingQGeneric< dim > > mapping
Definition: poisson.h:160
AffineConstraints< double >::distribute_local_to_global
void distribute_local_to_global(const InVector &local_vector, const std::vector< size_type > &local_dof_indices, OutVector &global_vector) const
Poisson::ScratchData
MeshWorker::ScratchData< dim > ScratchData
Definition: poisson.h:114
KellyErrorEstimator::estimate
static void estimate(const Mapping< dim, spacedim > &mapping, const DoFHandler< dim, spacedim > &dof, const Quadrature< dim - 1 > &quadrature, const std::map< types::boundary_id, const Function< spacedim, typename InputVector::value_type > * > &neumann_bc, const InputVector &solution, Vector< float > &error, const ComponentMask &component_mask=ComponentMask(), const Function< spacedim > *coefficients=nullptr, const unsigned int n_threads=numbers::invalid_unsigned_int, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id, const types::material_id material_id=numbers::invalid_material_id, const Strategy strategy=cell_diameter_over_24)
DoFTools::make_sparsity_pattern
void make_sparsity_pattern(const DoFHandler< dim, spacedim > &dof_handler, SparsityPatternType &sparsity_pattern, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
Poisson::number_of_threads
int number_of_threads
Definition: poisson.h:193
ParameterAcceptor::initialize
static void initialize(const std::string &filename="", const std::string &output_filename="", const ParameterHandler::OutputStyle output_style_for_output_filename=ParameterHandler::Short, ParameterHandler &prm=ParameterAcceptor::prm, const ParameterHandler::OutputStyle output_style_for_filename=ParameterHandler::DefaultStyle)
Poisson::output_filename
std::string output_filename
Definition: poisson.h:106
SparseMatrix< double >::reinit
virtual void reinit(const SparsityPattern &sparsity)
Poisson::error_per_cell
Vector< float > error_per_cell
Definition: poisson.h:174
DataOut::build_patches
virtual void build_patches(const unsigned int n_subdivisions=0)
Poisson::coarsening_and_refinement_factors
std::pair< double, double > coarsening_and_refinement_factors
Definition: poisson.h:177
parameters
BaseClass::AdditionalData parameters
to_string
static std::string to_string(const T &s, const Patterns::PatternBase &p=*Convert< T >::to_pattern())=delete
DynamicSparsityPattern
Poisson::constraints
AffineConstraints< double > constraints
Definition: poisson.h:92
VectorTools::interpolate_boundary_values
void interpolate_boundary_values(const Mapping< dim, spacedim > &mapping, const DoFHandler< dim, spacedim > &dof, const std::map< types::boundary_id, const Function< spacedim, number > * > &function_map, std::map< types::global_dof_index, number > &boundary_values, const ComponentMask &component_mask=ComponentMask())
Poisson::make_grid
void make_grid()
Definition: poisson.cc:32
ParameterAcceptor::prm
static ParameterHandler prm
output
output
Vector< double >::reinit
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
Poisson::solution
Vector< double > solution
Definition: poisson.h:79
QGauss
ExcInternalError
static ::ExceptionBase & ExcInternalError()
Assert
#define Assert(cond, exc)
Poisson::setup_system
void setup_system()
Definition: poisson.cc:43
VectorTools::H1_seminorm
H1_seminorm
SparsityPattern::copy_from
void copy_from(const size_type n_rows, const size_type n_cols, const ForwardIterator begin, const ForwardIterator end)
GridGenerator::hyper_cube
void hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
Poisson::neumann_ids
std::set< types::boundary_id > neumann_ids
Definition: poisson.h:109
Poisson::output_results
void output_results() const
Definition: poisson.cc:120
DataOut::add_data_vector
void add_data_vector(const VectorType &data, const std::vector< std::string > &names, const DataVectorType type=type_automatic, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation={})
Poisson::triangulation
Triangulation< 2 > triangulation
Definition: poisson.h:74
ParameterHandler::parse_input_from_string
virtual void parse_input_from_string(const std::string &s, const std::string &last_line="", const bool skip_undefined=false)
Poisson::forcing_term
FunctionParser< dim > forcing_term
Definition: poisson.h:98
Triangulation::n_active_cells
unsigned int n_active_cells() const
Functions::ZeroFunction
Poisson::solver_control
ParameterAcceptorProxy< ReductionControl > solver_control
Definition: poisson.h:213
FullMatrix< double >
Vector::l2_norm
real_type l2_norm() const
end
iterator end()
Poisson::coefficient
FunctionParser< dim > coefficient
Definition: poisson.h:181
Poisson::copy_one_cell
void copy_one_cell(const CopyData &copy)
Definition: poisson.cc:276
DoFHandler::active_cell_iterators
IteratorRange< active_cell_iterator > active_cell_iterators() const
parallel::distributed::GridRefinement::refine_and_coarsen_fixed_fraction
void refine_and_coarsen_fixed_fraction(parallel::distributed::Triangulation< dim, spacedim > &tria, const ::Vector< Number > &criteria, const double top_fraction_of_error, const double bottom_fraction_of_error, const VectorTools::NormType norm_type=VectorTools::NormType::L1_norm)
FE_Q::n_dofs_per_cell
unsigned int n_dofs_per_cell() const
DataOut
Poisson::assemble_system
void assemble_system()
Definition: poisson.cc:59
Vector< double >
AssertThrow
#define AssertThrow(cond, exc)
copy
void copy(const T *begin, const T *end, U *dest)
Poisson::timer
TimerOutput timer
Definition: poisson.h:156
MultithreadInfo::set_thread_limit
static void set_thread_limit(const unsigned int max_threads=numbers::invalid_unsigned_int)
DoFHandler::n_dofs
types::global_dof_index n_dofs() const