]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
MEDCouplingUMesh::shiftNodeNumbersInConn
authorageay <ageay>
Tue, 24 Apr 2012 14:04:40 +0000 (14:04 +0000)
committerageay <ageay>
Tue, 24 Apr 2012 14:04:40 +0000 (14:04 +0000)
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDCoupling_Swig/MEDCoupling.i
src/MEDCoupling_Swig/MEDCouplingBasicsTest.py

index b8704033309b0fe8cfe8fd0be0dede6621a3e3a5..a0fb11f798882feb0f4613d1ff9aa6afaa6c40a7 100644 (file)
@@ -1538,12 +1538,14 @@ void MEDCouplingUMesh::renumberNodes2(const int *newNodeNumbers, int newNbOfNode
 }
 
 /*!
- * This method renumbers nodes in connectivity only without any reference with coords.
- * Use it with care !
- * @param 'newNodeNumbers' in old2New convention
+ * This method renumbers nodes \b in \b connectivity \b only \b without \b any \b reference \b to \b coords.
+ * This method performs no check on the fact that new coordinate ids are valid. \b Use \b it \b with \b care !
+ * This method is an generalization of \ref ParaMEDMEM::MEDCouplingUMesh::shiftNodeNumbersInConn "shiftNodeNumbersInConn method".
+ * @param [in] newNodeNumbers in old2New convention
  */
 void MEDCouplingUMesh::renumberNodesInConn(const int *newNodeNumbersO2N)
 {
+  checkConnectivityFullyDefined();
   int *conn=getNodalConnectivity()->getPointer();
   const int *connIndex=getNodalConnectivityIndex()->getConstPointer();
   int nbOfCells=getNumberOfCells();
@@ -1560,6 +1562,32 @@ void MEDCouplingUMesh::renumberNodesInConn(const int *newNodeNumbersO2N)
   updateTime();
 }
 
+/*!
+ * This method renumbers nodes \b in \b connectivity \b only \b without \b any \b reference \b to \b coords.
+ * This method performs no check on the fact that new coordinate ids are valid. \b Use \b it \b with \b care !
+ * This method is an specialization of \ref ParaMEDMEM::MEDCouplingUMesh::renumberNodesInConn "renumberNodesInConn method".
+ * 
+ * @param [in] delta specifies the shift size applied to nodeId in nodal connectivity in \b this.
+ */
+void MEDCouplingUMesh::shiftNodeNumbersInConn(int delta) throw(INTERP_KERNEL::Exception)
+{
+  checkConnectivityFullyDefined();
+  int *conn=getNodalConnectivity()->getPointer();
+  const int *connIndex=getNodalConnectivityIndex()->getConstPointer();
+  int nbOfCells=getNumberOfCells();
+  for(int i=0;i<nbOfCells;i++)
+    for(int iconn=connIndex[i]+1;iconn!=connIndex[i+1];iconn++)
+      {
+        int& node=conn[iconn];
+        if(node>=0)//avoid polyhedron separator
+          {
+            node+=delta;
+          }
+      }
+  _nodal_connec->declareAsNew();
+  updateTime();
+}
+
 /*!
  * This method renumbers cells of 'this' using the array specified by [old2NewBg;old2NewBg+getNumberOfCells())
  *
index 97988cb7f73a018329c04e84f426eaf8acce06a5..1fe7169965054faaf40b6a83ace0c174c20f1872 100644 (file)
@@ -118,6 +118,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT void renumberNodes(const int *newNodeNumbers, int newNbOfNodes);
     MEDCOUPLING_EXPORT void renumberNodes2(const int *newNodeNumbers, int newNbOfNodes);
     MEDCOUPLING_EXPORT void renumberNodesInConn(const int *newNodeNumbersO2N);
+    MEDCOUPLING_EXPORT void shiftNodeNumbersInConn(int delta) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void renumberCells(const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void getCellsInBoundingBox(const double *bbox, double eps, std::vector<int>& elems) const;
     MEDCOUPLING_EXPORT void getCellsInBoundingBox(const INTERP_KERNEL::DirectedBoundingBox& bbox, double eps, std::vector<int>& elems);
index 1437a0e3468558e71ae1e5a61ccf60de2a11ed64..f4d20e66d5fd007d4ba318afd282805ed544e42c 100644 (file)
@@ -1071,6 +1071,7 @@ namespace ParaMEDMEM
     std::string reprConnectivityOfThis() const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *buildSetInstanceFromThis(int spaceDim) const throw(INTERP_KERNEL::Exception);
     //tools
+    void shiftNodeNumbersInConn(int delta) throw(INTERP_KERNEL::Exception);
     std::vector<bool> getQuadraticStatus() const throw(INTERP_KERNEL::Exception);
     DataArrayInt *findCellsIdsOnBoundary() const throw(INTERP_KERNEL::Exception);
     bool checkConsecutiveCellTypes() const throw(INTERP_KERNEL::Exception);
index 523dfa791623525090b47f34da64a9d599dd27f1..22e91b1c47c1838059a889e4f65b01643b218154 100644 (file)
@@ -9662,16 +9662,20 @@ class MEDCouplingBasicsTest(unittest.TestCase):
         #
         mesh3D_2=mesh3D.deepCpy();
         mesh2D_2=mesh2D.deepCpy();
+        oldNbOf3DNodes=mesh3D.getNumberOfNodes();
         renumNodes=DataArrayInt.New();
         renumNodes.alloc(mesh2D.getNumberOfNodes(),1);
-        renumNodes.iota(mesh3D.getNumberOfNodes());
+        renumNodes.iota(oldNbOf3DNodes);
         coo=DataArrayDouble.Aggregate(mesh3D.getCoords(),mesh2D.getCoords());
         mesh3D.setCoords(coo);
         mesh2D.setCoords(coo);
         mesh2DCpy=mesh2D.deepCpy()
+        mesh2D_3=mesh2D.deepCpy();
+        mesh2D_3.shiftNodeNumbersInConn(oldNbOf3DNodes);
         mesh2D.renumberNodesInConn(renumNodes);
         mesh2DCpy.renumberNodesInConn(renumNodes.getValues());
         self.assertTrue(mesh2D.isEqual(mesh2DCpy,1e-12))
+        self.assertTrue(mesh2D.isEqual(mesh2D_3,1e-12))
         #
         da1,da2=mesh3D.checkGeoEquivalWith(mesh3D_2,10,1e-12);
         self.assertTrue(da1==None);