From: Anthony Geay Date: Fri, 8 Jan 2016 13:03:27 +0000 (+0100) Subject: Quick solve of bug with interpolation 3DSurf<->3D using PointLocator. X-Git-Tag: V7_8_0a1~7 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=763f2e1bec10e0f50989731b273a09214500e844;p=tools%2Fmedcoupling.git Quick solve of bug with interpolation 3DSurf<->3D using PointLocator. --- diff --git a/src/INTERP_KERNEL/Interpolation3D2D.txx b/src/INTERP_KERNEL/Interpolation3D2D.txx index 674317e1a..29d9ec2ae 100644 --- a/src/INTERP_KERNEL/Interpolation3D2D.txx +++ b/src/INTERP_KERNEL/Interpolation3D2D.txx @@ -54,8 +54,8 @@ namespace INTERP_KERNEL * the indexing is more natural : the intersection volume of the target element i with source element j is found at matrix[i-1][j]. * - * @param srcMesh 3-dimensional source mesh - * @param targetMesh 3-dimesional target mesh, containing only tetraedra + * @param srcMesh 3DSurf source mesh (meshDim=2,spaceDim=3) + * @param targetMesh 3D target mesh, containing only tetraedra * @param matrix matrix in which the result is stored * */ @@ -99,8 +99,8 @@ namespace INTERP_KERNEL intersectFaces, getSplittingPolicy()); break; - case PointLocator: - intersector=new PointLocator3DIntersectorP0P0(targetMesh,srcMesh,getPrecision()); + case PointLocator:// switch target and source + intersector=new PointLocator3DIntersectorP0P0(srcMesh,targetMesh,getPrecision()); break; default: throw INTERP_KERNEL::Exception("Invalid 3D to 2D intersection type for P0P0 interp specified : must be Triangulation or PointLocator."); diff --git a/src/MEDCoupling_Swig/MEDCouplingRemapperTest.py b/src/MEDCoupling_Swig/MEDCouplingRemapperTest.py index e342f8c98..c5d99f89f 100644 --- a/src/MEDCoupling_Swig/MEDCouplingRemapperTest.py +++ b/src/MEDCoupling_Swig/MEDCouplingRemapperTest.py @@ -854,6 +854,30 @@ class MEDCouplingBasicsTest(unittest.TestCase): self.assertAlmostEqual(diff.sum(),0.,14) pass + def test3D2Dand2D3DPointLocator1(self): + """ Non regression test solving SIGSEGV when using 3D<->3Dsurf pointlocator.""" + arrX=DataArrayDouble([0,1,2]) + arrY=DataArrayDouble([0,1]) + arrZ=DataArrayDouble([0,1]) + ms=MEDCouplingCMesh() ; ms.setCoords(arrX,arrY,arrZ) + ms=ms.buildUnstructured() ; ms.setName("source") + # + mt=MEDCouplingUMesh("target",2) ; mt.allocateCells() + mt.insertNextCell(NORM_TRI3,[0,4,6]) + mt.insertNextCell(NORM_TRI3,[1,5,7]) + mt.setCoords(ms.getCoords()[:]) + mt.zipCoords() + # + rem=MEDCouplingRemapper() + rem.setIntersectionType(PointLocator) + rem.prepare(ms,mt,"P0P0") + self.assertEqual(rem.getCrudeMatrix(),[{0: 1.0}, {1: 1.0}]) + rem2=MEDCouplingRemapper() + rem2.setIntersectionType(PointLocator) + rem2.prepare(mt,ms,"P0P0") # reverse mt<->ms + self.assertEqual(rem2.getCrudeMatrix(),[{0: 1.0}, {1: 1.0}]) + pass + def build2DSourceMesh_1(self): sourceCoords=[-0.3,-0.3, 0.7,-0.3, -0.3,0.7, 0.7,0.7] sourceConn=[0,3,1,0,2,3]