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/grid/manifold.h> 33 # include <deal.II/grid/manifold_lib.h> 39 # include <deal.II/grid/manifold_lib.h> 42 #if !DEAL_II_VERSION_GTE(9,7,0) 43 # include <deal.II/grid/grid_generator.h> 46 #include <deal.II/multigrid/mg_transfer_matrix_free.h> 47 #include <deal.II/multigrid/mg_transfer_global_coarsening.h> 54 using ::Utilities::MPI::broadcast;
60 #if DEAL_II_VERSION_GTE(9,9,0) 61 template <
int dim,
typename NumberType>
64 template <
int dim,
typename NumberType>
65 using MGTransferType = ::MGTransferMF<dim, NumberType>;
70 #if DEAL_II_VERSION_GTE(9,7,0) 71 template <
int dim,
typename NumberType>
74 template <
int dim,
typename NumberType>
75 using GCMGTransferType = ::MGTransferGlobalCoarsening<dim, ::LinearAlgebra::distributed::Vector<NumberType>>;
79 #if !DEAL_II_VERSION_GTE(9,7,0) 86 template <
typename T,
typename P =
void>
99 #if !DEAL_II_VERSION_GTE(9,6,0) 110 template <
int dim,
int spacedim = dim>
125 virtual std::unique_ptr<Manifold<dim, spacedim>>
126 clone()
const override;
135 virtual Point<spacedim>
136 get_intermediate_point(
const Point<spacedim> &p1,
137 const Point<spacedim> &p2,
138 const double w)
const override;
144 virtual Tensor<1, spacedim>
145 get_tangent_vector(
const Point<spacedim> &x1,
146 const Point<spacedim> &x2)
const override;
151 virtual Tensor<1, spacedim>
153 const typename Triangulation<dim, spacedim>::face_iterator &face,
154 const Point<spacedim> &p)
const override;
160 get_normals_at_vertices(
161 const typename Triangulation<dim, spacedim>::face_iterator &face,
162 typename Manifold<dim, spacedim>::FaceVertexNormals &face_vertex_normals)
180 get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
181 const Table<2, double> &weights,
182 ArrayView<Point<spacedim>> new_points)
const override;
188 virtual Point<spacedim>
189 get_new_point(
const ArrayView<
const Point<spacedim>> &vertices,
190 const ArrayView<const double> &weights)
const override;
204 std::pair<double, Tensor<1, spacedim>>
205 guess_new_point(
const ArrayView<
const Tensor<1, spacedim>> &directions,
206 const ArrayView<const double> &distances,
207 const ArrayView<const double> &weights)
const;
227 do_get_new_points(
const ArrayView<
const Point<spacedim>> &surrounding_points,
228 const ArrayView<const double> &weights,
229 ArrayView<Point<spacedim>> new_points)
const;
246 using ::SphericalManifold;
253 #if !DEAL_II_VERSION_GTE(9,7,0) 291 template <
int dim,
typename RangeNumberType =
double>
293 :
public Function<dim, RangeNumberType>
313 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
314 &tensor_function_object,
315 const unsigned int selected_component = 0,
316 const unsigned int n_components = dim);
327 virtual RangeNumberType
328 value(
const Point<dim> &p,
const unsigned int component = 0)
const override;
336 vector_value(
const Point<dim> &p,
337 Vector<RangeNumberType> &values)
const override;
348 const std::vector<Point<dim>> &points,
349 std::vector<Vector<RangeNumberType>> &value_list)
const override;
356 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
357 tensor_function_object;
369 template <
int dim,
typename RangeNumberType>
372 const std::function<Tensor<1, dim, RangeNumberType>(
const Point<dim> &)>
373 &tensor_function_object,
374 const unsigned int selected_component,
375 const unsigned int n_components)
376 : Function<dim, RangeNumberType>(n_components)
377 , tensor_function_object(tensor_function_object)
378 , selected_component(selected_component)
382 AssertIndexRange(selected_component + dim - 1, this->n_components);
387 template <
int dim,
typename RangeNumberType>
388 inline RangeNumberType
391 const unsigned int component)
const 393 AssertIndexRange(component, this->n_components);
397 if ((component < selected_component) ||
398 (component >= selected_component + dim))
405 const Tensor<1, dim, RangeNumberType> tensor_value =
406 tensor_function_object(p);
408 return tensor_value[component - selected_component];
412 template <
int dim,
typename RangeNumberType>
416 Vector<RangeNumberType> &values)
const 418 Assert(values.size() == this->n_components,
419 ExcDimensionMismatch(values.size(), this->n_components));
425 const Tensor<1, dim, RangeNumberType> tensor_value =
426 tensor_function_object(p);
433 for (
unsigned int i = 0; i < dim; ++i)
434 values(i + selected_component) = tensor_value[i];
445 template <
int dim,
typename RangeNumberType>
448 const std::vector<Point<dim>> &points,
449 std::vector<Vector<RangeNumberType>> &value_list)
const 451 Assert(value_list.size() == points.size(),
452 ExcDimensionMismatch(value_list.size(), points.size()));
454 const unsigned int n_points = points.size();
456 for (
unsigned int p = 0; p < n_points; ++p)
458 points[p], value_list[p]);
465 #if !DEAL_II_VERSION_GTE(9,7,0) 470 const Point<dim> ¢er,
471 const double inner_radius,
472 const double outer_radius);
480 #if !DEAL_II_VERSION_GTE(9,8,0)
::SmartPointer< T, P > ObserverPointer
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)
::MGTransferGlobalCoarsening< dim, ::LinearAlgebra::distributed::Vector< NumberType >> GCMGTransferType
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
::MGTransferMF< dim, NumberType > MGTransferType
const unsigned int selected_component
::ReferenceCell ReferenceCell