]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add get_coarse_cell_id to CellID 8586/head
authorPeter Munch <peterrmuench@gmail.com>
Fri, 16 Aug 2019 03:11:27 +0000 (05:11 +0200)
committerPeter Munch <peterrmuench@gmail.com>
Mon, 19 Aug 2019 20:14:27 +0000 (22:14 +0200)
Conflicts:
include/deal.II/grid/tria.h

doc/news/changes/minor/20190815PeterMunch [new file with mode: 0644]
include/deal.II/base/types.h
include/deal.II/grid/cell_id.h
include/deal.II/grid/tria.h
source/grid/cell_id.cc

diff --git a/doc/news/changes/minor/20190815PeterMunch b/doc/news/changes/minor/20190815PeterMunch
new file mode 100644 (file)
index 0000000..2a00339
--- /dev/null
@@ -0,0 +1,3 @@
+New: Add method to get the coarse-grid cell from CellID.
+<br>
+(Peter Munch, 2019/08/15)
index 0d6ceb677c29a3f0396946046dd17d08a2423586..ff94c958916057abddecbaa23cafb34cf971f9ac 100644 (file)
@@ -95,6 +95,18 @@ namespace types
 #  define DEAL_II_DOF_INDEX_MPI_TYPE MPI_UNSIGNED
 #endif
 
+#ifdef DEAL_II_WITH_64BIT_INDICES
+  /**
+   * The type used for coarse-cell ids.
+   */
+  using coarse_cell_id = unsigned long long int;
+#else
+  /**
+   * The type used for coarse-cell ids.
+   */
+  using coarse_cell_id = unsigned int;
+#endif
+
   /**
    * The type used to denote boundary indicators associated with every piece
    * of the boundary and, in the case of meshes that describe manifolds in
@@ -188,6 +200,12 @@ namespace numbers
   const types::global_dof_index invalid_dof_index =
     static_cast<types::global_dof_index>(-1);
 
+  /**
+   * An invalid value for coarse-cell ids.
+   */
+  const types::coarse_cell_id invalid_coarse_cell_id =
+    static_cast<types::coarse_cell_id>(-1);
+
   /**
    * Invalid material_id which we need in several places as a default value.
    * We assume that all material_ids lie in the range [0,
index 4cffac1d4f826aaf341add430f02e5e1c93a021f..702dc4de06d4fef84bfe801c20f5208fda6db9f1 100644 (file)
@@ -85,7 +85,7 @@ public:
    * and the number of children of a cell in the current space dimension (i.e.,
    * GeometryInfo<dim>::max_children_per_cell).
    */
-  CellId(const unsigned int               coarse_cell_id,
+  CellId(const types::coarse_cell_id      coarse_cell_id,
          const std::vector<std::uint8_t> &child_indices);
 
   /**
@@ -99,9 +99,9 @@ public:
    * GeometryInfo<dim>::max_children_per_cell). The array
    * @p child_indices must have at least @p n_child_indices valid entries.
    */
-  CellId(const unsigned int  coarse_cell_id,
-         const unsigned int  n_child_indices,
-         const std::uint8_t *child_indices);
+  CellId(const types::coarse_cell_id coarse_cell_id,
+         const unsigned int          n_child_indices,
+         const std::uint8_t *        child_indices);
 
   /**
    * Construct a CellId object with a given binary representation that was
@@ -161,12 +161,18 @@ public:
   void
   serialize(Archive &ar, const unsigned int version);
 
+  /**
+   * Return the id of the coarse cell.
+   */
+  types::coarse_cell_id
+  get_coarse_cell_id() const;
+
 private:
   /**
    * The number of the coarse cell within whose tree the cell
    * represented by the current object is located.
    */
-  unsigned int coarse_cell_id;
+  types::coarse_cell_id coarse_cell_id;
 
   /**
    * The number of child indices stored in the child_indices array. This is
@@ -308,6 +314,14 @@ CellId::operator<(const CellId &other) const
   return true; // other.id is longer
 }
 
+
+inline types::coarse_cell_id
+CellId::get_coarse_cell_id() const
+{
+  return coarse_cell_id;
+}
+
+
 DEAL_II_NAMESPACE_CLOSE
 
 #endif
index 56efe27523ec6786b6b881173a4751803e831080..65826ba89ac3e395c578c234dbd212eb5d09218c 100644 (file)
@@ -3483,6 +3483,34 @@ public:
     std::pair<std::pair<cell_iterator, unsigned int>, std::bitset<3>>> &
   get_periodic_face_map() const;
 
+  /**
+   * Translate the unique id of a coarse cell to its index.
+   *
+   * @note For serial and shared triangulation both id and index are the same.
+   *       For distributed triangulations setting both might differ, since the
+   *       id might correspond to a global id and the index to a local id.
+   *
+   * @param coarse_cell_id Unique id of the coarse cell.
+   * @return Index of the coarse cell within the current triangulation.
+   */
+  virtual unsigned int
+  coarse_cell_id_to_coarse_cell_index(
+    const types::coarse_cell_id coarse_cell_id) const;
+
+
+  /**
+   * Translate the index of coarse cell to its unique id.
+   *
+   * @note: See the note of the method
+   * translate_coarse_cell_id_to_coarse_cell_index().
+   *
+   * @param coarse_cell_index Index of the coarse cell.
+   * @return Id of the coarse cell.
+   */
+  virtual types::coarse_cell_id
+  coarse_cell_index_to_coarse_cell_id(
+    const unsigned int coarse_cell_index) const;
+
 
   BOOST_SERIALIZATION_SPLIT_MEMBER()
 
@@ -4282,6 +4310,27 @@ Triangulation<dim, spacedim>::load(Archive &ar, const unsigned int)
 }
 
 
+
+template <int dim, int spacedim>
+inline unsigned int
+Triangulation<dim, spacedim>::coarse_cell_id_to_coarse_cell_index(
+  const types::coarse_cell_id coarse_cell_id) const
+{
+  return coarse_cell_id;
+}
+
+
+
+template <int dim, int spacedim>
+inline types::coarse_cell_id
+Triangulation<dim, spacedim>::coarse_cell_index_to_coarse_cell_id(
+  const unsigned int coarse_cell_index) const
+{
+  return coarse_cell_index;
+}
+
+
+
 /* -------------- declaration of explicit specializations ------------- */
 
 template <>
index 25a2670f7b05d595fbe718d2e8a7ddfd7c11fa9a..ff5c3d5548b6436c355ad65a0585b7f9926990e9 100644 (file)
@@ -22,7 +22,7 @@ DEAL_II_NAMESPACE_OPEN
 
 
 CellId::CellId()
-  : coarse_cell_id(numbers::invalid_unsigned_int)
+  : coarse_cell_id(numbers::invalid_coarse_cell_id)
   , n_child_indices(numbers::invalid_unsigned_int)
 {
   // initialize the child indices to invalid values
@@ -35,7 +35,7 @@ CellId::CellId()
 
 
 
-CellId::CellId(const unsigned int               coarse_cell_id,
+CellId::CellId(const types::coarse_cell_id      coarse_cell_id,
                const std::vector<std::uint8_t> &id)
   : coarse_cell_id(coarse_cell_id)
   , n_child_indices(id.size())
@@ -46,9 +46,9 @@ CellId::CellId(const unsigned int               coarse_cell_id,
 
 
 
-CellId::CellId(const unsigned int  coarse_cell_id,
-               const unsigned int  n_child_indices,
-               const std::uint8_t *id)
+CellId::CellId(const types::coarse_cell_id coarse_cell_id,
+               const unsigned int          n_child_indices,
+               const std::uint8_t *        id)
   : coarse_cell_id(coarse_cell_id)
   , n_child_indices(n_child_indices)
 {

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.