]> https://gitweb.dealii.org/ - dealii.git/commitdiff
fix find_least_face_dominating_fe() for self-domination
authorDenis Davydov <davydden@gmail.com>
Wed, 2 Sep 2015 11:33:29 +0000 (13:33 +0200)
committerDenis Davydov <davydden@gmail.com>
Wed, 2 Sep 2015 21:08:02 +0000 (23:08 +0200)
include/deal.II/hp/fe_collection.h
source/hp/fe_collection.cc
tests/hp/fe_collection_05.cc
tests/hp/fe_collection_05.output

index 8433cb308ee351156186a9e6e10c40b465a007a8..0684aead5327bf05e918f69cac09e59798425340 100644 (file)
@@ -195,6 +195,11 @@ namespace hp
      * answer is Q3 and therefore this function will return its index in
      * FECollection, namely 2.
      *
+     * For the purpose of this function by domination we consider either
+     * this_element_dominate or either_element_can_dominate ; therefore the
+     * element can dominate itself. Thus if FECollection contains {Q1,Q2,Q4,Q3}
+     * and @p fes = {3}, the function returns 3.
+     *
      * If we were not able to find a finite element, the function returns
      * numbers::invalid_unsigned_int .
      *
@@ -203,11 +208,7 @@ namespace hp
      * will not find the most dominating element as the default behavior of
      * FE_Nothing is to return FiniteElementDomination::no_requirements when
      * comparing for face domination. This, therefore, can't be considered as a
-     * dominating element in the sense defined in FiniteElementDomination .
-     *
-     * Finally, for the purpose of this function we consider that an element
-     * dominates itself. Thus if FECollection contains {Q1,Q2,Q4,Q3} and @p fes
-     * = {3}, the function returns 3.
+     * dominating element in the sense described above .
      */
     unsigned int
     find_least_face_dominating_fe (const std::set<unsigned int> &fes) const;
index b4161d04eb2f51b1870424eab0b26ba13a1e3901..0e52842212791ec9951aeb9b85c8b8dadef3ce2d 100644 (file)
@@ -40,7 +40,7 @@ namespace hp
     const hp::FECollection<dim,spacedim> &fe_collection = *this;
     std::set<unsigned int> candidate_fes;
 
-    // first loop over all FEs and check which can dominate those given in FEs:
+    // first loop over all FEs and check which can dominate those given in @p fes:
     for (unsigned int cur_fe = 0; cur_fe < fe_collection.size(); cur_fe++)
       {
         FiniteElementDomination::Domination domination = FiniteElementDomination::no_requirements;
@@ -56,7 +56,8 @@ namespace hp
           }
 
         // if we found dominating element, keep them in a set.
-        if (domination == FiniteElementDomination::this_element_dominates)
+        if (domination == FiniteElementDomination::this_element_dominates ||
+            domination == FiniteElementDomination::either_element_can_dominate /*covers cases like {Q2,Q3,Q1,Q1} with fes={2,3}*/)
           candidate_fes.insert(cur_fe);
       }
 
index 885a5df92171dd524227c4dd0b48ee285ae206ba..eff18fc58b6fe7e92f96ba9a7cdd0e219045afd8 100644 (file)
@@ -24,6 +24,7 @@
 // {Q1xQ1,Q1xQ1,Q2xQ1,Q1,Q2}    with {2,3} => Q1          0
 // {Q4xQ4, Q5xQ5, Q3xQ4, Q4xQ3} with {2,3} => none        invalid_unsigned_int
 // {Q1,Q2,Q4,Q3}                with {3}   => Q3          3
+// {Q3,Q4,Q1,Q1}                with {2,3} => Q1          2    // self-domination
 
 
 #include "../tests.h"
@@ -160,6 +161,16 @@ void test ()
     deallog << fe_collection.find_least_face_dominating_fe(fes) << std::endl;
   }
 
+  {
+    hp::FECollection<dim> fe_collection;
+    fe_collection.push_back (FE_Q<dim>(3));
+    fe_collection.push_back (FE_Q<dim>(4));
+    fe_collection.push_back (FE_Q<dim>(1));
+    fe_collection.push_back (FE_Q<dim>(1));
+    deallog << fe_collection.find_least_face_dominating_fe(fes) << std::endl;
+  }
+
+
 
 }
 
index 66c6056a968148ed75c08fcb9b4016a26ba7ff00..e333ddf30c4ddd431c6fa5802d460ac3565f117c 100644 (file)
@@ -8,6 +8,7 @@ DEAL::0
 DEAL::numbers::invalid_unsigned_int
 DEAL::3
 DEAL::2
+DEAL::2
 DEAL::1
 DEAL::0
 DEAL::numbers::invalid_unsigned_int
@@ -15,4 +16,5 @@ DEAL::0
 DEAL::0
 DEAL::numbers::invalid_unsigned_int
 DEAL::3
+DEAL::2
 DEAL::OK

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.