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 if sys.platform == "win32":
24 from MEDCouplingCompat import *
26 from medcoupling import *
28 from math import pi,e,sqrt,cos,sin
29 from datetime import datetime
30 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
32 class MEDCouplingBasicsTest6(unittest.TestCase):
33 def testPointSetInvertOrientationOfAllCells(self):
34 """ Test of inversion of orientation of cells on a different geo types"""
36 m=MEDCouplingUMesh("",1)
38 m.insertNextCell(NORM_SEG2,[3,4])
39 m.insertNextCell(NORM_SEG2,[13,14])
40 m.insertNextCell(NORM_SEG3,[5,6,7])
41 m.insertNextCell(NORM_SEG2,[23,24])
42 m.insertNextCell(NORM_SEG3,[8,9,10])
43 ref0=DataArrayInt([0,3,6,10,13,17])
44 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
45 m.invertOrientationOfAllCells()
46 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,4,3, 1,14,13, 2,7,6,5, 1,24,23, 2,10,9,8])))
47 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
51 m=MEDCouplingUMesh("",2)
53 m.insertNextCell(NORM_TRI3,[1,2,3])
54 m.insertNextCell(NORM_QUAD4,[4,5,6,7])
55 m.insertNextCell(NORM_POLYGON,[8,9,10,11,12,13])
56 m.insertNextCell(NORM_TRI6,[14,15,16,17,18,19])
57 m.insertNextCell(NORM_QUAD8,[20,21,22,23,24,25,26,27])
58 m.insertNextCell(NORM_QPOLYG,[30,31,32,33,34,35, 36,37,38,39,40,41])
59 ref0=DataArrayInt([0,4,9,16,23,32,45])
60 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
61 m.invertOrientationOfAllCells()
62 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])))
63 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
67 m=MEDCouplingUMesh("",3)
69 m.insertNextCell(NORM_TETRA4,[1,2,3,4])
70 m.insertNextCell(NORM_PYRA5,[5,6,7,8,9])
71 m.insertNextCell(NORM_PENTA6,[10,11,12,13,14,15])
72 m.insertNextCell(NORM_HEXA8,[20,21,22,23,24,25,26,27])
73 m.insertNextCell(NORM_TETRA10,[30,31,32,33,34,35,36,37,38,39])
74 m.insertNextCell(NORM_PYRA13,[40,41,42,43,44,45,46,47,48,49,50,51,52])
75 m.insertNextCell(NORM_HEXA20,[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79])
76 m.insertNextCell(NORM_PENTA15,[80,81,82,83,84,85,86,87,88,89,90,91,92,93,94])
77 ref0=DataArrayInt([0,5,11,18,27,38,52,73,89])
78 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
79 m.invertOrientationOfAllCells()
80 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])))
81 self.assertTrue(m.getNodalConnectivityIndex().isEqual(ref0))
85 m=MEDCoupling1SGTUMesh("",NORM_SEG2)
86 m.setNodalConnectivity(DataArrayInt([1,2,3,4,5,6,7,8]))
87 self.assertEqual(m.getNumberOfCells(),4)
89 self.assertTrue(m2.isEqual(m,0.))
90 m.invertOrientationOfAllCells()
91 self.assertTrue(not m2.isEqual(m,0.))
92 m.getNodalConnectivity().isEqual(DataArrayInt([2,1,4,3,6,5,8,7]))
93 m.invertOrientationOfAllCells()
94 self.assertTrue(m2.isEqual(m,0.))
96 p=MEDCoupling1DGTUMesh("",NORM_POLYGON)
97 ref0=DataArrayInt([0,3,7,12])
98 p.setNodalConnectivity(DataArrayInt([1,2,3, 10,11,12,13, 20,21,22,23,24]),ref0)
100 self.assertTrue(p2.isEqual(p,0.))
101 self.assertEqual(p.getNumberOfCells(),3)
102 p.invertOrientationOfAllCells()
103 self.assertTrue(not p2.isEqual(p,0.))
104 self.assertTrue(p.getNodalConnectivityIndex().isEqual(ref0))
105 self.assertTrue(p.getNodalConnectivity().isEqual(DataArrayInt([1,3,2, 10,13,12,11, 20,24,23,22,21])))
106 p.invertOrientationOfAllCells()
107 self.assertTrue(p2.isEqual(p,0.))
115 def testPenta18_1(self):
116 arr=DataArrayDouble([
117 (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
118 (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
119 (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
120 (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
121 (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
122 (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
123 m=MEDCouplingUMesh("mesh",3)
126 m.insertNextCell(NORM_PENTA18,list(range(18)))
127 m.checkConsistencyLight()
128 self.assertTrue(m.getMeasureField(True).getArray().isEqual(DataArrayDouble([0.5]),1e-12))
130 f=MEDCouplingFieldDouble(ON_NODES)
132 f.setName("FieldOnPenta18")
133 f.setArray(DataArrayDouble(list(range(18))))
134 f.checkConsistencyLight()
136 m2,d,di,rd,rdi=m.buildDescendingConnectivity()
137 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])))
138 self.assertTrue(m2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14,24,34,44])))
139 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4])))
140 self.assertTrue(di.isEqual(DataArrayInt([0,5])))
141 self.assertTrue(rd.isEqual(DataArrayInt([0,0,0,0,0])))
142 self.assertTrue(rdi.isEqual(DataArrayInt([0,1,2,3,4,5])))
144 f2=MEDCouplingFieldDouble(ON_NODES)
146 f2.setName("FieldOnPenta18Sub")
147 f2.setArray(DataArrayDouble(list(range(18))))
148 f2.checkConsistencyLight()
151 def testSKLAReplaceDeletePacks(self):
152 index=DataArrayInt([0,3,5,6,6])
153 value=DataArrayInt([1,2,3, 2,3, 3 ])
154 sla=MEDCouplingSkyLineArray(index,value)
155 idx=DataArrayInt([0,3])
156 packs=[DataArrayInt([4,5]),DataArrayInt([6,7,8])]
157 sla.replaceSimplePacks(idx,packs)
158 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2,4,5,8])))
159 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([4,5, 2,3, 3, 6,7,8])))
160 sla.deleteSimplePacks(idx)
161 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2,3])))
162 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([2,3, 3])))
163 sla.deleteSimplePack(1)
164 self.assertTrue(sla.getIndexArray().isEqual(DataArrayInt([0,2])))
165 self.assertTrue(sla.getValuesArray().isEqual(DataArrayInt([2,3])))
168 def testDADAsArcOfCircle(self):
169 d=DataArrayDouble([3.06915124862645,2.1464466094067824,2.85355345827285,2.3620444674400574,2.637955532559882,2.1464467447661937],3,2)
170 center,radius,ang=d.asArcOfCircle()
171 self.assertTrue((d-center).magnitude().isUniform(radius,1e-10))
172 self.assertAlmostEqual(ang,-4.712389294301196,12)
175 def testDAMaxAbsValue(self):
176 d=DataArrayDouble([-2,3,1.2,-2.9])
177 a,b=d.getMaxAbsValue()
178 self.assertAlmostEqual(a,3.,13)
179 self.assertEqual(b,1)
180 a,b=(-d).getMaxAbsValue()
181 self.assertAlmostEqual(a,-3.,13)
182 self.assertEqual(b,1)
183 self.assertAlmostEqual((-d).getMaxAbsValueInArray(),-3.,13)
186 def testDAIFindIdForEach1(self):
187 a1=DataArrayInt([17,27,2,10,-4,3,12,27,16])
188 b1=DataArrayInt([3,16,-4,27,17])
189 ret=a1.findIdForEach(b1)
190 self.assertTrue(ret.isEqual(DataArrayInt([5,8,4,7,0])))
191 self.assertTrue(a1[ret].isEqual(b1))
192 b2=DataArrayInt([3,16,22,27,17])
193 self.assertRaises(InterpKernelException,a1.findIdForEach,b2) # 22 not in a1 !
195 self.assertRaises(InterpKernelException,a1.findIdForEach,b1) # a1 is not single component
198 def testAttractSeg3MidPtsAroundNodes1(self):
199 """ Test of MEDCouplingUMesh.attractSeg3MidPtsAroundNodes methods """
200 ptsExpToBeModified=DataArrayInt([95,96,97,98,101,103,104,106,108,110])
204 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)
205 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])
206 connI=DataArrayInt([0,21,42,63,84,105,126,147,168,189,210,231,252])
207 m=MEDCouplingUMesh("mesh",3)
208 m.setConnectivity(conn,connI,True)
209 m.setCoords(coo.deepCopy())# deep copy coo because next line is going to modify it, if it works normaly
210 m.attractSeg3MidPtsAroundNodes(0.1,DataArrayInt([33,35])) # ze call is here !
211 self.assertTrue(not m.getCoords().isEqual(coo,eps)) # some points have had their position changed...
212 ptsExpNotToBeModified=ptsExpToBeModified.buildComplement(len(coo))
213 self.assertTrue(m.getCoords()[ptsExpNotToBeModified].isEqual(coo[ptsExpNotToBeModified],eps))
214 self.assertTrue((m.getCoords()[ptsExpToBeModified]-coo[ptsExpToBeModified]).magnitude().isUniform(4./3.,1e-12))
215 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)
216 self.assertTrue(m.getCoords()[ptsExpToBeModified].isEqual(ptsPosExp,1e-12))
219 def testRenumberNodesInConnOpt(self):
220 """ Test of MEDCouplingPointSet.renumberNodesInConn with map as input coming from DataArrayInt.invertArrayN2O2O2NOptimized
222 m=MEDCouplingUMesh("mesh",2)
224 m.insertNextCell(NORM_QUAD4,[10000,10002,10001,10003])
225 coo=DataArrayDouble([(0,0),(1,1),(1,0),(0,1)])
227 m.checkConsistencyLight()
229 d=DataArrayInt([10000,10001,10002,10003])
230 myMap=d.invertArrayN2O2O2NOptimized()
231 myMap2=d.giveN2OOptimized()
232 m.checkConsistencyLight()
234 m.renumberNodesInConn(myMap) # <- test is here for UMesh
235 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([4,0,2,1,3])))
236 m.renumberNodesInConn(myMap2) # <- test is here for UMesh
237 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([4,10000,10002,10001,10003])))
239 m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4)
240 m.setNodalConnectivity(DataArrayInt([10000,10002,10001,10003]))
242 m.checkConsistencyLight()
243 m.renumberNodesInConn(myMap) # <- test is here for 1SGTUMesh
244 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,2,1,3])))
246 m=MEDCoupling1DGTUMesh("mesh",NORM_POLYGON)
248 m.setNodalConnectivity(DataArrayInt([10000,10002,10001,10003]),DataArrayInt([0,4]))
249 m.checkConsistencyLight()
250 m.renumberNodesInConn(myMap) # <- test is here for 1DGTUMesh
251 self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,2,1,3])))
252 self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
255 def testSeg2bGP(self):
256 """Test of Gauss points on SEG2 using SEG2B style as ref coords
258 coo=DataArrayDouble([[0.,0.,0.],[1.,1.,1.]])
259 m=MEDCouplingUMesh("mesh",1) ; m.setCoords(coo)
261 # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
262 m.insertNextCell(NORM_SEG2,[0,1])
264 weights=[0.8,0.1,0.1]
265 gCoords=[0.2,0.5,0.9]
266 fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
268 fGauss.setGaussLocalizationOnType(NORM_SEG2,refCoo,gCoords,weights)
269 arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
271 fGauss.checkConsistencyLight()
272 arrOfDisc=fGauss.getLocalizationOfDiscr()
273 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))
276 def testUMeshGetCellsContainingPtOn2DNonDynQuadraticCells(self):
277 """getCellsContainingPoint is now dealing curves of quadratic 2D elements.
278 This test is a mesh containing 2 QUAD8 cells. The input point is located at a special loc.
279 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."""
280 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)
281 m=MEDCouplingUMesh("mesh",2)
284 m.insertNextCell(NORM_QUAD8,[4,2,6,5,3,10,8,12])
285 m.insertNextCell(NORM_QUAD8,[2,0,7,6,1,11,9,10])
287 zePt=DataArrayDouble([-0.85863751450784975,1.4203162316045934],1,2)
288 a,b=m.getCellsContainingPoints(zePt,1e-12)
289 self.assertTrue(b.isEqual(DataArrayInt([0,1])))
290 self.assertTrue(a.isEqual(DataArrayInt([1]))) # <- test is here. 0 if only linear parts are considered.
292 a,b=m.getCellsContainingPointsLinearPartOnlyOnNonDynType(zePt,1e-12)
293 self.assertTrue(b.isEqual(DataArrayInt([0,1])))
294 self.assertTrue(a.isEqual(DataArrayInt([0]))) # <- like before
297 def testComputeIntegralOfSeg2IntoTri3_1(self):
298 seg2 = [(90453.702115782813, 36372.66281307926), (90457.969790110554, 36373.365088601546)]
299 tri3 = [(90466.90625, 36376.9375), (90446.5, 36404), (90453.1875, 36365.75)]
300 a,b=DataArrayDouble.ComputeIntegralOfSeg2IntoTri3(seg2,tri3)
301 self.assertEqual(len(a),3)
302 self.assertAlmostEqual(a[0],0.2460689650955214,12)
303 self.assertAlmostEqual(a[1],0.10875598777133343,12)
304 self.assertAlmostEqual(a[2],0.6451750471331451,12)
305 self.assertAlmostEqual(b,4.32507052854159,12)
308 def testRemoveDegenerated1DCells1(self):
309 m=MEDCoupling1SGTUMesh("mesh",NORM_SEG2)
310 conn=DataArrayInt([1,2, 3,4, 5,5, 5,6, 6,6, 6,7, 19,19, 7,8])
311 m.setNodalConnectivity(conn) # no coords set. It s not a bug. removeDegenerated1DCells doesn't care
312 m=m.buildUnstructured()
313 aa=m.getNodalConnectivity().getHiddenCppPointer()
314 self.assertTrue(m.removeDegenerated1DCells()) # <- test is here
315 bb=m.getNodalConnectivity().getHiddenCppPointer()
316 self.assertNotEqual(aa,bb)
317 expConn=DataArrayInt([1,1,2,1,3,4,1,5,6,1,6,7,1,7,8])
318 expConnI=DataArrayInt.Range(0,16,3)
319 self.assertTrue(m.getNodalConnectivity().isEqual(expConn))
320 self.assertTrue(m.getNodalConnectivityIndex().isEqual(expConnI))
321 self.assertTrue(not m.removeDegenerated1DCells())
322 cc=m.getNodalConnectivity().getHiddenCppPointer()
323 self.assertEqual(bb,cc)
324 self.assertTrue(m.getNodalConnectivity().isEqual(expConn))
325 self.assertTrue(m.getNodalConnectivityIndex().isEqual(expConnI))
328 def testMergeFieldsOnGauss1(self):
332 _a=0.446948490915965;
333 _b=0.091576213509771;
334 _p1=0.11169079483905;
335 _p2=0.0549758718227661;
336 refCoo1=[ 0.,0., 1.,0., 0.,1. ]
337 gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
338 2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ]
339 wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
341 refCoo2=[ -1.,-1., 1.,-1., 1.,1., -1.,1. ]
342 gsCoo2=[0.1,0.1, 0.2,0.2, 0.5,0.5, 0.6,0.6, 0.7,0.7]
343 wg2=[0.1,0.2,0.3,0.4,0.5]
345 coo=DataArrayDouble([0,0,1,0,2,0,0,1,1,1,2,1,0,2,1,2,2,2],9,2)
346 m1=MEDCouplingUMesh(mName,2)
347 m1.allocateCells() ; m1.setCoords(coo)
348 m1.insertNextCell(NORM_TRI3,[1,4,2])
349 m1.insertNextCell(NORM_TRI3,[4,5,2])
350 m1.insertNextCell(NORM_QUAD4,[4,7,8,5])
351 f1=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f1.setName(fieldName)
353 f1.setGaussLocalizationOnType(NORM_TRI3,refCoo1,gsCoo1,wg1)
354 f1.setGaussLocalizationOnType(NORM_QUAD4,refCoo2,gsCoo2,wg2)
355 arr=DataArrayDouble(f1.getNumberOfTuplesExpected())
358 f1.checkConsistencyLight()
360 m2=MEDCouplingUMesh(mName,2)
361 m2.allocateCells() ; m2.setCoords(coo)
362 m2.insertNextCell(NORM_QUAD4,[0,3,4,1])
363 m2.insertNextCell(NORM_QUAD4,[3,6,7,4])
365 self.assertTrue(f1.getMesh().getCoords().isEqual(m2.getCoords(),1e-12))
366 f1.getMesh().setCoords(m2.getCoords())
368 f2=MEDCouplingFieldDouble(ON_GAUSS_PT)
370 for gt in m2.getAllGeoTypes(): # on recopie les localisation en utilisant f1
371 glt=f1.getGaussLocalizationIdOfOneType(gt)
372 gloc=f1.getGaussLocalization(glt)
373 f2.setGaussLocalizationOnType(gt,gloc.getRefCoords(),gloc.getGaussCoords(),gloc.getWeights())
374 arr2=DataArrayDouble(f2.getNumberOfTuplesExpected())
377 f2.checkConsistencyLight()
379 fout1=MEDCouplingFieldDouble.MergeFields([f1,f2])
380 fout2=MEDCouplingFieldDouble.MergeFields(f1,f2)
382 fOut=MEDCouplingFieldDouble(ON_GAUSS_PT)
383 mOut=MEDCouplingUMesh.MergeUMeshes([f1.getMesh(),m2])
384 mOut.setName(f1.getMesh().getName())
386 for gt in f1.getMesh().getAllGeoTypes(): # on recopie les localisation en utilisant f1
387 glt=f1.getGaussLocalizationIdOfOneType(gt)
388 gloc=f1.getGaussLocalization(glt)
389 fOut.setGaussLocalizationOnType(gt,gloc.getRefCoords(),gloc.getGaussCoords(),gloc.getWeights())
390 fOut.setArray(DataArrayDouble.Aggregate([f1.getArray(),arr2]))
391 fOut.checkConsistencyLight()
392 fOut.setName(f1.getName())
393 fOut.getMesh().setName(f1.getMesh().getName())
395 self.assertTrue(fout1.isEqual(fOut,1e-12,1e-12))
396 self.assertTrue(fout2.isEqual(fOut,1e-12,1e-12))
401 if __name__ == '__main__':