The finite element method using deal.II - 2021/2022
|
|
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>
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.
◆ CopyData
◆ ScratchData
◆ Poisson() [1/3]
◆ Poisson() [2/3]
◆ Poisson() [3/3]
Constructor.
Initialize all parameters, and make sure the class is ready to run.
◆ run() [1/3]
◆ make_grid() [1/3]
◆ setup_system() [1/3]
◆ assemble_system() [1/3]
template<int dim>
void Poisson< dim >::assemble_system |
|
protected |
Definition at line 59 of file poisson.cc.
64 update_values | update_gradients | update_JxW_values);
71 fe_values.reinit(cell);
74 for (
const unsigned int q_index : fe_values.quadrature_point_indices())
76 for (
const unsigned int i : fe_values.dof_indices())
77 for (
const unsigned int j : fe_values.dof_indices())
79 (fe_values.shape_grad(i, q_index) *
80 fe_values.shape_grad(j, q_index) *
81 fe_values.JxW(q_index));
82 for (
const unsigned int i : fe_values.dof_indices())
83 cell_rhs(i) += (fe_values.shape_value(i, q_index) *
85 fe_values.JxW(q_index));
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())
93 for (
const unsigned int i : fe_values.dof_indices())
94 system_rhs(local_dof_indices[i]) += cell_rhs(i);
96 std::map<types::global_dof_index, double> boundary_values;
◆ solve() [1/3]
◆ output_results() [1/3]
template<int dim>
void Poisson< dim >::output_results |
( |
| ) |
const |
|
protected |
◆ run() [2/3]
◆ initialize() [1/2]
template<int dim>
void Poisson< dim >::initialize |
( |
const std::string & |
filename | ) |
|
◆ parse_string() [1/2]
template<int dim>
void Poisson< dim >::parse_string |
( |
const std::string & |
par | ) |
|
◆ make_grid() [2/3]
◆ refine_grid() [1/2]
◆ 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]
◆ output_results() [2/3]
template<int dim>
void Poisson< dim >::output_results |
( |
const unsigned |
cycle | ) |
const |
|
protected |
◆ print_system_info()
template<int dim>
void Poisson< dim >::print_system_info |
◆ run() [3/3]
◆ 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()
Definition at line 226 of file poisson.cc.
232 auto &cell_rhs =
copy.vectors[0];
234 cell->get_dof_indices(
copy.local_dof_indices[0]);
236 const auto &fe_values = scratch.reinit(cell);
240 for (
const unsigned int q_index : fe_values.quadrature_point_indices())
242 for (
const unsigned int i : fe_values.dof_indices())
243 for (
const unsigned int j : fe_values.dof_indices())
245 (
coefficient.value(fe_values.quadrature_point(q_index)) *
246 fe_values.shape_grad(i, q_index) *
247 fe_values.shape_grad(j, q_index) *
248 fe_values.JxW(q_index));
249 for (
const unsigned int i : fe_values.dof_indices())
251 (fe_values.shape_value(i, q_index) *
252 forcing_term.value(fe_values.quadrature_point(q_index)) *
253 fe_values.JxW(q_index));
256 if (cell->at_boundary())
258 for (
unsigned int f = 0; f < GeometryInfo<dim>::faces_per_cell; ++f)
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);
◆ copy_one_cell()
◆ make_grid() [3/3]
◆ 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()
Definition at line 289 of file poisson.cc.
299 update_values | update_gradients |
300 update_quadrature_points | update_JxW_values,
301 face_quadrature_formula,
302 update_values | update_quadrature_points |
309 for (
auto cell =
begin; cell !=
end; ++cell)
312 assemble_mutex.lock();
314 assemble_mutex.unlock();
◆ solve() [3/3]
◆ estimate()
Definition at line 380 of file poisson.cc.
397 std::map<types::boundary_id, const Function<dim> *> neumann;
420 std::map<types::boundary_id, const Function<dim> *> neumann;
436 update_hessians | update_JxW_values |
437 update_quadrature_points);
439 std::vector<double> local_laplacians(quad.size());
442 double residual_L2_norm = 0;
447 fe_values.reinit(cell);
451 residual_L2_norm = 0;
452 for (
const auto q_index : fe_values.quadrature_point_indices())
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);
460 cell->diameter() * std::sqrt(residual_L2_norm);
471 return global_estimator;
◆ mark()
Definition at line 483 of file poisson.cc.
489 cell->set_refine_flag();
◆ output_results() [3/3]
template<int dim>
void Poisson< dim >::output_results |
( |
const unsigned |
cycle | ) |
const |
|
protected |
◆ PoissonTester
template<typename Integral >
◆ triangulation [1/3]
◆ fe [1/2]
◆ dof_handler [1/2]
◆ sparsity_pattern
◆ system_matrix [1/2]
◆ solution [1/2]
◆ system_rhs [1/2]
◆ triangulation [2/3]
◆ fe [2/2]
◆ dof_handler [2/2]
◆ constraints
◆ forcing_term
◆ dirichlet_boundary_condition
◆ neumann_boundary_condition
◆ fe_degree
template<int dim>
unsigned int Poisson< dim >::fe_degree = 1 |
|
protected |
◆ n_refinements
template<int dim>
unsigned int Poisson< dim >::n_refinements = 4 |
|
protected |
◆ n_refinement_cycles
template<int dim>
unsigned int Poisson< dim >::n_refinement_cycles = 1 |
|
protected |
◆ output_filename
template<int dim>
std::string Poisson< dim >::output_filename = "poisson" |
|
protected |
◆ dirichlet_ids
◆ neumann_ids
◆ forcing_term_expression
template<int dim>
std::string Poisson< dim >::forcing_term_expression = "1" |
|
protected |
◆ dirichlet_boundary_conditions_expression
template<int dim>
std::string Poisson< dim >::dirichlet_boundary_conditions_expression = "0" |
|
protected |
◆ neumann_boundary_conditions_expression
template<int dim>
std::string Poisson< dim >::neumann_boundary_conditions_expression = "0" |
|
protected |
◆ constants
template<int dim>
std::map< std::string, double > Poisson< dim >::constants |
|
protected |
◆ grid_generator_function
template<int dim>
std::string Poisson< dim >::grid_generator_function = "hyper_cube" |
|
protected |
◆ grid_generator_arguments
template<int dim>
std::string Poisson< dim >::grid_generator_arguments = "0: 1: false" |
|
protected |
◆ error_table
◆ mpi_communicator
template<int dim>
MPI_Comm Poisson< dim >::mpi_communicator |
|
protected |
◆ pcout
◆ timer
◆ triangulation [3/3]
◆ mapping
◆ locally_owned_dofs
◆ locally_relevant_dofs
◆ system_matrix [2/2]
◆ locally_relevant_solution
◆ solution [2/2]
◆ system_rhs [2/2]
◆ error_per_cell
◆ estimator_type
template<int dim>
std::string Poisson< dim >::estimator_type = "exact" |
|
protected |
◆ marking_strategy
template<int dim>
std::string Poisson< dim >::marking_strategy = "global" |
|
protected |
◆ coarsening_and_refinement_factors
template<int dim>
std::pair<double, double> Poisson< dim >::coarsening_and_refinement_factors = {0.03, 0.3} |
|
protected |
◆ coefficient
◆ exact_solution
◆ pre_refinement
◆ mapping_degree
template<int dim>
unsigned int Poisson< dim >::mapping_degree = 1 |
|
protected |
◆ number_of_threads
template<int dim>
int Poisson< dim >::number_of_threads = -1 |
|
protected |
◆ coefficient_expression
template<int dim>
std::string Poisson< dim >::coefficient_expression = "1" |
|
protected |
◆ exact_solution_expression
template<int dim>
std::string Poisson< dim >::exact_solution_expression = "0" |
|
protected |
◆ pre_refinement_expression
template<int dim>
std::string Poisson< dim >::pre_refinement_expression = "0" |
|
protected |
◆ use_direct_solver
template<int dim>
bool Poisson< dim >::use_direct_solver = true |
|
protected |
◆ solver_control
The documentation for this class was generated from the following files:
void add(const size_type i, const size_type j, const double value)
static void parse_all_parameters(ParameterHandler &prm=ParameterAcceptor::prm)
std::vector< types::global_dof_index > local_dof_indices
std::string marking_strategy
void write_vtu(std::ostream &out) const
IteratorRange< active_cell_iterator > active_cell_iterators() const
DoFHandler< 2 > dof_handler
std::string estimator_type
static unsigned int n_threads()
ParsedConvergenceTable error_table
static ::ExceptionBase & ExcNotImplemented()
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())
LA::MPI::Vector locally_relevant_solution
SparseMatrix< double > system_matrix
SparsityPattern sparsity_pattern
void refine_global(const unsigned int times=1)
MeshWorker::CopyData< 1, 1, 1 > CopyData
void assemble_system_one_cell(const typename DoFHandler< dim >::active_cell_iterator &cell, ScratchData &scratch, CopyData ©)
Vector< double > system_rhs
void write_vtk(std::ostream &out) const
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.)
void add_extra_column(const std::string &column_name, const std::function< double()> &custom_function, const bool compute_rate=true)
void attach_dof_handler(const DoFHandler< dim, spacedim > &)
static unsigned int n_cores()
FunctionParser< dim > neumann_boundary_condition
void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
void error_from_exact(const DoFHandler< dim, spacedim > &vspace, const VectorType &solution, const Function< spacedim > &exact, const Function< spacedim > *weight=nullptr)
const unsigned int degree
FunctionParser< dim > exact_solution
std::unique_ptr< MappingQGeneric< dim > > mapping
void distribute_local_to_global(const InVector &local_vector, const std::vector< size_type > &local_dof_indices, OutVector &global_vector) const
MeshWorker::ScratchData< dim > ScratchData
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)
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)
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)
std::string output_filename
virtual void reinit(const SparsityPattern &sparsity)
Vector< float > error_per_cell
virtual void build_patches(const unsigned int n_subdivisions=0)
std::pair< double, double > coarsening_and_refinement_factors
BaseClass::AdditionalData parameters
static std::string to_string(const T &s, const Patterns::PatternBase &p=*Convert< T >::to_pattern())=delete
AffineConstraints< double > constraints
static ParameterHandler prm
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
Vector< double > solution
static ::ExceptionBase & ExcInternalError()
#define Assert(cond, exc)
void copy_from(const size_type n_rows, const size_type n_cols, const ForwardIterator begin, const ForwardIterator end)
void hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
std::set< types::boundary_id > neumann_ids
void output_results() const
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={})
Triangulation< 2 > triangulation
virtual void parse_input_from_string(const std::string &s, const std::string &last_line="", const bool skip_undefined=false)
FunctionParser< dim > forcing_term
unsigned int n_active_cells() const
ParameterAcceptorProxy< ReductionControl > solver_control
real_type l2_norm() const
FunctionParser< dim > coefficient
void copy_one_cell(const CopyData ©)
IteratorRange< active_cell_iterator > active_cell_iterators() const
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)
unsigned int n_dofs_per_cell() const
#define AssertThrow(cond, exc)
void copy(const T *begin, const T *end, U *dest)
static void set_thread_limit(const unsigned int max_threads=numbers::invalid_unsigned_int)
types::global_dof_index n_dofs() const