21 #ifndef _aspect_compat_h 22 #define _aspect_compat_h 24 #include <deal.II/base/config.h> 25 #include <deal.II/base/mpi.h> 31 #if !DEAL_II_VERSION_GTE(9,6,0) 32 # include <deal.II/multigrid/mg_transfer_matrix_free.h> 33 # include <deal.II/grid/manifold.h> 34 # include <deal.II/grid/manifold_lib.h> 40 # include <deal.II/grid/manifold_lib.h> 43 #if !DEAL_II_VERSION_GTE(9,7,0) 44 # include <deal.II/grid/grid_generator.h> 53 using ::Utilities::MPI::broadcast;
61 #if !DEAL_II_VERSION_GTE(9,6,0) 62 template <
int dim,
class NumberType>
71 #if !DEAL_II_VERSION_GTE(9,6,0) 82 template <
int dim,
int spacedim = dim>
97 virtual std::unique_ptr<Manifold<dim, spacedim>>
98 clone()
const override;
107 virtual Point<spacedim>
108 get_intermediate_point(
const Point<spacedim> &p1,
109 const Point<spacedim> &p2,
110 const double w)
const override;
116 virtual Tensor<1, spacedim>
117 get_tangent_vector(
const Point<spacedim> &x1,
118 const Point<spacedim> &x2)
const override;
123 virtual Tensor<1, spacedim>
125 const typename Triangulation<dim, spacedim>::face_iterator &face,
126 const Point<spacedim> &p)
const override;
132 get_normals_at_vertices(
133 const typename Triangulation<dim, spacedim>::face_iterator &face,
134 typename Manifold<dim, spacedim>::FaceVertexNormals &face_vertex_normals)
152 get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
153 const Table<2, double> &weights,
154 ArrayView<Point<spacedim>> new_points)
const override;
160 virtual Point<spacedim>
161 get_new_point(
const ArrayView<
const Point<spacedim>> &vertices,
162 const ArrayView<const double> &weights)
const override;
176 std::pair<double, Tensor<1, spacedim>>
177 guess_new_point(
const ArrayView<
const Tensor<1, spacedim>> &directions,
178 const ArrayView<const double> &distances,
179 const ArrayView<const double> &weights)
const;
199 do_get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
200 const ArrayView<const double> &weights,
201 ArrayView<Point<spacedim>> new_points)
const;
218 using ::SphericalManifold;
225 #if !DEAL_II_VERSION_GTE(9,7,0) 263 template <
int dim,
typename RangeNumberType =
double>
265 :
public Function<dim, RangeNumberType>
285 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
286 &tensor_function_object,
287 const unsigned int selected_component = 0,
288 const unsigned int n_components = dim);
299 virtual RangeNumberType
300 value(
const Point<dim> &p,
const unsigned int component = 0)
const override;
308 vector_value(
const Point<dim> &p,
309 Vector<RangeNumberType> &values)
const override;
320 const std::vector<Point<dim>> &points,
321 std::vector<Vector<RangeNumberType>> &value_list)
const override;
328 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
329 tensor_function_object;
341 template <
int dim,
typename RangeNumberType>
344 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
345 &tensor_function_object,
346 const unsigned int selected_component,
347 const unsigned int n_components)
348 : Function<dim, RangeNumberType>(n_components)
349 , tensor_function_object(tensor_function_object)
350 , selected_component(selected_component)
354 AssertIndexRange(selected_component + dim - 1, this->n_components);
359 template <
int dim,
typename RangeNumberType>
360 inline RangeNumberType
363 const unsigned int component)
const 365 AssertIndexRange(component, this->n_components);
369 if ((component < selected_component) ||
370 (component >= selected_component + dim))
377 const Tensor<1, dim, RangeNumberType> tensor_value =
378 tensor_function_object(p);
380 return tensor_value[component - selected_component];
384 template <
int dim,
typename RangeNumberType>
388 Vector<RangeNumberType> &values)
const 390 Assert(values.size() == this->n_components,
391 ExcDimensionMismatch(values.size(), this->n_components));
397 const Tensor<1, dim, RangeNumberType> tensor_value =
398 tensor_function_object(p);
405 for (
unsigned int i = 0; i < dim; ++i)
406 values(i + selected_component) = tensor_value[i];
417 template <
int dim,
typename RangeNumberType>
420 const std::vector<Point<dim>> &points,
421 std::vector<Vector<RangeNumberType>> &value_list)
const 423 Assert(value_list.size() == points.size(),
424 ExcDimensionMismatch(value_list.size(), points.size()));
426 const unsigned int n_points = points.size();
428 for (
unsigned int p = 0; p < n_points; ++p)
430 points[p], value_list[p]);
437 #if !DEAL_II_VERSION_GTE(9,7,0) 442 const Point<dim> ¢er,
443 const double inner_radius,
444 const double outer_radius);
VectorFunctionFromTensorFunctionObject(const std::function< Tensor< 1, dim, RangeNumberType >(const Point< dim > &)> &tensor_function_object, const unsigned int selected_component=0, const unsigned int n_components=dim)
::MGTransferMatrixFree< dim, NumberType > MGTransferMF
const PolarManifold< spacedim > polar_manifold
void colorize_quarter_hyper_shell(Triangulation< dim > &tria, const Point< dim > ¢er, const double inner_radius, const double outer_radius)
const Point< spacedim > center
const unsigned int selected_component