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.assertTrue(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 range(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 range(targetMesh.getNumberOfCells()):
56 self.assertTrue(abs(values[i]-valuesExpected[i])<1e-12);
58 self.assertTrue(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 range(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 range(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 range(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(list(mat1[0].keys()),list(mat2[0].keys())) ; self.assertEqual([0,1],list(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(False)
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)
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 range(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 test3D1DPointLocatorBBoxAdjusted(self):
1023 """ In case a 1D segment lies exactly on the interface between two 2D (or 3D) faces, the default
1024 bounding box logic will make it non-intersecting with the surrounding 2D (or 3D) faces.
1025 Test bounding box adjustment allowing to widen the BB to capture this.
1027 m = MEDCouplingCMesh("source")
1028 di, dd = DataArrayInt, DataArrayDouble
1029 m.setCoordsAt(0, dd([0.0, 1.0, 2.0]))
1030 m.setCoordsAt(1, dd([0.0, 1.0]))
1031 m.setCoordsAt(2, dd([0.0, 1.0]))
1032 m3d = m.buildUnstructured()
1033 m1d = MEDCouplingUMesh("target", 1)
1034 m1d.setCoords(dd([1.0,0.5,0.2 , 1.0,0.5,0.8], 2,3))
1035 m1d.setConnectivity(di([NORM_SEG2, 0, 1]), di([0,3]))
1037 rem = MEDCouplingRemapper()
1038 rem.setPrecision(1e-12)
1039 rem.setIntersectionType(PointLocator)
1040 rem.prepare(m3d, m1d,"P0P1")
1041 self.assertEqual(rem.getCrudeMatrix(), [{0: 1.0, 1: 1.0}, {0: 1.0, 1: 1.0}])
1043 rem = MEDCouplingRemapper()
1044 rem.setPrecision(1e-12)
1045 rem.setIntersectionType(PointLocator)
1046 rem.setBoundingBoxAdjustment(0.0)
1047 rem.setBoundingBoxAdjustmentAbs(0.0)
1048 rem.prepare(m3d, m1d,"P0P1")
1049 self.assertEqual(rem.getCrudeMatrix(), [{}, {}])
1052 def testPointLocator3DTo2D(self):
1053 """Target mesh has spaceDim==3 and meshDim==2. Source has spaceDim==3 and meshDim==3. Here we are on pointlocator alg.
1054 The test evaluates on each nodes of target mesh the bary coor into source mesh."""
1055 src=MEDCouplingCMesh()
1056 arr=DataArrayDouble([0,1,2])
1057 src.setCoords(arr,arr,arr)
1058 src=src.buildUnstructured()
1059 src.simplexize(PLANAR_FACE_5)
1060 fsrc=MEDCouplingFieldDouble(ON_NODES) ; fsrc.setMesh(src)
1061 fsrc.setArray(DataArrayDouble([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]))
1063 trg=MEDCouplingCMesh()
1064 arr=DataArrayDouble([0,1])
1065 trg.setCoords(arr,arr)
1066 trg=trg.buildUnstructured()
1067 trg.changeSpaceDimension(3,0.)
1068 trg.translate([0.5,0.5,0.5])
1070 arrTrg=fsrc.getValueOnMulti(trg.getCoords())
1071 ftrg=MEDCouplingFieldDouble(ON_NODES)
1073 ftrg.setArray(arrTrg)
1074 ftrg.checkConsistencyLight()
1075 ftrg.setNature(IntensiveMaximum)
1077 fsrc.setNature(IntensiveMaximum)
1078 remap=MEDCouplingRemapper()
1079 remap.setIntersectionType(PointLocator)
1080 self.assertEqual(remap.prepare(src,trg,"P1P1"),1)
1081 ftrg2=remap.transferField(fsrc,1e300)
1082 self.assertTrue(ftrg.isEqual(ftrg2,1e-12,1e-12))
1085 def testExtrudedOnDiffZLev1(self):
1086 """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"""
1087 arrX=DataArrayDouble([0,1]) ; arrY=DataArrayDouble([0,1]) ; arrZ=DataArrayDouble([0,1,2])
1088 src=MEDCouplingCMesh() ; src.setCoords(arrX,arrY,arrZ)
1089 arrX=DataArrayDouble([0.5,1.5]) ; arrY=DataArrayDouble([0.5,1.5]) ; arrZ=DataArrayDouble([0.5,2])
1090 trg=MEDCouplingCMesh() ; trg.setCoords(arrX,arrY,arrZ)
1092 src=MEDCouplingMappedExtrudedMesh(src) ; trg=MEDCouplingMappedExtrudedMesh(trg)
1093 pt1=src.getMesh2D().getCoords().getHiddenCppPointer() ; pt2=trg.getMesh2D().getCoords().getHiddenCppPointer()
1095 rem=MEDCouplingRemapper()
1096 rem.prepare(src,trg,"P0P0")
1097 self.checkMatrix(rem.getCrudeMatrix(),[{0:0.125,1:0.25}],src.getNumberOfCells(),1e-12)
1099 self.assertEqual(src.getMesh2D().getSpaceDimension(),3)
1100 self.assertEqual(trg.getMesh2D().getSpaceDimension(),3)
1101 self.assertEqual(src.getMesh2D().getCoords().getHiddenCppPointer(),pt1)
1102 self.assertEqual(trg.getMesh2D().getCoords().getHiddenCppPointer(),pt2)
1104 rem2=MEDCouplingRemapper()
1105 rem2.setIntersectionType(Geometric2D)
1106 rem2.prepare(src,trg,"P0P0")
1107 self.checkMatrix(rem2.getCrudeMatrix(),[{0:0.125,1:0.25}],src.getNumberOfCells(),1e-12)
1110 def testP0P0WithHEXGP12(self):
1111 """ Test that HEXGP12 are correctly remapped (elements with polygonal faces were not properly handled) """
1112 # From Astrid, two disjoint hexagonal prisms:
1113 coo1 = [-4.991193077144312, 8.644999999999998, 0.0, -9.982386154288623, 6.112246755425186e-16, 0.0, -4.991193077144315, -8.644999999999998, 0.0, 4.991193077144309, -8.645000000000005, 0.0, 9.982386154288626, 1.1651321638577316e-15, 0.0, 4.991193077144314, 8.645, 0.0, -4.991193077144312, 8.644999999999998, 7.561799999999991, -9.982386154288623, 6.112246755425186e-16, 7.561799999999991, -4.991193077144315, -8.644999999999998, 7.561799999999991, 4.991193077144309, -8.645000000000005, 7.561799999999991, 9.982386154288626, 1.1651321638577316e-15, 7.561799999999991, 4.991193077144314, 8.645, 7.561799999999991]
1114 coo2 = [-4.991193077144313, -8.645, 0.0, -9.982386154288626, -1.3992140779350848e-15, 0.0, -19.964772308577256, 0.0, 0.0, -24.95596538572157, -8.644999999999998, 0.0, -19.96477230857726, -17.289999999999996, 0.0, -9.982386154288626, -17.289999999999996, 0.0, -4.991193077144313, -8.645, 5.041200000000004, -9.982386154288626, -1.3992140779350848e-15, 5.041200000000004, -19.964772308577256, 0.0, 5.041200000000004, -24.95596538572157, -8.644999999999998, 5.041200000000004, -19.96477230857726, -17.289999999999996, 5.041200000000004, -9.982386154288626, -17.289999999999996, 5.041200000000004]
1115 conn1 = [31, 0, 5, 4, 3, 2, 1, -1, 11, 6, 7, 8, 9, 10, -1, 1, 7, 6, 0, -1, 2, 8, 7, 1, -1, 3, 9, 8, 2, -1, 4, 10, 9, 3, -1, 5, 11, 10, 4, -1, 0, 6, 11, 5]
1117 conn2 = [31, 0, 5, 4, 3, 2, 1, -1, 6, 7, 8, 9, 10, 11, -1, 0, 1, 7, 6, -1, 1, 2, 8, 7, -1, 2, 3, 9, 8, -1, 3, 4, 10, 9, -1, 4, 5, 11, 10, -1, 5, 0, 6, 11]
1119 mTgt = MEDCouplingUMesh("target", 3)
1120 mSrc = MEDCouplingUMesh("src", 3)
1121 mTgt.setCoords(DataArrayDouble(coo1, len(coo1) // 3, 3))
1122 mSrc.setCoords(DataArrayDouble(coo2, len(coo2) // 3, 3))
1123 mTgt.setConnectivity(DataArrayInt(conn1), DataArrayInt(cI1))
1124 mSrc.setConnectivity(DataArrayInt(conn2), DataArrayInt(cI2))
1126 # Recognize the HEXGP12:
1130 rmp = MEDCouplingRemapper()
1131 rmp.setIntersectionType(Triangulation)
1132 rmp.prepare(mSrc, mTgt, "P0P0")
1133 mat = rmp.getCrudeMatrix()
1134 self.assertEqual(len(mat[0]), 0)
1135 self.assertEqual(len(mat), 1)
1138 def testP0P0KillerTet(self):
1139 """ The killer tetrahedron detected by LMEC!"""
1140 mesh = MEDCouplingUMesh('SupportOf_ECHIA1_Tin', 3)
1142 # coo = DataArrayDouble([(-4.50135,1.95352,4.59608),(-4.50409,1.86642,4.54551), (-4.55175,1.92167,4.64844),(-4.58813,1.94795,4.5283)])
1144 coo = DataArrayDouble([(-4.501352938826142847,1.953517433537110159,4.596082552008083688),(-4.504092113061189728,1.866415526007169978,4.545507396150389567),(-4.551750368181751050,1.921669328035479962,4.648439577911889664),(-4.588131417812300050,1.947948377683889953,4.528298931319220344)])
1146 c = DataArrayInt([14, 2, 0, 3, 1]); cI = DataArrayInt([0, 5])
1147 mesh.setConnectivity(c, cI)
1148 mesh_src, mesh_tgt = mesh.deepCopy(), mesh.deepCopy()
1149 field_src = mesh_src.fillFromAnalytic(ON_CELLS, 1, "1")
1150 field_src.setNature(IntensiveMaximum)
1151 rmp = MEDCouplingRemapper()
1152 rmp.setIntersectionType(Triangulation)
1153 rmp.prepare(mesh_src, mesh_tgt, "P0P0")
1154 self.assertEqual(1, len(rmp.getCrudeMatrix()))
1155 self.assertEqual(1, len(rmp.getCrudeMatrix()[0]))
1158 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy AND C++11")
1159 def testP1P1PL3DSpaceFrom1DTo0D(self):
1160 from scipy.sparse import csr_matrix
1161 from numpy import array
1163 def generateTrg(eps):
1164 trgArr=DataArrayDouble([(0.5,0.5,0.5),(0.2,0.2,0.2),(0.9,0.9,0.9),(0.7+eps*sqrt(3),0.7-eps*sqrt(3),0.7)])
1165 trg=MEDCouplingUMesh("trg",0) ; trg.setCoords(trgArr)
1169 trg.insertNextCell(NORM_POINT1,[rt])
1172 srcArr=DataArrayDouble([(0.,0.,1.),(0.,0.,0.),(1.,1.,1.)])
1173 src=MEDCouplingUMesh("src",1) ; src.setCoords(srcArr)
1175 src.insertNextCell(NORM_SEG2,[1,2])
1177 trg=generateTrg(1e-7)# trg point 3 of trg cell 1 is NOT closer enough to source edge #1 -> not intercepted
1179 rem=MEDCouplingRemapper()
1180 rem.setIntersectionType(PointLocator)
1181 self.assertEqual(rem.prepare(src,trg,"P1P1"),1)
1182 mat=rem.getCrudeCSRMatrix()
1183 row=array([2,2, 0,0, 1,1]) # here no ref to point 3 !
1184 col=array([1,2, 1,2, 1,2])
1185 data=array([0.1,0.9, 0.5,0.5, 0.8,0.2])
1186 mExp=csr_matrix((data,(row,col)),shape=(4,3))
1188 self.assertAlmostEqual(delta.sum(),0.,14)
1190 trg=generateTrg(1e-14) # trg point 3 of trg cell 1 is closer enough to source edge #1 -> intercepted
1191 rem=MEDCouplingRemapper()
1192 rem.setIntersectionType(PointLocator)
1193 self.assertEqual(rem.prepare(src,trg,"P1P1"),1)
1194 mat=rem.getCrudeCSRMatrix()
1195 row=array([2,2, 3,3, 0,0, 1,1]) # here ref to target point 3
1196 col=array([1,2, 1,2, 1,2, 1,2])
1197 data=array([0.1,0.9, 0.3,0.7, 0.5,0.5, 0.8,0.2])
1198 mExp2=csr_matrix((data,(row,col)),shape=(4,3))
1199 delta2=abs(mExp2-mat)
1200 self.assertAlmostEqual(delta2.sum(),0.,14)
1203 def testSetMatrix1(self):
1204 """ Remapper has now setCrudeMatrix method to reload matrix to skip prepare phase """
1205 cooS=DataArrayDouble([1,1, 7,1, 7,2, 1,2],4,2)
1206 cooT=DataArrayDouble([0,0, 3,0, 3,3, 0,3, 6,0, 12,0, 12,3, 6,3],8,2)
1207 ms=MEDCouplingUMesh("source",2) ; ms.allocateCells(1) ; ms.insertNextCell(NORM_QUAD4,[0,1,2,3]) ; ms.setCoords(cooS)
1208 mt=MEDCouplingUMesh("target",2) ; mt.allocateCells(2) ; mt.insertNextCell(NORM_QUAD4,[0,1,2,3]) ; mt.insertNextCell(NORM_QUAD4,[4,5,6,7]) ; mt.setCoords(cooT)
1209 rem=MEDCouplingRemapper()
1210 self.assertEqual(rem.prepare(ms,mt,"P0P0"),1) # [{0: 2.0}, {0: 1.0}]
1211 fs=MEDCouplingFieldDouble(ON_CELLS)
1213 fs.setArray(DataArrayDouble([10]))
1214 fs.checkConsistencyLight()
1216 fs.setNature(ExtensiveConservation)
1217 self.assertTrue(rem.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([20./3,10./3.]),1e-12))# sum is equal to 10. First value is twice than second value
1219 fs.setNature(ExtensiveMaximum)
1220 self.assertTrue(rem.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([20./6.,10./6.]),1e-12))#sum is equal to 5 (10/2. because only half part on input cell is intercepted by the target cells). First value is twice than second value
1222 fs.setNature(IntensiveConservation)
1223 self.assertTrue(rem.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([2./9.*10.,1./18.*10.]),1e-12))#
1225 fs.setNature(IntensiveMaximum)
1226 self.assertTrue(rem.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([10.,10.]),1e-12))#
1228 rem2=MEDCouplingRemapper()
1229 rem2.setCrudeMatrix(ms,mt,"P0P0",rem.getCrudeMatrix())
1230 fs.setNature(ExtensiveConservation)
1231 self.assertTrue(rem2.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([20./3,10./3.]),1e-12))
1233 fs.setNature(ExtensiveMaximum)
1234 self.assertTrue(rem2.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([20./6.,10./6.]),1e-12))
1236 fs.setNature(IntensiveConservation)
1237 self.assertTrue(rem2.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([2./9.*10.,1./18.*10.]),1e-12))
1239 fs.setNature(IntensiveMaximum)
1240 self.assertTrue(rem2.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([10.,10.]),1e-12))
1242 srcFt=MEDCouplingFieldTemplate.New(ON_CELLS);
1243 trgFt=MEDCouplingFieldTemplate.New(ON_CELLS);
1246 rem3=MEDCouplingRemapper()
1247 rem3.setCrudeMatrixEx(srcFt,trgFt,rem.getCrudeMatrix())
1248 fs.setNature(ExtensiveConservation)
1249 self.assertTrue(rem3.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([20./3,10./3.]),1e-12))
1252 @unittest.skipUnless(MEDCouplingHasNumPyBindings() and MEDCouplingHasSciPyBindings(),"requires numpy AND scipy")
1253 def testSetMatrix2(self):
1254 """ Remapper has now setCrudeMatrix method to reload matrix to skip prepare phase. Same as testSetMatrix1 but with CSR scipy matrix """
1255 arrx_s=DataArrayDouble(6) ; arrx_s.iota()
1256 arry_s=DataArrayDouble(6) ; arry_s.iota()
1257 ms=MEDCouplingCMesh() ; ms.setCoords(arrx_s,arry_s)
1258 ms=ms.buildUnstructured()
1260 arrx_t=DataArrayDouble([2.5,4.5,5.5])
1261 arry_t=DataArrayDouble([2.5,3.5,5.5])
1262 mt=MEDCouplingCMesh() ; mt.setCoords(arrx_t,arry_t)
1263 mt=mt.buildUnstructured()
1265 rem=MEDCouplingRemapper()
1266 self.assertEqual(rem.prepare(ms,mt,"P0P0"),1)
1268 fs=MEDCouplingFieldDouble(ON_CELLS)
1270 arr=DataArrayDouble(25) ; arr.iota()
1272 fs.checkConsistencyLight()
1274 fs.setNature(ExtensiveConservation)
1275 self.assertTrue(rem.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([54.25,11.75,79.25,16.75]),1e-12))
1276 mat=rem.getCrudeCSRMatrix()
1277 rem2=MEDCouplingRemapper()
1278 rem2.setCrudeMatrix(ms,mt,"P0P0",mat)
1279 self.assertTrue(rem2.transferField(fs,1e300).getArray().isEqual(DataArrayDouble([54.25,11.75,79.25,16.75]),1e-12))
1282 def testSmallTetraCell(self):
1283 """This test is a non regression test. When using tetra/tetra P0P0 interpolation on very small cells the
1284 3x3 matrix in the TetraAffine contains very small values and so the determinant is small (cubic).
1285 So the tetra was detected as flat. Now the infinite norm of matrix is considered to establish if matrix is inversible or not."""
1286 coords = [(-0.019866666666666668, 0.02, 0.002), (-0.020000073463967143, 0.019999926535763005, 0.0018666666666666673), (-0.020000073463967143, 0.019999926535763005, 0.002), (-0.020000072974206463, 0.019866593202430387, 0.002)]
1287 m=MEDCouplingUMesh("mesh",3)
1289 m.insertNextCell(NORM_TETRA4,[0,1,2,3])
1290 m.setCoords(DataArrayDouble(coords))
1291 rem=MEDCouplingRemapper()
1292 rem.setPrecision(1e-12)
1293 rem.prepare(m,m,"P0P0")
1294 mat=rem.getCrudeMatrix()
1295 self.assertTrue(len(mat)==1)
1296 self.assertTrue(len(mat[0])==1)
1297 self.assertTrue(list(mat[0].keys())==[0])
1298 res=list(mat[0].values())[0]
1299 ref=float(m.getMeasureField(True).getArray())
1300 self.assertTrue(abs(res-ref)/ref<1e-12)
1303 def checkMatrix(self,mat1,mat2,nbCols,eps):
1304 self.assertEqual(len(mat1),len(mat2))
1305 for i in range(len(mat1)):
1306 self.assertTrue(max(mat2[i].keys())<nbCols)
1307 self.assertTrue(max(mat1[i].keys())<nbCols)
1308 self.assertTrue(min(mat2[i].keys())>=0)
1309 self.assertTrue(min(mat1[i].keys())>=0)
1310 s1=set(mat1[i].keys()) ; s2=set(mat2[i].keys())
1311 for elt in s1.intersection(s2):
1312 self.assertTrue(abs(mat1[i][elt]-mat2[i][elt])<eps)
1314 for elt in s1.difference(s2):
1315 self.assertTrue(abs(mat1[i][elt])<eps)
1317 for elt in s2.difference(s1):
1318 self.assertTrue(abs(mat2[i][elt])<eps)
1323 def build2DSourceMesh_1(self):
1324 sourceCoords=[-0.3,-0.3, 0.7,-0.3, -0.3,0.7, 0.7,0.7]
1325 sourceConn=[0,3,1,0,2,3]
1326 sourceMesh=MEDCouplingUMesh.New("my name of mesh 2D",2)
1327 sourceMesh.allocateCells(2);
1328 sourceMesh.insertNextCell(NORM_TRI3,3,sourceConn[0:3]);
1329 sourceMesh.insertNextCell(NORM_TRI3,3,sourceConn[3:6]);
1330 sourceMesh.finishInsertingCells();
1331 myCoords=DataArrayDouble.New();
1332 myCoords.setValues(sourceCoords,4,2);
1333 sourceMesh.setCoords(myCoords);
1336 def build2DTargetMesh_1(self):
1337 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 ]
1338 targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
1339 targetMesh=MEDCouplingUMesh.New();
1340 targetMesh.setMeshDimension(2);
1341 targetMesh.allocateCells(5);
1342 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
1343 targetMesh.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
1344 targetMesh.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
1345 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
1346 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
1347 targetMesh.finishInsertingCells();
1348 myCoords=DataArrayDouble.New();
1349 myCoords.setValues(targetCoords,9,2);
1350 targetMesh.setCoords(myCoords);
1353 def build2DTargetMesh_3(self):
1354 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]
1355 targetConn=[0,4,5,1, 1,5,6,2, 2,6,7,3, 4,8,9,5]
1356 targetMesh=MEDCouplingUMesh.New();
1357 targetMesh.setMeshDimension(2);
1358 targetMesh.allocateCells(4);
1360 targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[4*i:4*(i+1)])
1362 targetMesh.finishInsertingCells();
1363 myCoords=DataArrayDouble.New();
1364 myCoords.setValues(targetCoords,10,2);
1365 targetMesh.setCoords(myCoords);
1373 if __name__ == "__main__":