]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
0020441: [CEA 349] P1P1 barycentric interpolators
authoreap <eap@opencascade.com>
Thu, 1 Oct 2009 05:36:31 +0000 (05:36 +0000)
committereap <eap@opencascade.com>
Thu, 1 Oct 2009 05:36:31 +0000 (05:36 +0000)
   {
+    // SPEC:
+    // "Limitation. For the P1P0 barycentric improvement only triangle source cells in 2D and
+    // tetrahedrons in 3D will be supported by interpolators. If a non
+    // triangle/tetrahedron source cell is detected an INTERP_KERNEL::Exception should be thrown."
+
+    // Check types of source elements here rather than in intersectCells() since a wrong type can be
+    // found late after a long time of calculation.
+
+    const unsigned long numSrcElems = meshS.getNumberOfElements();
+    for(unsigned long i = 0 ; i < numSrcElems ; ++i)
+      if ( meshS.getTypeOfElement( i ) != NORM_... )
+        throw INTERP_KERNEL::Exception("P1P0 barycentric algorithm works only with triangular source meshes");
   }

src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.txx
src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.txx

index 6e6d666f012c209b63a0e7416571f44fe477e356..49476a46368497cbf70a916015f5be4126c1f92e 100644 (file)
@@ -34,6 +34,18 @@ namespace INTERP_KERNEL
     PlanarIntersector<MyMeshType,MyMatrix>(meshT,meshS,dimCaracteristic,precision,md3DSurf,
                                            medianPlane,doRotate,orientation,printLevel)
   {
+    // SPEC:
+    // "Limitation. For the P1P0 barycentric improvement only triangle source cells in 2D and
+    // tetrahedrons in 3D will be supported by interpolators. If a non
+    // triangle/tetrahedron source cell is detected an INTERP_KERNEL::Exception should be thrown."
+
+    // Check types of source elements here rather than in intersectCells() since a wrong type can be
+    // found late after a long time of calculation.
+
+    const unsigned long numSrcElems = meshS.getNumberOfElements();
+    for(unsigned long i = 0 ; i < numSrcElems ; ++i)
+      if ( meshS.getTypeOfElement( i ) != NORM_TRI3 )
+        throw INTERP_KERNEL::Exception("P1P0 barycentric algorithm works only with triangular source meshes");
   }
 
   PLAN_INTER_TEMPLATE
index a44cb3b7f25bcba7dd59816508e09886a2e5e2d8..0c8f976c033b4af26ec80f3e752f33be4f7f2dad 100644 (file)
@@ -46,6 +46,18 @@ namespace INTERP_KERNEL
                                                                                     SplittingPolicy policy)
     :Intersector3DP1P0Bary<MyMeshType,MyMatrix>(targetMesh,srcMesh),_split(targetMesh,srcMesh,policy)
   {
+    // SPEC:
+    // "Limitation. For the P1P0 barycentric improvement only triangle source cells in 2D and
+    // tetrahedrons in 3D will be supported by interpolators. If a non
+    // triangle/tetrahedron source cell is detected an INTERP_KERNEL::Exception should be thrown."
+
+    // Check types of source elements here rather than in intersectCells() since a wrong type can be
+    // found late after a long time of calculation.
+
+    const unsigned long numSrcElems = srcMesh.getNumberOfElements();
+    for(unsigned long i = 0 ; i < numSrcElems ; ++i)
+      if ( srcMesh.getTypeOfElement( i ) != NORM_TETRA4 )
+        throw INTERP_KERNEL::Exception("P1P0 barycentric algorithm works only with tetrahedral source meshes");
   }
 
   /**