53 if (p.
square() < 0.5 * 0.5)
73 dof_handler.distribute_dofs(fe);
75 solution.reinit(dof_handler.n_dofs());
76 system_rhs.reinit(dof_handler.n_dofs());
95 sparsity_pattern.copy_from(dsp);
97 system_matrix.reinit(sparsity_pattern);
106 const QGauss<dim> quadrature_formula(fe.degree + 1);
113 const unsigned int dofs_per_cell = fe.n_dofs_per_cell();
118 std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
120 for (
const auto &cell : dof_handler.active_cell_iterators())
129 const double current_coefficient =
131 for (
const unsigned int i : fe_values.
dof_indices())
133 for (
const unsigned int j : fe_values.
dof_indices())
135 (current_coefficient *
138 fe_values.
JxW(q_index));
140 cell_rhs(i) += (1.0 *
142 fe_values.
JxW(q_index));
146 cell->get_dof_indices(local_dof_indices);
147 constraints.distribute_local_to_global(
148 cell_matrix, cell_rhs, local_dof_indices, system_matrix, system_rhs);
162 preconditioner.
initialize(system_matrix, 1.2);
164 solver.
solve(system_matrix, solution, system_rhs, preconditioner);
166 constraints.distribute(solution);
181 estimated_error_per_cell);
184 estimated_error_per_cell,
199 std::ofstream output(
"grid-" + std::to_string(cycle) +
".gnuplot");
212 std::ofstream output(
"solution-" + std::to_string(cycle) +
".vtu");
223 for (
unsigned int cycle = 0; cycle < 8; ++cycle)
225 std::cout <<
"Cycle " << cycle <<
':' << std::endl;
236 std::cout <<
" Number of active cells: "
241 std::cout <<
" Number of degrees of freedom: " << dof_handler.n_dofs()
246 output_results(cycle);
void write_vtu(std::ostream &out) const
void attach_dof_handler(const DoFHandler< dim, spacedim > &)
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={})
virtual void build_patches(const unsigned int n_subdivisions=0)
const Point< spacedim > & quadrature_point(const unsigned int q_point) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices() const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > quadrature_point_indices() const
const Tensor< 1, spacedim > & shape_grad(const unsigned int i, const unsigned int q_point) const
double JxW(const unsigned int q_point) const
const double & shape_value(const unsigned int i, const unsigned int q_point) const
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell)
void set_flags(const GridOutFlags::DX &flags)
void write_gnuplot(const Triangulation< dim, spacedim > &tria, std::ostream &out, const Mapping< dim, spacedim > *mapping=nullptr) const
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, Number > * > &neumann_bc, const ReadVector< Number > &solution, Vector< float > &error, const ComponentMask &component_mask={}, 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)
constexpr numbers::NumberTraits< Number >::real_type square() const
void initialize(const MatrixType &A, const AdditionalData ¶meters=AdditionalData())
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void output_results(const unsigned int cycle) const
void make_hanging_node_constraints(const DoFHandler< dim, spacedim > &dof_handler, AffineConstraints< number > &constraints)
void make_sparsity_pattern(const DoFHandler< dim, spacedim > &dof_handler, SparsityPatternBase &sparsity_pattern, const AffineConstraints< number > &constraints={}, const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
double coefficient(const Point< dim > &p)
void hyper_ball(Triangulation< dim > &tria, const Point< dim > ¢er=Point< dim >(), const double radius=1., const bool attach_spherical_manifold_on_boundary_cells=false)
void refine_and_coarsen_fixed_number(Triangulation< dim, spacedim > &triangulation, const Vector< Number > &criteria, const double top_fraction_of_cells, const double bottom_fraction_of_cells, const unsigned int max_n_cells=std::numeric_limits< unsigned int >::max())
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation