]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Comparison operator for FiniteElement and FECollection
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 27 Apr 2018 09:22:04 +0000 (11:22 +0200)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Fri, 27 Apr 2018 12:05:36 +0000 (14:05 +0200)
doc/news/changes/minor/20180425DanielArndt [new file with mode: 0644]
include/deal.II/fe/fe.h
include/deal.II/hp/fe_collection.h
source/fe/fe.cc

diff --git a/doc/news/changes/minor/20180425DanielArndt b/doc/news/changes/minor/20180425DanielArndt
new file mode 100644 (file)
index 0000000..040b1e9
--- /dev/null
@@ -0,0 +1,4 @@
+New: FECollection gained an equality comparison operator. Both FiniteElement
+and FECollcetion have a non-equality comparison operator now.
+<br>
+(Daniel Arndt, 2018/04/25)
index e09610521ba5c9894369a7a077b99718b1460c38..fac7ca852bf1ec102e8fb7ba80b2c32f1ff70777 100644 (file)
@@ -1333,16 +1333,20 @@ public:
   //@}
 
   /**
-   * Comparison operator. We also check for equality of the constraint matrix,
-   * which is quite an expensive operation.  Do therefore use this function
-   * with care, if possible only for debugging purposes.
+   * Comparison operator. We also check for equality of the name returned by
+   * get_name() and for equality of the constraint matrix, which is quite an
+   * expensive operation.  Do therefore use this function with care, if
+   * possible only for debugging purposes.
    *
-   * Since this function is not that important, we avoid an implementational
-   * question about comparing arrays and do not compare the matrix arrays
-   * #restriction and #prolongation.
+   * We do not compare the matrix arrays #restriction and #prolongation.
    */
   bool operator == (const FiniteElement<dim,spacedim> &) const;
 
+  /**
+   * Non-equality comparison operator. Defined in terms of the equality comparison operator.
+   */
+  bool operator != (const FiniteElement<dim,spacedim> &) const;
+
   /**
    * @name Index computations
    * @{
index 4751b4efcf62d827700e93a4235a08eb0b612c0f..7dbf3265f4522bee96eecb08201da2fbb58ef56b 100644 (file)
@@ -100,6 +100,18 @@ namespace hp
     FECollection<dim, spacedim> &
     operator= (FECollection<dim,spacedim> &&) = default; // NOLINT
 
+    /**
+     * Equality comparison operator. All stored FiniteElement objects are compared in order.
+     */
+    bool
+    operator== (const FECollection<dim,spacedim> &fe_collection) const;
+
+    /**
+     * Non-equality comparison operator. All stored FiniteElement objects are compared in order.
+     */
+    bool
+    operator!= (const FECollection<dim,spacedim> &fe_collection) const;
+
     /**
      * Add a finite element. This function generates a copy of the given
      * element, i.e. you can do things like <tt>push_back(FE_Q<dim>(1));</tt>.
@@ -495,6 +507,35 @@ namespace hp
   }
 
 
+
+  template <int dim, int spacedim>
+  inline
+  bool
+  FECollection<dim,spacedim>::operator== (const FECollection<dim,spacedim> &fe_collection) const
+  {
+    const unsigned int n_elements = size();
+    if (n_elements != fe_collection.size())
+      return false;
+
+    for (unsigned int i=0; i<n_elements; ++i)
+      if (!(*finite_elements[i] == fe_collection[i]))
+        return false;
+
+    return true;
+  }
+
+
+
+  template <int dim, int spacedim>
+  inline
+  bool
+  FECollection<dim,spacedim>::operator != (const FECollection<dim,spacedim> &fe_collection) const
+  {
+    return !(*this == fe_collection);
+  }
+
+
+
   template <int dim, int spacedim>
   inline
   const FiniteElement<dim,spacedim> &
index dabb42ea53d7a973eb15410df2e79022e6756e3a..e877973aea065bf6c1e10cac7c1018beb2368c99 100644 (file)
@@ -939,7 +939,17 @@ FiniteElement<dim,spacedim>::operator == (const FiniteElement<dim,spacedim> &f)
 {
   return ((static_cast<const FiniteElementData<dim>&>(*this) ==
            static_cast<const FiniteElementData<dim>&>(f)) &&
-          (interface_constraints == f.interface_constraints));
+          (interface_constraints == f.interface_constraints) &&
+          (this->get_name() == f.get_name()));
+}
+
+
+
+template <int dim, int spacedim>
+bool
+FiniteElement<dim,spacedim>::operator != (const FiniteElement<dim,spacedim> &f) const
+{
+  return !(*this == f);
 }
 
 

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.