Salome HOME
PAL11736. fix reading/writting quadratic elements
authoreap <eap@opencascade.com>
Mon, 3 Apr 2006 06:05:56 +0000 (06:05 +0000)
committereap <eap@opencascade.com>
Mon, 3 Apr 2006 06:05:56 +0000 (06:05 +0000)
src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx
src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx

index 70a91360248cc54fde75d3738d2f141f4bd0752e..e635874ffd5439446b6b2819e980b7ff2a3bb536 100644 (file)
@@ -74,7 +74,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
        const TElementLab& aLabel = anIter->first;
        const TRecord& aRec = anIter->second;
        if(IsBeam(aRec.fe_descriptor_id)) {
-          if((aRec.fe_descriptor_id == 11) || (aRec.fe_descriptor_id == 21)) {
+          if(aRec.fe_descriptor_id == 11) {
             // edge with two nodes
             anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
                                               aRec.node_labels[1],
@@ -83,8 +83,8 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
           else {
             // quadratic edge (with 3 nodes)
             anElement = myMesh->AddEdgeWithID(aRec.node_labels[0],
-                                              aRec.node_labels[1],
                                               aRec.node_labels[2],
+                                              aRec.node_labels[1],
                                               aLabel);
           }
        }
@@ -105,10 +105,10 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
          case 42: // Plane Stress Quadratic Triangle - TRI6
          case 92: // Thin Shell Quadratic Triangle - TRI6
            anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
-                                             aRec.node_labels[1],
                                              aRec.node_labels[2],
-                                             aRec.node_labels[3],
                                              aRec.node_labels[4],
+                                             aRec.node_labels[1],
+                                             aRec.node_labels[3],
                                              aRec.node_labels[5],
                                              aLabel);
            break;
@@ -125,12 +125,12 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
          case 45: // Plane Stress Quadratic Quadrilateral - QUAD8
          case 95: // Thin Shell   Quadratic Quadrilateral - QUAD8
            anElement = myMesh->AddFaceWithID(aRec.node_labels[0],
-                                             aRec.node_labels[1],
                                              aRec.node_labels[2],
-                                             aRec.node_labels[3],
                                              aRec.node_labels[4],
-                                             aRec.node_labels[5],
                                              aRec.node_labels[6],
+                                             aRec.node_labels[1],
+                                             aRec.node_labels[3],
+                                             aRec.node_labels[5],
                                              aRec.node_labels[7],
                                              aLabel);
            break;
@@ -149,15 +149,18 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
 
          case 118: // Solid Quadratic Tetrahedron - TET10
            anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
-                                               aRec.node_labels[2],
-                                               aRec.node_labels[1],
-                                               aRec.node_labels[3],
-                                               aRec.node_labels[6],
-                                               aRec.node_labels[5],
                                                aRec.node_labels[4],
-                                               aRec.node_labels[7],
+                                               aRec.node_labels[2],
+
                                                aRec.node_labels[9],
+
+                                               aRec.node_labels[5],
+                                               aRec.node_labels[3],
+                                                aRec.node_labels[1],
+
+                                                aRec.node_labels[6],
                                                aRec.node_labels[8],
+                                               aRec.node_labels[7],
                                                aLabel);
            break;
            
@@ -173,20 +176,24 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
            
          case 113: // Solid Quadratic Prism - PRISM15
            anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
+                                               aRec.node_labels[4],
                                                aRec.node_labels[2],
-                                               aRec.node_labels[1],
-                                               aRec.node_labels[3],
+
+                                               aRec.node_labels[9],
+                                               aRec.node_labels[13],
+                                               aRec.node_labels[11],
+
                                                aRec.node_labels[5],
-                                               aRec.node_labels[4],
+                                               aRec.node_labels[3],
+                                                aRec.node_labels[1],
+
+                                               aRec.node_labels[14],
+                                               aRec.node_labels[12],
+                                                aRec.node_labels[10],
+
+                                                aRec.node_labels[6],
                                                aRec.node_labels[8],
                                                aRec.node_labels[7],
-                                               aRec.node_labels[6],
-                                               aRec.node_labels[11],
-                                               aRec.node_labels[10],
-                                               aRec.node_labels[9],
-                                               aRec.node_labels[12],
-                                               aRec.node_labels[14],
-                                               aRec.node_labels[13],
                                                aLabel);
            break;
            
@@ -232,18 +239,19 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
 
          case 114: // pyramid of 13 nodes (quadratic) - PIRA13
            anElement = myMesh->AddVolumeWithID(aRec.node_labels[0],
-                                               aRec.node_labels[3],
-                                               aRec.node_labels[2],
-                                               aRec.node_labels[1],
+                                               aRec.node_labels[6],
                                                aRec.node_labels[4],
-                                               aRec.node_labels[8],
+                                               aRec.node_labels[2],
                                                aRec.node_labels[7],
-                                               aRec.node_labels[6],
                                                aRec.node_labels[5],
-                                               aRec.node_labels[9],
-                                               aRec.node_labels[12],
+                                               aRec.node_labels[3],
+                                               aRec.node_labels[1],
+
+                                               aRec.node_labels[8],
                                                aRec.node_labels[11],
                                                aRec.node_labels[10],
+                                               aRec.node_labels[9],
+                                               aRec.node_labels[12],
                                                aLabel);
            break;
 
index a716945d9ecfc0776ec1509226d277689519dc58..fe181f78e10c588a9d5c7e1b0b4b746c95fac96a 100644 (file)
@@ -22,6 +22,8 @@
 #include "DriverUNV_W_SMDS_Mesh.h"
 
 #include "SMDS_Mesh.hxx"
+#include "SMDS_QuadraticEdge.hxx"
+#include "SMDS_QuadraticFaceOfNodes.hxx"
 
 #include "utilities.h"
 
@@ -86,15 +88,19 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
          int aNbNodes = anElem->NbNodes();
          TRecord aRec;
          aRec.node_labels.reserve(aNbNodes);
-         SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
+         SMDS_ElemIteratorPtr aNodesIter;
+          if( anElem->IsQuadratic() ) {
+            aNodesIter = static_cast<const SMDS_QuadraticEdge* >
+              ( anElem )->interlacedNodesElemIterator();
+            aRec.fe_descriptor_id = 21;
+          } else {
+            aNodesIter = anElem->nodesIterator();
+            aRec.fe_descriptor_id = 11;
+          }
          for(; aNodesIter->more();){
            const SMDS_MeshElement* aNode = aNodesIter->next();
            aRec.node_labels.push_back(aNode->GetID());
          }
-          if(aNbNodes==2)
-            aRec.fe_descriptor_id = 11;
-          else
-            aRec.fe_descriptor_id = 21;
          aDataSet2412.insert(TDataSet::value_type(aLabel,aRec));
        }
        MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
@@ -109,7 +115,12 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
          int aNbNodes = anElem->NbNodes();
          TRecord aRec;
          aRec.node_labels.reserve(aNbNodes);
-         SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
+         SMDS_ElemIteratorPtr aNodesIter;
+          if( anElem->IsQuadratic() )
+            aNodesIter = static_cast<const SMDS_QuadraticFaceOfNodes* >
+              ( anElem )->interlacedNodesElemIterator();
+          else
+            aNodesIter = anElem->nodesIterator();
          for(; aNodesIter->more();){
            const SMDS_MeshElement* aNode = aNodesIter->next();
            aRec.node_labels.push_back(aNode->GetID());
@@ -170,25 +181,25 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
            break;
          }
          case 10: {
-           static int anIds[] = {0,2,1,3,6,5,4,7,9,8};
+           static int anIds[] = {0,4,2,9,5,3, 1,6,8, 7};
            aConn = anIds;
            anId = 118;
            break;
          }
          case 13: {
-           static int anIds[] = {0,3,2,1,4,8,7,6,5,9,12,11,10};
+           static int anIds[] = {0,6,4,2,7,5,3,1,8,11,10,9,12};
            aConn = anIds;
            anId = 114;
            break;
          }
          case 15: {
-           static int anIds[] = {0,2,1,3,5,4,8,7,6,11,10,9,12,14,13};
+           static int anIds[] = {0,4,2,9,13,11,5,3,1,14,12,10,6,8,7};
            aConn = anIds;
            anId = 113;
            break;
          }
          case 20: {
-           static int anIds[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17};
+           static int anIds[] = {0,6, 4,2, 12,18,16,14,7, 5, 3, 1, 19,17,15,13,8, 11,10,9};
            aConn = anIds;
            anId = 116;
            break;