1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2017-2022 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
23 from medcoupling import *
25 from math import pi,e,sqrt,cos,sin
26 from datetime import datetime
27 import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@edf.fr
29 class MEDCouplingBasicsTest6(unittest.TestCase):
30 def testPointSetInvertOrientationOfAllCells(self):
31 """ Test of inversion of orientation of cells on a different geo types"""
33 m=MEDCouplingUMesh("",1)
35 m.insertNextCell(NORM_SEG2,[3,4])
36 m.insertNextCell(NORM_SEG2,[13,14])
37 m.insertNextCell(NORM_SEG3,[5,6,7])
38 m.insertNextCell(NORM_SEG2,[23,24])
39 m.insertNextCell(NORM_SEG3,[8,9,10])
40 ref0=DataArrayInt([0,3,6,10,13,17])
41 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
42 m.invertOrientationOfAllCells()
43 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,4,3, 1,14,13, 2,7,6,5, 1,24,23, 2,10,9,8])))
44 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
48 m=MEDCouplingUMesh("",2)
50 m.insertNextCell(NORM_TRI3,[1,2,3])
51 m.insertNextCell(NORM_QUAD4,[4,5,6,7])
52 m.insertNextCell(NORM_POLYGON,[8,9,10,11,12,13])
53 m.insertNextCell(NORM_TRI6,[14,15,16,17,18,19])
54 m.insertNextCell(NORM_QUAD8,[20,21,22,23,24,25,26,27])
55 m.insertNextCell(NORM_QPOLYG,[30,31,32,33,34,35, 36,37,38,39,40,41])
56 ref0=DataArrayInt([0,4,9,16,23,32,45])
57 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
58 m.invertOrientationOfAllCells()
59 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([3,1,3,2, 4,4,7,6,5, 5,8,13,12,11,10,9, 6,14,16,15,19,18,17, 8,20,23,22,21,27,26,25,24, 32,30,35,34,33,32,31,41,40,39,38,37,36])))
60 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
64 m=MEDCouplingUMesh("",3)
66 m.insertNextCell(NORM_TETRA4,[1,2,3,4])
67 m.insertNextCell(NORM_PYRA5,[5,6,7,8,9])
68 m.insertNextCell(NORM_PENTA6,[10,11,12,13,14,15])
69 m.insertNextCell(NORM_HEXA8,[20,21,22,23,24,25,26,27])
70 m.insertNextCell(NORM_TETRA10,[30,31,32,33,34,35,36,37,38,39])
71 m.insertNextCell(NORM_PYRA13,[40,41,42,43,44,45,46,47,48,49,50,51,52])
72 m.insertNextCell(NORM_HEXA20,[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79])
73 m.insertNextCell(NORM_PENTA15,[80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])
74 ref0=DataArrayInt([0,5,11,18,27,38,52,73,89])
75 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
76 m.invertOrientationOfAllCells()
77 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([14,1,3,2,4, 15,5,8,7,6,9, 16,10,12,11,13,15,14, 18,20,23,22,21,24,27,26,25, 20,30,32,31,33,36,35,34,37,39,38, 23,40,43,42,41,44,48,47,46,45,49,52,51,50, 30,60,63,62,61,64,67,66,65,71,70,69,68,75,74,73,72,76,79,78,77, 25,80,82,81,83,85,84,88,87,86,91,90,89,92,94,93])))
78 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
82 m=MEDCoupling1SGTUMesh("",NORM_SEG2)
83 m.setNodalConnectivity(DataArrayInt([1,2,3,4,5,6,7,8]))
84 self.assertEqual(m.getNumberOfCells(),4)
86 self.assertTrue(m2.isEqual(m,0.))
87 m.invertOrientationOfAllCells()
88 self.assertTrue(not m2.isEqual(m,0.))
89 m.getNodalConnectivity().isEqual(DataArrayInt([2,1,4,3,6,5,8,7]))
90 m.invertOrientationOfAllCells()
91 self.assertTrue(m2.isEqual(m,0.))
93 p=MEDCoupling1DGTUMesh("",NORM_POLYGON)
94 ref0=DataArrayInt([0,3,7,12])
95 p.setNodalConnectivity(DataArrayInt([1,2,3, 10,11,12,13, 20,21,22,23,24]),ref0)
97 self.assertTrue(p2.isEqual(p,0.))
98 self.assertEqual(p.getNumberOfCells(),3)
99 p.invertOrientationOfAllCells()
100 self.assertTrue(not p2.isEqual(p,0.))
101 self.assertTrue(p.getNodalConnectivityIndex().isEqual(ref0))
102 self.assertTrue(p.getNodalConnectivity().isEqual(DataArrayInt([1,3,2, 10,13,12,11, 20,24,23,22,21])))
103 p.invertOrientationOfAllCells()
104 self.assertTrue(p2.isEqual(p,0.))
112 def testPenta18_1(self):
113 arr=DataArrayDouble([
114 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
115 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
116 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
117 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
118 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
119 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
120 m=MEDCouplingUMesh("mesh",3)
123 m.insertNextCell(NORM_PENTA18,list(range(18)))
124 m.checkConsistencyLight()
125 self.assertTrue(m.getMeasureField(True).getArray().isEqual(DataArrayDouble([0.5]),1e-12))
127 f=MEDCouplingFieldDouble(ON_NODES)
129 f.setName("FieldOnPenta18")
130 f.setArray(DataArrayDouble(list(range(18))))
131 f.checkConsistencyLight()
133 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
134 self.assertTrue(m2.getNodalConnectivity().isEqual(DataArrayInt([6,0,1,2,6,7,8,6,3,5,4,11,10,9,9,0,3,4,1,12,9,13,6,15,9,1,4,5,2,13,10,14,7,16,9,2,4,5,0,14,11,12,8,17])))
135 self.assertTrue(m2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14,24,34,44])))
136 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4])))
137 self.assertTrue(di.isEqual(DataArrayInt([0,5])))
138 self.assertTrue(rd.isEqual(DataArrayInt([0,0,0,0,0])))
139 self.assertTrue(rdi.isEqual(DataArrayInt([0,1,2,3,4,5])))
141 f2=MEDCouplingFieldDouble(ON_NODES)
143 f2.setName("FieldOnPenta18Sub")
144 f2.setArray(DataArrayDouble(list(range(18))))
145 f2.checkConsistencyLight()
148 def testSKLAReplaceDeletePacks(self):
149 index=DataArrayInt([0,3,5,6,6])
150 value=DataArrayInt([1,2,3, 2,3, 3 ])
151 sla=MEDCouplingSkyLineArray(index,value)
152 idx=DataArrayInt([0,3])
153 packs=[DataArrayInt([4,5]),DataArrayInt([6,7,8])]
154 sla.replaceSimplePacks(idx,packs)
155 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2,4,5,8])))
156 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([4,5, 2,3, 3, 6,7,8])))
157 sla.deleteSimplePacks(idx)
158 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2,3])))
159 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([2,3, 3])))
160 sla.deleteSimplePack(1)
161 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2])))
162 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([2,3])))
165 def testDADAsArcOfCircle(self):
166 d=DataArrayDouble([3.06915124862645,2.1464466094067824,2.85355345827285,2.3620444674400574,2.637955532559882,2.1464467447661937],3,2)
167 center,radius,ang=d.asArcOfCircle()
168 self.assertTrue((d-center).magnitude().isUniform(radius,1e-10))
169 self.assertAlmostEqual(ang,-4.712389294301196,12)
172 def testDAMaxAbsValue(self):
173 d=DataArrayDouble([-2,3,1.2,-2.9])
174 a,b=d.getMaxAbsValue()
175 self.assertAlmostEqual(a,3.,13)
176 self.assertEqual(b,1)
177 a,b=(-d).getMaxAbsValue()
178 self.assertAlmostEqual(a,-3.,13)
179 self.assertEqual(b,1)
180 self.assertAlmostEqual((-d).getMaxAbsValueInArray(),-3.,13)
183 def testDAIFindIdForEach1(self):
184 a1=DataArrayInt([17,27,2,10,-4,3,12,27,16])
185 b1=DataArrayInt([3,16,-4,27,17])
186 ret=a1.findIdForEach(b1)
187 self.assertTrue(ret.isEqual(DataArrayInt([5,8,4,7,0])))
188 self.assertTrue(a1[ret].isEqual(b1))
189 b2=DataArrayInt([3,16,22,27,17])
190 self.assertRaises(InterpKernelException,a1.findIdForEach,b2) # 22 not in a1 !
192 self.assertRaises(InterpKernelException,a1.findIdForEach,b1) # a1 is not single component
195 def testAttractSeg3MidPtsAroundNodes1(self):
196 """ Test of MEDCouplingUMesh.attractSeg3MidPtsAroundNodes methods """
197 ptsExpToBeModified=DataArrayInt([95,96,97,98,101,103,104,106,108,110])
201 coo=DataArrayDouble([10,0,0,10,10,0,10,0,3.+b,10,0,6.+a,10,10,3.+b,10,10,6.+a,10,3.+b,0,10,6.+a,0,3.+b,0,0,6.+a,0,0,3.+b,10,0,6.+a,10,0,10,3.+b,6.+a,10,6.+a,6.+a,10,3.+b,3.+b,10,6.+a,3.+b,3.+b,0,3.+b,3.+b,0,6.+a,6.+a,0,3.+b,6.+a,0,6.+a,6.+a,10,3.+b,6.+a,10,6.+a,3.+b,10,3.+b,3.+b,10,6.+a,3.+b,3.+b,0,6.+a,3.+b,0,3.+b,6.+a,0,6.+a,6.+a,0,3.+b,3.+b,6.+a,6.+a,3.+b,6.+a,3.+b,6.+a,6.+a,6.+a,6.+a,6.+a,3.+b,3.+b,3.+b,6.+a,3.+b,3.+b,3.+b,6.+a,3.+b,6.+a,6.+a,3.+b,10,0,1.+a,10,0,5.,10,10,1.+a,10,10,5.,10,1.+a,0,10,5.,0,10,8.+b,0,5.,0,0,8.+b,0,0,5.,10,0,8.+b,10,0,10,1.+a,6.+a,10,5.,6.+a,10,8.+b,6.+a,10,1.+a,3.+b,10,3.+b,5.,10,5.,3.+b,10,6.+a,5.,10,8.+b,3.+b,10,3.+b,1.+a,10,6.+a,1.+a,3.+b,0,1.+a,3.+b,0,5.,6.+a,0,1.+a,5.,0,3.+b,6.+a,0,5.,5.,0,6.+a,8.+b,0,3.+b,8.+b,0,6.+a,6.+a,10,1.+a,8.+b,10,3.+b,6.+a,10,5.,8.+b,10,6.+a,3.+b,10,1.+a,5.,10,3.+b,3.+b,10,5.,5.,10,6.+a,3.+b,1.+a,0,5.,3.+b,0,6.+a,1.+a,0,8.+b,3.+b,0,3.+b,5.,0,5.,6.+a,0,6.+a,5.,0,8.+b,6.+a,0,3.+b,8.+b,0,6.+a,8.+b,0,3.+b,1.+a,6.+a,6.+a,1.+a,6.+a,5.,3.+b,6.+a,8.+b,3.+b,6.+a,3.+b,5.,6.+a,6.+a,5.,6.+a,5.,6.+a,6.+a,8.+b,6.+a,6.+a,3.+b,8.+b,6.+a,6.+a,8.+b,6.+a,3.+b,3.+b,5,3.+b,1.+a,3.+b,6.+a,3.+b,5.,6.+a,1.+a,3.+b,5.,3.+b,3.+b,8.+b,3.+b,3.+b,3.+b,6.+a,5.,3.+b,5.,3.+b,6.+a,6.+a,5.,6.+a,5.,3.+b,5.,6.+a,3.+b,8.+b,6.+a,3.+b,3.+b,8.+b,3.+b,6.+a,8.+b,3.+b,3.+b,3.+b,1.+a,6.+a,3.+b,1.+a,3.+b,6.+a,1.+a,6.+a,6.+a,1.+a],111,3)
202 conn=DataArrayInt([30,17,28,32,16,19,29,33,18,83,93,94,58,84,95,96,61,62,85,97,60,30,19,29,33,18,3,12,14,2,84,95,96,61,47,51,50,37,64,86,98,63,30,28,30,34,32,29,31,35,33,87,99,100,93,88,101,102,95,85,89,103,97,30,29,31,35,33,12,13,15,14,88,101,102,95,48,53,52,51,86,90,104,98,30,30,23,22,34,31,21,20,35,91,71,105,99,92,67,106,101,89,72,70,103,30,31,21,20,35,13,5,4,15,92,67,106,101,49,39,54,53,90,68,66,104,30,16,32,24,8,18,33,25,9,94,107,73,57,96,108,75,59,60,97,74,43,30,18,33,25,9,2,14,6,0,96,108,75,59,50,55,40,36,63,98,76,44,30,32,34,26,24,33,35,27,25,100,109,77,107,102,110,79,108,97,103,78,74,30,33,35,27,25,14,15,7,6,102,110,79,108,52,56,41,55,98,104,80,76,30,34,22,10,26,35,20,11,27,105,69,81,109,106,65,82,110,103,70,45,78,30,35,20,11,27,15,4,1,7,106,65,82,110,54,38,42,56,104,66,46,80])
203 connI=DataArrayInt([0,21,42,63,84,105,126,147,168,189,210,231,252])
204 m=MEDCouplingUMesh("mesh",3)
205 m.setConnectivity(conn,connI,True)
206 m.setCoords(coo.deepCopy())# deep copy coo because next line is going to modify it, if it works normaly
207 m.attractSeg3MidPtsAroundNodes(0.1,DataArrayInt([33,35])) # ze call is here !
208 self.assertTrue(not m.getCoords().isEqual(coo,eps)) # some points have had their position changed...
209 ptsExpNotToBeModified=ptsExpToBeModified.buildComplement(len(coo))
210 self.assertTrue(m.getCoords()[ptsExpNotToBeModified].isEqual(coo[ptsExpNotToBeModified],eps))
211 self.assertTrue((m.getCoords()[ptsExpToBeModified]-coo[ptsExpToBeModified]).magnitude().isUniform(4./3.,1e-12))
212 ptsPosExp=DataArrayDouble([6.+a,3.+b,3.+a,6.+a,3.,3.+b,6.+b,3.+b,3.+b,7.,3.+b,3.+b,6.+a,6.+a,3.+a,6.+b,6.+a,3.+b,7.,6.+a,3.+b,6.+a,7.,3.+b,6.+a,3.+b,3.,6.+a,6.+a,3.],10,3)
213 self.assertTrue(m.getCoords()[ptsExpToBeModified].isEqual(ptsPosExp,1e-12))
216 def testRenumberNodesInConnOpt(self):
217 """ Test of MEDCouplingPointSet.renumberNodesInConn with map as input coming from DataArrayInt.invertArrayN2O2O2NOptimized
219 m=MEDCouplingUMesh("mesh",2)
221 m.insertNextCell(NORM_QUAD4,[10000,10002,10001,10003])
222 coo=DataArrayDouble([(0,0),(1,1),(1,0),(0,1)])
224 m.checkConsistencyLight()
226 d=DataArrayInt([10000,10001,10002,10003])
227 myMap=d.invertArrayN2O2O2NOptimized()
228 myMap2=d.giveN2OOptimized()
229 m.checkConsistencyLight()
231 m.renumberNodesInConn(myMap) # <- test is here for UMesh
232 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([4,0,2,1,3])))
233 m.renumberNodesInConn(myMap2) # <- test is here for UMesh
234 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([4,10000,10002,10001,10003])))
236 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4)
237 m.setNodalConnectivity(DataArrayInt([10000,10002,10001,10003]))
239 m.checkConsistencyLight()
240 m.renumberNodesInConn(myMap) # <- test is here for 1SGTUMesh
241 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,2,1,3])))
243 m=MEDCoupling1DGTUMesh("mesh",NORM_POLYGON)
245 m.setNodalConnectivity(DataArrayInt([10000,10002,10001,10003]),DataArrayInt([0,4]))
246 m.checkConsistencyLight()
247 m.renumberNodesInConn(myMap) # <- test is here for 1DGTUMesh
248 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,2,1,3])))
249 self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
252 def testSeg2bGP(self):
253 """Test of Gauss points on SEG2 using SEG2B style as ref coords
255 coo=DataArrayDouble([[0.,0.,0.],[1.,1.,1.]])
256 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(coo)
258 # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
259 m.insertNextCell(NORM_SEG2,[0,1])
261 weights=[0.8,0.1,0.1]
262 gCoords=[0.2,0.5,0.9]
263 fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
265 fGauss.setGaussLocalizationOnType(NORM_SEG2,refCoo,gCoords,weights)
266 arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
268 fGauss.checkConsistencyLight()
269 arrOfDisc=fGauss.getLocalizationOfDiscr()
270 self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([0.2,0.2,0.2,0.5,0.5,0.5,0.9,0.9,0.9],3,3),1e-12))
273 def testUMeshGetCellsContainingPtOn2DNonDynQuadraticCells(self):
274 """getCellsContainingPoint is now dealing curves of quadratic 2D elements.
275 This test is a mesh containing 2 QUAD8 cells. The input point is located at a special loc.
276 If true geometry (with curve as edges) is considered the result of getCellsContainingPoint is not the same as if only linear part of cells is considered."""
277 coords=DataArrayDouble([-0.9428090415820631,0.9428090415820631,-1.06066017177982,1.06066017177982,-1.1785113019775801,1.1785113019775801,-1.2963624321753402,1.2963624321753402,-1.4142135623731,1.41421356237309,-0.7653668647301801,1.8477590650225701,-0.6378057206084831,1.53979922085214,-0.510244576486786,1.23183937668172,-0.701586292669331,1.6937791429373599,-0.574025148547635,1.38581929876693,-0.9259503883660041,1.38578268717091,-0.740760310692803,1.10862614973673,-1.1111404660392,1.66293922460509],13,2)
278 m=MEDCouplingUMesh("mesh",2)
281 m.insertNextCell(NORM_QUAD8,[4,2,6,5,3,10,8,12])
282 m.insertNextCell(NORM_QUAD8,[2,0,7,6,1,11,9,10])
284 zePt=DataArrayDouble([-0.85863751450784975,1.4203162316045934],1,2)
285 a,b=m.getCellsContainingPoints(zePt,1e-12)
286 self.assertTrue(b.isEqual(DataArrayInt([0,1])))
287 self.assertTrue(a.isEqual(DataArrayInt([1]))) # <- test is here. 0 if only linear parts are considered.
289 a,b=m.getCellsContainingPointsLinearPartOnlyOnNonDynType(zePt,1e-12)
290 self.assertTrue(b.isEqual(DataArrayInt([0,1])))
291 self.assertTrue(a.isEqual(DataArrayInt([0]))) # <- like before
294 def testComputeIntegralOfSeg2IntoTri3_1(self):
295 seg2 = [(90453.702115782813, 36372.66281307926), (90457.969790110554, 36373.365088601546)]
296 tri3 = [(90466.90625, 36376.9375), (90446.5, 36404), (90453.1875, 36365.75)]
297 a,b=DataArrayDouble.ComputeIntegralOfSeg2IntoTri3(seg2,tri3)
298 self.assertEqual(len(a),3)
299 self.assertAlmostEqual(a[0],0.2460689650955214,12)
300 self.assertAlmostEqual(a[1],0.10875598777133343,12)
301 self.assertAlmostEqual(a[2],0.6451750471331451,12)
302 self.assertAlmostEqual(b,4.32507052854159,12)
305 def testRemoveDegenerated1DCells1(self):
306 m=MEDCoupling1SGTUMesh("mesh",NORM_SEG2)
307 conn=DataArrayInt([1,2, 3,4, 5,5, 5,6, 6,6, 6,7, 19,19, 7,8])
308 m.setNodalConnectivity(conn) # no coords set. It s not a bug. removeDegenerated1DCells doesn't care
309 m=m.buildUnstructured()
310 aa=m.getNodalConnectivity().getHiddenCppPointer()
311 self.assertTrue(m.removeDegenerated1DCells()) # <- test is here
312 bb=m.getNodalConnectivity().getHiddenCppPointer()
313 self.assertNotEqual(aa,bb)
314 expConn=DataArrayInt([1,1,2,1,3,4,1,5,6,1,6,7,1,7,8])
315 expConnI=DataArrayInt.Range(0,16,3)
316 self.assertTrue(m.getNodalConnectivity().isEqual(expConn))
317 self.assertTrue(m.getNodalConnectivityIndex().isEqual(expConnI))
318 self.assertTrue(not m.removeDegenerated1DCells())
319 cc=m.getNodalConnectivity().getHiddenCppPointer()
320 self.assertEqual(bb,cc)
321 self.assertTrue(m.getNodalConnectivity().isEqual(expConn))
322 self.assertTrue(m.getNodalConnectivityIndex().isEqual(expConnI))
325 def testMergeFieldsOnGauss1(self):
329 _a=0.446948490915965;
330 _b=0.091576213509771;
331 _p1=0.11169079483905;
332 _p2=0.0549758718227661;
333 refCoo1=[ 0.,0., 1.,0., 0.,1. ]
334 gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
335 2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ]
336 wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
338 refCoo2=[ -1.,-1., 1.,-1., 1.,1., -1.,1. ]
339 gsCoo2=[0.1,0.1, 0.2,0.2, 0.5,0.5, 0.6,0.6, 0.7,0.7]
340 wg2=[0.1,0.2,0.3,0.4,0.5]
342 coo=DataArrayDouble([0,0,1,0,2,0,0,1,1,1,2,1,0,2,1,2,2,2],9,2)
343 m1=MEDCouplingUMesh(mName,2)
344 m1.allocateCells() ; m1.setCoords(coo)
345 m1.insertNextCell(NORM_TRI3,[1,4,2])
346 m1.insertNextCell(NORM_TRI3,[4,5,2])
347 m1.insertNextCell(NORM_QUAD4,[4,7,8,5])
348 f1=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f1.setName(fieldName)
350 f1.setGaussLocalizationOnType(NORM_TRI3,refCoo1,gsCoo1,wg1)
351 f1.setGaussLocalizationOnType(NORM_QUAD4,refCoo2,gsCoo2,wg2)
352 arr=DataArrayDouble(f1.getNumberOfTuplesExpected())
355 f1.checkConsistencyLight()
357 m2=MEDCouplingUMesh(mName,2)
358 m2.allocateCells() ; m2.setCoords(coo)
359 m2.insertNextCell(NORM_QUAD4,[0,3,4,1])
360 m2.insertNextCell(NORM_QUAD4,[3,6,7,4])
362 self.assertTrue(f1.getMesh().getCoords().isEqual(m2.getCoords(),1e-12))
363 f1.getMesh().setCoords(m2.getCoords())
365 f2=MEDCouplingFieldDouble(ON_GAUSS_PT)
367 for gt in m2.getAllGeoTypes(): # on recopie les localisation en utilisant f1
368 glt=f1.getGaussLocalizationIdOfOneType(gt)
369 gloc=f1.getGaussLocalization(glt)
370 f2.setGaussLocalizationOnType(gt,gloc.getRefCoords(),gloc.getGaussCoords(),gloc.getWeights())
371 arr2=DataArrayDouble(f2.getNumberOfTuplesExpected())
374 f2.checkConsistencyLight()
376 fout1=MEDCouplingFieldDouble.MergeFields([f1,f2])
377 fout2=MEDCouplingFieldDouble.MergeFields(f1,f2)
379 fOut=MEDCouplingFieldDouble(ON_GAUSS_PT)
380 mOut=MEDCouplingUMesh.MergeUMeshes([f1.getMesh(),m2])
381 mOut.setName(f1.getMesh().getName())
383 for gt in f1.getMesh().getAllGeoTypes(): # on recopie les localisation en utilisant f1
384 glt=f1.getGaussLocalizationIdOfOneType(gt)
385 gloc=f1.getGaussLocalization(glt)
386 fOut.setGaussLocalizationOnType(gt,gloc.getRefCoords(),gloc.getGaussCoords(),gloc.getWeights())
387 fOut.setArray(DataArrayDouble.Aggregate([f1.getArray(),arr2]))
388 fOut.checkConsistencyLight()
389 fOut.setName(f1.getName())
390 fOut.getMesh().setName(f1.getMesh().getName())
392 self.assertTrue(fout1.isEqual(fOut,1e-12,1e-12))
393 self.assertTrue(fout2.isEqual(fOut,1e-12,1e-12))
398 if __name__ == '__main__':