The finite element method using deal.II - 2021/2022
|
|
Go to the documentation of this file.
52 add_parameter(
"Finite element degree",
fe_degree);
57 add_parameter(
"Dirichlet boundary condition expression",
62 add_parameter(
"Neumann boundary condition expression",
65 add_parameter(
"Local pre-refinement grid size expression",
71 add_parameter(
"Problem constants",
constants);
76 add_parameter(
"Estimator type",
82 add_parameter(
"Marking strategy",
88 add_parameter(
"Coarsening and refinement factors",
93 this->prm.enter_subsection(
"Error table");
95 this->prm.leave_subsection();
105 "last_used_parameters.prm",
128 const auto vars = dim == 1 ?
"x" : dim == 2 ?
"x,y" :
"x,y,z";
138 cell->set_refine_flag();
168 const auto vars = dim == 1 ?
"x" : dim == 2 ?
"x,y" :
"x,y,z";
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);
280 copy.local_dof_indices[0],
301 face_quadrature_formula,
309 for (
auto cell =
begin; cell !=
end; ++cell)
312 assemble_mutex.lock();
314 assemble_mutex.unlock();
331 update_values | update_gradients |
332 update_quadrature_points | update_JxW_values,
333 face_quadrature_formula,
334 update_values | update_quadrature_points |
341 if (cell->is_locally_owned())
368 LA::MPI::PreconditionAMG amg;
397 std::map<types::boundary_id, const Function<dim> *> neumann;
420 std::map<types::boundary_id, const Function<dim> *> neumann;
439 std::vector<double> local_laplacians(quad.
size());
442 double residual_L2_norm = 0;
451 residual_L2_norm = 0;
455 (local_laplacians[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;
489 cell->set_refine_flag();
520 flags.write_higher_order_cells =
true;
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
static void parse_all_parameters(ParameterHandler &prm=ParameterAcceptor::prm)
IndexSet locally_owned_dofs
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access >> &cell)
std::string marking_strategy
std::string grid_generator_function
std::string forcing_term_expression
IteratorRange< active_cell_iterator > active_cell_iterators() const
DoFHandler< 2 > dof_handler
std::string estimator_type
virtual void execute_coarsening_and_refinement()
static unsigned int n_threads()
ParsedConvergenceTable error_table
std_cxx20::ranges::iota_view< unsigned int, unsigned int > quadrature_point_indices() const
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
void initialize(const std::string &filename)
IndexSet locally_relevant_dofs
DataOutBase::DataOutFilterFlags flags
MeshWorker::CopyData< 1, 1, 1 > CopyData
void assemble_system_one_cell(const typename DoFHandler< dim >::active_cell_iterator &cell, ScratchData &scratch, CopyData ©)
void get_function_laplacians(const InputVector &fe_function, std::vector< typename InputVector::value_type > &laplacians) const
Vector< double > system_rhs
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
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)
unsigned int n_refinement_cycles
AffineConstraints< double > constraints
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 make_hanging_node_constraints(const DoFHandler< dim, spacedim > &dof_handler, AffineConstraints< number > &constraints)
void error_from_exact(const DoFHandler< dim, spacedim > &vspace, const VectorType &solution, const Function< spacedim > &exact, const Function< spacedim > *weight=nullptr)
const FEValues< dim, spacedim > & reinit(const typename DoFHandler< dim, spacedim >::active_cell_iterator &cell)
const unsigned int degree
const IndexSet & locally_owned_dofs() const
void compress(::VectorOperation::values)
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)
std::string pre_refinement_expression
void output_table(std::ostream &out)
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)
unsigned int mapping_degree
std::string neumann_boundary_conditions_expression
Vector< float > error_per_cell
virtual void build_patches(const unsigned int n_subdivisions=0)
std::string coefficient_expression
void assemble_system_on_range(const typename DoFHandler< dim >::active_cell_iterator &begin, const typename DoFHandler< dim >::active_cell_iterator &end)
MPI_Comm mpi_communicator
void write_mesh_per_processor_as_vtu(const Triangulation< dim, spacedim > &tria, const std::string &filename_without_extension, const bool view_levels=false, const bool include_artificial=false) const
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
void compress(::VectorOperation::values operation=::VectorOperation::unknown) const
double JxW(const unsigned int quadrature_point) const
static ParameterHandler prm
void make_grid(Triangulation< 2 > &triangulation)
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
void add_parameters(ParameterHandler &prm)
void reinit(const IndexSet &local_constraints=IndexSet())
Vector< double > solution
static ::ExceptionBase & ExcInternalError()
std::string exact_solution_expression
void distribute(VectorType &vec) const
void parse_string(const std::string &par)
#define Assert(cond, exc)
unsigned int this_mpi_process(const MPI_Comm &mpi_communicator)
std::vector< double > vars
unsigned int n_refinements
void set_flags(const FlagType &flags)
std::string grid_generator_arguments
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
FunctionParser< dim > dirichlet_boundary_condition
Solve the Poisson problem, with Dirichlet or Neumann boundary conditions, on all geometries that can ...
unsigned int n_active_cells() const
std::set< types::boundary_id > dirichlet_ids
const Point< spacedim > & quadrature_point(const unsigned int q) const
unsigned int size() const
ParameterAcceptorProxy< ReductionControl > solver_control
real_type l2_norm() const
void generate_from_name_and_arguments(Triangulation< dim, spacedim > &tria, const std::string &grid_generator_function_name, const std::string &grid_generator_function_arguments)
std::map< std::string, double > constants
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)
void write_vtu_in_parallel(const std::string &filename, const MPI_Comm &comm) const
unsigned int n_dofs_per_cell() const
FunctionParser< dim > pre_refinement
#define AssertThrow(cond, exc)
std::map< std::string, double > constants
std::string dirichlet_boundary_conditions_expression
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