1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from MEDCouplingDataForTest import MEDCouplingDataForTest
22 from MEDCouplingRemapper import *
26 class MEDCouplingBasicsTest(unittest.TestCase):
27 def testRemapper1(self):
28 sourceMesh=self.build2DSourceMesh_1();
29 targetMesh=self.build2DTargetMesh_1();
30 remapper=MEDCouplingRemapper()
31 remapper.setPrecision(1e-12);
32 remapper.setIntersectionType(Triangulation);
33 self.failUnless(remapper.prepare(sourceMesh,targetMesh,"P0P0")==1);
34 srcField=MEDCouplingFieldDouble.New(ON_CELLS);
35 srcField.setNature(IntensiveMaximum);
36 srcField.setMesh(sourceMesh);
37 array=DataArrayDouble.New();
38 ptr=sourceMesh.getNumberOfCells()*[None]
39 for i in xrange(sourceMesh.getNumberOfCells()):
42 array.setValues(ptr,sourceMesh.getNumberOfCells(),1);
43 srcField.setArray(array);
44 srcField.setName("abc") ; srcField.setDescription("def")
45 srcField.setTime(7.7,9,10)
46 trgfield=remapper.transferField(srcField,4.57);
47 self.assertEqual("abc",trgfield.getName())
48 self.assertEqual("def",trgfield.getDescription())
49 a,b,c=trgfield.getTime()
50 self.assertAlmostEqual(7.7,a,14)
52 self.assertEqual(c,10)
53 values=trgfield.getArray().getValues();
54 valuesExpected=[7.5 ,7. ,7.,8.,7.5];
55 for i in xrange(targetMesh.getNumberOfCells()):
56 self.failUnless(abs(values[i]-valuesExpected[i])<1e-12);
58 self.failUnless(1==trgfield.getArray().getNumberOfComponents());
61 def testPrepareEx1(self):
62 sourceMesh=self.build2DSourceMesh_1();
63 targetMesh=self.build2DTargetMesh_3();
65 remapper=MEDCouplingRemapper();
66 remapper.setPrecision(1e-12);
67 remapper.setIntersectionType(Triangulation);
68 srcFt=MEDCouplingFieldTemplate.New(ON_CELLS);
69 trgFt=MEDCouplingFieldTemplate.New(ON_CELLS);
70 srcFt.setMesh(sourceMesh);
71 trgFt.setMesh(targetMesh);
72 self.assertEqual(1,remapper.prepareEx(srcFt,trgFt));
73 srcField=MEDCouplingFieldDouble.New(ON_CELLS);
74 srcField.setNature(IntensiveMaximum);
75 srcField.setMesh(sourceMesh);
76 array=DataArrayDouble.New();
77 ptr=sourceMesh.getNumberOfCells()*[None]
78 for i in xrange(sourceMesh.getNumberOfCells()):
81 array.setValues(ptr,sourceMesh.getNumberOfCells(),1);
82 srcField.setArray(array);
83 trgfield=remapper.transferField(srcField,4.220173);
84 values=trgfield.getArray().getValues();
85 valuesExpected=[7.75, 7.0625, 4.220173,8.0]
86 self.assertEqual(4,trgfield.getArray().getNumberOfTuples());
87 self.assertEqual(1,trgfield.getArray().getNumberOfComponents());
89 self.assertAlmostEqual(valuesExpected[i0],values[i0],12);
93 def testPartialTransfer1(self):
94 sourceMesh=self.build2DSourceMesh_1();
95 targetMesh=self.build2DTargetMesh_3();
97 remapper=MEDCouplingRemapper();
98 remapper.setPrecision(1e-12);
99 remapper.setIntersectionType(Triangulation);
100 srcFt=MEDCouplingFieldTemplate.New(ON_CELLS);
101 trgFt=MEDCouplingFieldTemplate.New(ON_CELLS);
102 srcFt.setMesh(sourceMesh);
103 trgFt.setMesh(targetMesh);
104 self.assertEqual(1,remapper.prepareEx(srcFt,trgFt));
105 srcField=MEDCouplingFieldDouble.New(ON_CELLS);
106 srcField.setNature(IntensiveMaximum);
107 srcField.setMesh(sourceMesh);
108 array=DataArrayDouble.New();
109 ptr=sourceMesh.getNumberOfCells()*[None]
110 for i in xrange(sourceMesh.getNumberOfCells()):
113 array.setValues(ptr,sourceMesh.getNumberOfCells(),1);
114 srcField.setArray(array);
115 trgfield=MEDCouplingFieldDouble.New(ON_CELLS);
116 trgfield.setNature(IntensiveMaximum);
117 trgfield.setMesh(targetMesh);
118 array=DataArrayDouble.New();
119 ptr=targetMesh.getNumberOfCells()*[None]
120 for i in xrange(targetMesh.getNumberOfCells()):
123 array.setValues(ptr,targetMesh.getNumberOfCells(),1);
124 trgfield.setArray(array);
125 remapper.partialTransfer(srcField,trgfield);
126 values=trgfield.getArray().getValues();
127 valuesExpected=[7.75, 7.0625, 4.220173,8.0]
128 self.assertEqual(4,trgfield.getArray().getNumberOfTuples());
129 self.assertEqual(1,trgfield.getArray().getNumberOfComponents());
131 self.assertAlmostEqual(valuesExpected[i0],values[i0],12);
135 def testPrepareUC(self):
137 coords=DataArrayDouble([0.,0.5,0.7])
138 src=MEDCouplingUMesh("",1) ; src.setCoords(coords)
139 src.allocateCells(2) ; src.insertNextCell(NORM_SEG2,[0,1]) ; src.insertNextCell(NORM_SEG2,[1,2]) ; src.finishInsertingCells()
140 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
141 trg.setCoordsAt(0,arr)
142 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble([10.,30.])
143 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
144 rem=MEDCouplingRemapper()
145 rem.prepare(src,trg,"P0P0")
146 trgField=rem.transferField(fieldSrc,-7.)
147 expected1=[-7.,4.,36.,-7.,-7.]
148 self.assertEqual(5,trgField.getArray().getNumberOfTuples())
149 self.assertEqual(5,len(expected1))
150 for i,val in enumerate(expected1):
151 self.assertAlmostEqual(expected1[i],trgField.getArray().getIJ(i,0),12);
154 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.5,-0.2],5,2)
155 src=MEDCouplingUMesh("",2) ; src.setCoords(coords)
156 src.allocateCells(2) ; src.insertNextCell(NORM_TRI3,[0,1,2]) ; src.insertNextCell(NORM_TRI3,[3,4,0]) ; src.finishInsertingCells()
157 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
158 trg.setCoordsAt(0,arr) ; trg.setCoordsAt(1,arr)
159 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble([10.,30.])
160 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
161 rem=MEDCouplingRemapper()
162 rem.prepare(src,trg,"P0P0")
163 trgField=rem.transferField(fieldSrc,-7.)
164 expected2=[-7.,-7.,7.35,0.15,-7.,-7.,2.8,14.85,5.25,-7.,-7.,2.,2.5,-7.,-7.,-7.,1.2,3.,0.9,-7.,-7.,-7.,-7.,-7.,-7.]
165 self.assertEqual(25,trgField.getArray().getNumberOfTuples())
166 self.assertEqual(25,len(expected2))
167 for i,val in enumerate(expected2):
168 self.assertAlmostEqual(expected2[i],trgField.getArray().getIJ(i,0),12);
171 coords=DataArrayDouble([0.,0.,0.,0.,1.,0.,1.,1.,0.,1.,0.,0.,0.5,-0.2,0.,0.1,0.8,1.,0.5,0.,1.],7,3)
172 src=MEDCouplingUMesh("",3) ; src.setCoords(coords)
173 src.allocateCells(2) ; src.insertNextCell(NORM_TETRA4,[0,1,2,5]) ; src.insertNextCell(NORM_TETRA4,[3,4,0,6]) ; src.finishInsertingCells()
174 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3]) ; arr2=DataArrayDouble([-0.7,0.2,0.6,1.2,2.])
175 trg.setCoordsAt(0,arr) ; trg.setCoordsAt(1,arr) ; trg.setCoordsAt(2,arr2)
176 src.checkConsistency(1e-10)
177 trg.checkConsistencyLight()
178 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble([10.,30.])
179 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
180 rem=MEDCouplingRemapper()
181 rem.prepare(src,trg,"P0P0")
182 trgField=rem.transferField(fieldSrc,-7.)
183 expected3=[-7.,-7.,2.925,0.015,-7.,-7.,0.9392,8.595,2.265,-7.,-7.,1.1008,1.1192,-7.,-7.,-7.,0.6392,1.6408,0.2808,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,0.81,-7.,-7.,-7.,0.1208,11.55,0.96,-7.,-7.,1.1752,0.6592,-7.,-7.,-7.,0.8512,1.7744,0.0192,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,1.92,-7.,-7.,-7.,0.12578571428571422,0.007314285714285673,-7.,-7.,-7.,0.3189253968253971,0.1879746031746033,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.,-7.]
184 self.assertEqual(100,trgField.getArray().getNumberOfTuples())
185 self.assertEqual(100,len(expected3))
186 for i,val in enumerate(expected3):
187 self.assertAlmostEqual(expected3[i],trgField.getArray().getIJ(i,0),12);
191 def testPrepareCU(self):
193 coords=DataArrayDouble([0.,0.5,0.7])
194 trg=MEDCouplingUMesh("",1) ; trg.setCoords(coords)
195 trg.allocateCells(2) ; trg.insertNextCell(NORM_SEG2,[0,1]) ; trg.insertNextCell(NORM_SEG2,[1,2]) ; trg.finishInsertingCells()
196 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
197 src.setCoordsAt(0,arr)
198 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrTrg=DataArrayDouble([10.,30.,40.,70.,80.])
199 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrTrg)
200 rem=MEDCouplingRemapper()
201 rem.prepare(src,trg,"P0P0")
202 trgField=rem.transferField(fieldSrc,-7.)
204 self.assertEqual(2.,trgField.getArray().getNumberOfTuples())
205 self.assertEqual(2,len(expected1))
206 for i,val in enumerate(expected1):
207 self.assertAlmostEqual(expected1[i],trgField.getArray().getIJ(i,0),12);
210 coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.5,-0.2],5,2)
211 trg=MEDCouplingUMesh("",2) ; trg.setCoords(coords)
212 trg.allocateCells(2) ; trg.insertNextCell(NORM_TRI3,[0,1,2]) ; trg.insertNextCell(NORM_TRI3,[3,4,0]) ; trg.finishInsertingCells()
213 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
214 src.setCoordsAt(0,arr) ; src.setCoordsAt(1,arr)
215 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble([10.,30.,40.,70.,80.,110.,130.,140.,170.,180.,210.,230.,240.,270.,280.,310.,330.,340.,370.,380.,410.,430.,440.,470.,480.])
216 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
217 rem=MEDCouplingRemapper()
218 rem.prepare(src,trg,"P0P0")
219 trgField=rem.transferField(fieldSrc,-7.)
220 expected2=[441.3050624589086,68.69529914529915]
221 self.assertEqual(2,trgField.getArray().getNumberOfTuples())
222 self.assertEqual(2,len(expected2))
223 for i,val in enumerate(expected2):
224 self.assertAlmostEqual(expected2[i],trgField.getArray().getIJ(i,0),12);
227 coords=DataArrayDouble([0.,0.,0.,0.,1.,0.,1.,1.,0.,1.,0.,0.,0.5,-0.2,0.,0.1,0.8,1.,0.5,0.,1.],7,3)
228 trg=MEDCouplingUMesh("",3) ; trg.setCoords(coords)
229 trg.allocateCells(2) ; trg.insertNextCell(NORM_TETRA4,[0,1,2,5]) ; trg.insertNextCell(NORM_TETRA4,[3,4,0,6]) ; trg.finishInsertingCells()
230 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3]) ; arr2=DataArrayDouble([-0.7,0.2,0.6,1.2,2.])
231 src.setCoordsAt(0,arr) ; src.setCoordsAt(1,arr) ; src.setCoordsAt(2,arr2)
232 trg.checkConsistency(1e-10)
233 src.checkConsistencyLight()
234 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble(100) ; arrSrc.iota(7.7)
235 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
236 rem=MEDCouplingRemapper()
237 rem.prepare(src,trg,"P0P0")
238 trgField=rem.transferField(fieldSrc,-7.)
239 expected3=[39.635196634558845,12.13422356758468]
240 self.assertEqual(2,trgField.getArray().getNumberOfTuples())
241 self.assertEqual(2,len(expected3))
242 for i,val in enumerate(expected3):
243 self.assertAlmostEqual(expected3[i],trgField.getArray().getIJ(i,0),12);
247 def testPrepareCC(self):
249 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
250 src.setCoordsAt(0,arr)
251 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.9,-0.1,0.15])
252 trg.setCoordsAt(0,arr)
253 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrTrg=DataArrayDouble([10.,30.,40.,70.,80.])
254 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrTrg)
255 rem=MEDCouplingRemapper()
256 rem.prepare(src,trg,"P0P0")
257 trgField=rem.transferField(fieldSrc,-7.)
259 self.assertEqual(2.,trgField.getArray().getNumberOfTuples())
260 self.assertEqual(2,len(expected1))
261 for i,val in enumerate(expected1):
262 self.assertAlmostEqual(expected1[i],trgField.getArray().getIJ(i,0),12);
265 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
266 src.setCoordsAt(0,arr) ; src.setCoordsAt(1,arr)
267 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.9,-0.1,0.15])
268 trg.setCoordsAt(0,arr) ; trg.setCoordsAt(1,arr)
269 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble([10.,30.,40.,70.,80.,110.,130.,140.,170.,180.,210.,230.,240.,270.,280.,310.,330.,340.,370.,380.,410.,430.,440.,470.,480.])
270 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc)
271 rem=MEDCouplingRemapper()
272 rem.prepare(src,trg,"P0P0")
273 trgField=rem.transferField(fieldSrc,-7.)
274 expected2=[10.,25.,91.66666666666666,90.27777777777777]
275 self.assertEqual(4,trgField.getArray().getNumberOfTuples())
276 self.assertEqual(4,len(expected2))
277 for i,val in enumerate(expected2):
278 self.assertAlmostEqual(expected2[i],trgField.getArray().getIJ(i,0),12);
281 src=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.7,-0.1,0.2,0.7,2.,2.3])
282 src.setCoordsAt(0,arr) ; src.setCoordsAt(1,arr) ; src.setCoordsAt(2,arr)
283 trg=MEDCouplingCMesh() ; arr=DataArrayDouble([-0.9,-0.1,0.15])
284 trg.setCoordsAt(0,arr) ; trg.setCoordsAt(1,arr) ; trg.setCoordsAt(2,arr)
285 fieldSrc=MEDCouplingFieldDouble(ON_CELLS,NO_TIME) ; fieldSrc.setMesh(src) ; arrSrc=DataArrayDouble(125) ; arrSrc.iota(7.7)
286 fieldSrc.setNature(ExtensiveMaximum) ; fieldSrc.setArray(arrSrc) ; fieldSrc.checkConsistencyLight()
287 rem=MEDCouplingRemapper()
288 rem.prepare(src,trg,"P0P0")
289 trgField=rem.transferField(fieldSrc,-7.)
290 expected3=[7.7, 7.249999999999999, 10.583333333333332, 9.513888888888886, 27.25, 23.40277777777777, 26.180555555555546, 22.39583333333333]
291 self.assertEqual(8,trgField.getArray().getNumberOfTuples())
292 self.assertEqual(8,len(expected3))
293 for i,val in enumerate(expected3):
294 self.assertAlmostEqual(expected3[i],trgField.getArray().getIJ(i,0),12);
298 # Bug when source mesh is not homogeneously oriented in source mesh
299 def testNonRegressionNonHomegenousOrriented3DCells(self):
300 csrc=DataArrayDouble([-0.15240000188350677,0,0,-0.1086929515004158,0,0,-0.15240000188350677,0.018142856657505035,0,-0.13054648041725159,0.0090714283287525177,0.019050000235438347,-0.13054648041725159,0.0090714283287525177,0],5,3)
301 src1=MEDCouplingUMesh("src",3) ; src1.allocateCells(0) ; src1.insertNextCell(NORM_TETRA4,[0,1,4,3]) ; src1.insertNextCell(NORM_TETRA4,[2,0,4,3])
302 src2=MEDCouplingUMesh("src",3) ; src2.allocateCells(0) ; src2.insertNextCell(NORM_TETRA4,[0,4,1,3]) ; src2.insertNextCell(NORM_TETRA4,[2,0,4,3])
303 src1.setCoords(csrc) ; src2.setCoords(csrc)
304 ctrg=DataArrayDouble([-0.15240000188350677,-0.038100000470876694,0,0.32379999756813049,-0.038100000470876694,0,-0.15240000188350677,0.076200000941753387,0,0.32379999756813049,0.076200000941753387,0,-0.15240000188350677,-0.038100000470876694,0.076200000941753387,0.32379999756813049,-0.038100000470876694,0.076200000941753387,-0.15240000188350677,0.076200000941753387,0.076200000941753387,0.32379999756813049,0.076200000941753387,0.076200000941753387],8,3)
305 trg=MEDCouplingUMesh("trg",3) ; trg.allocateCells(0) ; trg.insertNextCell(NORM_HEXA8,[0,1,3,2,4,5,7,6])
307 rem1=MEDCouplingRemapper() ; rem1.setSplittingPolicy(PLANAR_FACE_5) ; rem1.prepare(src1,trg,"P0P0")
308 rem2=MEDCouplingRemapper() ; rem2.setSplittingPolicy(PLANAR_FACE_5) ; rem2.prepare(src1,trg,"P0P0")
309 mat1=rem1.getCrudeMatrix() ; mat2=rem2.getCrudeMatrix()
310 self.assertEqual(1,len(mat1)) ; self.assertEqual(1,len(mat2))
311 self.assertEqual(mat1[0].keys(),mat2[0].keys()) ; self.assertEqual([0,1],mat1[0].keys())
312 self.assertAlmostEqual(1.25884108122e-06,mat1[0][0],16) ; self.assertAlmostEqual(1.25884108122e-06,mat2[0][0],16)
313 self.assertAlmostEqual(1.25884086663e-06,mat1[0][1],16) ; self.assertAlmostEqual(1.25884086663e-06,mat2[0][1],16)
315 d=DataArrayDouble([13.45,27.67],2,1)
316 f1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f1.setMesh(src1) ; f1.setArray(d) ; f1.setNature(IntensiveConservation)
317 f2=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f2.setMesh(src2) ; f2.setArray(d) ; f2.setNature(IntensiveConservation)
318 f11=rem1.transferField(f1,1e300) ; f22=rem2.transferField(f2,1e300)
319 expected1=DataArrayDouble([0.012480539537637884])
320 self.assertTrue(f11.getArray().isEqual(expected1,1e-15))
321 self.assertTrue(f22.getArray().isEqual(expected1,1e-15))
323 f1.setNature(ExtensiveMaximum) ; f2.setNature(ExtensiveMaximum)
324 f11=rem1.transferField(f1,1e300) ; f22=rem2.transferField(f2,1e300)
326 expected2=DataArrayDouble([41.12])
327 self.assertTrue(f11.getArray().isEqual(expected2,1e-13))
328 self.assertTrue(f22.getArray().isEqual(expected2,1e-13))
331 def testCellToNodeReverse3D(self):
332 c=DataArrayDouble([0.,1.,2.5])
333 cc=MEDCouplingCMesh()
335 um=cc.buildUnstructured()
336 f=um.getMeasureField(ON_CELLS)
338 n2o=um.simplexize(PLANAR_FACE_5)
339 f.setArray(f.getArray()[n2o])
340 f.checkConsistencyLight()
341 f.setNature(IntensiveMaximum)
343 f.setName("toto") ; f.setDescription("aDescription")
344 p=MEDCouplingRemapper()
345 p.setIntersectionType(Barycentric)
346 p.prepare(um,um,"P1P0")
347 fNode=p.reverseTransferField(f,1e300)
348 self.assertEqual("toto",fNode.getName())
349 self.assertEqual("aDescription",fNode.getDescription())
350 a,b,c=fNode.getTime()
351 self.assertAlmostEqual(5.6,a,14)
352 self.assertEqual(7,b) ; self.assertEqual(8,c)
354 integExpected=34.328125
355 self.assertAlmostEqual(fNode.integral(False)[0],integExpected,14)
356 self.assertAlmostEqual(f.integral(False)[0],integExpected,14)
359 def testGauss2Gauss2DValidated(self):
360 srcFt=MEDCouplingDataForTest.buildFieldOnGauss_1()
361 trgFt=MEDCouplingDataForTest.buildFieldOnGauss_2()
362 src=MEDCouplingFieldDouble(srcFt)
363 self.assertEqual(srcFt.getMesh().getHiddenCppPointer(),src.getMesh().getHiddenCppPointer())
364 self.assertEqual(srcFt.getDiscretization().getHiddenCppPointer(),src.getDiscretization().getHiddenCppPointer())
365 #values given by ASTER usecase
366 src.setArray(DataArrayDouble([1.,1.,0.,0.,1.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.]))
367 src.getArray().setInfoOnComponents(["DOMA"])
368 rem=MEDCouplingRemapper()
369 rem.setIntersectionType(PointLocator)
370 rem.prepareEx(srcFt,trgFt)
371 trg=rem.transferField(src,1e300)
372 self.assertEqual(trg.getMesh().getHiddenCppPointer(),trgFt.getMesh().getHiddenCppPointer())
373 self.assertEqual(trg.getDiscretization().getHiddenCppPointer(),trgFt.getDiscretization().getHiddenCppPointer())
374 #values given after interpolation in ASTER
375 arrExpected=DataArrayDouble([1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.]) ; arrExpected.setInfoOnComponents(["DOMA"])
376 self.assertTrue(trg.getArray().isEqual(arrExpected,1e-12))
378 # second part of the test : reverse source and target
380 rem.prepareEx(trgFt,srcFt)# sorry trgFt is in the place of source and srcFt in the place of target it is not a bug
381 trg=MEDCouplingFieldDouble(trgFt)
382 #values given after interpolation in ASTER
383 trg.setArray(DataArrayDouble([1.,1.,0.,0.,1.,0.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,1.,1.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,0.,1.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.]))
384 trg.getArray().setInfoOnComponents(["DOMA"])
385 src=rem.transferField(trg,1e300)
386 #values given after interpolation in ASTER
387 arrExpected2=DataArrayDouble([1.,1.,0.,0.,1.,1.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,1.,1.,1., 1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,1.,0.,1.,1.,1.,1.,0.,0.,0.,0.,1.,0.,0.,0.,1.,1.,1.,0.,1.,1.,1.,1.,1.,1.,0.,0.,1.,1.,0.,1.,1.,1.,0.,1.,0.,0.,0.,1.,0.,0.,0.,1.,1.,1.,0.,1.,1.,1.,1.,1.]) ; arrExpected2.setInfoOnComponents(["DOMA"])
388 # modification of values in ASTER due to modification of algorithm
389 # target PG 82 in target cell 32(C)/36 PG 1(C)/9 is in source cell 58(C)/120 source Gauss point 113 (1(C)/4). Values must be 1. and not 0.
390 arrExpected2.setIJ(82,0,1.)
391 self.assertTrue(src.getArray().isEqual(arrExpected2,1e-12))
394 def testGauss2Gauss3DValidated(self):
395 srcFt=MEDCouplingDataForTest.buildFieldOnGauss_3()
396 trgFt=MEDCouplingDataForTest.buildFieldOnGauss_4()
397 src=MEDCouplingFieldDouble(srcFt)
398 self.assertEqual(srcFt.getMesh().getHiddenCppPointer(),src.getMesh().getHiddenCppPointer())
399 self.assertEqual(srcFt.getDiscretization().getHiddenCppPointer(),src.getDiscretization().getHiddenCppPointer())
400 #values given by ASTER usecase
401 src.setArray(DataArrayDouble([0.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,1.,1.,0.,0.,1.,1.,1.,1.,0.,0.,1.,1.,0.,0.]))
402 src.getArray().setInfoOnComponents(["DOMA"])
403 rem=MEDCouplingRemapper()
404 rem.setIntersectionType(PointLocator)
405 rem.prepareEx(srcFt,trgFt)
406 trg=rem.transferField(src,1e300)
407 self.assertEqual(trg.getMesh().getHiddenCppPointer(),trgFt.getMesh().getHiddenCppPointer())
408 self.assertEqual(trg.getDiscretization().getHiddenCppPointer(),trgFt.getDiscretization().getHiddenCppPointer())
409 #values given after interpolation in ASTER
410 arrExpected=DataArrayDouble([0.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,0.,0.,1.,1.,0.,0.,1.,1.,1.,1.,0.,1.,1.,1.,0.,1.]) ; arrExpected.setInfoOnComponents(["DOMA"])
411 self.assertTrue(trg.getArray().isEqual(arrExpected,1e-12))
413 # second part of the test : reverse source and target
415 rem.prepareEx(trgFt,srcFt)# sorry trgFt is in the place of source and srcFt in the place of target it is not a bug
416 trg=MEDCouplingFieldDouble(trgFt)
417 #values given after interpolation in ASTER
418 trg.setArray(DataArrayDouble([0.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,0.,1.,1.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.]))
419 trg.getArray().setInfoOnComponents(["DOMA"])
420 src=rem.transferField(trg,1e300)
421 #values given after interpolation in ASTER
422 arrExpected2=DataArrayDouble([0.,1.,1.,1.,1.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,0.,1.,0.,1.,0.,1.,1.,1.,0.,1.,1.,1.,1.,0.,1.,1.,1.,0.,1.]) ; arrExpected2.setInfoOnComponents(["DOMA"])
423 self.assertTrue(src.getArray().isEqual(arrExpected2,1e-12))
426 def testSwig2MixOfUMesh(self):
427 arr0=DataArrayDouble([0,1,1.5]) ; arr1=DataArrayDouble([0,1])
428 sc=MEDCouplingCMesh() ; sc.setCoords(arr0,arr1,arr1)
429 tc=sc.deepCopy() ; tc.translate([0.4,0.3,0.3])
431 # 90 (umesh-1sgtumesh)
432 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
433 s=sc.buildUnstructured() ; t=tc.build1SGTUnstructured()
434 self.assertTrue(isinstance(s,MEDCouplingUMesh))
435 self.assertTrue(isinstance(t,MEDCoupling1SGTUMesh))
436 rem.prepare(s,t,"P0P0")
437 mat=rem.getCrudeMatrix()
438 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
439 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
441 # 91 (umesh-1dgtumesh)
442 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
443 s=sc.buildUnstructured() ; t=tc.buildUnstructured() ; t.convertAllToPoly() ; t=MEDCoupling1DGTUMesh(t)
444 self.assertTrue(isinstance(s,MEDCouplingUMesh))
445 self.assertTrue(isinstance(t,MEDCoupling1DGTUMesh))
446 rem.prepare(s,t,"P0P0")
447 mat=rem.getCrudeMatrix()
448 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
449 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
451 # 165 (1sgtumesh-umesh)
452 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
453 s=sc.build1SGTUnstructured() ; t=tc.buildUnstructured()
454 self.assertTrue(isinstance(s,MEDCoupling1SGTUMesh))
455 self.assertTrue(isinstance(t,MEDCouplingUMesh))
456 rem.prepare(s,t,"P0P0")
457 mat=rem.getCrudeMatrix()
458 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
459 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
461 # 181 (1dgtumesh-umesh
462 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
463 s=sc.buildUnstructured() ; s.convertAllToPoly() ; s=MEDCoupling1DGTUMesh(s) ; t=tc.buildUnstructured()
464 self.assertTrue(isinstance(s,MEDCoupling1DGTUMesh))
465 self.assertTrue(isinstance(t,MEDCouplingUMesh))
466 rem.prepare(s,t,"P0P0")
467 mat=rem.getCrudeMatrix()
468 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
469 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
471 # 170 (1sgtumesh-1sgtumesh)
472 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
473 s=sc.build1SGTUnstructured() ; t=tc.build1SGTUnstructured()
474 self.assertTrue(isinstance(s,MEDCoupling1SGTUMesh))
475 self.assertTrue(isinstance(t,MEDCoupling1SGTUMesh))
476 rem.prepare(s,t,"P0P0")
477 mat=rem.getCrudeMatrix()
478 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
479 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
481 # 171 (1sgtumesh-1dgtumesh)
482 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
483 s=sc.build1SGTUnstructured() ; t=tc.buildUnstructured() ; t.convertAllToPoly() ; t=MEDCoupling1DGTUMesh(t)
484 self.assertTrue(isinstance(s,MEDCoupling1SGTUMesh))
485 self.assertTrue(isinstance(t,MEDCoupling1DGTUMesh))
486 rem.prepare(s,t,"P0P0")
487 mat=rem.getCrudeMatrix()
488 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
489 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
491 # 186 (1dgtumesh-1sgtumesh)
492 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
493 s=sc.buildUnstructured() ; s.convertAllToPoly() ; s=MEDCoupling1DGTUMesh(s) ; t=tc.build1SGTUnstructured()
494 self.assertTrue(isinstance(s,MEDCoupling1DGTUMesh))
495 self.assertTrue(isinstance(t,MEDCoupling1SGTUMesh))
496 rem.prepare(s,t,"P0P0")
497 mat=rem.getCrudeMatrix()
498 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
499 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
501 # 187 (1dgtumesh-1dgtumesh)
502 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
503 s=sc.buildUnstructured() ; s.convertAllToPoly() ; s=MEDCoupling1DGTUMesh(s) ; t=tc.buildUnstructured() ; t.convertAllToPoly() ; t=MEDCoupling1DGTUMesh(t)
504 self.assertTrue(isinstance(s,MEDCoupling1DGTUMesh))
505 self.assertTrue(isinstance(t,MEDCoupling1DGTUMesh))
506 rem.prepare(s,t,"P0P0")
507 mat=rem.getCrudeMatrix()
508 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
509 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
512 # 167 (1sgtumesh-cmesh)
513 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
514 s=sc.build1SGTUnstructured() ; t=tc.deepCopy()
515 self.assertTrue(isinstance(s,MEDCoupling1SGTUMesh))
516 self.assertTrue(isinstance(t,MEDCouplingCMesh))
517 rem.prepare(s,t,"P0P0")
518 mat=rem.getCrudeMatrix()
519 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
520 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
522 # 183 (1dgtumesh-cmesh)
523 #rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
524 #s=sc.buildUnstructured() ; s.convertAllToPoly() ; s=MEDCoupling1DGTUMesh(s) ; t=tc.deepCopy()
525 #self.assertTrue(isinstance(s,MEDCoupling1DGTUMesh))
526 #self.assertTrue(isinstance(t,MEDCouplingCMesh))
527 #rem.prepare(s,t,"P0P0")
528 #mat=rem.getCrudeMatrix()
529 #self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
530 #self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
533 # 122 (cmesh-1sgtumesh)
534 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
535 s=sc.deepCopy() ; t=tc.build1SGTUnstructured()
536 self.assertTrue(isinstance(s,MEDCouplingCMesh))
537 self.assertTrue(isinstance(t,MEDCoupling1SGTUMesh))
538 rem.prepare(s,t,"P0P0")
539 mat=rem.getCrudeMatrix()
540 self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
541 self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
543 # 123 (cmesh-1dgtumesh)
544 #rem=MEDCouplingRemapper() ; rem.setIntersectionType(Triangulation)
545 #s=sc.deepCopy() ; t=tc.buildUnstructured() ; t.convertAllToPoly() ; t=MEDCoupling1DGTUMesh(t)
546 #self.assertTrue(isinstance(s,MEDCouplingCMesh))
547 #self.assertTrue(isinstance(t,MEDCoupling1DGTUMesh))
548 #rem.prepare(s,t,"P0P0")
549 #mat=rem.getCrudeMatrix()
550 #self.assertEqual(2,len(mat)) ; self.assertEqual(2,len(mat[0])) ; self.assertEqual(1,len(mat[1]))
551 #self.assertAlmostEqual(0.294,mat[0][0],14) ; self.assertAlmostEqual(0.196,mat[0][1],14) ; self.assertAlmostEqual(0.049,mat[1][1],14)
555 def testSwig2BarycentricP1P13D_1(self):
556 sCoo=DataArrayDouble([0.313,0.00218,6.90489,0.313,0.10692667,6.90489,0.313,0.10692667,6.96790167,0.313,0.00218,6.9773125,0.313,0.21167333,6.90489,0.313,0.21167333,6.95849083,0.313,0.31642,6.90489,0.313,0.31642,6.94908,0.313,0.09383333,7.04891667,0.313,0.00218,7.049735,0.313,0.18548667,7.04809833,0.313,0.27714,7.04728,0.313,0.05782667,7.133205,0.313,0.00218,7.1221575,0.313,0.11347333,7.1442525,0.313,0.16912,7.1553,0.313,0.02509333,7.19458,0.313,0.00218,7.19458,0.313,0.04800667,7.19458,0.313,0.07092,7.19458,0.31005609,0.00218,6.90460005,0.31005609,0.10692667,6.90460005,0.29776312,0.10692667,6.96640097,0.29592716,0.00218,6.97563097,0.31005609,0.21167333,6.90460005,0.29959908,0.21167333,6.95717096,0.31005609,0.31642,6.90460005,0.30143505,0.31642,6.94794095,0.28195788,0.09383333,7.04585928,0.28179823,0.00218,7.04666189,0.28211753,0.18548667,7.04505668,0.28227718,0.27714,7.04425407,0.26551404,0.05782667,7.12852804,0.2676693,0.00218,7.11769282,0.26335878,0.11347333,7.13936327,0.26120352,0.16912,7.15019849,0.25354037,0.02509333,7.18872374,0.25354037,0.00218,7.18872374,0.25354037,0.04800667,7.18872374,0.25354037,0.07092,7.18872374,0.30722531,0.00218,6.90374134,0.30722531,0.10692667,6.90374134,0.28311179,0.10692667,6.96195653,0.27951042,0.00218,6.97065101,0.30722531,0.21167333,6.90374134,0.28671316,0.21167333,6.95326205,0.30722531,0.31642,6.90374134,0.29031453,0.31642,6.94456758,0.25210869,0.09383333,7.03680463,0.25179553,0.00218,7.03756067,0.25242185,0.18548667,7.03604859,0.25273501,0.27714,7.03529255,0.21985294,0.05782667,7.1146769,0.22408063,0.00218,7.10447034,0.21562524,0.11347333,7.12488346,0.21139755,0.16912,7.13509002,0.19636574,0.02509333,7.17138,0.19636574,0.00218,7.17138,0.19636574,0.04800667,7.17138,0.19636574,0.07092,7.17138,0.30461645,0.00218,6.90234688,0.30461645,0.10692667,6.90234688,0.26960904,0.10692667,6.95473916,0.26438066,0.00218,6.96256398,0.30461645,0.21167333,6.90234688,0.27483742,0.21167333,6.94691434,0.30461645,0.31642,6.90234688,0.2800658,0.31642,6.93908952,0.22459952,0.09383333,7.02210067,0.22414487,0.00218,7.02278109,0.22505416,0.18548667,7.02142025,0.2255088,0.27714,7.02073983,0.17777143,0.05782667,7.09218386,0.18390909,0.00218,7.0829982,0.17163377,0.11347333,7.10136952,0.1654961,0.16912,7.11055518,0.1436733,0.02509333,7.14321531,0.1436733,0.00218,7.14321531,0.1436733,0.04800667,7.14321531,0.1436733,0.07092,7.14321531,0.30232976,0.00218,6.90047024,0.30232976,0.10692667,6.90047024,0.25777378,0.10692667,6.94502622,0.25111932,0.00218,6.95168068,0.30232976,0.21167333,6.90047024,0.26442825,0.21167333,6.93837175,0.30232976,0.31642,6.90047024,0.27108271,0.31642,6.93171729,0.20048753,0.09383333,7.00231247,0.19990888,0.00218,7.00289112,0.20106618,0.18548667,7.00173382,0.20164482,0.27714,7.00115518,0.14088667,0.05782667,7.06191333,0.14869844,0.00218,7.05410156,0.13307491,0.11347333,7.06972509,0.12526315,0.16912,7.07753685,0.097488,0.02509333,7.105312,0.097488,0.00218,7.105312,0.097488,0.04800667,7.105312,0.097488,0.07092,7.105312,0.30045312,0.00218,6.89818355,0.30045312,0.10692667,6.89818355,0.24806084,0.10692667,6.93319096,0.24023602,0.00218,6.93841934,0.30045312,0.21167333,6.89818355,0.25588566,0.21167333,6.92796258,0.30045312,0.31642,6.89818355,0.26371048,0.31642,6.9227342,0.18069933,0.09383333,6.97820048,0.18001891,0.00218,6.97865513,0.18137975,0.18548667,6.97774584,0.18206017,0.27714,6.9772912,0.11061614,0.05782667,7.02502857,0.1198018,0.00218,7.01889091,0.10143048,0.11347333,7.03116623,0.09224482,0.16912,7.0373039,0.05958469,0.02509333,7.0591267,0.05958469,0.00218,7.0591267,0.05958469,0.04800667,7.0591267,0.05958469,0.07092,7.0591267,0.29905866,0.00218,6.89557469,0.29905866,0.10692667,6.89557469,0.24084347,0.10692667,6.91968821,0.23214899,0.00218,6.92328958,0.29905866,0.21167333,6.89557469,0.24953795,0.21167333,6.91608684,0.29905866,0.31642,6.89557469,0.25823242,0.31642,6.91248547,0.16599537,0.09383333,6.95069131,0.16523933,0.00218,6.95100447,0.16675141,0.18548667,6.95037815,0.16750745,0.27714,6.95006499,0.0881231,0.05782667,6.98294706,0.09832966,0.00218,6.97871937,0.07791654,0.11347333,6.98717476,0.06770998,0.16912,6.99140245,0.03142,0.02509333,7.00643426,0.03142,0.00218,7.00643426,0.03142,0.04800667,7.00643426,0.03142,0.07092,7.00643426,0.29819995,0.00218,6.89274391,0.29819995,0.10692667,6.89274391,0.23639903,0.10692667,6.90503688,0.22716903,0.00218,6.90687284,0.29819995,0.21167333,6.89274391,0.24562904,0.21167333,6.90320092,0.29819995,0.31642,6.89274391,0.25485905,0.31642,6.90136495,0.15694072,0.09383333,6.92084212,0.15613811,0.00218,6.92100177,0.15774332,0.18548667,6.92068247,0.15854593,0.27714,6.92052282,0.07427196,0.05782667,6.93728596,0.08510718,0.00218,6.9351307,0.06343673,0.11347333,6.93944122,0.05260151,0.16912,6.94159648,0.01407626,0.02509333,6.94925963,0.01407626,0.00218,6.94925963,0.01407626,0.04800667,6.94925963,0.01407626,0.07092,6.94925963,0.29792818,0.00218,6.89054043,0.29792818,0.10692667,6.89054043,0.23499241,0.10692667,6.89363227,0.22559291,0.00218,6.89409403,0.29792818,0.21167333,6.89054043,0.24439191,0.21167333,6.8931705,0.29792818,0.31642,6.89054043,0.25379141,0.31642,6.89270873,0.154075,0.09383333,6.89760748,0.15325765,0.00218,6.89764764,0.15489234,0.18548667,6.89756733,0.15570969,0.27714,6.89752718,0.06988819,0.05782667,6.90174332,0.08092238,0.00218,6.90120124,0.058854,0.11347333,6.90228539,0.04781981,0.16912,6.90282747,0.00858712,0.02509333,6.90475485,0.00858712,0.00218,6.90475485,0.00858712,0.04800667,6.90475485,0.00858712,0.07092,6.90475485,0.29791,0.00218,6.820902,0.29791,0.10692667,6.820902,0.23489833,0.10692667,6.820902,0.2254875,0.00218,6.820902,0.29791,0.21167333,6.820902,0.24430917,0.21167333,6.820902,0.29791,0.31642,6.820902,0.25372,0.31642,6.820902,0.15388333,0.09383333,6.820902,0.153065,0.00218,6.820902,0.15470167,0.18548667,6.820902,0.15552,0.27714,6.820902,0.069595,0.05782667,6.820902,0.0806425,0.00218,6.820902,0.0585475,0.11347333,6.820902,0.0475,0.16912,6.820902,0.00822,0.02509333,6.820902,0.00822,0.00218,6.820902,0.00822,0.04800667,6.820902,0.00822,0.07092,6.820902],200,3)
557 sConn=DataArrayInt([0,1,2,3,20,21,22,23,1,4,5,2,21,24,25,22,4,6,7,5,24,26,27,25,3,2,8,9,23,22,28,29,2,5,10,8,22,25,30,28,5,7,11,10,25,27,31,30,9,8,12,13,29,28,32,33,8,10,14,12,28,30,34,32,10,11,15,14,30,31,35,34,13,12,16,17,33,32,36,37,12,14,18,16,32,34,38,36,14,15,19,18,34,35,39,38,20,21,22,23,40,41,42,43,21,24,25,22,41,44,45,42,24,26,27,25,44,46,47,45,23,22,28,29,43,42,48,49,22,25,30,28,42,45,50,48,25,27,31,30,45,47,51,50,29,28,32,33,49,48,52,53,28,30,34,32,48,50,54,52,30,31,35,34,50,51,55,54,33,32,36,37,53,52,56,57,32,34,38,36,52,54,58,56,34,35,39,38,54,55,59,58,40,41,42,43,60,61,62,63,41,44,45,42,61,64,65,62,44,46,47,45,64,66,67,65,43,42,48,49,63,62,68,69,42,45,50,48,62,65,70,68,45,47,51,50,65,67,71,70,49,48,52,53,69,68,72,73,48,50,54,52,68,70,74,72,50,51,55,54,70,71,75,74,53,52,56,57,73,72,76,77,52,54,58,56,72,74,78,76,54,55,59,58,74,75,79,78,60,61,62,63,80,81,82,83,61,64,65,62,81,84,85,82,64,66,67,65,84,86,87,85,63,62,68,69,83,82,88,89,62,65,70,68,82,85,90,88,65,67,71,70,85,87,91,90,69,68,72,73,89,88,92,93,68,70,74,72,88,90,94,92,70,71,75,74,90,91,95,94,73,72,76,77,93,92,96,97,72,74,78,76,92,94,98,96,74,75,79,78,94,95,99,98,80,81,82,83,100,101,102,103,81,84,85,82,101,104,105,102,84,86,87,85,104,106,107,105,83,82,88,89,103,102,108,109,82,85,90,88,102,105,110,108,85,87,91,90,105,107,111,110,89,88,92,93,109,108,112,113,88,90,94,92,108,110,114,112,90,91,95,94,110,111,115,114,93,92,96,97,113,112,116,117,92,94,98,96,112,114,118,116,94,95,99,98,114,115,119,118,100,101,102,103,120,121,122,123,101,104,105,102,121,124,125,122,104,106,107,105,124,126,127,125,103,102,108,109,123,122,128,129,102,105,110,108,122,125,130,128,105,107,111,110,125,127,131,130,109,108,112,113,129,128,132,133,108,110,114,112,128,130,134,132,110,111,115,114,130,131,135,134,113,112,116,117,133,132,136,137,112,114,118,116,132,134,138,136,114,115,119,118,134,135,139,138,120,121,122,123,140,141,142,143,121,124,125,122,141,144,145,142,124,126,127,125,144,146,147,145,123,122,128,129,143,142,148,149,122,125,130,128,142,145,150,148,125,127,131,130,145,147,151,150,129,128,132,133,149,148,152,153,128,130,134,132,148,150,154,152,130,131,135,134,150,151,155,154,133,132,136,137,153,152,156,157,132,134,138,136,152,154,158,156,134,135,139,138,154,155,159,158,140,141,142,143,160,161,162,163,141,144,145,142,161,164,165,162,144,146,147,145,164,166,167,165,143,142,148,149,163,162,168,169,142,145,150,148,162,165,170,168,145,147,151,150,165,167,171,170,149,148,152,153,169,168,172,173,148,150,154,152,168,170,174,172,150,151,155,154,170,171,175,174,153,152,156,157,173,172,176,177,152,154,158,156,172,174,178,176,154,155,159,158,174,175,179,178,160,161,162,163,180,181,182,183,161,164,165,162,181,184,185,182,164,166,167,165,184,186,187,185,163,162,168,169,183,182,188,189,162,165,170,168,182,185,190,188,165,167,171,170,185,187,191,190,169,168,172,173,189,188,192,193,168,170,174,172,188,190,194,192,170,171,175,174,190,191,195,194,173,172,176,177,193,192,196,197,172,174,178,176,192,194,198,196,174,175,179,178,194,195,199,198])
558 s=MEDCoupling1SGTUMesh("source",NORM_HEXA8) ; s.setCoords(sCoo)
559 s.setNodalConnectivity(sConn)
561 tCoo=DataArrayDouble([0.328,0.012,6.8598,0.328,0.168320184237353,6.8598,0.328,0.324640368474706,6.8598,0.328,0.0,6.8598,0.298,0.012,6.8598,0.1565,0.012,6.8598,0.180205346493166,0.144794653506834,6.8598,0.298,0.168320184237353,6.8598,0.0,0.012,6.8598,0.0916755774886107,0.233324422511389,6.8598,0.298,0.324640368474706,6.8598,0.298,0.0,6.8598,0.1565,0.0,6.8598,0.0,0.0,6.8598,0.328,0.012,7.2298,0.328,0.168320184237353,7.2298,0.328,0.324640368474706,7.2298,0.328,0.0,7.2298,0.298,0.012,7.2298,0.1565,0.012,7.2298,0.180205346493166,0.144794653506834,7.2298,0.298,0.168320184237353,7.2298,0.0,0.012,7.2298,0.0916755774886107,0.233324422511389,7.2298,0.298,0.324640368474706,7.2298,0.298,0.0,7.2298,0.1565,0.0,7.2298,0.0,0.0,7.2298],28,3)
562 tConn=DataArrayInt([4,5,6,7,18,19,20,21,5,8,9,6,19,22,23,20,6,9,10,7,20,23,24,21,11,12,5,4,25,26,19,18,12,13,8,5,26,27,22,19,3,11,4,0,17,25,18,14,0,4,7,1,14,18,21,15,1,7,10,2,15,21,24,16])
563 t=MEDCoupling1SGTUMesh("target",NORM_HEXA8) ; t.setCoords(tCoo)
564 t.setNodalConnectivity(tConn)
566 s.simplexize(PLANAR_FACE_5)
567 aRemapper=MEDCouplingRemapper()
568 aRemapper.setPrecision(1e-12)
569 aRemapper.setIntersectionType(Barycentric)
570 self.assertEqual(aRemapper.prepare(s,t,'P1P1'),1)
571 m=aRemapper.getCrudeMatrix()
572 self.assertEqual(len(m),28)
575 self.assertEqual(len(m[i]),0)
578 self.assertEqual(len(m[5]),4)
579 self.assertEqual(len(m[6]),4)
580 self.assertAlmostEqual(0.10714286103952797,m[5][168],12)
581 self.assertAlmostEqual(0.35691534416938014,m[5][169],12)
582 self.assertAlmostEqual(0.04492099619713096,m[5][163],12)
583 self.assertAlmostEqual(0.49102079859396097,m[5][189],12)
584 self.assertAlmostEqual(0.14039089397104254,m[6][185],12)
585 self.assertAlmostEqual(0.16362822318261033,m[6][162],12)
586 self.assertAlmostEqual(0.3438363717836785 ,m[6][188],12)
587 self.assertAlmostEqual(0.3521445110626687 ,m[6][170],12)
590 def testSwig2MappedBarycentricP1P12D_1(self):
591 """ Testing mapped barycentric P1P1 projection
592 (uses analytical mapping from square to arbitrary convex quadrangle)
595 sCoo = DataArrayDouble(n,1)
596 sCoo.iota(0.0); sCoo /= float(n-1)
597 m = MEDCouplingCMesh("target")
598 m.setCoordsAt(0, sCoo)
599 m.setCoordsAt(1, sCoo)
600 tgt = m.buildUnstructured()
601 coo = tgt.getCoords()
602 orig = coo.deepCopy(); orig[:,0] = 10.0; orig[:,1] = 15.0
603 pt_a = coo.deepCopy(); pt_a[:,0] = -0.3; pt_a[:,1] = 1.0
604 pt_b = coo.deepCopy(); pt_b[:,0] = 2.0; pt_b[:,1] = 3.0
605 pt_c = coo.deepCopy(); pt_c[:,0] = 1.0; pt_c[:,1] = 0.0
606 # P = x*C+y*A + xy(B-A-C) + ORIGIN
607 coo2 = coo[:,0]*pt_c + coo[:, 1]*pt_a + coo[:, 0]*coo[:, 1]*(pt_b - pt_a - pt_c) + orig
611 sCoo = DataArrayDouble([0.0,0.0, -0.3,1.0, 2.0,3.0, 1.0,0.0],4,2)
612 sCoo[:,0] += 10.0; sCoo[:,1] += 15.0;
613 sConn = DataArrayInt([0,1,2,3])
614 s = MEDCoupling1SGTUMesh("source",NORM_QUAD4) ; s.setCoords(sCoo)
615 s.setNodalConnectivity(sConn)
617 aRemapper=MEDCouplingRemapper()
618 aRemapper.setPrecision(1e-12)
619 aRemapper.setIntersectionType(MappedBarycentric)
620 self.assertEqual(aRemapper.prepare(s,tgt,'P1P1'),1)
621 srcField = MEDCouplingFieldDouble(ON_NODES, ONE_TIME)
622 srcField.setNature(IntensiveMaximum)
623 srcField.setMesh(s); srcField.setName("field")
624 srcField.setArray(DataArrayDouble([1.0,2.0,3.0,4.0]))
625 tgtF = aRemapper.transferField(srcField, 1e+300)
626 ref = [1.0, 1.75, 2.5, 3.25, 4.0, 1.25, 1.875, 2.5, 3.125, 3.75, 1.5, 2.0, 2.5, 3.0, 3.5, 1.75,
627 2.125, 2.5, 2.875, 3.25, 2.0, 2.25, 2.5, 2.75, 3.0]
628 val = tgtF.getArray().getValues()
629 for i, ref_v in enumerate(ref):
630 self.assertAlmostEqual(ref_v, val[i])
633 def testSwig2MappedBarycentricP1P13_1(self):
634 """ Testing mapped barycentric P1P1 projection in 3D (uses orthogonal distances to
648 sCoo = DataArrayDouble(n,1)
651 m = MEDCouplingCMesh("target")
652 m.setCoordsAt(0, sCoo)
653 m.setCoordsAt(1, sCoo)
654 m.setCoordsAt(2, sCoo)
655 tgt = m.buildUnstructured()
656 coo = tgt.getCoords()
657 pt_0 = coo.deepCopy(); pt_0[:,0] = -0.3; pt_0[:,1] = 1.0; pt_0[:,2] = 1.0
658 pt_1 = coo.deepCopy(); pt_1[:,0] = 0.0; pt_1[:,1] = 0.0; pt_1[:,2] = 1.0
659 pt_2 = coo.deepCopy(); pt_2[:,0] = 1.0; pt_2[:,1] = 0.0; pt_2[:,2] = 1.0
660 pt_3 = coo.deepCopy(); pt_3[:,0] = 2.0; pt_3[:,1] = 3.0; pt_3[:,2] = 1.0
662 pt_4 = coo.deepCopy(); pt_4[:,0] = -0.3; pt_4[:,1] = 1.0; pt_4[:,2] = 0.0
663 orig = coo.deepCopy(); orig[:,0] = 10.0; orig[:,1] = 15.0; orig[:,2] = 20.0
664 pt_6 = coo.deepCopy(); pt_6[:,0] = 1.0; pt_6[:,1] = 0.0; pt_6[:,2] = 0.0
665 pt_7 = coo.deepCopy(); pt_7[:,0] = 2.0; pt_7[:,1] = 3.0; pt_7[:,2] = 0.0
666 # P = x*p6 + y*p4 + z*p1 + xy*(p7-p6-p4) + xz*(p2-p1-p6) + yz*(p0-p4-p1) + xyz(p3-p7-p2-p0+p1+p6+p4)
667 x,y,z = coo[:,0],coo[:,1],coo[:,2]
668 coo2 = x*pt_6 + y*pt_4 + z*pt_1 + \
669 x*y*(pt_7 - pt_6 - pt_4) + x*z*(pt_2 - pt_1 - pt_6) + y*z*(pt_0 - pt_4 - pt_1) + \
670 x*y*z*(pt_3 - pt_7 - pt_2 - pt_0 + pt_6 + pt_1 + pt_4) + orig
673 sCoo = DataArrayDouble([-0.3,1.0,1.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 2.0,3.0,1.0,
674 -0.3,1.0,0.0, 0.0,0.0,0.0, 1.0,0.0,0.0, 2.0,3.0,0.0,],8,3)
675 sCoo[:, 0] += 10.0; sCoo[:, 1] += 15.0; sCoo[:, 2] += 20.0;
676 sConn = DataArrayInt([0,1,2,3,4, 5,6,7])
677 s = MEDCoupling1SGTUMesh("source",NORM_HEXA8) ; s.setCoords(sCoo)
678 s.setNodalConnectivity(sConn)
680 aRemapper=MEDCouplingRemapper()
681 aRemapper.setPrecision(1e-12)
682 aRemapper.setIntersectionType(MappedBarycentric)
683 self.assertEqual(aRemapper.prepare(s,tgt,'P1P1'),1)
684 srcField = MEDCouplingFieldDouble(ON_NODES, ONE_TIME)
685 srcField.setNature(IntensiveMaximum)
686 srcField.setMesh(s); srcField.setName("field")
687 srcField.setArray(DataArrayDouble([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0]))
688 tgtF = aRemapper.transferField(srcField, 1e+300)
689 # print tgtF.getArray().getValues()
690 ref = [6.0, 6.251802698104413, 6.502397834044702, 6.7517940736426665, 7.0, 5.740554726834594,
691 6.1761835575796935, 6.6052985689637564, 7.009392769824465, 7.383488834310164,
692 5.487562931129931, 6.140664596972973, 6.720290674177548, 7.220534970454015, 7.651092836860121,
693 5.2407867837524345, 6.125759809889516, 6.82853486793175, 7.390880823876876, 7.848445254819061,
694 5.0, 6.12211344611157, 6.925740671133115, 7.529623182840827, 8.0, 5.0, 5.251802698104413,
695 5.502397834044702, 5.751794073642667, 6.0, 4.740554726834594, 5.1761835575796935,
696 5.6052985689637564, 6.009392769824465, 6.383488834310163, 4.487562931129931, 5.140664596972973,
697 5.720290674177548, 6.220534970454015, 6.651092836860121, 4.2407867837524345, 5.125759809889516,
698 5.828534867931749, 6.390880823876876, 6.848445254819061, 4.0, 5.122113446111569, 5.925740671133115,
699 6.529623182840827, 7.0, 4.0, 4.251802698104413, 4.502397834044702, 4.751794073642667, 5.0, 3.740554726834594,
700 4.176183557579693, 4.6052985689637564, 5.009392769824464, 5.383488834310164, 3.487562931129931,
701 4.140664596972973, 4.720290674177548, 5.220534970454015, 5.651092836860121, 3.240786783752434, 4.125759809889516, 4.82853486793175,
702 5.390880823876876, 5.848445254819061, 3.0, 4.122113446111569, 4.925740671133115, 5.529623182840827, 6.0, 3.0,
703 3.2518026981044135, 3.502397834044702, 3.7517940736426674, 4.0, 2.7405547268345933, 3.176183557579693,
704 3.6052985689637564, 4.009392769824465, 4.383488834310164, 2.487562931129931, 3.140664596972973, 3.7202906741775474, 4.220534970454015, 4.65109283686012, 2.2407867837524345, 3.1257598098895154, 3.828534867931749,
705 4.390880823876876, 4.848445254819061, 2.0, 3.1221134461115687, 3.9257406711331146, 4.529623182840826, 5.0, 2.0, 2.2518026981044135, 2.502397834044702, 2.7517940736426674, 3.0, 1.7405547268345936, 2.176183557579693, 2.6052985689637564,
706 3.0093927698244642, 3.3834888343101635, 1.4875629311299305, 2.1406645969729734, 2.720290674177548,
707 3.2205349704540143, 3.6510928368601205, 1.2407867837524345, 2.125759809889516, 2.8285348679317495, 3.390880823876876, 3.848445254819061, 1.0, 2.1221134461115687, 2.9257406711331146, 3.529623182840827, 4.0]
709 val = tgtF.getArray().getValues()
710 for i, ref_v in enumerate(ref):
711 self.assertAlmostEqual(ref_v, val[i])
714 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy")
715 def testGetCrudeCSRMatrix1(self):
716 """ testing CSR matrix output using numpy/scipy.
718 from scipy.sparse import spdiags #diags
720 from numpy import array
721 arr=DataArrayDouble(3) ; arr.iota()
722 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
723 src=m.buildUnstructured()
724 trg=src.deepCopy() ; trg=trg[[0,1,3]]
725 trg.getCoords()[:]*=0.5 ; trg.getCoords()[:]+=[0.3,0.25]
727 rem=MEDCouplingRemapper()
728 rem.prepare(src,trg,"P0P0")
729 # Internal crude sparse matrix computed. Let's manipulate it using CSR matrix in scipy.
731 m=rem.getCrudeCSRMatrix()
733 m2=rem.getCrudeCSRMatrix()
735 self.assertTrue(isinstance(m,scipy.sparse.csr.csr_matrix))
736 self.assertEqual(m.getnnz(),7)
737 self.assertAlmostEqual(m[0,0],0.25,12)
738 self.assertAlmostEqual(m[1,0],0.1,12)
739 self.assertAlmostEqual(m[1,1],0.15,12)
740 self.assertAlmostEqual(m[2,0],0.05,12)
741 self.assertAlmostEqual(m[2,1],0.075,12)
742 self.assertAlmostEqual(m[2,2],0.05,12)
743 self.assertAlmostEqual(m[2,3],0.075,12)
744 self.assertEqual(diff.getnnz(),0)
745 # ExtensiveConservation (division by sum of cols)
747 # version 0.12.0 # m_0=m*diags(array(1/colSum),[0])
748 m_0=m*spdiags(array(1/colSum),[0],colSum.shape[1],colSum.shape[1])
750 self.assertAlmostEqual(m_0[0,0],0.625,12)
751 self.assertAlmostEqual(m_0[1,0],0.25,12)
752 self.assertAlmostEqual(m_0[1,1],0.6666666666666667,12)
753 self.assertAlmostEqual(m_0[2,0],0.125,12)
754 self.assertAlmostEqual(m_0[2,1],0.3333333333333333,12)
755 self.assertAlmostEqual(m_0[2,2],1.,12)
756 self.assertAlmostEqual(m_0[2,3],1.,12)
757 self.assertEqual(m_0.getnnz(),7)
758 # IntensiveMaximum (division by sum of rows)
760 # version 0.12.0 # m_1=diags(array(1/rowSum.transpose()),[0])*m
761 m_1=spdiags(array(1/rowSum.transpose()),[0],rowSum.shape[0],rowSum.shape[0])*m
763 self.assertAlmostEqual(m_1[0,0],1.,12)
764 self.assertAlmostEqual(m_1[1,0],0.4,12)
765 self.assertAlmostEqual(m_1[1,1],0.6,12)
766 self.assertAlmostEqual(m_1[2,0],0.2,12)
767 self.assertAlmostEqual(m_1[2,1],0.3,12)
768 self.assertAlmostEqual(m_1[2,2],0.2,12)
769 self.assertAlmostEqual(m_1[2,3],0.3,12)
770 self.assertEqual(m_1.getnnz(),7)
773 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy")
774 def testP0P1Bary_1(self):
775 a=MEDCouplingUMesh("a",2)
777 conna=[0,1,3,2,1,4,5,3,4,6,7,5,6,8,9,7,8,10,11,9,10,12,13,11,12,14,15,13,14,16,17,15,16,18,19,17,18,20,21,19,20,22,23,21,22,24,25,23,24,26,27,25]
778 a.setCoords(DataArrayDouble([1.54,0,-0.01,1.54,0.02,-0.01,1.54,0,0.01,1.54,0.02,0.01,1.54,0.04,-0.01,1.54,0.04,0.01,1.54,0.06,-0.01,1.54,0.06,0.01,1.54,0.08,-0.01,1.54,0.08,0.01,1.54,0.1,-0.01,1.54,0.1,0.01,1.54,0.12,-0.01,1.54,0.12,0.01,1.54,0.14,-0.01,1.54,0.14,0.01,1.54,0.16,-0.01,1.54,0.16,0.01,1.54,0.18,-0.01,1.54,0.18,0.01,1.54,0.2,-0.01,1.54,0.2,0.01,1.54,0.22,-0.01,1.54,0.22,0.01,1.54,0.24,-0.01,1.54,0.24,0.01,1.54,0.26,-0.01,1.54,0.26,0.01],28,3))
780 a.insertNextCell(NORM_QUAD4,conna[4*i:4*(i+1)])
782 a.finishInsertingCells() ; a.simplexize(0)
784 connb=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,0,2,39,3,5,40,6,8,41,9,11,42,12,14,43,15,17,44,18,20,45,21,23,46,24,26,47,27,29,48,30,32,49,33,35,50,36,38,51,52,2,39,53,5,40,54,8,41,55,11,42,56,14,43,57,17,44,58,20,45,59,23,46,60,26,47,61,29,48,62,32,49,63,35,50,64,38,51,52,2,65,53,5,66,54,8,67,55,11,68,56,14,69,57,17,70,58,20,71,59,23,72,60,26,73,61,29,74,62,32,75,63,35,76,64,38,77,53,2,65,54,5,66,55,8,67,56,11,68,57,14,69,58,17,70,59,20,71,60,23,72,61,26,73,62,29,74,63,32,75,64,35,76,78,38,77,53,2,40,54,5,41,55,8,42,56,11,43,57,14,44,58,17,45,59,20,46,60,23,47,61,26,48,62,29,49,63,32,50,64,35,51,78,38,79,3,2,40,6,5,41,9,8,42,12,11,43,15,14,44,18,17,45,21,20,46,24,23,47,27,26,48,30,29,49,33,32,50,36,35,51,80,38,79,3,2,1,6,5,4,9,8,7,12,11,10,15,14,13,18,17,16,21,20,19,24,23,22,27,26,25,30,29,28,33,32,31,36,35,34,80,38,37]
785 b=MEDCouplingUMesh("b",2)
787 for i in xrange(104):
788 b.insertNextCell(NORM_TRI3,connb[3*i:3*(i+1)])
790 b.setCoords(DataArrayDouble([1.54,0,-0.01,1.54,0.01,-0.01,1.54,0.01,0,1.54,0.02,-0.01,1.54,0.03,-0.01,1.54,0.03,0,1.54,0.04,-0.01,1.54,0.05,-0.01,1.54,0.05,0,1.54,0.06,-0.01,1.54,0.07,-0.01,1.54,0.07,0,1.54,0.08,-0.01,1.54,0.09,-0.01,1.54,0.09,0,1.54,0.1,-0.01,1.54,0.11,-0.01,1.54,0.11,0,1.54,0.12,-0.01,1.54,0.13,-0.01,1.54,0.13,0,1.54,0.14,-0.01,1.54,0.15,-0.01,1.54,0.15,0,1.54,0.16,-0.01,1.54,0.17,-0.01,1.54,0.17,0,1.54,0.18,-0.01,1.54,0.19,-0.01,1.54,0.19,0,1.54,0.2,-0.01,1.54,0.21,-0.01,1.54,0.21,0,1.54,0.22,-0.01,1.54,0.23,-0.01,1.54,0.23,0,1.54,0.24,-0.01,1.54,0.25,-0.01,1.54,0.25,0,1.54,0,0,1.54,0.02,0,1.54,0.04,0,1.54,0.06,0,1.54,0.08,0,1.54,0.1,0,1.54,0.12,0,1.54,0.14,0,1.54,0.16,0,1.54,0.18,0,1.54,0.2,0,1.54,0.22,0,1.54,0.24,0,1.54,0,0.01,1.54,0.02,0.01,1.54,0.04,0.01,1.54,0.06,0.01,1.54,0.08,0.01,1.54,0.1,0.01,1.54,0.12,0.01,1.54,0.14,0.01,1.54,0.16,0.01,1.54,0.18,0.01,1.54,0.2,0.01,1.54,0.22,0.01,1.54,0.24,0.01,1.54,0.01,0.01,1.54,0.03,0.01,1.54,0.05,0.01,1.54,0.07,0.01,1.54,0.09,0.01,1.54,0.11,0.01,1.54,0.13,0.01,1.54,0.15,0.01,1.54,0.17,0.01,1.54,0.19,0.01,1.54,0.21,0.01,1.54,0.23,0.01,1.54,0.25,0.01,1.54,0.26,0.01,1.54,0.26,0,1.54,0.26,-0.01],81,3))
792 rem=MEDCouplingRemapper() ; rem.setIntersectionType(Barycentric)
793 rem.prepare(a,b,"P1P0")
794 m0=rem.getCrudeCSRMatrix()
795 self.assertEqual(m0.nnz,312)
797 ids=4*[None] ; vs=4*[None]
798 ids[0]=DataArrayInt([0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,158,161,164,167,170,173,176,179,182,185,188,191,194,197,200,203,206,209,212,215,218,221,224,227,230,233]) ; vs[0]=10./3.
799 ids[1]=DataArrayInt([1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35,37,38,40,41,43,44,46,47,49,50,52,53,55,56,58,59,61,62,64,65,67,68,70,71,73,74,76,77,80,83,86,89,92,95,98,101,104,107,110,113,116,117,120,123,126,129,132,135,138,141,144,147,150,153,156,157,159,160,162,163,165,166,168,169,171,172,174,175,177,178,180,181,183,184,186,187,189,190,192,193,195,196,198,199,201,202,204,205,207,208,210,211,213,214,216,217,219,220,222,223,225,226,228,229,231,232,234,237,240,243,246,249,252,255,258,261,264,267,270,275,278,281,284,287,290,293,296,299,302,305,308,311]) ; vs[1]=5./6.
800 ids[2]=DataArrayInt([78,81,84,87,90,93,96,99,102,105,108,111,114,119,122,125,128,131,134,137,140,143,146,149,152,155,236,239,242,245,248,251,254,257,260,263,266,269,272,273,276,279,282,285,288,291,294,297,300,303,306,309]) ; vs[2]=5./3.
801 ids[3]=DataArrayInt([79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307,310]) ; vs[3]=2.5
802 vals=DataArrayDouble(312,1)
803 for idd,v in zip(ids,vs):
807 eps0=DataArrayDouble(m0.data)-vals ; eps0.abs()
808 self.assertTrue(eps0.findIdsInRange(1e-17,1e300).empty())
809 self.assertTrue(DataArrayInt(m0.indices).isEqual(DataArrayInt([0,1,3,1,4,5,4,6,7,6,8,9,8,10,11,10,12,13,12,14,15,14,16,17,16,18,19,18,20,21,20,22,23,22,24,25,24,26,27,0,2,3,1,3,5,4,5,7,6,7,9,8,9,11,10,11,13,12,13,15,14,15,17,16,17,19,18,19,21,20,21,23,22,23,25,24,25,27,0,2,3,1,3,5,4,5,7,6,7,9,8,9,11,10,11,13,12,13,15,14,15,17,16,17,19,18,19,21,20,21,23,22,23,25,24,25,27,0,2,3,1,3,5,4,5,7,6,7,9,8,9,11,10,11,13,12,13,15,14,15,17,16,17,19,18,19,21,20,21,23,22,23,25,24,25,27,0,2,3,1,3,5,4,5,7,6,7,9,8,9,11,10,11,13,12,13,15,14,15,17,16,17,19,18,19,21,20,21,23,22,23,25,24,25,27,0,1,3,1,4,5,4,6,7,6,8,9,8,10,11,10,12,13,12,14,15,14,16,17,16,18,19,18,20,21,20,22,23,22,24,25,24,26,27,0,1,3,1,4,5,4,6,7,6,8,9,8,10,11,10,12,13,12,14,15,14,16,17,16,18,19,18,20,21,20,22,23,22,24,25,24,26,27,0,1,3,1,4,5,4,6,7,6,8,9,8,10,11,10,12,13,12,14,15,14,16,17,16,18,19,18,20,21,20,22,23,22,24,25,24,26,27])))
810 self.assertTrue(DataArrayInt(m0.indptr).isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312])))
812 rem2=MEDCouplingRemapper() ; rem2.setIntersectionType(Barycentric)
813 rem2.prepare(b,a,"P0P1")
814 m1=rem2.getCrudeCSRMatrix()
815 self.assertEqual(m1.nnz,312)
817 m1=rem2.getCrudeCSRMatrix()
820 self.assertTrue(DataArrayDouble(delta.data).isUniform(0.,1e-17))
823 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy")
824 def testNonConformWithRemapper_1(self):
825 coo=DataArrayDouble([-0.396700000780411,-0.134843245350081,-0.0361311386958691,-0.407550009429364,-0.13484324535008,-0.0361311386958923,-0.396700000780411,-0.132191446077668,-0.0448729493559049,-0.407550009429364,-0.132191446077666,-0.0448729493559254,-0.396700000780411,-0.128973582738749,-0.0534226071577727,-0.407550009429364,-0.128973582738747,-0.0534226071577904,-0.396700000780411,-0.128348829636458,-0.0346583696473619,-0.407550009429364,-0.128348829636457,-0.0346583696473822,-0.396700000780411,-0.125874740261886,-0.0430683597970123,-0.407550009429364,-0.125874740261885,-0.0430683597970302,-0.396700000780411,-0.122905344829122,-0.051310216195766,-0.407550009429364,-0.12290534482912,-0.0513102161957814],12,3)
826 conn=DataArrayInt([2,9,3,11,2,3,5,11,2,8,9,11,2,10,8,11,2,5,4,11,2,4,10,11,3,0,1,6,3,1,7,6,3,2,0,6,3,8,2,6,3,7,9,6,3,9,8,6])
827 m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4)
828 m.setNodalConnectivity(conn)
831 m1,d,di,rd,rdi=m.buildUnstructured().buildDescendingConnectivity()
832 rdi2=rdi.deltaShiftIndex()
833 cellIds=rdi2.findIdsEqual(1)
834 skinAndNonConformCells=m1[cellIds]
835 skinAndNonConformCells.zipCoords() # at this point skinAndNonConformCells contains non conform cells and skin cells. Now trying to split them in two parts.
837 rem=MEDCouplingRemapper()
838 rem.setMaxDistance3DSurfIntersect(1e-12)
839 rem.setMinDotBtwPlane3DSurfIntersect(0.99)# this line is important it is to tell to remapper to select only cells with very close orientation
840 rem.prepare(skinAndNonConformCells,skinAndNonConformCells,"P0P0")
841 mat=rem.getCrudeCSRMatrix()
842 indptr=DataArrayInt(mat.indptr)
843 indptr2=indptr.deltaShiftIndex()
844 cellIdsOfNonConformCells=indptr2.findIdsNotEqual(1)
845 cellIdsOfSkin=indptr2.findIdsEqual(1)
846 self.assertTrue(cellIdsOfSkin.isEqual(DataArrayInt([1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23])))
847 self.assertTrue(cellIdsOfNonConformCells.isEqual(DataArrayInt([0,4,18,22])))
850 def test3D1DOnP1P0_1(self):
851 """ This test focused on P1P0 interpolation with a source with meshDim=1 spaceDim=3 and a target with meshDim=3.
852 This test has revealed a bug in remapper. A reverse matrix is computed so a reverse method should be given in input.
854 target=MEDCouplingCMesh()
855 arrX=DataArrayDouble([0,1]) ; arrY=DataArrayDouble([0,1]) ; arrZ=DataArrayDouble(11) ; arrZ.iota()
856 target.setCoords(arrX,arrY,arrZ)
857 target=target.buildUnstructured() ; target.setName("TargetSecondaire")
859 sourceCoo=DataArrayDouble([(0.5,0.5,0.1),(0.5,0.5,1.2),(0.5,0.5,1.6),(0.5,0.5,1.8),(0.5,0.5,2.43),(0.5,0.5,2.55),(0.5,0.5,4.1),(0.5,0.5,4.4),(0.5,0.5,4.9),(0.5,0.5,5.1),(0.5,0.5,7.6),(0.5,0.5,7.7),(0.5,0.5,8.2),(0.5,0.5,8.4),(0.5,0.5,8.6),(0.5,0.5,8.8),(0.5,0.5,9.2),(0.5,0.5,9.6),(0.5,0.5,11.5)])
860 source=MEDCoupling1SGTUMesh("SourcePrimaire",NORM_SEG2)
861 source.setCoords(sourceCoo)
862 source.allocateCells()
863 for i in xrange(len(sourceCoo)-1):
864 source.insertNextCell([i,i+1])
866 source=source.buildUnstructured()
867 fsource=MEDCouplingFieldDouble(ON_NODES) ; fsource.setName("field")
868 fsource.setMesh(source)
869 arr=DataArrayDouble(len(sourceCoo)) ; arr.iota(0.7) ; arr*=arr
870 fsource.setArray(arr)
871 fsource.setNature(IntensiveMaximum)
873 rem=MEDCouplingRemapper()
874 rem.setIntersectionType(PointLocator)
875 rem.prepare(source,target,"P1P0")
876 f2Test=rem.transferField(fsource,-27)
877 self.assertEqual(f2Test.getName(),fsource.getName())
878 self.assertEqual(f2Test.getMesh().getHiddenCppPointer(),target.getHiddenCppPointer())
879 expArr=DataArrayDouble([0.49,7.956666666666667,27.29,-27,59.95666666666667,94.09,-27,125.69,202.89,296.09])
880 self.assertTrue(f2Test.getArray().isEqual(expArr,1e-12))
881 f2Test=rem.reverseTransferField(f2Test,-36)
882 self.assertEqual(f2Test.getName(),fsource.getName())
883 self.assertEqual(f2Test.getMesh().getHiddenCppPointer(),source.getHiddenCppPointer())
884 expArr2=DataArrayDouble([0.49,7.956666666666667,7.956666666666667,7.956666666666667,27.29,27.29,59.95666666666667,59.95666666666667,59.95666666666667,94.09,125.69,125.69,202.89,202.89,202.89,202.89,296.09,296.09,-36.])
885 self.assertTrue(f2Test.getArray().isEqual(expArr2,1e-12))
888 def testRemapperAMR1(self):
889 """ This test is the origin of the ref values for MEDCouplingBasicsTest.testAMR2"""
890 coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
891 fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
892 MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
894 m=MEDCouplingCartesianAMRMesh("mesh",2,[6,8],[0.,0.],[1.,1.])
895 trgMesh=m.buildUnstructured()
896 m.addPatch([(1,4),(2,4)],[4,4])
897 srcMesh=m[0].getMesh().buildUnstructured()
898 srcField=MEDCouplingFieldDouble(ON_CELLS)
899 fine2=DataArrayDouble(3*2*4*4) ; fine2.iota(0) ; srcField.setArray(fine2)
900 srcField.setMesh(srcMesh) ; srcField.setNature(ExtensiveMaximum)
902 trgField=MEDCouplingFieldDouble(ON_CELLS)
903 coarse2=DataArrayDouble(35) ; coarse2.iota(0) ; trgField.setArray(coarse2)
904 trgField.setMesh(trgMesh) ; trgField.setNature(ExtensiveMaximum)
906 rem=MEDCouplingRemapper()
907 rem.prepare(srcMesh,trgMesh,"P0P0")
908 rem.partialTransfer(srcField,trgField)
910 self.assertTrue(coarse.isEqual(trgField.getArray(),1e-12))
913 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy")
914 def test1DPointLocator1(self):
915 """This test focuses on PointLocator for P1P1 in 1D and 2DCurve."""
916 from numpy import array
917 from scipy.sparse import diags,csr_matrix,identity
919 arrS=DataArrayInt.Range(0,11,1).convertToDblArr()
920 arrT=DataArrayDouble([0.1,1.7,5.5,9.6])
921 mS=MEDCouplingCMesh() ; mS.setCoords(arrS)
922 mT=MEDCouplingCMesh() ; mT.setCoords(arrT)
923 rem=MEDCouplingRemapper()
924 rem.setIntersectionType(PointLocator)
925 self.assertEqual(rem.prepare(mS.buildUnstructured(),mT.buildUnstructured(),"P1P1"),1)
926 m=rem.getCrudeCSRMatrix()
928 m=diags(array(1/rowSum.transpose()),[0])*m
930 row=array([0,0,1,1,2,2,3,3])
931 col=array([0,1,1,2,5,6,9,10])
932 data=array([0.9,0.1,0.3,0.7,0.5,0.5,0.4,0.6])
933 mExp0=csr_matrix((data,(row,col)),shape=(4,11))
934 # compute diff and check
936 self.assertAlmostEqual(diff.sum(),0.,14)
937 ## full specific case 1D where target=source
938 rem=MEDCouplingRemapper()
939 rem.setIntersectionType(PointLocator)
940 self.assertEqual(rem.prepare(mS.buildUnstructured(),mS.buildUnstructured(),"P1P1"),1)
941 m=rem.getCrudeCSRMatrix()
943 m=diags(array(1/rowSum.transpose()),[0])*m
947 self.assertAlmostEqual(diff.sum(),0.,14)
948 ## case where some points in target are not in source
949 arrT=DataArrayDouble([-0.2,0.1,1.7,5.5,10.3])
950 mT=MEDCouplingCMesh() ; mT.setCoords(arrT)
951 mT=mT.buildUnstructured()
952 rem=MEDCouplingRemapper()
953 rem.setIntersectionType(PointLocator)
954 self.assertEqual(rem.prepare(mS.buildUnstructured(),mT,"P1P1"),1)
955 m=rem.getCrudeCSRMatrix()
956 row=array([1,1,2,2,3,3])
957 col=array([0,1,1,2,5,6])
958 data=array([0.9,0.1,0.3,0.7,0.5,0.5])
959 mExp2=csr_matrix((data,(row,col)),shape=(5,11))
961 self.assertAlmostEqual(diff.sum(),0.,14)
962 ## basic case 2D Curve
963 arrS=DataArrayInt.Range(0,11,1).convertToDblArr()
964 arrT=DataArrayDouble([0.1,1.7,5.5,9.6])
965 mS=MEDCouplingCMesh() ; mS.setCoords(arrS)
966 mT=MEDCouplingCMesh() ; mT.setCoords(arrT)
967 mS=mS.buildUnstructured() ; mS.changeSpaceDimension(2)
968 mT=mT.buildUnstructured() ; mT.changeSpaceDimension(2)
969 mS.rotate([-1.,-1.],1.2)
970 mT.rotate([-1.,-1.],1.2)
971 rem=MEDCouplingRemapper()
972 rem.setIntersectionType(PointLocator)
973 self.assertEqual(rem.prepare(mS,mT,"P1P1"),1)
974 m=rem.getCrudeCSRMatrix()
976 m=diags(array(1/rowSum.transpose()),[0])*m
978 self.assertAlmostEqual(diff.sum(),0.,14)
981 def test3D2Dand2D3DPointLocator1(self):
982 """ Non regression test solving SIGSEGV when using 3D<->3Dsurf pointlocator."""
983 arrX=DataArrayDouble([0,1,2])
984 arrY=DataArrayDouble([0,1])
985 arrZ=DataArrayDouble([0,1])
986 ms=MEDCouplingCMesh() ; ms.setCoords(arrX,arrY,arrZ)
987 ms=ms.buildUnstructured() ; ms.setName("source")
989 mt=MEDCouplingUMesh("target",2) ; mt.allocateCells()
990 mt.insertNextCell(NORM_TRI3,[0,4,6])
991 mt.insertNextCell(NORM_TRI3,[1,5,7])
992 mt.setCoords(ms.getCoords()[:])
995 rem=MEDCouplingRemapper()
996 rem.setIntersectionType(PointLocator)
997 rem.prepare(ms,mt,"P0P0")
998 self.assertEqual(rem.getCrudeMatrix(),[{0: 1.0}, {1: 1.0}])
999 rem2=MEDCouplingRemapper()
1000 rem2.setIntersectionType(PointLocator)
1001 rem2.prepare(mt,ms,"P0P0") # reverse mt<->ms
1002 self.assertEqual(rem2.getCrudeMatrix(),[{0: 1.0}, {1: 1.0}])
1005 def test2D1Dand1D2DPointLocator1(self):
1006 arrX=DataArrayDouble([0,1,2])
1007 arrY=DataArrayDouble([0,1])
1008 ms=MEDCouplingCMesh() ; ms.setCoords(arrX,arrY) ; ms=ms.buildUnstructured()
1009 mt=MEDCouplingUMesh("target",1) ; mt.setCoords(ms.getCoords()[:])
1011 mt.insertNextCell(NORM_SEG2,[0,4]) ; mt.insertNextCell(NORM_SEG2,[1,5])
1012 rem=MEDCouplingRemapper()
1013 rem.setIntersectionType(PointLocator)
1014 rem.prepare(ms,mt,"P0P0")
1015 self.assertEqual(rem.getCrudeMatrix(),[{0:1.},{1:1.}])
1016 rem=MEDCouplingRemapper()
1017 rem.setIntersectionType(PointLocator)
1018 rem.prepare(mt,ms,"P0P0")
1019 self.assertEqual(rem.getCrudeMatrix(),[{0:1.},{1:1.}])
1022 def testExtrudedOnDiffZLev1(self):
1023 """Non regression bug : This test is base on P0P0 ExtrudedExtruded. This test checks that if the input meshes are not based on a same plane // OXY the interpolation works"""
1024 arrX=DataArrayDouble([0,1]) ; arrY=DataArrayDouble([0,1]) ; arrZ=DataArrayDouble([0,1,2])
1025 src=MEDCouplingCMesh() ; src.setCoords(arrX,arrY,arrZ)
1026 arrX=DataArrayDouble([0.5,1.5]) ; arrY=DataArrayDouble([0.5,1.5]) ; arrZ=DataArrayDouble([0.5,2])
1027 trg=MEDCouplingCMesh() ; trg.setCoords(arrX,arrY,arrZ)
1029 src=MEDCouplingMappedExtrudedMesh(src) ; trg=MEDCouplingMappedExtrudedMesh(trg)
1030 pt1=src.getMesh2D().getCoords().getHiddenCppPointer() ; pt2=trg.getMesh2D().getCoords().getHiddenCppPointer()
1032 rem=MEDCouplingRemapper()
1033 rem.prepare(src,trg,"P0P0")
1034 self.checkMatrix(rem.getCrudeMatrix(),[{0:0.125,1:0.25}],src.getNumberOfCells(),1e-12)
1036 self.assertEqual(src.getMesh2D().getSpaceDimension(),3)
1037 self.assertEqual(trg.getMesh2D().getSpaceDimension(),3)
1038 self.assertEqual(src.getMesh2D().getCoords().getHiddenCppPointer(),pt1)
1039 self.assertEqual(trg.getMesh2D().getCoords().getHiddenCppPointer(),pt2)
1041 rem2=MEDCouplingRemapper()
1042 rem2.setIntersectionType(Geometric2D)
1043 rem2.prepare(src,trg,"P0P0")
1044 self.checkMatrix(rem2.getCrudeMatrix(),[{0:0.125,1:0.25}],src.getNumberOfCells(),1e-12)
1047 def checkMatrix(self,mat1,mat2,nbCols,eps):
1048 self.assertEqual(len(mat1),len(mat2))
1049 for i in xrange(len(mat1)):
1050 self.assertTrue(max(mat2[i].keys())<nbCols)
1051 self.assertTrue(max(mat1[i].keys())<nbCols)
1052 self.assertTrue(min(mat2[i].keys())>=0)
1053 self.assertTrue(min(mat1[i].keys())>=0)
1054 s1=set(mat1[i].keys()) ; s2=set(mat2[i].keys())
1055 for elt in s1.intersection(s2):
1056 self.assertTrue(abs(mat1[i][elt]-mat2[i][elt])<eps)
1058 for elt in s1.difference(s2):
1059 self.assertTrue(abs(mat1[i][elt])<eps)
1061 for elt in s2.difference(s1):
1062 self.assertTrue(abs(mat2[i][elt])<eps)
1067 def build2DSourceMesh_1(self):
1068 sourceCoords=[-0.3,-0.3, 0.7,-0.3, -0.3,0.7, 0.7,0.7]
1069 sourceConn=[0,3,1,0,2,3]
1070 sourceMesh=MEDCouplingUMesh.New("my name of mesh 2D",2)
1071 sourceMesh.allocateCells(2);
1072 sourceMesh.insertNextCell(NORM_TRI3,3,sourceConn[0:3]);
1073 sourceMesh.insertNextCell(NORM_TRI3,3,sourceConn[3:6]);
1074 sourceMesh.finishInsertingCells();
1075 myCoords=DataArrayDouble.New();
1076 myCoords.setValues(sourceCoords,4,2);
1077 sourceMesh.setCoords(myCoords);
1080 def build2DTargetMesh_1(self):
1081 targetCoords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ]
1082 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
1083 targetMesh=MEDCouplingUMesh.New();
1084 targetMesh.setMeshDimension(2);
1085 targetMesh.allocateCells(5);
1086 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
1087 targetMesh.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
1088 targetMesh.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
1089 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
1090 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
1091 targetMesh.finishInsertingCells();
1092 myCoords=DataArrayDouble.New();
1093 myCoords.setValues(targetCoords,9,2);
1094 targetMesh.setCoords(myCoords);
1097 def build2DTargetMesh_3(self):
1098 targetCoords=[-0.6,-0.4, -0.1,-0.4, 1.1,-0.4, 2.1,-0.4, -0.6,0.1, -0.1,0.1, 1.1,0.1, 2.1,0.1, -0.6,1.1, -0.1,1.1]
1099 targetConn=[0,4,5,1, 1,5,6,2, 2,6,7,3, 4,8,9,5]
1100 targetMesh=MEDCouplingUMesh.New();
1101 targetMesh.setMeshDimension(2);
1102 targetMesh.allocateCells(4);
1104 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[4*i:4*(i+1)])
1106 targetMesh.finishInsertingCells();
1107 myCoords=DataArrayDouble.New();
1108 myCoords.setValues(targetCoords,10,2);
1109 targetMesh.setCoords(myCoords);
1117 if __name__ == "__main__":