[MOAB-dev] r3759 - MOAB/trunk/src

kraftche at cae.wisc.edu kraftche at cae.wisc.edu
Wed Apr 7 17:34:35 CDT 2010


Author: kraftche
Date: 2010-04-07 17:34:35 -0500 (Wed, 07 Apr 2010)
New Revision: 3759

Modified:
   MOAB/trunk/src/Skinner.cpp
Log:
o Fix skinning of higher-order region elements w/ explicit adjacencies.
o Warn and work around non-conformal meshes where a vertex is a corner
   in some elements and a mid-side node in others when skinning with
   explicit adjacencies.


Modified: MOAB/trunk/src/Skinner.cpp
===================================================================
--- MOAB/trunk/src/Skinner.cpp	2010-04-07 21:58:02 UTC (rev 3758)
+++ MOAB/trunk/src/Skinner.cpp	2010-04-07 22:34:35 UTC (rev 3759)
@@ -1476,6 +1476,7 @@
   const EntityHandle *conn;
   int len;
   bool find_edges = skin_edges || create_edges;
+  bool printed_nonconformal_ho_warning = false;
   EntityHandle face;
   
   if (!faces.all_of_dimension(2))
@@ -1529,14 +1530,30 @@
       if (TYPE_FROM_HANDLE(*i) == MBTRI && len > 3) {
         len = 3;
         higher_order = true;
-        if (idx > 2) // skip higher-order nodes for now
+        if (idx > 2) { // skip higher-order nodes for now
+          if (!printed_nonconformal_ho_warning) {
+            printed_nonconformal_ho_warning = true;
+            std::cerr << "Non-conformal higher-order mesh detected in skinner: "
+                      << "vertex " << ID_FROM_HANDLE(*it) << " is a corner in "
+                      << "some elements and a higher-order node in others" 
+                      << std::endl;
+          }
           continue;
+        }
       }
       else if (TYPE_FROM_HANDLE(*i) == MBQUAD && len > 4) {
         len = 4;
         higher_order = true;
-        if (idx > 3) // skip higher-order nodes for now
+        if (idx > 3) { // skip higher-order nodes for now
+          if (!printed_nonconformal_ho_warning) {
+            printed_nonconformal_ho_warning = true;
+            std::cerr << "Non-conformal higher-order mesh detected in skinner: "
+                      << "vertex " << ID_FROM_HANDLE(*it) << " is a corner in "
+                      << "some elements and a higher-order node in others" 
+                      << std::endl;
+          }
           continue;
+        }
       }
 
       const int prev_idx = (idx + len - 1)%len;
@@ -1682,15 +1699,29 @@
   int clen, side, sense, offset, indices[9];
   EntityType face_type;
   EntityHandle elem;
+  bool printed_nonconformal_ho_warning = false;
   


More information about the moab-dev mailing list