591 *
if (p.norm_square() < 0.25)
592 *
return p.norm_square();
594 *
return 0.1 * p.norm_square() + (0.25 - 0.025);
601 *
if (p.norm_square() < 0.25)
612 *
if (p.norm_square() < 0.25)
623 * <a name=
"ThePoissonProblemclass"></a>
660 *
Vector<double> solution;
688 * <a name=
"Gridcreationandinitializationofthemanifolds"></a>
736 * `cell->face(f)->set_all_manifold_ids(1)`
to set the manifold
id
765 *
if (
std::
abs(face->vertex(v).norm_square() - 0.25) > 1
e-12)
769 *
face->set_all_manifold_ids(1);
771 *
if (cell->center().norm_square() < 0.25)
772 *
cell->set_material_id(1);
774 *
cell->set_material_id(0);
834 *
dof_handler.distribute_dofs(fe);
835 *
std::cout <<
" Number of active cells: "
837 *
std::cout <<
" Number of degrees of freedom: " << dof_handler.n_dofs()
843 *
constraints.clear();
849 *
constraints.close();
855 *
sparsity_pattern.copy_from(
dsp);
856 *
system_matrix.
reinit(sparsity_pattern);
858 *
solution.
reinit(dof_handler.n_dofs());
866 * <a name=
"Assemblyofthesystemmatrixandrighthandside"></a>
873 *
set the number
of quadrature points
to the polynomial degree plus
938 *
const unsigned int dofs_per_cell = fe.n_dofs_per_cell();
944 *
std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
946 *
for (
const auto &cell : dof_handler.active_cell_iterators())
951 *
for (
unsigned int q_index = 0; q_index < n_q_points; ++q_index)
954 *
coefficient(fe_values.quadrature_point(q_index));
955 *
for (
unsigned int i = 0; i < dofs_per_cell; ++i)
957 *
for (
unsigned int d = 0;
d < dim; ++
d)
960 *
fe_values.shape_grad(i, q_index)[
d];
962 *
(fe_values.shape_value(i, q_index) *
964 *
fe_values.JxW(q_index));
970 *
cell->get_dof_indices(local_dof_indices);
971 *
constraints.distribute_local_to_global(
981 * <a name=
"Solutionofthelinearsystem"></a>
999 *
preconditioner.initialize(system_matrix);
1001 *
solver.solve(system_matrix, solution,
system_rhs, preconditioner);
1002 *
constraints.distribute(solution);
1004 *
std::cout <<
" Number of solver iterations: "
1005 *
<< solver_control.last_step() << std::endl;
1013 * <a name=
"Outputofthesolutionandcomputationoferrors"></a>
1046 *
href=
"https://github.com/dealii/dealii/wiki/Notes-on-visualizing-high-order-output">
wiki
1073 *
flags.write_higher_order_cells =
true;
1074 *
data_out.set_flags(flags);
1076 *
data_out.attach_dof_handler(dof_handler);
1077 *
data_out.add_data_vector(solution,
"solution");
1080 *
for (
const auto &cell :
triangulation.active_cell_iterators())
1081 *
material_ids[cell->active_cell_index()] = cell->
material_id();
1082 *
data_out.add_data_vector(material_ids,
"material_ids");
1084 *
data_out.build_patches(mapping,
1088 *
std::ofstream file(
1090 *
std::to_string(
triangulation.n_global_levels() - 10 + 2 * dim) +
1094 *
data_out.write_vtu(file);
1125 *
std::cout <<
" L2 error vs exact solution: "
1135 *
std::cout <<
" H1 error vs exact solution: "
1162 *
std::cout <<
" Max cell-wise error estimate: "
1172 * <a name=
"ThePoissonProblemrunfunction"></a>
1173 * <
h3>
The PoissonProblem::run() function</
h3>
1203 *
std::cout << std::endl
1204 *
<<
"====== Running with the basic MappingQ class ====== "
1212 *
postprocess(mapping);
1214 *
timer.print_summary();
1234 *
<<
"====== Running with the optimized MappingQCache class ====== "
1243 *
std::cout <<
" Memory consumption cache: "
1244 *
<< 1
e-6 * mapping.memory_consumption() <<
" MB" << std::endl;
1249 *
postprocess(mapping);
1251 *
timer.print_summary();
1269<a name=
"Programoutput"></a><
h3>
Program output</
h3>
1293+---------------------------------------------+------------+------------+
1297+---------------------------------+-----------+------------+------------+
1299|
Compute constraints | 1 | 0.109s | 0.22% |
1303|
Write output | 1 | 4.85s | 9.8% |
1304+---------------------------------+-----------+------------+------------+
1317+---------------------------------------------+------------+------------+
1321+---------------------------------+-----------+------------+------------+
1323|
Compute constraints | 1 | 0.00336s | 0% |
1326|
Initialize mapping cache | 1 | 4.96s | 27% |
1328|
Write output | 1 | 0.875s | 4.8% |
1329+---------------------------------+-----------+------------+------------+
1337(solution
or right
hand side) vector,
void reinit(value_type *starting_element, const std::size_t n_elements)
SmartPointer< const Triangulation< dim, spacedim > > triangulation
virtual void build_patches(const unsigned int n_subdivisions=0)
void mTmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) 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, 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 initialize(const Mapping< dim, spacedim > &mapping, const Triangulation< dim, spacedim > &triangulation)
Abstract base class for mapping classes.
const Triangulation< dim, spacedim > * triangulation
void initialize(const Triangulation< dim, spacedim > &triangulation)
__global__ void set(Number *val, const Number s, const size_type N)
void loop(ITERATOR begin, std_cxx20::type_identity_t< ITERATOR > end, DOFINFO &dinfo, INFOBOX &info, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &cell_worker, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &boundary_worker, const std::function< void(DOFINFO &, DOFINFO &, typename INFOBOX::CellInfo &, typename INFOBOX::CellInfo &)> &face_worker, ASSEMBLER &assembler, const LoopControl &lctrl=LoopControl())
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=AffineConstraints< number >(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
@ update_values
Shape function values.
@ update_JxW_values
Transformed quadrature weights.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
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 hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
void hyper_shell(Triangulation< dim > &tria, const Point< dim > ¢er, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, bool colorize=false)
void merge_triangulations(const Triangulation< dim, spacedim > &triangulation_1, const Triangulation< dim, spacedim > &triangulation_2, Triangulation< dim, spacedim > &result, const double duplicated_vertex_tolerance=1.0e-12, const bool copy_manifold_ids=false, const bool copy_boundary_ids=false)
void refine(Triangulation< dim, spacedim > &tria, const Vector< Number > &criteria, const double threshold, const unsigned int max_to_mark=numbers::invalid_unsigned_int)
@ matrix
Contents is actually a 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.)
double norm(const FEValuesBase< dim > &fe, const ArrayView< const std::vector< Tensor< 1, dim > > > &Du)
void L2(Vector< number > &result, const FEValuesBase< dim > &fe, const std::vector< double > &input, const double factor=1.)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
void call(const std::function< RT()> &function, internal::return_value< RT > &ret_val)
T sum(const T &t, const MPI_Comm mpi_communicator)
void run(const Iterator &begin, const std_cxx20::type_identity_t< Iterator > &end, Worker worker, Copier copier, const ScratchData &sample_scratch_data, const CopyData &sample_copy_data, const unsigned int queue_length, const unsigned int chunk_size)
DEAL_II_HOST constexpr TableIndices< 2 > merge(const TableIndices< 2 > &previous_indices, const unsigned int new_index, const unsigned int position)
int(&) functions(const void *v1, const void *v2)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation
const TriangulationDescription::Settings settings