21 #ifndef _aspect_compat_h 22 #define _aspect_compat_h 24 #include <deal.II/base/config.h> 25 #include <deal.II/base/mpi.h> 32 #if !DEAL_II_VERSION_GTE(9,6,0) 33 # include <deal.II/multigrid/mg_transfer_matrix_free.h> 34 # include <deal.II/grid/manifold.h> 35 # include <deal.II/grid/manifold_lib.h> 41 # include <deal.II/grid/manifold_lib.h> 44 #if !DEAL_II_VERSION_GTE(9,7,0) 45 # include <deal.II/grid/grid_generator.h> 54 using ::Utilities::MPI::broadcast;
62 #if !DEAL_II_VERSION_GTE(9,6,0) 63 template <
int dim,
class NumberType>
72 #if !DEAL_II_VERSION_GTE(9,6,0) 83 template <
int dim,
int spacedim = dim>
98 virtual std::unique_ptr<Manifold<dim, spacedim>>
99 clone()
const override;
108 virtual Point<spacedim>
109 get_intermediate_point(
const Point<spacedim> &p1,
110 const Point<spacedim> &p2,
111 const double w)
const override;
117 virtual Tensor<1, spacedim>
118 get_tangent_vector(
const Point<spacedim> &x1,
119 const Point<spacedim> &x2)
const override;
124 virtual Tensor<1, spacedim>
126 const typename Triangulation<dim, spacedim>::face_iterator &face,
127 const Point<spacedim> &p)
const override;
133 get_normals_at_vertices(
134 const typename Triangulation<dim, spacedim>::face_iterator &face,
135 typename Manifold<dim, spacedim>::FaceVertexNormals &face_vertex_normals)
153 get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
154 const Table<2, double> &weights,
155 ArrayView<Point<spacedim>> new_points)
const override;
161 virtual Point<spacedim>
162 get_new_point(
const ArrayView<
const Point<spacedim>> &vertices,
163 const ArrayView<const double> &weights)
const override;
177 std::pair<double, Tensor<1, spacedim>>
178 guess_new_point(
const ArrayView<
const Tensor<1, spacedim>> &directions,
179 const ArrayView<const double> &distances,
180 const ArrayView<const double> &weights)
const;
200 do_get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
201 const ArrayView<const double> &weights,
202 ArrayView<Point<spacedim>> new_points)
const;
219 using ::SphericalManifold;
226 #if !DEAL_II_VERSION_GTE(9,7,0) 264 template <
int dim,
typename RangeNumberType =
double>
266 :
public Function<dim, RangeNumberType>
286 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
287 &tensor_function_object,
288 const unsigned int selected_component = 0,
289 const unsigned int n_components = dim);
300 virtual RangeNumberType
301 value(
const Point<dim> &p,
const unsigned int component = 0)
const override;
309 vector_value(
const Point<dim> &p,
310 Vector<RangeNumberType> &values)
const override;
321 const std::vector<Point<dim>> &points,
322 std::vector<Vector<RangeNumberType>> &value_list)
const override;
329 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
330 tensor_function_object;
342 template <
int dim,
typename RangeNumberType>
345 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
346 &tensor_function_object,
347 const unsigned int selected_component,
348 const unsigned int n_components)
349 : Function<dim, RangeNumberType>(n_components)
350 , tensor_function_object(tensor_function_object)
351 , selected_component(selected_component)
355 AssertIndexRange(selected_component + dim - 1, this->n_components);
360 template <
int dim,
typename RangeNumberType>
361 inline RangeNumberType
364 const unsigned int component)
const 366 AssertIndexRange(component, this->n_components);
370 if ((component < selected_component) ||
371 (component >= selected_component + dim))
378 const Tensor<1, dim, RangeNumberType> tensor_value =
379 tensor_function_object(p);
381 return tensor_value[component - selected_component];
385 template <
int dim,
typename RangeNumberType>
389 Vector<RangeNumberType> &values)
const 391 Assert(values.size() == this->n_components,
392 ExcDimensionMismatch(values.size(), this->n_components));
398 const Tensor<1, dim, RangeNumberType> tensor_value =
399 tensor_function_object(p);
406 for (
unsigned int i = 0; i < dim; ++i)
407 values(i + selected_component) = tensor_value[i];
418 template <
int dim,
typename RangeNumberType>
421 const std::vector<Point<dim>> &points,
422 std::vector<Vector<RangeNumberType>> &value_list)
const 424 Assert(value_list.size() == points.size(),
425 ExcDimensionMismatch(value_list.size(), points.size()));
427 const unsigned int n_points = points.size();
429 for (
unsigned int p = 0; p < n_points; ++p)
431 points[p], value_list[p]);
438 #if !DEAL_II_VERSION_GTE(9,7,0) 443 const Point<dim> ¢er,
444 const double inner_radius,
445 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