1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2014 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
20 # Author : Anthony Geay (CEA/DEN)
22 from MEDLoader import *
24 from math import pi,e,sqrt
26 class MEDLoaderTest4(unittest.TestCase):
28 Test series to emulate the future MEDReader plugin for PARAVIS.
32 This test is the most simple one. One time serie of one field with only cell fields with no profiles.
33 The only "difficulty" is that the cell field is lying on different levels (2D and 1D) to maximize the compatibility with ParaVIS.
35 fname="ForMEDReader1.med"
36 # building a mesh containing 4 tri3 + 5 quad4
37 tri=MEDCouplingUMesh("tri",2)
38 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
39 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
40 tris=[tri.deepCpy() for i in xrange(4)]
41 for i,elt in enumerate(tris): elt.translate([i,0])
42 tris=MEDCouplingUMesh.MergeUMeshes(tris)
43 quad=MEDCouplingUMesh("quad",2)
44 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
45 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
46 quads=[quad.deepCpy() for i in xrange(5)]
47 for i,elt in enumerate(quads): elt.translate([5+i,0])
48 quads=MEDCouplingUMesh.MergeUMeshes(quads)
49 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
50 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
51 m1=m.buildDescendingConnectivity()[0]
52 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
53 fam=DataArrayInt(9) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam)
54 fam=DataArrayInt(32) ; fam.iota(20) ; mm.setFamilyFieldArr(-1,fam) ; del fam
55 num=DataArrayInt(9) ; num.iota(100) ; mm.setRenumFieldArr(0,num)
56 num=DataArrayInt(32) ; num.iota(120) ; mm.setRenumFieldArr(-1,num) ; del num
59 fs=MEDFileFieldMultiTS()
63 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
64 fCell0.setName(fieldName) ; fCell0.setMesh(m)
65 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
66 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
67 fCell0.checkCoherency()
68 f.setFieldNoProfileSBT(fCell0)
69 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
70 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
71 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
72 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
73 fCell1.checkCoherency()
74 f.setFieldNoProfileSBT(fCell1)
75 fs.pushBackTimeStep(f)
79 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
80 fCell0.setName(fieldName) ; fCell0.setMesh(m)
81 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
82 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
83 fCell0.checkCoherency()
84 f.setFieldNoProfileSBT(fCell0)
86 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
87 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
88 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
89 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
90 fCell1.checkCoherency()
91 f.setFieldNoProfileSBT(fCell1)
92 fs.pushBackTimeStep(f)
96 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
97 fCell0.setName(fieldName) ; fCell0.setMesh(m)
98 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
99 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
100 fCell0.checkCoherency()
101 f.setFieldNoProfileSBT(fCell0)
103 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
104 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
105 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
106 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
107 fCell1.checkCoherency()
108 f.setFieldNoProfileSBT(fCell1)
109 fs.pushBackTimeStep(f)
114 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
115 fCell0.setName(fieldName) ; fCell0.setMesh(m)
116 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
117 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
118 fCell0.checkCoherency()
119 f.setFieldNoProfileSBT(fCell0)
121 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
122 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
123 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
124 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
125 fCell1.checkCoherency()
126 f.setFieldNoProfileSBT(fCell1)
128 fs.pushBackTimeStep(f)
133 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
134 fCell0.setName(fieldName) ; fCell0.setMesh(m)
135 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
136 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
137 fCell0.checkCoherency()
138 f.setFieldNoProfileSBT(fCell0)
140 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
141 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
142 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
143 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
144 fCell1.checkCoherency()
145 f.setFieldNoProfileSBT(fCell1)
146 fs.pushBackTimeStep(f)
149 a0Exp=mm.getCoords().deepCpy()
150 del m,m1,mm,fs,f,fCell0,fCell1
151 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
152 ms=MEDFileMeshes(fname)
153 fields=MEDFileFields(fname,False) # False is important to not read the values
154 fields.removeFieldsWithoutAnyTimeStep()
155 refMem=fields.getHeapMemorySize()
156 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
157 allFMTSLeavesToDisplay=[]
158 for fields in fields_per_mesh:
159 allFMTSLeavesToDisplay2=[]
161 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
163 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
165 self.assertEqual(len(allFMTSLeavesToDisplay),1)
166 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
167 for fmts in allFMTSLeavesToDisplay[0]:
168 self.assertEqual(fmts.getTimeSteps(),[(0,0,0.),(1,0,1.),(2,0,2.),(3,0,3.),(4,0,4.)]) # All discretizations have the same time series
170 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
171 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
172 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
173 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
175 mst=MEDFileMeshStruct.New(ms[0])
176 fcscp=allFMTSLeavesPerCommonSupport[0][1]
177 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
179 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
180 for i in xrange(1,5):
181 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
183 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
184 self.assertTrue(not ncc)
185 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
186 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
187 self.assertTrue(a2.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,100,104,108,112,117,122,127,132])))
188 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
189 self.assertTrue(a4 is None)
190 self.assertTrue(a5 is None)
191 a6,a7=mml2.retrieveFamilyIdsOnCells()
192 self.assertTrue(a6.isEqual(DataArrayInt([20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,0,1,2,3,4,5,6,7,8])))
193 self.assertTrue(not a7)
194 a8,a9=mml2.retrieveNumberIdsOnCells()
195 self.assertTrue(a8.isEqual(DataArrayInt([120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,100,101,102,103,104,105,106,107,108])))
196 self.assertTrue(not a9)
198 fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
199 fields[0][i].loadArraysIfNecessary()
200 tmpMem=fields.getHeapMemorySize()
201 self.assertTrue(tmpMem-refMem>=41*2*8)
203 v=mml.buildDataArray(fsst,fields,fields[0][i].getUndergroundDataArray())
204 self.assertEqual(v.getHiddenCppPointer(),fields[0][i].getUndergroundDataArray().getHiddenCppPointer())
205 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
206 self.assertTrue(v.isEqual(vExp,1e-12))
212 One time serie of one field with cell and node discretization in the same field with no profiles.
213 Here as there is no profile only one VTK support is requested.
215 fname="ForMEDReader2.med"
216 # building a mesh containing 4 tri3 + 5 quad4
217 tri=MEDCouplingUMesh("tri",2)
218 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
219 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
220 tris=[tri.deepCpy() for i in xrange(4)]
221 for i,elt in enumerate(tris): elt.translate([i,0])
222 tris=MEDCouplingUMesh.MergeUMeshes(tris)
223 quad=MEDCouplingUMesh("quad",2)
224 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
225 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
226 quads=[quad.deepCpy() for i in xrange(5)]
227 for i,elt in enumerate(quads): elt.translate([5+i,0])
228 quads=MEDCouplingUMesh.MergeUMeshes(quads)
229 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
230 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
231 m1=m.buildDescendingConnectivity()[0]
232 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
235 fs=MEDFileFieldMultiTS()
239 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
240 fCell0.setName(fieldName) ; fCell0.setMesh(m)
241 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
242 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
243 fCell0.checkCoherency()
244 f.setFieldNoProfileSBT(fCell0)
245 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
246 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
247 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
248 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
249 fCell1.checkCoherency()
250 f.setFieldNoProfileSBT(fCell1)
252 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
253 fNode.setName(fieldName) ; fNode.setMesh(m1)
254 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(300) ; arr.rearrange(2)
255 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
256 fNode.checkCoherency()
257 f.setFieldNoProfileSBT(fNode)
258 fs.pushBackTimeStep(f)
262 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
263 fCell0.setName(fieldName) ; fCell0.setMesh(m)
264 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
265 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
266 fCell0.checkCoherency()
267 f.setFieldNoProfileSBT(fCell0)
269 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
270 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
271 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
272 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
273 fCell1.checkCoherency()
274 f.setFieldNoProfileSBT(fCell1)
276 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
277 fNode.setName(fieldName) ; fNode.setMesh(m1)
278 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
279 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
280 fNode.checkCoherency()
281 f.setFieldNoProfileSBT(fNode)
282 fs.pushBackTimeStep(f)
286 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
287 fNode.setName(fieldName) ; fNode.setMesh(m1)
288 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(2300) ; arr.rearrange(2)
289 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
290 fNode.checkCoherency()
291 f.setFieldNoProfileSBT(fNode)
293 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
294 fCell0.setName(fieldName) ; fCell0.setMesh(m)
295 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
296 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
297 fCell0.checkCoherency()
298 f.setFieldNoProfileSBT(fCell0)
300 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
301 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
302 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
303 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
304 fCell1.checkCoherency()
305 f.setFieldNoProfileSBT(fCell1)
306 fs.pushBackTimeStep(f)
311 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
312 fCell0.setName(fieldName) ; fCell0.setMesh(m)
313 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
314 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
315 fCell0.checkCoherency()
316 f.setFieldNoProfileSBT(fCell0)
318 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
319 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
320 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
321 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
322 fCell1.checkCoherency()
323 f.setFieldNoProfileSBT(fCell1)
325 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
326 fNode.setName(fieldName) ; fNode.setMesh(m1)
327 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
328 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
329 fNode.checkCoherency()
330 f.setFieldNoProfileSBT(fNode)
332 fs.pushBackTimeStep(f)
337 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
338 fCell0.setName(fieldName) ; fCell0.setMesh(m)
339 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
340 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
341 fCell0.checkCoherency()
342 f.setFieldNoProfileSBT(fCell0)
344 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
345 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
346 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
347 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
348 fCell1.checkCoherency()
349 f.setFieldNoProfileSBT(fCell1)
351 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
352 fNode.setName(fieldName) ; fNode.setMesh(m1)
353 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(4300) ; arr.rearrange(2)
354 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
355 fNode.checkCoherency()
356 f.setFieldNoProfileSBT(fNode)
358 fs.pushBackTimeStep(f)
361 a0Exp=mm.getCoords().deepCpy()
362 del m,m1,mm,fs,f,fCell0,fCell1
363 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
364 ms=MEDFileMeshes(fname)
365 fields=MEDFileFields(fname,False)
366 fields.removeFieldsWithoutAnyTimeStep()
367 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
368 allFMTSLeavesToDisplay=[]
369 for fields in fields_per_mesh:
370 allFMTSLeavesToDisplay2=[]
372 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
374 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
376 self.assertEqual(len(allFMTSLeavesToDisplay),1)
377 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
378 for fmts in allFMTSLeavesToDisplay[0]:
379 self.assertEqual(fmts.getTimeSteps(),[(0,0,0.),(1,0,1.),(2,0,2.),(3,0,3.),(4,0,4.)]) # All discretizations have the same time series
381 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
382 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
383 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
384 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
385 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
386 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
388 mst=MEDFileMeshStruct.New(ms[0])
389 fcscp=allFMTSLeavesPerCommonSupport[0][1]
390 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
392 assert isinstance(mml2,MEDUMeshMultiLev)
393 for i in xrange(1,5):
394 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
396 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
397 self.assertTrue(not ncc)
398 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
399 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
400 self.assertTrue(a2.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,100,104,108,112,117,122,127,132])))
401 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
402 self.assertTrue(a4 is None)
403 self.assertTrue(a5 is None)
406 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
407 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
408 f.loadArraysIfNecessary()
409 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
410 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
411 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
412 self.assertTrue(v.isEqual(vExp,1e-12))
415 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
416 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
417 f.loadArraysIfNecessary()
418 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
419 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
420 vExp=DataArrayDouble([300.,301.,302.,303.,304.,305.,306.,307.,308.,309.,310.,311.,312.,313.,314.,315.,316.,317.,318.,319.,320.,321.,322.,323.,324.,325.,326.,327.,328.,329.,330.,331.,332.,333.,334.,335.,336.,337.,338.,339.,340.,341.,342.,343.,344.,345.,346.,347.,348.,349.,350.,351.,352.,353.,354.,355.,356.,357.,358.,359.,360.,361.,362.,363.],32,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
421 self.assertTrue(v.isEqual(vExp,1e-12))
426 """ This test is more advanced a same field is defined on CELLS for time steps 0, 2 and 4, and on NODES for time steps 1 and 3.
427 So two time step series on the same field. No profile here neither on cells nor on nodes.
429 fname="ForMEDReader3.med"
430 # building a mesh containing 4 tri3 + 5 quad4
431 tri=MEDCouplingUMesh("tri",2)
432 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
433 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
434 tris=[tri.deepCpy() for i in xrange(4)]
435 for i,elt in enumerate(tris): elt.translate([i,0])
436 tris=MEDCouplingUMesh.MergeUMeshes(tris)
437 quad=MEDCouplingUMesh("quad",2)
438 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
439 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
440 quads=[quad.deepCpy() for i in xrange(5)]
441 for i,elt in enumerate(quads): elt.translate([5+i,0])
442 quads=MEDCouplingUMesh.MergeUMeshes(quads)
443 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
444 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
445 m1=m.buildDescendingConnectivity()[0]
446 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
449 fs=MEDFileFieldMultiTS()
450 ##### Time step 0 on cells
453 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
454 fCell0.setName(fieldName) ; fCell0.setMesh(m)
455 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
456 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
457 fCell0.checkCoherency()
458 f.setFieldNoProfileSBT(fCell0)
459 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
460 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
461 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
462 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
463 fCell1.checkCoherency()
464 f.setFieldNoProfileSBT(fCell1)
465 fs.pushBackTimeStep(f)
466 ##### Time step 1 on nodes
469 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
470 fNode.setName(fieldName) ; fNode.setMesh(m1)
471 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
472 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
473 fNode.checkCoherency()
474 f.setFieldNoProfileSBT(fNode)
475 fs.pushBackTimeStep(f)
476 ##### Time step 2 on cells
479 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
480 fCell0.setName(fieldName) ; fCell0.setMesh(m)
481 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
482 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
483 fCell0.checkCoherency()
484 f.setFieldNoProfileSBT(fCell0)
486 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
487 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
488 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
489 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
490 fCell1.checkCoherency()
491 f.setFieldNoProfileSBT(fCell1)
492 fs.pushBackTimeStep(f)
493 ##### Time step 3 on nodes
496 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
497 fNode.setName(fieldName) ; fNode.setMesh(m1)
498 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
499 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
500 fNode.checkCoherency()
501 f.setFieldNoProfileSBT(fNode)
502 fs.pushBackTimeStep(f)
506 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
507 fCell0.setName(fieldName) ; fCell0.setMesh(m)
508 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
509 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
510 fCell0.checkCoherency()
511 f.setFieldNoProfileSBT(fCell0)
513 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
514 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
515 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
516 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
517 fCell1.checkCoherency()
518 f.setFieldNoProfileSBT(fCell1)
520 fs.pushBackTimeStep(f)
523 a0Exp=mm.getCoords().deepCpy()
524 del m,m1,mm,fs,f,fCell0,fCell1
525 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
526 ms=MEDFileMeshes(fname)
527 fields=MEDFileFields(fname,False)
528 fields.removeFieldsWithoutAnyTimeStep()
529 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
530 allFMTSLeavesToDisplay=[]
531 for fields in fields_per_mesh:
532 allFMTSLeavesToDisplay2=[]
534 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
536 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
538 self.assertEqual(len(allFMTSLeavesToDisplay),1)
539 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
540 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
541 self.assertEqual(len(allFMTSLeavesPerTimeSeries),2) # two time series here : one for the cells, the second one for the nodes
542 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
543 self.assertEqual(len(allFMTSLeavesPerTimeSeries[1]),1)
544 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
545 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
546 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
548 mst=MEDFileMeshStruct.New(ms[0])
549 fcscp=allFMTSLeavesPerCommonSupport[0][1] # start with the cells
550 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
552 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
553 for i in xrange(1,3):
554 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
556 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
557 self.assertTrue(not ncc)
558 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
559 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
560 self.assertTrue(a2.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,100,104,108,112,117,122,127,132])))
561 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
566 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
567 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
568 f.loadArraysIfNecessary()
569 self.assertEqual(f.getName(),"zeField")
570 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
571 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
572 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*2000
573 self.assertTrue(v.isEqual(vExp,1e-12))
576 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[1],ms[ms.getMeshesNames()[0]])
577 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
578 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
579 fcscp=allFMTSLeavesPerCommonSupport[0][1]
580 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
582 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
583 for i in xrange(1,2):
584 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
586 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
587 self.assertTrue(not ncc)
588 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
589 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3])))
590 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,21,26,31,36,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134])))
591 self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31,2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28])))
592 self.assertTrue(a4 is None)
593 self.assertTrue(a5 is None)
595 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
596 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
597 f.loadArraysIfNecessary()
598 self.assertEqual(f.getName(),"zeField")
599 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
600 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
601 vExp=DataArrayDouble([300.,301.,302.,303.,304.,305.,306.,307.,308.,309.,310.,311.,312.,313.,314.,315.,316.,317.,318.,319.,320.,321.,322.,323.,324.,325.,326.,327.,328.,329.,330.,331.,332.,333.,334.,335.,336.,337.,338.,339.,340.,341.,342.,343.,344.,345.,346.,347.,348.,349.,350.,351.,352.,353.,354.,355.,356.,357.,358.,359.,360.,361.,362.,363.],32,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*2000+1000
602 self.assertTrue(v.isEqual(vExp,1e-12))
607 """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
609 fname="ForMEDReader4.med"
610 # building a mesh containing 4 tri3 + 5 quad4
611 tri=MEDCouplingUMesh("tri",2)
612 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
613 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
614 tris=[tri.deepCpy() for i in xrange(4)]
615 for i,elt in enumerate(tris): elt.translate([i,0])
616 tris=MEDCouplingUMesh.MergeUMeshes(tris)
617 quad=MEDCouplingUMesh("quad",2)
618 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
619 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
620 quads=[quad.deepCpy() for i in xrange(5)]
621 for i,elt in enumerate(quads): elt.translate([5+i,0])
622 quads=MEDCouplingUMesh.MergeUMeshes(quads)
623 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
624 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
625 mm=MEDFileUMesh() ; mm.setMeshes([m])
627 fieldName1="zeField1"
628 fieldName2="zeField2"
629 fieldName3="zeField3"
630 fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
634 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
635 fNode.setName(fieldName1) ; fNode.setMesh(m)
636 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
637 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
638 fNode.checkCoherency()
639 f.setFieldNoProfileSBT(fNode)
640 fs1.pushBackTimeStep(f)
643 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
644 fNode.setName(fieldName2) ; fNode.setMesh(m)
645 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
646 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
647 fNode.checkCoherency()
648 f.setFieldNoProfileSBT(fNode)
649 fs2.pushBackTimeStep(f)
652 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
653 fNode.setName(fieldName3) ; fNode.setMesh(m)
654 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
655 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
656 fNode.checkCoherency()
657 f.setFieldNoProfileSBT(fNode)
658 fs3.pushBackTimeStep(f)
662 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
663 fNode.setName(fieldName1) ; fNode.setMesh(m)
664 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
665 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
666 fNode.checkCoherency()
667 f.setFieldNoProfileSBT(fNode)
668 fs1.pushBackTimeStep(f)
671 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
672 fNode.setName(fieldName2) ; fNode.setMesh(m)
673 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
674 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
675 fNode.checkCoherency()
676 f.setFieldNoProfileSBT(fNode)
677 fs2.pushBackTimeStep(f)
680 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
681 fNode.setName(fieldName3) ; fNode.setMesh(m)
682 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
683 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
684 fNode.checkCoherency()
685 f.setFieldNoProfileSBT(fNode)
686 fs3.pushBackTimeStep(f)
690 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
691 fNode.setName(fieldName1) ; fNode.setMesh(m)
692 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
693 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
694 fNode.checkCoherency()
695 f.setFieldNoProfileSBT(fNode)
696 fs1.pushBackTimeStep(f)
699 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
700 fNode.setName(fieldName2) ; fNode.setMesh(m)
701 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
702 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
703 fNode.checkCoherency()
704 f.setFieldNoProfileSBT(fNode)
705 fs2.pushBackTimeStep(f)
708 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
709 fNode.setName(fieldName3) ; fNode.setMesh(m)
710 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
711 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
712 fNode.checkCoherency()
713 f.setFieldNoProfileSBT(fNode)
714 fs3.pushBackTimeStep(f)
718 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
719 fNode.setName(fieldName1) ; fNode.setMesh(m)
720 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
721 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
722 fNode.checkCoherency()
723 f.setFieldNoProfileSBT(fNode)
724 fs1.pushBackTimeStep(f)
727 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
728 fNode.setName(fieldName2) ; fNode.setMesh(m)
729 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
730 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
731 fNode.checkCoherency()
732 f.setFieldNoProfileSBT(fNode)
733 fs2.pushBackTimeStep(f)
736 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
737 fNode.setName(fieldName3) ; fNode.setMesh(m)
738 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
739 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
740 fNode.checkCoherency()
741 f.setFieldNoProfileSBT(fNode)
742 fs3.pushBackTimeStep(f)
746 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
747 fNode.setName(fieldName1) ; fNode.setMesh(m)
748 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
749 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
750 fNode.checkCoherency()
751 f.setFieldNoProfileSBT(fNode)
752 fs1.pushBackTimeStep(f)
755 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
756 fNode.setName(fieldName2) ; fNode.setMesh(m)
757 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
758 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
759 fNode.checkCoherency()
760 f.setFieldNoProfileSBT(fNode)
761 fs2.pushBackTimeStep(f)
764 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
765 fNode.setName(fieldName3) ; fNode.setMesh(m)
766 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
767 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
768 fNode.checkCoherency()
769 f.setFieldNoProfileSBT(fNode)
770 fs3.pushBackTimeStep(f)
773 fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
774 a0Exp=mm.getCoords().deepCpy()
775 del m,mm,fs1,fs2,fs3,f,fNode
776 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
777 ms=MEDFileMeshes(fname)
778 fields=MEDFileFields(fname,False)
779 fields.removeFieldsWithoutAnyTimeStep()
780 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
781 allFMTSLeavesToDisplay=[]
782 for fields in fields_per_mesh:
783 allFMTSLeavesToDisplay2=[]
785 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
787 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
789 self.assertEqual(len(allFMTSLeavesToDisplay),1)
790 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
791 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
792 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
793 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
794 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
795 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
796 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
798 mst=MEDFileMeshStruct.New(ms[0])
799 fcscp=allFMTSLeavesPerCommonSupport[0][1]
800 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
801 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
802 fcscp=allFMTSLeavesPerCommonSupport[0][1]
803 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
805 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
806 for i in xrange(1,5):
807 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
809 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
810 self.assertTrue(not ncc)
811 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
812 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
813 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,21,26,31,36])))
814 self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
815 self.assertTrue(a4 is None)
816 self.assertTrue(a5 is None)
817 # test all the time steps of the 1/1 time step serie, on field 1
819 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
820 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
821 f.loadArraysIfNecessary()
822 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
823 self.assertEqual(f.getName(),fieldName1)
824 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
825 vExp=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.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]']) ; vExp+=i*1000
826 self.assertTrue(v.isEqual(vExp,1e-12))
828 # test all the time steps of the 1/1 time step serie, on field 2
830 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
831 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
832 f.loadArraysIfNecessary()
833 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
834 self.assertEqual(f.getName(),fieldName2)
835 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
836 vExp=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.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]']) ; vExp+=i*1000+100
837 self.assertTrue(v.isEqual(vExp,1e-12))
839 # test all the time steps of the 1/1 time step serie, on field 3
841 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
842 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
843 f.loadArraysIfNecessary()
844 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
845 self.assertEqual(f.getName(),fieldName3)
846 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
847 vExp=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.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]']) ; vExp+=i*1000+200
848 self.assertTrue(v.isEqual(vExp,1e-12))
853 """ This test plays with profiles both cell profiles and node profiles. Two first fields (resp on cells and on nodes) lie on the same mesh support whereas the third
854 mesh lies on a different mesh.
856 fname="ForMEDReader5.med"
857 # building a mesh containing 6 tri3 + 5 quad4
858 m=MEDCouplingUMesh("mesh",2)
859 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
862 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
863 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
864 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
865 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
866 mm=MEDFileUMesh() ; mm.setMeshes([m])
867 fam=DataArrayInt(11) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
868 num=DataArrayInt(11) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
870 fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
871 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
872 fieldName3="zeField3" ; pfl3=DataArrayInt([0,1,2,3,4,5,9,10]) ; pfl3.setName("pfl3") # on cells but different support
873 fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
877 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
878 fNode.setName(fieldName1)
879 arr=DataArrayDouble(2*6) ; arr.iota(0+1000*i) ; arr.rearrange(2)
880 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
881 f.setFieldProfile(fNode,mm,0,pfl1)
882 fs1.pushBackTimeStep(f)
885 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
886 fNode.setName(fieldName2)
887 arr=DataArrayDouble(2*8) ; arr.iota(100+1000*i) ; arr.rearrange(2)
888 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
889 f.setFieldProfile(fNode,mm,0,pfl2)
890 fs2.pushBackTimeStep(f)
893 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
894 fNode.setName(fieldName3)
895 arr=DataArrayDouble(2*8) ; arr.iota(200+1000*i) ; arr.rearrange(2)
896 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
897 f.setFieldProfile(fNode,mm,0,pfl3)
898 fs3.pushBackTimeStep(f)
901 fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
902 a0Exp=mm.getCoords().deepCpy()
903 del m,mm,fs1,fs2,fs3,f,fNode
904 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
905 ms=MEDFileMeshes(fname)
906 fields=MEDFileFields(fname,False)
907 fields.removeFieldsWithoutAnyTimeStep()
908 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
909 allFMTSLeavesToDisplay=[]
910 for fields in fields_per_mesh:
911 allFMTSLeavesToDisplay2=[]
913 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
915 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
917 self.assertEqual(len(allFMTSLeavesToDisplay),1)
918 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
919 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
920 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
921 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
922 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
923 ms[0].getDirectUndergroundSingleGeoTypeMeshes(0)
924 self.assertEqual(len(allFMTSLeavesPerCommonSupport),2) # 2 support here
925 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
926 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
928 mst=MEDFileMeshStruct.New(ms[0])
929 fcscp=allFMTSLeavesPerCommonSupport[0][1]
930 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
932 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
933 for i in xrange(1,5):
934 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
936 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
937 self.assertTrue(not ncc)
938 self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
939 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
940 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,20])))
941 self.assertTrue(a3.isEqual(DataArrayInt([3,0,3,1,3,3,4,1,3,1,4,2,3,4,5,2,3,6,5,4,3,6,7,5])))
944 a6,a7=mml2.retrieveFamilyIdsOnCells()
945 self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5])))
946 self.assertTrue(not a7)
947 a8,a9=mml2.retrieveNumberIdsOnCells()
948 self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105])))
949 self.assertTrue(not a9)
952 fieldNames=[fieldName1,fieldName2]
955 f=allFMTSLeavesPerCommonSupport[0][0][j][i]
956 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
957 f.loadArraysIfNecessary()
958 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
959 self.assertEqual(f.getName(),fieldNames[j])
960 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
961 vExp=DataArrayDouble(nbOfT[j]*2) ; vExp.iota(j*100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_%(i)i [m]'%m,'Com2_%(i)i [s^2]'%m])
962 self.assertTrue(v.isEqual(vExp,1e-12))
965 # Let's go for the 2nd support
966 fcscp=allFMTSLeavesPerCommonSupport[1][1]
967 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
969 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
970 for i in xrange(1,5):
971 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
973 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
974 self.assertTrue(not ncc)
975 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
976 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
977 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,20,24,29])))
978 self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,6,11,12,7,4,12,13,8,7])))
979 self.assertTrue(a4 is None)
980 self.assertTrue(a5 is None)
981 a6,a7=mml2.retrieveFamilyIdsOnCells()
982 self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,9,10])))
983 self.assertTrue(not a7)
984 a8,a9=mml2.retrieveNumberIdsOnCells()
985 self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,109,110])))
986 self.assertTrue(not a9)
988 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
989 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
990 f.loadArraysIfNecessary()
991 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
992 self.assertEqual(f.getName(),"zeField3")
993 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
994 vExp=DataArrayDouble(8*2) ; vExp.iota(200+1000*i) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]'%m,'Com2_2 [s^2]'%m])
995 self.assertTrue(v.isEqual(vExp,1e-12))
1000 """ This test plays with cartesian mesh and profiles. When a sub cartesian mesh can also be considered as a cartesian mesh it is done.
1002 fname="ForMEDReader6.med"
1003 m=MEDCouplingCMesh("mesh")
1004 coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
1005 coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
1006 m.setCoords(coordsX,coordsY)
1007 mm=MEDFileCMesh() ; mm.setMesh(m)
1008 fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
1009 num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
1010 num=DataArrayInt(15) ; num.iota(200) ; mm.setRenumFieldArr(1,num) ; del num
1012 fieldName0="zeField0" ; # on cells
1013 fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1014 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1015 fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1016 fieldName4="zeField4" ;# on nodes
1017 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1021 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1022 fNode.setName(fieldName0) ; fNode.setMesh(m)
1023 arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1024 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1025 f.setFieldNoProfileSBT(fNode)
1026 fs0.pushBackTimeStep(f)
1029 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1030 fNode.setName(fieldName1)
1031 arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1032 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1033 f.setFieldProfile(fNode,mm,0,pfl1)
1034 self.assertEqual(pfl1.getName(),"pfl1")
1035 fs1.pushBackTimeStep(f)
1038 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1039 fNode.setName(fieldName2)
1040 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1041 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1042 f.setFieldProfile(fNode,mm,0,pfl2)
1043 self.assertEqual(pfl2.getName(),"pfl2")
1044 fs2.pushBackTimeStep(f)
1047 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1048 fNode.setName(fieldName3)
1049 arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1050 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1051 f.setFieldProfile(fNode,mm,0,pfl3)
1052 self.assertEqual(pfl3.getName(),"pfl3")
1053 fs3.pushBackTimeStep(f)
1056 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1057 fNode.setName(fieldName4) ; fNode.setMesh(m)
1058 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1059 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1060 f.setFieldNoProfileSBT(fNode)
1061 fs4.pushBackTimeStep(f)
1064 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1065 del m,mm,fs1,fs2,fs3,f,fNode
1066 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1067 ms=MEDFileMeshes(fname)
1068 fields=MEDFileFields(fname,False)
1069 fields.removeFieldsWithoutAnyTimeStep()
1070 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1071 allFMTSLeavesToDisplay=[]
1072 for fields in fields_per_mesh:
1073 allFMTSLeavesToDisplay2=[]
1075 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1077 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1079 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1080 self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1081 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1082 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1083 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1084 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1085 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1086 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1087 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1088 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1090 mst=MEDFileMeshStruct.New(ms[0])
1092 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1093 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1095 (a,b),c=mml2.buildVTUArrays()
1096 self.assertTrue(c)# c is True here because the returned array is directly those coming from internal structure
1097 self.assertTrue(a.isEqual(coordsX,1e-12))
1098 self.assertTrue(b.isEqual(coordsY,1e-12))
1099 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
1100 for i in xrange(1,5):
1101 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1103 a6,a7=mml2.retrieveFamilyIdsOnCells()
1104 self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
1105 self.assertTrue(a7) # True because no copy
1106 a8,a9=mml2.retrieveNumberIdsOnCells()
1107 self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
1108 self.assertTrue(a9) # True because no copy
1109 a10,a11=mml2.retrieveNumberIdsOnNodes()
1110 self.assertTrue(a10.isEqual(DataArrayInt([200,201,202,203,204,205,206,207,208,209,210,211,212,213,214])))
1111 self.assertTrue(a11) # True because no copy
1113 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1114 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1115 f.loadArraysIfNecessary()
1116 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1117 self.assertEqual(f.getName(),fieldName0)
1118 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1119 vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1120 self.assertTrue(v.isEqual(vExp,1e-12))
1122 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1123 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1124 f.loadArraysIfNecessary()
1125 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1126 self.assertEqual(f.getName(),fieldName4)
1127 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1128 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1129 self.assertTrue(v.isEqual(vExp,1e-12))
1132 fcscp=allFMTSLeavesPerCommonSupport[1][1]
1133 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1135 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1136 (a,b),c=mml2.buildVTUArrays()
1137 self.assertTrue(not c)# c is False because this a sub support specialy built for buildVTUArrays
1138 self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
1139 self.assertTrue(b.isEqual(coordsY,1e-12))
1140 a6,a7=mml2.retrieveFamilyIdsOnCells()
1141 self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
1142 self.assertTrue(not a7) # False because copy
1143 a8,a9=mml2.retrieveNumberIdsOnCells()
1144 self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
1145 self.assertTrue(not a9) # False because copy
1146 a10,a11=mml2.retrieveNumberIdsOnNodes()
1147 self.assertTrue(a10.isEqual(DataArrayInt([202,203,204,207,208,209,212,213,214])))
1148 self.assertTrue(not a11) # False because copy
1149 for i in xrange(1,5):
1150 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1153 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1154 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1155 f.loadArraysIfNecessary()
1156 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1157 self.assertEqual(f.getName(),fieldName1)
1158 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1159 vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1160 self.assertTrue(v.isEqual(vExp,1e-12))
1162 f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1163 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1164 f.loadArraysIfNecessary()
1165 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1166 self.assertEqual(f.getName(),fieldName2)
1167 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1168 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1169 self.assertTrue(v.isEqual(vExp,1e-12))
1172 fcscp=allFMTSLeavesPerCommonSupport[2][1]
1173 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1175 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1176 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1177 self.assertTrue(not ncc)
1178 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1179 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1180 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1181 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1182 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15])))
1183 self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
1184 self.assertTrue(a4 is None)
1185 self.assertTrue(a5 is None)
1186 a6,a7=mml2.retrieveFamilyIdsOnCells()
1187 self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
1188 self.assertTrue(not a7) # False because copy
1189 a8,a9=mml2.retrieveNumberIdsOnCells()
1190 self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
1191 self.assertTrue(not a9) # False because copy
1193 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1194 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1195 f.loadArraysIfNecessary()
1196 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1197 self.assertEqual(f.getName(),fieldName3)
1198 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1199 vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1200 self.assertTrue(v.isEqual(vExp,1e-12))
1205 """ This test plays with curvilinear mesh and profiles. When a sub curvilinear mesh can also be considered as a cartesian mesh it is done.
1206 This test is very similar to the test6.
1208 fname="ForMEDReader7.med"
1209 m=MEDCouplingCurveLinearMesh("mesh") ; m.setNodeGridStructure([5,3])
1210 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1211 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1213 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
1214 fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
1215 num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
1217 fieldName0="zeField0" ; # on cells
1218 fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1219 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1220 fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1221 fieldName4="zeField4" ;# on nodes
1222 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1226 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1227 fNode.setName(fieldName0) ; fNode.setMesh(m)
1228 arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1229 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1230 f.setFieldNoProfileSBT(fNode)
1231 fs0.pushBackTimeStep(f)
1234 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1235 fNode.setName(fieldName1)
1236 arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1237 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1238 f.setFieldProfile(fNode,mm,0,pfl1)
1239 self.assertEqual(pfl1.getName(),"pfl1")
1240 fs1.pushBackTimeStep(f)
1243 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1244 fNode.setName(fieldName2)
1245 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1246 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1247 f.setFieldProfile(fNode,mm,0,pfl2)
1248 self.assertEqual(pfl2.getName(),"pfl2")
1249 fs2.pushBackTimeStep(f)
1252 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1253 fNode.setName(fieldName3)
1254 arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1255 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1256 f.setFieldProfile(fNode,mm,0,pfl3)
1257 self.assertEqual(pfl3.getName(),"pfl3")
1258 fs3.pushBackTimeStep(f)
1261 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1262 fNode.setName(fieldName4) ; fNode.setMesh(m)
1263 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1264 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1265 f.setFieldNoProfileSBT(fNode)
1266 fs4.pushBackTimeStep(f)
1269 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1270 del m,mm,fs1,fs2,fs3,f,fNode
1271 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1272 ms=MEDFileMeshes(fname)
1273 fields=MEDFileFields(fname,False)
1274 fields.removeFieldsWithoutAnyTimeStep()
1275 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1276 allFMTSLeavesToDisplay=[]
1277 for fields in fields_per_mesh:
1278 allFMTSLeavesToDisplay2=[]
1280 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1282 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1284 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1285 self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1286 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1287 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1288 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1289 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1290 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1291 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1292 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1293 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1295 mst=MEDFileMeshStruct.New(ms[0])
1297 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1298 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1300 self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev))
1301 a,b,c=mml2.buildVTUArrays()
1302 self.assertTrue(c)#True here because a is directly coming from internal data without copy
1303 self.assertTrue(a.isEqual(a0Exp,1e-12))
1304 self.assertEqual(b,[5,3])
1305 a6,a7=mml2.retrieveFamilyIdsOnCells()
1306 self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
1307 self.assertTrue(a7) # True because no copy
1308 a8,a9=mml2.retrieveNumberIdsOnCells()
1309 self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
1310 self.assertTrue(a9) # True because no copy
1311 for i in xrange(1,5):
1312 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1315 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1316 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1317 f.loadArraysIfNecessary()
1318 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1319 self.assertEqual(f.getName(),fieldName0)
1320 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1321 vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1322 self.assertTrue(v.isEqual(vExp,1e-12))
1324 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1325 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1326 f.loadArraysIfNecessary()
1327 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1328 self.assertEqual(f.getName(),fieldName4)
1329 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1330 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1331 self.assertTrue(v.isEqual(vExp,1e-12))
1334 fcscp=allFMTSLeavesPerCommonSupport[1][1]
1335 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1337 self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1338 a,b,c=mml2.buildVTUArrays()
1339 self.assertTrue(not c)#False here because a is the result of a computation not the internal strucutre
1340 self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
1341 self.assertEqual(b,[3,3])
1342 a6,a7=mml2.retrieveFamilyIdsOnCells()
1343 self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
1344 self.assertTrue(not a7) # False because copy
1345 a8,a9=mml2.retrieveNumberIdsOnCells()
1346 self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
1347 self.assertTrue(not a9) # False because copy
1348 for i in xrange(1,5):
1349 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1352 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1353 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1354 f.loadArraysIfNecessary()
1355 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1356 self.assertEqual(f.getName(),fieldName1)
1357 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1358 vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1359 self.assertTrue(v.isEqual(vExp,1e-12))
1361 f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1362 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1363 f.loadArraysIfNecessary()
1364 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1365 self.assertEqual(f.getName(),fieldName2)
1366 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1367 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1368 self.assertTrue(v.isEqual(vExp,1e-12))
1371 fcscp=allFMTSLeavesPerCommonSupport[2][1]
1372 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1374 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1375 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1376 self.assertTrue(not ncc)
1377 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1378 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1379 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1380 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1381 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15])))
1382 self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
1383 self.assertTrue(a4 is None)
1384 self.assertTrue(a5 is None)
1385 a6,a7=mml2.retrieveFamilyIdsOnCells()
1386 self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
1387 self.assertTrue(not a7) # False because copy
1388 a8,a9=mml2.retrieveNumberIdsOnCells()
1389 self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
1390 self.assertTrue(not a9) # False because copy
1392 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1393 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1394 f.loadArraysIfNecessary()
1395 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1396 self.assertEqual(f.getName(),fieldName3)
1397 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1398 vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1399 self.assertTrue(v.isEqual(vExp,1e-12))
1404 """ This test plays with with gauss fields with no profiles.
1406 fname="ForMEDReader8.med"
1407 # building a mesh containing 6 tri3 + 5 quad4
1408 m=MEDCouplingUMesh("mesh",2)
1409 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
1412 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
1413 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1414 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
1415 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1416 mm=MEDFileUMesh() ; mm.setMeshes([m])
1418 fieldName0="zeField0"
1419 fieldName1="zeField1"
1420 fieldName2="zeField2"
1421 fieldName3="zeField3"
1422 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1425 fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1426 fNode.setName(fieldName0) ; fNode.setMesh(m)
1427 arr=DataArrayDouble(2*38) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1428 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1429 f.setFieldNoProfileSBT(fNode)
1430 fs0.pushBackTimeStep(f)
1433 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1434 fNode.setName(fieldName1) ; fNode.setMesh(m)
1435 arr=DataArrayDouble(2*11) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1436 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1437 f.setFieldNoProfileSBT(fNode)
1438 fs1.pushBackTimeStep(f)
1441 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1442 fNode.setName(fieldName2) ; fNode.setMesh(m)
1443 fNode.setGaussLocalizationOnCells([0,1,2,3],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1444 fNode.setGaussLocalizationOnCells([4,5],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1445 fNode.setGaussLocalizationOnCells([6,7,8],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1446 fNode.setGaussLocalizationOnCells([9,10],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1447 arr=DataArrayDouble(2*(4*2+2*5+3*4+2*7)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1448 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1449 f.setFieldNoProfileSBT(fNode)
1450 fs2.pushBackTimeStep(f)
1453 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1454 fNode.setName(fieldName3) ; fNode.setMesh(m)
1455 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1456 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1457 f.setFieldNoProfileSBT(fNode)
1458 fs3.pushBackTimeStep(f)
1463 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1464 a0Exp=mm.getCoords().deepCpy()
1465 del m,mm,fs1,fs2,fs3,f,fNode
1466 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1467 ms=MEDFileMeshes(fname)
1468 fields=MEDFileFields(fname,False)
1469 fields.removeFieldsWithoutAnyTimeStep()
1470 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1471 allFMTSLeavesToDisplay=[]
1472 for fields in fields_per_mesh:
1473 allFMTSLeavesToDisplay2=[]
1475 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1477 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1479 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1480 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1481 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1482 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1483 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1484 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1485 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1486 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1488 mst=MEDFileMeshStruct.New(ms[0])
1490 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1491 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1493 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1494 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1495 self.assertTrue(not ncc)
1496 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1497 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
1498 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,20,24,29,34,39,44])))
1499 self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,0,5,6,1,4,1,6,7,2,4,5,10,11,6,4,6,11,12,7,4,12,13,8,7])))
1500 self.assertTrue(a4 is None)
1501 self.assertTrue(a5 is None)
1502 for i in xrange(1,5):
1503 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1506 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1507 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1508 f.loadArraysIfNecessary()
1509 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1510 self.assertEqual(f.getName(),fieldName0)
1511 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1512 vExp=DataArrayDouble(38*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1513 self.assertTrue(v.isEqual(vExp,1e-12))
1515 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1516 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1517 f.loadArraysIfNecessary()
1518 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1519 self.assertEqual(f.getName(),fieldName1)
1520 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1521 vExp=DataArrayDouble(11*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1522 self.assertTrue(v.isEqual(vExp,1e-12))
1524 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1525 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1526 f.loadArraysIfNecessary()
1527 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1528 self.assertEqual(f.getName(),fieldName2)
1529 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1530 vExp=DataArrayDouble(44*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1531 self.assertTrue(v.isEqual(vExp,1e-12))
1533 f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1534 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1535 f.loadArraysIfNecessary()
1536 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1537 self.assertEqual(f.getName(),fieldName3)
1538 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1539 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1540 self.assertTrue(v.isEqual(vExp,1e-12))
1546 """ This test plays with with gauss fields with profiles.
1548 fname="ForMEDReader9.med"
1549 # building a mesh containing 6 tri3 + 5 quad4
1550 m=MEDCouplingUMesh("mesh",2)
1551 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
1554 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
1555 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1556 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
1557 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1558 mm=MEDFileUMesh() ; mm.setMeshes([m])
1560 fieldName0="zeField0"
1561 fieldName1="zeField1"
1562 fieldName2="zeField2"
1563 fieldName3="zeField3"
1564 pfl1=DataArrayInt([0,1,7,9,10]) ; pfl1.setName("pfl1") # on cells
1565 pfl2=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl2.setName("pfl2") # on nodes
1566 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1569 fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1570 fNode.setName(fieldName0)
1571 arr=DataArrayDouble(2*18) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1572 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1573 f.setFieldProfile(fNode,mm,0,pfl1)
1574 fs0.pushBackTimeStep(f)
1577 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1578 fNode.setName(fieldName1)
1579 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1580 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1581 f.setFieldProfile(fNode,mm,0,pfl1)
1582 fs1.pushBackTimeStep(f)
1585 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1586 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1587 fNode.setGaussLocalizationOnCells([0],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1588 fNode.setGaussLocalizationOnCells([1],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1589 fNode.setGaussLocalizationOnCells([2,3],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1590 fNode.setGaussLocalizationOnCells([4],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1591 arr=DataArrayDouble(2*(2*1+5*1+4*2+7*1)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1592 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1593 f.setFieldProfile(fNode,mm,0,pfl1)
1594 fs2.pushBackTimeStep(f)
1597 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1598 fNode.setName(fieldName3)
1599 arr=DataArrayDouble(2*9) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1600 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1601 f.setFieldProfile(fNode,mm,0,pfl2)
1602 fs3.pushBackTimeStep(f)
1607 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1608 a0Exp=mm.getCoords().deepCpy()
1609 del m,mm,fs1,fs2,fs3,f,fNode
1610 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1611 ms=MEDFileMeshes(fname)
1612 fields=MEDFileFields(fname,False)
1613 fields.removeFieldsWithoutAnyTimeStep()
1614 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1615 allFMTSLeavesToDisplay=[]
1616 for fields in fields_per_mesh:
1617 allFMTSLeavesToDisplay2=[]
1619 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1621 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1623 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1624 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1625 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1626 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1627 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1628 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1629 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1630 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1632 mst=MEDFileMeshStruct.New(ms[0])
1634 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1635 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1637 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1638 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1639 self.assertTrue(not ncc)
1640 self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
1641 self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1642 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18])))
1643 self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
1644 self.assertTrue(a4 is None)
1645 self.assertTrue(a5 is None)
1646 for i in xrange(1,5):
1647 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1650 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1651 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1652 f.loadArraysIfNecessary()
1653 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1654 self.assertEqual(f.getName(),fieldName0)
1655 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1656 vExp=DataArrayDouble(18*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1657 self.assertTrue(v.isEqual(vExp,1e-12))
1659 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1660 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1661 f.loadArraysIfNecessary()
1662 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1663 self.assertEqual(f.getName(),fieldName1)
1664 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1665 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1666 self.assertTrue(v.isEqual(vExp,1e-12))
1668 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1669 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1670 f.loadArraysIfNecessary()
1671 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1672 self.assertEqual(f.getName(),fieldName2)
1673 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1674 vExp=DataArrayDouble(22*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1675 self.assertTrue(v.isEqual(vExp,1e-12))
1677 f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1678 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1679 f.loadArraysIfNecessary()
1680 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1681 self.assertEqual(f.getName(),fieldName3)
1682 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1683 vExp=DataArrayDouble(9*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1684 self.assertTrue(v.isEqual(vExp,1e-12))
1689 """ This test plays with fields only on nodes containing profiles.
1691 fname="ForMEDReader10.med"
1692 # building a mesh containing 6 tri3 + 5 quad4
1693 m=MEDCouplingUMesh("mesh",2)
1694 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
1697 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
1698 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1699 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
1700 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1701 mm=MEDFileUMesh() ; mm.setMeshes([m])
1703 fieldName0="zeField0"
1704 fieldName1="zeField1"
1705 fieldName2="zeField2"
1706 pfl1=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl1.setName("pfl1") # on nodes
1707 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS()
1710 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1711 fNode.setName(fieldName0)
1712 arr=DataArrayDouble(2*9) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1713 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1714 f.setFieldProfile(fNode,mm,0,pfl1)
1715 fs0.pushBackTimeStep(f)
1718 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1719 fNode.setName(fieldName1)
1720 arr=DataArrayDouble(2*9) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1721 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1722 f.setFieldProfile(fNode,mm,0,pfl1)
1723 fs1.pushBackTimeStep(f)
1726 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1727 fNode.setName(fieldName2)
1728 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1729 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1730 f.setFieldProfile(fNode,mm,0,pfl1)
1731 fs2.pushBackTimeStep(f)
1736 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0)
1737 a0Exp=mm.getCoords().deepCpy()
1738 del m,mm,fs1,fs2,f,fNode
1739 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1740 ms=MEDFileMeshes(fname)
1741 fields=MEDFileFields(fname,False)
1742 fields.removeFieldsWithoutAnyTimeStep()
1743 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1744 allFMTSLeavesToDisplay=[]
1745 for fields in fields_per_mesh:
1746 allFMTSLeavesToDisplay2=[]
1748 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1750 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1752 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1753 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
1754 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1755 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1756 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
1757 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1758 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1759 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
1761 mst=MEDFileMeshStruct.New(ms[0])
1763 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1764 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1766 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1767 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1768 self.assertTrue(not ncc)
1769 self.assertTrue(a0.isEqual(a0Exp[pfl1].changeNbOfComponents(3,0.),1e-12))
1770 self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1771 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18])))
1772 self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
1773 self.assertTrue(a4 is None)
1774 self.assertTrue(a5 is None)
1775 for i in xrange(1,5):
1776 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1779 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1780 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1781 f.loadArraysIfNecessary()
1782 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1783 self.assertEqual(f.getName(),fieldName0)
1784 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1785 vExp=DataArrayDouble(9*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1786 self.assertTrue(v.isEqual(vExp,1e-12))
1788 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1789 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1790 f.loadArraysIfNecessary()
1791 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1792 self.assertEqual(f.getName(),fieldName1)
1793 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1794 vExp=DataArrayDouble(9*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1795 self.assertTrue(v.isEqual(vExp,1e-12))
1797 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1798 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1799 f.loadArraysIfNecessary()
1800 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1801 self.assertEqual(f.getName(),fieldName2)
1802 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1803 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1804 self.assertTrue(v.isEqual(vExp,1e-12))
1809 """ This test is the ultimate test for the profiles with gauss points. It tests that even if there is non contiguous parts in definition of gauss points, it works !
1810 WARNING here, as no other discretizations exists, the priority is given to the field -> the mesh is renumbered to accelerate the build of array of field.
1812 fname="ForMEDReader11.med"
1813 m=MEDCouplingCMesh("mesh")
1814 arr=DataArrayDouble(5) ; arr.iota()
1815 m.setCoords(arr,arr)
1816 m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1817 mm=MEDFileUMesh() ; mm.setMeshes([m])
1819 fieldName0="zeField0"
1820 fs0=MEDFileFieldMultiTS()
1823 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1824 fNode.setName(fieldName0) ; fNode.setMesh(m)
1825 fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1826 fNode.setGaussLocalizationOnCells([1,5,8,9],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1827 fNode.setGaussLocalizationOnCells([6,10,13],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1828 fNode.setGaussLocalizationOnCells([11,12,14],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1829 arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1830 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1831 f.setFieldNoProfileSBT(fNode)
1832 fs0.pushBackTimeStep(f)
1836 a0Exp=mm.getCoords().deepCpy()
1837 del m,mm,fs0,f,fNode
1838 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1839 ms=MEDFileMeshes(fname)
1840 fields=MEDFileFields(fname,False)
1841 fields.removeFieldsWithoutAnyTimeStep()
1842 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1843 allFMTSLeavesToDisplay=[]
1844 for fields in fields_per_mesh:
1845 allFMTSLeavesToDisplay2=[]
1847 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1849 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1851 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1852 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
1853 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1854 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 1 field is defined on the same time steps
1855 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
1856 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1857 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1858 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
1860 mst=MEDFileMeshStruct.New(ms[0])
1862 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1863 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1865 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1866 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1867 self.assertTrue(not ncc)
1868 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1869 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1870 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
1871 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,9,8,13,14,4,19,18,23,24,4,2,1,6,7,4,7,6,11,12,4,11,10,15,16,4,12,11,16,17,4,8,7,12,13,4,13,12,17,18,4,17,16,21,22,4,14,13,18,19,4,16,15,20,21,4,18,17,22,23]))) # <- here the mesh is renumbered : the mesh is equal to m[[0,2,3,4,7,15, 1,5,8,9, 6,10,13, 11,12,14]]
1872 self.assertTrue(a4 is None)
1873 self.assertTrue(a5 is None)
1874 for i in xrange(1,5):
1875 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1878 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1879 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1880 f.loadArraysIfNecessary()
1881 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1882 self.assertEqual(f.getName(),fieldName0)
1883 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1884 vExp=DataArrayDouble([0.,1.,2.,3.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,44.,45.,46.,47.,126.,127.,128.,129.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.,64.,65.,66.,67.,36.,37.,38.,39.,40.,41.,42.,43.,68.,69.,70.,71.,72.,73.,74.,75.,104.,105.,106.,107.,108.,109.,110.,111.,76.,77.,78.,79.,80.,81.,82.,83.,84.,85.,86.,87.,88.,89.,90.,91.,92.,93.,94.,95.,96.,97.,98.,99.,100.,101.,102.,103.,112.,113.,114.,115.,116.,117.,118.,119.,120.,121.,122.,123.,124.,125.],65,2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1886 self.assertTrue(v.isEqual(vExp,1e-12))
1891 """ This test is the second ultimate test for the profiles with gauss points.
1892 This test is close to test11 but here a 2nd field on cells without profile. So here the mesh is expected to be the same than m.
1894 fname="ForMEDReader12.med"
1895 m=MEDCouplingCMesh("mesh")
1896 arr=DataArrayDouble(5) ; arr.iota()
1897 m.setCoords(arr,arr)
1898 m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1899 mm=MEDFileUMesh() ; mm.setMeshes([m])
1901 fieldName0="zeField0"
1902 fieldName1="zeField1"
1903 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
1906 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1907 fNode.setName(fieldName0) ; fNode.setMesh(m)
1908 fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1909 fNode.setGaussLocalizationOnCells([1,5,8,9],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1910 fNode.setGaussLocalizationOnCells([6,10,13],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1911 fNode.setGaussLocalizationOnCells([11,12,14],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1912 arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1913 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1914 f.setFieldNoProfileSBT(fNode)
1915 fs0.pushBackTimeStep(f)
1918 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1919 fNode.setName(fieldName1) ; fNode.setMesh(m)
1920 arr=DataArrayDouble(2*16) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1921 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1922 f.setFieldNoProfileSBT(fNode)
1923 fs1.pushBackTimeStep(f)
1926 fs0.write(fname,0) ; fs1.write(fname,0)
1927 a0Exp=mm.getCoords().deepCpy()
1928 del m,mm,fs0,fs1,f,fNode
1929 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1930 ms=MEDFileMeshes(fname)
1931 fields=MEDFileFields(fname,False)
1932 fields.removeFieldsWithoutAnyTimeStep()
1933 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1934 allFMTSLeavesToDisplay=[]
1935 for fields in fields_per_mesh:
1936 allFMTSLeavesToDisplay2=[]
1938 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1940 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1942 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1943 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
1944 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1945 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1946 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
1947 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1948 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1949 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1951 mst=MEDFileMeshStruct.New(ms[0])
1953 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1954 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1956 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1957 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1958 self.assertTrue(not ncc)
1959 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1960 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1961 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
1962 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24]))) # <- here the mesh is NOT renumbered : the mesh is equal to m
1963 self.assertTrue(a4 is None)
1964 self.assertTrue(a5 is None)
1965 for i in xrange(1,5):
1966 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1969 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1970 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1971 f.loadArraysIfNecessary()
1972 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1973 self.assertEqual(f.getName(),fieldName0)
1974 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1975 vExp=DataArrayDouble(65*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1976 self.assertTrue(v.isEqual(vExp,1e-12))
1978 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1979 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1980 f.loadArraysIfNecessary()
1981 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1982 self.assertEqual(f.getName(),fieldName1)
1983 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1984 vExp=DataArrayDouble(16*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1985 self.assertTrue(v.isEqual(vExp,1e-12))
1989 """ Testing polyhedrons mixed with hexa8"""
1990 fname="ForMEDReader13.med"
1991 m=MEDCouplingUMesh("mesh",3)
1993 m.insertNextCell(NORM_HEXA8,[1,0,6,7,13,12,18,19]) ; m.insertNextCell(NORM_HEXA8,[2,1,7,8,14,13,19,20])
1994 m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
1995 m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
1996 m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
1997 coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
1999 mm=MEDFileUMesh() ; mm.setMeshes([m])
2000 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
2001 fieldName0="zeField0"
2002 fieldName1="zeField1"
2003 fieldName2="zeField2" ; pfl1=DataArrayInt([2,3]) ; pfl1.setName("pfl1")
2004 fieldName3="zefield3" ; pfl2=DataArrayInt([2,3,4]) ; pfl2.setName("pfl2")
2007 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2008 fNode.setName(fieldName0) ; fNode.setMesh(m)
2009 arr=DataArrayDouble(2*5) ; arr.iota(0+1000*i) ; arr.rearrange(2)
2010 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
2011 f.setFieldNoProfileSBT(fNode)
2012 fs0.pushBackTimeStep(f)
2015 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2016 fNode.setName(fieldName1) ; fNode.setMesh(m)
2017 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2018 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2019 f.setFieldNoProfileSBT(fNode)
2020 fs1.pushBackTimeStep(f)
2023 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2024 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
2025 arr=DataArrayDouble(2*2) ; arr.iota(200+1000*i) ; arr.rearrange(2)
2026 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
2027 f.setFieldProfile(fNode,mm,0,pfl1)
2028 fs2.pushBackTimeStep(f)
2031 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2032 fNode.setName(fieldName3) ; fNode.setMesh(m[pfl2])
2033 arr=DataArrayDouble(2*3) ; arr.iota(300+1000*i) ; arr.rearrange(2)
2034 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
2035 f.setFieldProfile(fNode,mm,0,pfl2)
2036 fs3.pushBackTimeStep(f)
2039 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
2040 a0Exp=mm.getCoords().deepCpy()
2042 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2043 ms=MEDFileMeshes(fname)
2044 fields=MEDFileFields(fname,False)
2045 fields.removeFieldsWithoutAnyTimeStep()
2046 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2047 allFMTSLeavesToDisplay=[]
2048 for fields in fields_per_mesh:
2049 allFMTSLeavesToDisplay2=[]
2051 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2053 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2055 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2056 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
2057 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2058 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2059 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
2060 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2061 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
2062 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2063 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
2064 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
2066 mst=MEDFileMeshStruct.New(ms[0])
2068 fcscp=allFMTSLeavesPerCommonSupport[0][1]
2069 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2071 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2072 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2073 self.assertTrue(ncc)
2074 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2075 self.assertTrue(a1.isEqual(DataArrayByte([12,12,42,42,42])))
2076 self.assertTrue(a2.isEqual(DataArrayInt([0,9,18,27,36])))
2077 self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,6,7,13,12,18,19,8,2,1,7,8,14,13,19,20,8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
2078 self.assertTrue(a4.isEqual(DataArrayInt([-1,-1,0,31,62])))
2079 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
2080 for i in xrange(1,5):
2081 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2085 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2086 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2087 f.loadArraysIfNecessary()
2088 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2089 self.assertEqual(f.getName(),fieldName0)
2090 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2091 vExp=DataArrayDouble(5*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2092 self.assertTrue(v.isEqual(vExp,1e-12))
2094 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2095 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2096 f.loadArraysIfNecessary()
2097 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2098 self.assertEqual(f.getName(),fieldName1)
2099 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2100 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2101 self.assertTrue(v.isEqual(vExp,1e-12))
2104 fcscp=allFMTSLeavesPerCommonSupport[1][1]
2105 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2107 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2108 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2109 self.assertTrue(ncc)
2110 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2111 self.assertTrue(a1.isEqual(DataArrayByte([42,42])))
2112 self.assertTrue(a2.isEqual(DataArrayInt([0,9])))
2113 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22])))
2114 self.assertTrue(a4.isEqual(DataArrayInt([0,31])))
2115 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4])))
2116 for i in xrange(1,5):
2117 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2121 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
2122 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2123 f.loadArraysIfNecessary()
2124 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2125 self.assertEqual(f.getName(),fieldName2)
2126 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2127 vExp=DataArrayDouble(2*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
2128 self.assertTrue(v.isEqual(vExp,1e-12))
2131 fcscp=allFMTSLeavesPerCommonSupport[2][1]
2132 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2134 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2135 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2136 self.assertTrue(ncc)
2137 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2138 self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2139 self.assertTrue(a2.isEqual(DataArrayInt([0,9,18])))
2140 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
2141 self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2142 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
2143 for i in xrange(1,5):
2144 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2148 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
2149 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2150 f.loadArraysIfNecessary()
2151 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2152 self.assertEqual(f.getName(),fieldName3)
2153 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2154 vExp=DataArrayDouble(3*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
2155 self.assertTrue(v.isEqual(vExp,1e-12))
2160 """ Testing only polyhedrons"""
2161 fname="ForMEDReader14.med"
2162 m=MEDCouplingUMesh("mesh",3)
2164 m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
2165 m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
2166 m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
2167 coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
2169 mm=MEDFileUMesh() ; mm.setMeshes([m])
2170 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
2171 fieldName0="zeField0"
2172 fieldName1="zeField1"
2175 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2176 fNode.setName(fieldName0) ; fNode.setMesh(m)
2177 arr=DataArrayDouble(2*3) ; arr.iota(0+1000*i) ; arr.rearrange(2)
2178 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
2179 f.setFieldNoProfileSBT(fNode)
2180 fs0.pushBackTimeStep(f)
2183 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2184 fNode.setName(fieldName1) ; fNode.setMesh(m)
2185 arr=DataArrayDouble(2*3) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2186 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2187 f.setFieldNoProfileSBT(fNode)
2188 fs1.pushBackTimeStep(f)
2191 fs0.write(fname,0) ; fs1.write(fname,0)
2192 a0Exp=mm.getCoords().deepCpy()
2194 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2195 ms=MEDFileMeshes(fname)
2196 fields=MEDFileFields(fname,False)
2197 fields.removeFieldsWithoutAnyTimeStep()
2198 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2199 allFMTSLeavesToDisplay=[]
2200 for fields in fields_per_mesh:
2201 allFMTSLeavesToDisplay2=[]
2203 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2205 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2207 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2208 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2209 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2210 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2211 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2212 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2213 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2214 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2216 mst=MEDFileMeshStruct.New(ms[0])
2218 fcscp=allFMTSLeavesPerCommonSupport[0][1]
2219 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2221 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2222 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2223 self.assertTrue(ncc)
2224 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2225 self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2226 self.assertTrue(a2.isEqual(DataArrayInt([0,9,18])))
2227 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
2228 self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2229 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
2230 for i in xrange(1,5):
2231 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2233 a6,a7=mml2.retrieveFamilyIdsOnCells()
2234 self.assertTrue(a6.isEqual(DataArrayInt([0,0,0])))
2236 a8,a9=mml2.retrieveNumberIdsOnCells()
2237 self.assertTrue(a8 is None)
2240 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2241 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2242 f.loadArraysIfNecessary()
2243 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2244 self.assertEqual(f.getName(),fieldName0)
2245 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2246 vExp=DataArrayDouble(3*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2247 self.assertTrue(v.isEqual(vExp,1e-12))
2249 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2250 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2251 f.loadArraysIfNecessary()
2252 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2253 self.assertEqual(f.getName(),fieldName1)
2254 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2255 vExp=DataArrayDouble(3*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2256 self.assertTrue(v.isEqual(vExp,1e-12))
2262 "ForMEDReader15.med" file has a spaceDim 3 mesh "mesh" (it is important !)
2263 and a field "zeField" lying on a single geometric type for Cell discr and node part.
2264 Test that can appear the most simple but it hides a big issue of MEDReader
2265 that copies are reduced at most. So it can leads to SIGSEGV if the memory management is not OK for int* and double * similar between VTK and MEDCoupling.
2267 fname="ForMEDReader15.med"
2268 m0=MEDCouplingCMesh()
2269 arr=DataArrayDouble(3) ; arr.iota(0)
2270 m0.setCoords(arr,arr,arr)
2272 m0=m0.buildUnstructured()
2275 fCell=MEDCouplingFieldDouble(ON_CELLS)
2276 fCell.setName(fieldName)
2279 fNode=MEDCouplingFieldDouble(ON_NODES)
2280 fNode.setName(fieldName)
2284 mm.setMeshAtLevel(0,m0)
2285 fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
2286 num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
2288 ffs=MEDFileFieldMultiTS()
2291 f1ts=MEDFileField1TS()
2292 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2295 fCell.checkCoherency()
2296 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2300 fNode.checkCoherency()
2301 f1ts.setFieldNoProfileSBT(fCell)
2302 f1ts.setFieldNoProfileSBT(fNode)
2303 ffs.pushBackTimeStep(f1ts)
2305 t=(2.1,1,0) ; off=100.
2306 f1ts=MEDFileField1TS()
2307 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2310 fCell.checkCoherency()
2311 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2315 fNode.checkCoherency()
2316 f1ts.setFieldNoProfileSBT(fCell)
2317 f1ts.setFieldNoProfileSBT(fNode)
2318 ffs.pushBackTimeStep(f1ts)
2320 t=(3.2,2,0) ; off=200.
2321 f1ts=MEDFileField1TS()
2322 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2325 fCell.checkCoherency()
2326 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2330 fNode.checkCoherency()
2331 f1ts.setFieldNoProfileSBT(fCell)
2332 f1ts.setFieldNoProfileSBT(fNode)
2333 ffs.pushBackTimeStep(f1ts)
2335 t=(4.3,3,1) ; off=300.
2336 f1ts=MEDFileField1TS()
2337 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2340 fCell.checkCoherency()
2341 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2345 fNode.checkCoherency()
2346 f1ts.setFieldNoProfileSBT(fCell)
2347 f1ts.setFieldNoProfileSBT(fNode)
2348 ffs.pushBackTimeStep(f1ts)
2352 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2353 ms=MEDFileMeshes(fname)
2354 fields=MEDFileFields(fname,False)
2355 fields.removeFieldsWithoutAnyTimeStep()
2356 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2357 allFMTSLeavesToDisplay=[]
2358 for fields in fields_per_mesh:
2359 allFMTSLeavesToDisplay2=[]
2361 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2363 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2365 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2366 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2367 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2368 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2369 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2370 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2371 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2372 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2374 mst=MEDFileMeshStruct.New(ms[0])
2376 fcscp=allFMTSLeavesPerCommonSupport[0][1]
2377 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2379 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2380 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2381 self.assertTrue(ncc)
2382 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.0],27,3),1e-12))
2383 self.assertTrue(a1.isEqual(DataArrayByte([12,12,12,12,12,12,12,12])))
2384 self.assertTrue(a2.isEqual(DataArrayInt([0,9,18,27,36,45,54,63])))
2385 self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,3,4,10,9,12,13,8,2,1,4,5,11,10,13,14,8,4,3,6,7,13,12,15,16,8,5,4,7,8,14,13,16,17,8,10,9,12,13,19,18,21,22,8,11,10,13,14,20,19,22,23,8,13,12,15,16,22,21,24,25,8,14,13,16,17,23,22,25,26])))
2386 self.assertTrue(a4 is None)
2387 self.assertTrue(a5 is None)
2388 a6,a7=mml2.retrieveFamilyIdsOnCells()
2389 self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
2390 self.assertTrue(a7) # no copy here
2391 a8,a9=mml2.retrieveNumberIdsOnCells()
2392 self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
2393 self.assertTrue(a9) # no copy here
2397 """ Here 2 meshes "mesh1" and "mesh2" and 4 fields (no profiles here) :
2398 - "zeField1_0" (CELLS) and "zeField2_0" (NODES) on "mesh1"
2399 - "zeField3_1" (CELLS) and "zeField4_1" (NODES) on "mesh2"
2400 time steps series are the same for the whole 4 fields
2402 fname="ForMEDReader16.med"
2403 m0=MEDCouplingCMesh()
2404 arr=DataArrayDouble(3) ; arr.iota(0)
2405 m0.setCoords(arr,arr,arr)
2407 m0=m0.buildUnstructured()
2409 fCell1=MEDCouplingFieldDouble(ON_CELLS)
2410 fCell1.setName("zeField1_0")
2413 fNode1=MEDCouplingFieldDouble(ON_NODES)
2414 fNode1.setName("zeField2_0")
2419 mm1.setMeshAtLevel(0,m0)
2420 fam=DataArrayInt([0,1,0,1,2,3,2,3]); mm1.setFamilyFieldArr(0,fam) ; del fam
2421 num=DataArrayInt(8) ; num.iota(100) ; mm1.setRenumFieldArr(0,num) ; del num
2422 mm1.setFamilyId("FAMILLE_ZERO",0) ; mm1.setFamilyId("Family1_1",1) ; mm1.setFamilyId("Family1_2",2) ; mm1.setFamilyId("Family1_3",3) ; mm1.setFamilyId("Family1_4",4)
2423 mm1.setFamiliesIdsOnGroup("Grp1_1",[0,1]) ; mm1.setFamiliesIdsOnGroup("Grp1_2",[2,3])
2424 mms.pushMesh(mm1) ; del mm1
2426 m1=m0.deepCpy() ; m1.translate([2.5,0.,0.]) ; m1.setName("mesh2")
2428 fCell2=MEDCouplingFieldDouble(ON_CELLS)
2429 fCell2.setName("zeField3_1")
2432 fNode2=MEDCouplingFieldDouble(ON_NODES)
2433 fNode2.setName("zeField4_1")
2437 mm2.setMeshAtLevel(0,m1)
2438 fam=DataArrayInt([0,1,0,1,2,3,2,3]); mm2.setFamilyFieldArr(0,fam) ; del fam
2439 num=DataArrayInt(8) ; num.iota(200) ; mm2.setRenumFieldArr(0,num) ; del num
2440 mm2.setFamilyId("FAMILLE_ZERO",0) ; mm2.setFamilyId("Family2_1",1) ; mm2.setFamilyId("Family2_2",2) ; mm2.setFamilyId("Family2_3",3) ; mm2.setFamilyId("Family2_4",4)
2441 mm2.setFamiliesIdsOnGroup("Grp2_1",[0,1]) ; mm2.setFamiliesIdsOnGroup("Grp2_2",[2,3]) ; mm2.setFamiliesIdsOnGroup("Grp2_3",[1,2,3])
2442 mms.pushMesh(mm2) ; del mm2
2443 ffs1_1=MEDFileFieldMultiTS()
2444 ffs1_2=MEDFileFieldMultiTS()
2445 ffs2_1=MEDFileFieldMultiTS()
2446 ffs2_2=MEDFileFieldMultiTS()
2448 for elt in ffs1_1,ffs1_2,ffs2_1,ffs2_2:
2453 f1ts1=MEDFileField1TS()
2454 f1ts2=MEDFileField1TS()
2455 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2458 fCell1.checkCoherency()
2459 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2463 fNode1.checkCoherency()
2464 f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2465 f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2467 f1ts1=MEDFileField1TS()
2468 f1ts2=MEDFileField1TS()
2469 a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2472 fCell2.checkCoherency()
2473 a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2477 fNode2.checkCoherency()
2478 f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2479 f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2481 t=(2.1,1,0) ; off=100.
2482 f1ts1=MEDFileField1TS()
2483 f1ts2=MEDFileField1TS()
2484 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2487 fCell1.checkCoherency()
2488 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2492 fNode1.checkCoherency()
2493 f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2494 f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2496 f1ts1=MEDFileField1TS()
2497 f1ts2=MEDFileField1TS()
2498 a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2501 fCell2.checkCoherency()
2502 a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2506 fNode2.checkCoherency()
2507 f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2508 f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2510 t=(3.1,2,0) ; off=200.
2511 f1ts1=MEDFileField1TS()
2512 f1ts2=MEDFileField1TS()
2513 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2516 fCell1.checkCoherency()
2517 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2521 fNode1.checkCoherency()
2522 f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2523 f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2525 f1ts1=MEDFileField1TS()
2526 f1ts2=MEDFileField1TS()
2527 a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2530 fCell2.checkCoherency()
2531 a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2535 fNode2.checkCoherency()
2536 f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2537 f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2539 mms.write(fname,2) ; mts.write(fname,0)
2540 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2541 ms=MEDFileMeshes(fname)
2542 fields=MEDFileFields(fname,False)
2543 fields.removeFieldsWithoutAnyTimeStep()
2544 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2545 allFMTSLeavesToDisplay=[]
2546 for fields in fields_per_mesh:
2547 allFMTSLeavesToDisplay2=[]
2549 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2551 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2553 self.assertEqual(len(allFMTSLeavesToDisplay),2)
2554 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2555 self.assertEqual(len(allFMTSLeavesToDisplay[1]),2)
2556 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2557 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2558 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
2559 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2560 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2561 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
2562 allFMTSLeavesPerCommonSupport2=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2563 self.assertEqual(len(allFMTSLeavesPerCommonSupport2),1)
2564 self.assertEqual(len(allFMTSLeavesPerCommonSupport2[0][0]),2)
2568 """ First test on GAUSS_NE (Elno). Here no Profiles.
2571 fname="ForMEDReader17.med"
2572 fieldName1="MyFirstElno"
2573 fieldName2="ACellField"
2574 fieldName3="ANodeField"
2575 coo=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.],6,2)
2576 m=MEDCouplingUMesh("mesh",2)
2579 m.insertNextCell(NORM_QUAD4,[0,3,4,1])
2580 m.insertNextCell(NORM_QUAD4,[1,4,5,2])
2584 f=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f.setTime(*t) ; f.setMesh(m)
2585 f.setArray(DataArrayDouble([3.,5.,7.,6.,2.,3.,11.,8.]))
2586 f.setName(fieldName1)
2588 MEDLoader.WriteField(fname,f,True)
2589 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2590 f2.setArray(DataArrayDouble([7.,11.],2,1))
2591 f2.setName(fieldName2)
2592 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2593 f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2594 f3.setArray(DataArrayDouble([1.,2.,4.,1.,2.,4.],6,1))
2595 f3.setName(fieldName3)
2596 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2599 f=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f.setTime(*t) ; f.setMesh(m)
2600 f.setArray(DataArrayDouble([7.,6.,3.,5.,11.,8.,2.,3.]))
2601 f.setName(fieldName1)
2603 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f)
2604 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2605 f2.setArray(DataArrayDouble([11.,7.],2,1))
2606 f2.setName(fieldName2)
2607 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2608 f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2609 f3.setArray(DataArrayDouble([4.,2.,1.,4.,2.,1.],6,1))
2610 f3.setName(fieldName3)
2611 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2612 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2613 ms=MEDFileMeshes(fname)
2614 fields=MEDFileFields(fname,False)
2615 fields.removeFieldsWithoutAnyTimeStep()
2616 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2617 allFMTSLeavesToDisplay=[]
2618 for fields in fields_per_mesh:
2619 allFMTSLeavesToDisplay2=[]
2621 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2623 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2625 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2626 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2627 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2628 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2629 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2630 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2631 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2632 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2634 mst=MEDFileMeshStruct.New(ms[0])
2636 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2637 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2639 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2640 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2641 self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2642 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2643 self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2644 self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2645 self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2646 self.assertTrue(a4 is None)
2647 self.assertTrue(a5 is None)
2648 a6,a7=mml2.retrieveFamilyIdsOnCells()
2649 self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2650 self.assertTrue(a7) # no copy here
2651 a8,a9=mml2.retrieveNumberIdsOnCells()
2652 self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2653 self.assertTrue(a9) # no copy here
2654 for i in xrange(1,2):
2655 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2657 vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2658 vExp1=[DataArrayDouble([3.,5.,7.,6.,2.,3.,11.,8.]),DataArrayDouble([7.,6.,3.,5.,11.,8.,2.,3.])]
2660 f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2661 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2662 f.loadArraysIfNecessary()
2663 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2664 self.assertEqual(f.getName(),fieldName2)
2665 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2666 self.assertTrue(v.isEqual(vExp0[i],1e-12))
2668 f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2669 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2670 f.loadArraysIfNecessary()
2671 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2672 self.assertEqual(f.getName(),fieldName1)
2673 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2674 self.assertTrue(v.isEqual(vExp1[i],1e-12))
2679 """ First test on GAUSS_PT. Here no Profiles. 2 times steps.
2681 fname="ForMEDReader18.med"
2682 fieldName1="MyFirstGauss"
2683 fieldName2="ACellField"
2684 fieldName3="ANodeField"
2685 coo=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.],6,2)
2686 m=MEDCouplingUMesh("mesh",2)
2689 m.insertNextCell(NORM_QUAD4,[0,3,4,1])
2690 m.insertNextCell(NORM_QUAD4,[1,4,5,2])
2694 f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setTime(*t) ; f.setMesh(m)
2695 f.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.2,0.2,0.8,0.8],[0.7,0.3])
2696 f.setArray(DataArrayDouble([3.,5.,4.,6.])) ; f.getArray().setInfoOnComponents(["Smth"])
2697 f.setName(fieldName1)
2699 MEDLoader.WriteField(fname,f,True)
2700 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2701 f2.setArray(DataArrayDouble([7.,11.],2,1))
2702 f2.setName(fieldName2)
2703 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2704 f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2705 f3.setArray(DataArrayDouble([1.,2.,4.,1.,2.,4.],6,1))
2706 f3.setName(fieldName3)
2707 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2710 f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setTime(*t) ; f.setMesh(m)
2711 f.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.2,0.2,0.8,0.8],[0.7,0.3])
2712 f.setArray(DataArrayDouble([5.,3.,6.,4.])) ; f.getArray().setInfoOnComponents(["Smth"])
2713 f.setName(fieldName1)
2715 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f)
2716 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2717 f2.setArray(DataArrayDouble([11.,7.],2,1))
2718 f2.setName(fieldName2)
2719 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2720 f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2721 f3.setArray(DataArrayDouble([4.,2.,1.,4.,2.,1.],6,1))
2722 f3.setName(fieldName3)
2723 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2724 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2725 ms=MEDFileMeshes(fname)
2726 fields=MEDFileFields(fname,False)
2727 fields.removeFieldsWithoutAnyTimeStep()
2728 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2729 allFMTSLeavesToDisplay=[]
2730 for fields in fields_per_mesh:
2731 allFMTSLeavesToDisplay2=[]
2733 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2735 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2737 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2738 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2739 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2740 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2741 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2742 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2743 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2744 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2746 mst=MEDFileMeshStruct.New(ms[0])
2748 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2749 self.assertEqual([NORM_QUAD4],fcscp.getGeoTypesAt(0,ms[0]))
2750 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2752 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2753 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2754 self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2755 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2756 self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2757 self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2758 self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2759 self.assertTrue(a4 is None)
2760 self.assertTrue(a5 is None)
2761 a6,a7=mml2.retrieveFamilyIdsOnCells()
2762 self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2763 self.assertTrue(a7) # no copy here
2764 a8,a9=mml2.retrieveNumberIdsOnCells()
2765 self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2766 self.assertTrue(a9) # no copy here
2767 for i in xrange(1,2):
2768 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2770 vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2771 vExp1=[DataArrayDouble([3.,5.,4.,6.]),DataArrayDouble([5.,3.,6.,4.])]
2773 f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2774 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2775 f.loadArraysIfNecessary()
2776 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2777 self.assertEqual(f.getName(),fieldName2)
2778 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2779 self.assertTrue(v.isEqual(vExp0[i],1e-12))
2781 f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2782 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2783 f.loadArraysIfNecessary()
2784 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2785 self.assertEqual(f.getName(),fieldName1)
2786 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2787 vExp1[i].setInfoOnComponents(["Smth"])
2788 self.assertTrue(v.isEqual(vExp1[i],1e-12))
2790 ## Now same exercise but with a different load strategy. All is load directly.
2791 ms=MEDFileMeshes(fname)
2792 fields=MEDFileFields(fname) # here all is read, the SauvReader (or other Reader) is emulated
2793 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2794 allFMTSLeavesToDisplay=[]
2795 for fields in fields_per_mesh:
2796 allFMTSLeavesToDisplay2=[]
2798 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2800 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2802 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2803 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2804 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2805 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2806 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2807 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2808 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2809 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2811 mst=MEDFileMeshStruct.New(ms[0])
2813 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2814 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2816 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2817 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2818 self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2819 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2820 self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2821 self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2822 self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2823 self.assertTrue(a4 is None)
2824 self.assertTrue(a5 is None)
2825 a6,a7=mml2.retrieveFamilyIdsOnCells()
2826 self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2827 self.assertTrue(a7) # no copy here
2828 a8,a9=mml2.retrieveNumberIdsOnCells()
2829 self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2830 self.assertTrue(a9) # no copy here
2831 for i in xrange(1,2):
2832 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2834 vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2835 vExp1=[DataArrayDouble([3.,5.,4.,6.]),DataArrayDouble([5.,3.,6.,4.])]
2837 f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2838 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst) # no load needed here
2839 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2840 self.assertEqual(f.getName(),fieldName2)
2841 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2842 self.assertTrue(v.isEqual(vExp0[i],1e-12))
2844 f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2845 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst) # no load needed here
2846 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2847 self.assertEqual(f.getName(),fieldName1)
2848 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2849 vExp1[i].setInfoOnComponents(["Smth"])
2850 self.assertTrue(v.isEqual(vExp1[i],1e-12))
2856 This test is a simple non profile CELL field but lying on cells of dimension -1 (not 0 as "usual").
2858 fname="ForMEDReader19.med"
2859 fieldName="ACellFieldOnDimM1"
2860 coo=DataArrayDouble(3) ; coo.iota()
2861 m=MEDCouplingCMesh() ; m.setCoords(coo,coo,coo) ; m.setName("mesh")
2862 m0=m.buildUnstructured() ; del m
2866 mm.setMeshAtLevel(0,m0)
2867 mm.setMeshAtLevel(-1,m1)
2868 ff=MEDFileFieldMultiTS()
2871 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setTime(*t) ; f.setMesh(m1)
2872 f.setName(fieldName)
2873 arr=DataArrayDouble(24) ; arr.iota() ; arr.setInfoOnComponents(["AStr"])
2876 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f)
2877 ff.pushBackTimeStep(f1ts)
2880 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setTime(*t) ; f.setMesh(m1)
2881 f.setName(fieldName)
2882 arr=DataArrayDouble(24) ; arr.iota() ; arr.reverse() ; arr.setInfoOnComponents(["AStr"])
2885 f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f)
2886 ff.pushBackTimeStep(f1ts)
2890 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2891 ms=MEDFileMeshes(fname)
2892 fields=MEDFileFields(fname,False)
2893 fields.removeFieldsWithoutAnyTimeStep()
2894 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2895 allFMTSLeavesToDisplay=[]
2896 for fields in fields_per_mesh:
2897 allFMTSLeavesToDisplay2=[]
2899 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2901 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2903 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2904 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
2905 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2906 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2907 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
2908 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2909 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2910 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
2912 mst=MEDFileMeshStruct.New(ms[0])
2914 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2915 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2917 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2918 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2919 self.assertTrue(ncc)
2920 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.],27,3),1e-12))
2921 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
2922 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115])))
2923 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,3,4,4,1,10,9,0,4,0,9,12,3,4,2,1,4,5,4,2,11,10,1,4,5,14,11,2,4,4,3,6,7,4,3,12,15,6,4,6,15,16,7,4,5,4,7,8,4,7,16,17,8,4,8,17,14,5,4,19,22,21,18,4,10,19,18,9,4,9,18,21,12,4,20,23,22,19,4,11,20,19,10,4,14,23,20,11,4,22,25,24,21,4,12,21,24,15,4,15,24,25,16,4,23,26,25,22,4,16,25,26,17,4,17,26,23,14])))
2924 self.assertTrue(a4 is None)
2925 self.assertTrue(a5 is None)
2926 a6,a7=mml2.retrieveFamilyIdsOnCells()
2927 self.assertTrue(a6.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])))
2928 self.assertTrue(a7) # no copy here
2929 a8,a9=mml2.retrieveNumberIdsOnCells()
2930 self.assertTrue(a8 is None)
2931 self.assertTrue(a9) # no copy here
2932 a10,a11=mml2.retrieveFamilyIdsOnNodes()
2933 self.assertTrue(not a10)
2934 self.assertTrue(a11) # no copy here
2935 a12,a13=mml2.retrieveNumberIdsOnNodes()
2936 self.assertTrue(not a12)
2937 self.assertTrue(a13) # no copy here
2938 for i in xrange(1,2):
2939 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2942 f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2943 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2944 f.loadArraysIfNecessary()
2945 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2946 self.assertEqual(f.getName(),fieldName)
2947 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2948 vExp=DataArrayDouble(24) ; vExp.iota()
2949 if i==1: vExp.reverse()
2950 vExp.setInfoOnComponents(["AStr"])
2951 self.assertTrue(v.isEqual(vExp,1e-12))
2956 """ This test works with groups/families on cells AND on nodes. Here 4 fields each on same time steps (2).
2957 1 field on CELLS without profile, 1 field on CELLS with profile, 1 field on NODES without profile, 1 field on NODES with profile.
2958 All of these 4 fields lies on a single mesh "mesh". The 2 fields on profile lies on a same support.
2959 One drawback of this test : no multi geom type. Coming soon !
2961 fname="ForMEDReader20.med"
2962 fieldName0="ANodeField"
2963 fieldName1="ACellField"
2964 fieldName2="ANodeFieldPfl"
2965 fieldName3="ACellFieldPfl"
2966 pfl2=DataArrayInt([5,6,7,10,11,12,15,16,17,20,21,22]) ; pfl2.setName("pfl2")
2967 pfl3=DataArrayInt([4,5,8,9,12,13]) ; pfl3.setName("pfl3")
2969 arr=DataArrayDouble(5) ; arr.iota()
2970 m=MEDCouplingCMesh("mesh") ; m.setCoords(arr,arr)
2971 m=m.buildUnstructured()
2973 mm.setMeshAtLevel(0,m)
2975 fmts0=MEDFileFieldMultiTS() ; fs.pushField(fmts0)
2976 fmts0.setDtUnit("s")
2977 fmts1=MEDFileFieldMultiTS() ; fs.pushField(fmts1)
2978 fmts1.setDtUnit("s")
2979 fmts2=MEDFileFieldMultiTS() ; fs.pushField(fmts2)
2980 fmts2.setDtUnit("s")
2981 fmts3=MEDFileFieldMultiTS() ; fs.pushField(fmts3)
2982 fmts3.setDtUnit("s")
2985 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m)
2986 f0.setName(fieldName0) ; f0.setTime(*t)
2987 da=m.getCoords().magnitude() ; da.setInfoOnComponents(["zeInfo"])
2990 f1ts=MEDFileField1TS()
2991 f1ts.setFieldNoProfileSBT(f0)
2992 fmts0.pushBackTimeStep(f1ts)
2994 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(m)
2995 f1.setName(fieldName1) ; f1.setTime(*t)
2996 da=m.getBarycenterAndOwner().magnitude() ; da.setInfoOnComponents(["zeInfoCell"])
2999 f1ts=MEDFileField1TS()
3000 f1ts.setFieldNoProfileSBT(f1)
3001 fmts1.pushBackTimeStep(f1ts)
3003 f2=MEDCouplingFieldDouble(ON_NODES) ; mTmp=m[pfl3] ; mTmp.zipCoords() ; mTmp.setName(m.getName()) ; f2.setMesh(mTmp)
3004 f2.setName(fieldName2) ; f2.setTime(*t)
3005 da=m.getCoords().magnitude()[pfl2] ; da.setInfoOnComponents(["zzzz"])
3008 f1ts=MEDFileField1TS()
3009 f1ts.setFieldProfile(f2,mm,0,pfl2)
3010 fmts2.pushBackTimeStep(f1ts)
3012 f3=MEDCouplingFieldDouble(ON_CELLS) ; mTmp=m[pfl3] ; mTmp.setName(m.getName()) ; f3.setMesh(mTmp)
3013 f3.setName(fieldName3) ; f3.setTime(*t)
3014 da=mTmp.getBarycenterAndOwner().magnitude() ; da.setInfoOnComponents(["abcdefg"])
3017 f1ts=MEDFileField1TS()
3018 f1ts.setFieldProfile(f3,mm,0,pfl3)
3019 fmts3.pushBackTimeStep(f1ts)
3022 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m)
3023 f0.setName(fieldName0) ; f0.setTime(*t)
3024 da=m.getCoords().magnitude() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3027 f1ts=MEDFileField1TS()
3028 f1ts.setFieldNoProfileSBT(f0)
3029 fmts0.pushBackTimeStep(f1ts)
3031 f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(m)
3032 f1.setName(fieldName1) ; f1.setTime(*t)
3033 da=m.getBarycenterAndOwner().magnitude() ; da.reverse() ; da.setInfoOnComponents(["zeInfoCell"])
3036 f1ts=MEDFileField1TS()
3037 f1ts.setFieldNoProfileSBT(f1)
3038 fmts1.pushBackTimeStep(f1ts)
3040 f2=MEDCouplingFieldDouble(ON_NODES) ; mTmp=m[pfl3] ; mTmp.zipCoords() ; mTmp.setName(m.getName()) ; f2.setMesh(mTmp)
3041 f2.setName(fieldName2) ; f2.setTime(*t)
3042 da=m.getCoords().magnitude()[pfl2] ; da.reverse() ; da.setInfoOnComponents(["zzzz"])
3045 f1ts=MEDFileField1TS()
3046 f1ts.setFieldProfile(f2,mm,0,pfl2)
3047 fmts2.pushBackTimeStep(f1ts)
3049 f3=MEDCouplingFieldDouble(ON_CELLS) ; mTmp=m[pfl3] ; mTmp.setName(m.getName()) ; f3.setMesh(mTmp)
3050 f3.setName(fieldName3) ; f3.setTime(*t)
3051 da=mTmp.getBarycenterAndOwner().magnitude() ; da.reverse() ; da.setInfoOnComponents(["abcdefg"])
3054 f1ts=MEDFileField1TS()
3055 f1ts.setFieldProfile(f3,mm,0,pfl3)
3056 fmts3.pushBackTimeStep(f1ts)
3058 grp1=DataArrayInt([6,7,8,11,12,13,16,17,18]) ; grp1.setName("grp1")
3059 grp2=DataArrayInt([10,11,15,16,20,21]) ; grp2.setName("grp2")
3060 mm.setGroupsAtLevel(1,[grp1,grp2])
3061 grp3=DataArrayInt([4,5,6]) ; grp3.setName("grp3")
3062 grp4=DataArrayInt([8,9,10]) ; grp4.setName("grp4")
3063 mm.setGroupsAtLevel(0,[grp3,grp4])
3064 d=DataArrayInt(25) ; d.iota() ; d*=10 ; mm.setRenumFieldArr(1,d)
3065 d=DataArrayInt(16) ; d.iota() ; d*=11 ; mm.setRenumFieldArr(0,d)
3067 fs.appendGlobs(fmts2,1e-12)
3068 fs.appendGlobs(fmts3,1e-12)
3070 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3071 ms=MEDFileMeshes(fname)
3072 fields=MEDFileFields(fname,False)
3073 fields.removeFieldsWithoutAnyTimeStep()
3074 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3075 allFMTSLeavesToDisplay=[]
3076 for fields in fields_per_mesh:
3077 allFMTSLeavesToDisplay2=[]
3079 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3081 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3083 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3084 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
3085 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3086 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3087 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
3088 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3089 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3090 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
3091 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),2)
3093 mst=MEDFileMeshStruct.New(ms[0])
3095 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3096 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3098 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3099 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3100 self.assertTrue(not ncc)
3101 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,3.,2.,0.,4.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,3.,3.,0.,4.,3.,0.,0.,4.,0.,1.,4.,0.,2.,4.,0.,3.,4.,0.,4.,4.,0.],25,3),1e-12))
3102 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
3103 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
3104 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24])))
3105 self.assertTrue(a4 is None)
3106 self.assertTrue(a5 is None)
3107 a6,a7=mml2.retrieveFamilyIdsOnCells()
3108 self.assertTrue(a6.isEqual(DataArrayInt([-5,-5,-5,-5,-6,-6,-6,-5,-7,-7,-7,-5,-5,-5,-5,-5])))
3109 self.assertTrue(a7) # no copy here
3110 a8,a9=mml2.retrieveNumberIdsOnCells()
3111 self.assertTrue(a8.isEqual(DataArrayInt([0,11,22,33,44,55,66,77,88,99,110,121,132,143,154,165])))
3112 self.assertTrue(a9) # no copy here
3113 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3114 self.assertTrue(a10.isEqual(DataArrayInt([1,1,1,1,1,1,2,2,2,1,3,4,2,2,1,3,4,2,2,1,3,3,1,1,1])))
3115 self.assertTrue(a11) # no copy here
3116 a12,a13=mml2.retrieveNumberIdsOnNodes()
3117 self.assertTrue(a12.isEqual(DataArrayInt([0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240])))
3118 self.assertTrue(a13) # no copy here
3119 for i in xrange(1,2):
3120 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
3123 f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
3124 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3125 f.loadArraysIfNecessary()
3126 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3127 self.assertEqual(f.getName(),fieldName1)
3128 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3129 vExp=DataArrayDouble([0.7071067811865476,1.5811388300841898,2.5495097567963922,3.5355339059327378,1.5811388300841898,2.1213203435596424,2.9154759474226504,3.8078865529319543,2.5495097567963922,2.9154759474226504,3.5355339059327378,4.301162633521313,3.5355339059327378,3.8078865529319543,4.301162633521313,4.949747468305833])
3130 if i==1: vExp.reverse()
3131 vExp.setInfoOnComponents(["zeInfoCell"])
3132 self.assertTrue(v.isEqual(vExp,1e-12))
3134 f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
3135 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3136 f.loadArraysIfNecessary()
3137 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3138 self.assertEqual(f.getName(),fieldName0)
3139 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3140 vExp=DataArrayDouble([0.,1.,2.,3.,4.,1.,1.4142135623730951,2.23606797749979,3.1622776601683795,4.123105625617661,2.,2.23606797749979,2.8284271247461903,3.605551275463989,4.47213595499958,3.,3.1622776601683795,3.605551275463989,4.242640687119285,5.,4.,4.123105625617661,4.47213595499958,5.,5.656854249492381])
3141 if i==1: vExp.reverse()
3142 vExp.setInfoOnComponents(["zeInfo"])
3143 self.assertTrue(v.isEqual(vExp,1e-12))
3145 ### Testing the 2nd support
3146 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3147 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3149 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3150 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3151 self.assertTrue(not ncc)
3152 self.assertTrue(not ncc)
3153 self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,0.,4.,0.,1.,4.,0.,2.,4.,0.],12,3),1e-12))
3154 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9])))
3155 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25])))
3156 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
3157 self.assertTrue(a4 is None)
3158 self.assertTrue(a5 is None)
3159 a6,a7=mml2.retrieveFamilyIdsOnCells()
3160 self.assertTrue(a6.isEqual(DataArrayInt([-6,-6,-7,-7,-5,-5])))
3161 self.assertTrue(not a7) # copy here
3162 a8,a9=mml2.retrieveNumberIdsOnCells()
3163 self.assertTrue(a8.isEqual(DataArrayInt([44,55,88,99,132,143])))
3164 self.assertTrue(not a9) # copy here
3165 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3166 self.assertTrue(a10.isEqual(DataArrayInt([1,2,2,3,4,2,3,4,2,3,3,1])))
3167 self.assertTrue(not a11) # copy here
3168 a12,a13=mml2.retrieveNumberIdsOnNodes()
3169 self.assertTrue(a12.isEqual(DataArrayInt([50,60,70,100,110,120,150,160,170,200,210,220])))
3170 self.assertTrue(not a13) # copy here
3172 f=allFMTSLeavesPerCommonSupport1[1][0][0][i]
3173 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3174 f.loadArraysIfNecessary()
3175 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3176 self.assertEqual(f.getName(),fieldName3)
3177 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3178 vExp=DataArrayDouble([1.5811388300842,2.1213203435596,2.5495097567964,2.9154759474227,3.5355339059327,3.807886552932])
3179 if i==1: vExp.reverse()
3180 vExp.setInfoOnComponents(["abcdefg"])
3181 self.assertTrue(v.isEqual(vExp,1e-12))
3183 f=allFMTSLeavesPerCommonSupport1[1][0][1][i]
3184 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3185 f.loadArraysIfNecessary()
3186 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3187 self.assertEqual(f.getName(),fieldName2)
3188 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3189 vExp=DataArrayDouble([1.,1.4142135623731,2.2360679774998,2.,2.2360679774998,2.8284271247462,3.,3.1622776601684,3.605551275464,4.,4.1231056256177,4.4721359549996])
3190 if i==1: vExp.reverse()
3191 vExp.setInfoOnComponents(["zzzz"])
3192 self.assertTrue(v.isEqual(vExp,1e-12))
3197 """ Here the created MED file contains only a mesh. The aim here is to test capability of MEDReader to support no fields.
3198 This test checks nothing but write a MED file to be used by MEDReader tests.
3200 fname="ForMEDReader21.med"
3203 m0=MEDCouplingCMesh("mesh") ; arr=DataArrayDouble(5) ; arr.iota() ; m0.setCoords(arr,arr) ; m0=m0.buildUnstructured()
3204 mm.setMeshAtLevel(0,m0)
3205 grp0=DataArrayInt([5,6,9,10]) ; grp0.setName("Inside2D")
3206 grp1=DataArrayInt([0,1,2,3,4,7,8,11,12,13,14,15]) ; grp1.setName("Border2D")
3207 grp2=DataArrayInt([2,3,6,7]) ; grp2.setName("LowerRight2D")
3208 mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3210 m1=MEDCouplingUMesh(m0.getName(),1) ; m1.setCoords(m0.getCoords()) ; m1.allocateCells()
3211 for elt in [[0,1],[1,2],[2,3],[3,4],[4,9],[9,14],[14,19],[19,24],[24,23],[23,22],[22,21],[21,20],[20,15],[15,10],[10,5],[5,0],[2,7],[7,12],[12,17],[17,22],
3212 [10,11],[11,12],[12,13],[13,14]]:
3213 m1.insertNextCell(NORM_SEG2,elt)
3215 mm.setMeshAtLevel(-1,m1)
3216 grp4=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) ; grp4.setName("Border1D")
3217 grp5=DataArrayInt([16,17,18,19,20,21,22,23]) ; grp5.setName("Inside1D")
3218 grp6=DataArrayInt([18,19,22,23]) ; grp6.setName("UpperRight1D")
3219 mm.setGroupsAtLevel(-1,[grp4,grp5,grp6])
3221 grp7=DataArrayInt([1,2,3,6,7,8,11,12,13,16,17,18,21,22,23]) ; grp7.setName("InsideYNode")
3222 grp8=DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; grp8.setName("InsideXNode")
3223 mm.setGroupsAtLevel(1,[grp7,grp8])
3229 """ Use case where a field on nodes (ANodeField) on a mesh defined both in meshdim 2 and meshdim 1.
3230 The only possible geometrical support that suits the field is those with meshdim equal to 1 (-1 in relative).
3232 fname="ForMEDReader22.med"
3233 fieldName0="ANodeField"
3235 coo=DataArrayDouble([(4.,3.),(7.,3.),(2.,5.),(6.,5.),(9.,5.),(4.,7.),(8.,7.),(3.,8.),(9.,8.)])
3236 m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coo) ; m0.allocateCells() ; m0.insertNextCell(NORM_TRI3,[2,3,0]) ; m0.insertNextCell(NORM_TRI3,[3,1,0]) ; m0.insertNextCell(NORM_TRI3,[3,4,1])
3237 mm.setMeshAtLevel(0,m0)
3238 m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coo) ; m1.allocateCells() ; m1.insertNextCell(NORM_SEG2,[2,0]) ; m1.insertNextCell(NORM_SEG2,[0,1]) ; m1.insertNextCell(NORM_SEG2,[1,4])
3239 m1.insertNextCell(NORM_SEG2,[3,5]) ; m1.insertNextCell(NORM_SEG2,[5,7]) ; m1.insertNextCell(NORM_SEG2,[3,6]) ; m1.insertNextCell(NORM_SEG2,[6,8])
3240 mm.setMeshAtLevel(-1,m1)
3242 fmts0=MEDFileFieldMultiTS() ; fs.pushField(fmts0)
3243 fmts0.setDtUnit("s")
3246 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1)
3247 f0.setName(fieldName0) ; f0.setTime(*t)
3248 da=DataArrayDouble(9) ; da.iota() ; da.setInfoOnComponents(["zeInfo"])
3251 f1ts=MEDFileField1TS()
3252 f1ts.setFieldNoProfileSBT(f0)
3253 fmts0.pushBackTimeStep(f1ts)
3256 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1)
3257 f0.setName(fieldName0) ; f0.setTime(*t)
3258 da=DataArrayDouble(9) ; da.iota() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3261 f1ts=MEDFileField1TS()
3262 f1ts.setFieldNoProfileSBT(f0)
3263 fmts0.pushBackTimeStep(f1ts)
3267 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3268 ms=MEDFileMeshes(fname)
3269 fields=MEDFileFields(fname,False)
3270 fields.removeFieldsWithoutAnyTimeStep()
3271 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3272 allFMTSLeavesToDisplay=[]
3273 for fields in fields_per_mesh:
3274 allFMTSLeavesToDisplay2=[]
3276 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3278 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3280 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3281 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3282 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3283 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3284 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3285 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3286 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
3287 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3289 mst=MEDFileMeshStruct.New(ms[0])
3291 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3292 self.assertEqual([NORM_TRI3,NORM_SEG2],fcscp.getGeoTypesAt(0,ms[0]))#contains all cell types of underlying mesh because only nodes with no profiles
3293 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3295 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3296 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3297 self.assertTrue(not ncc)
3298 self.assertTrue(a0.isEqual(DataArrayDouble([(4.,3.,0.),(7.,3.,0.),(2.,5.,0.),(6.,5.,0.),(9.,5.,0.),(4.,7.,0.),(8.,7.,0.),(3.,8.,0.),(9.,8.,0.)]),1e-12))
3299 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,3,3,3,3,3,3,3])))
3300 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,15,18,21,24,27,30])))
3301 self.assertTrue(a3.isEqual(DataArrayInt([3,2,3,0,3,3,1,0,3,3,4,1,2,2,0,2,0,1,2,1,4,2,3,5,2,5,7,2,3,6,2,6,8])))
3302 self.assertTrue(a4 is None)
3303 self.assertTrue(a5 is None)
3304 a6,a7=mml2.retrieveFamilyIdsOnCells()
3305 self.assertTrue(a6.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0])))
3306 self.assertTrue(not a7) # copy here
3307 a8,a9=mml2.retrieveNumberIdsOnCells()
3308 self.assertTrue(not a8)
3309 self.assertTrue(a9) # nocopy here
3310 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3311 self.assertTrue(not a10)
3312 self.assertTrue(a11) # no copy here
3313 a12,a13=mml2.retrieveNumberIdsOnNodes()
3314 self.assertTrue(not a12)
3315 self.assertTrue(a13) # no copy here
3317 f=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3318 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3319 f.loadArraysIfNecessary()
3320 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3321 self.assertEqual(f.getName(),fieldName0)
3322 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3323 vExp=DataArrayDouble(9) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"])
3324 self.assertTrue(v.isEqual(vExp,1e-12))
3326 f=allFMTSLeavesPerCommonSupport1[0][0][0][1]
3327 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3328 f.loadArraysIfNecessary()
3329 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3330 self.assertEqual(f.getName(),fieldName0)
3331 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3332 vExp=DataArrayDouble(9) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"]) ; vExp.reverse()
3333 self.assertTrue(v.isEqual(vExp,1e-12))
3337 """ Non regression test 2219 of modes. Idem than test22 except that here the node field is on profile.
3339 fname="ForMEDReader23.med"
3340 fieldName0="ANodeField"
3342 coo=DataArrayDouble([(4.,3.),(7.,3.),(2.,5.),(6.,5.),(9.,5.),(4.,7.),(8.,7.),(3.,8.),(9.,8.)])
3343 m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coo) ; m0.allocateCells() ; m0.insertNextCell(NORM_TRI3,[2,3,0]) ; m0.insertNextCell(NORM_TRI3,[3,1,0]) ; m0.insertNextCell(NORM_TRI3,[3,4,1])
3344 mm.setMeshAtLevel(0,m0)
3345 m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coo) ; m1.allocateCells() ; m1.insertNextCell(NORM_SEG2,[2,0]) ; m1.insertNextCell(NORM_SEG2,[0,1]) ; m1.insertNextCell(NORM_SEG2,[1,4])
3346 m1.insertNextCell(NORM_SEG2,[3,5]) ; m1.insertNextCell(NORM_SEG2,[5,7]) ; m1.insertNextCell(NORM_SEG2,[3,6]) ; m1.insertNextCell(NORM_SEG2,[6,8])
3347 mm.setMeshAtLevel(-1,m1)
3348 fmts0=MEDFileFieldMultiTS()
3349 fmts0.setDtUnit("s")
3351 pfl=DataArrayInt([0,1,2,4]) ; pfl.setName("pfl")
3352 pflCell=DataArrayInt([0,1,2]) ; m1Part=m1[pflCell] ; m1Part.zipCoords()
3355 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1Part)
3356 f0.setName(fieldName0) ; f0.setTime(*t)
3357 da=DataArrayDouble(4) ; da.iota() ; da.setInfoOnComponents(["zeInfo"])
3360 f1ts=MEDFileField1TS()
3361 f1ts.setFieldProfile(f0,mm,-1,pfl)
3362 fmts0.pushBackTimeStep(f1ts)
3365 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1Part)
3366 f0.setName(fieldName0) ; f0.setTime(*t)
3367 da=DataArrayDouble(4) ; da.iota() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3370 f1ts=MEDFileField1TS()
3371 f1ts.setFieldProfile(f0,mm,-1,pfl)
3372 fmts0.pushBackTimeStep(f1ts)
3374 fmts0.write(fname,0)
3375 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3376 ms=MEDFileMeshes(fname)
3377 fields=MEDFileFields(fname,False)
3378 fields.removeFieldsWithoutAnyTimeStep()
3379 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3380 allFMTSLeavesToDisplay=[]
3381 for fields in fields_per_mesh:
3382 allFMTSLeavesToDisplay2=[]
3384 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3386 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3388 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3389 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3390 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3391 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3392 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3393 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3394 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
3395 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3397 mst=MEDFileMeshStruct.New(ms[0])
3399 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3400 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3402 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3403 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3404 self.assertTrue(not ncc)
3405 self.assertTrue(a0.isEqual(DataArrayDouble([(4.,3.,0.),(7.,3.,0.),(2.,5.,0.),(9.,5.,0.)]),1e-12))
3406 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3])))
3407 self.assertTrue(a2.isEqual(DataArrayInt([0,3,6])))
3408 self.assertTrue(a3.isEqual(DataArrayInt([2,2,0,2,0,1,2,1,3])))
3409 self.assertTrue(a4 is None)
3410 self.assertTrue(a5 is None)
3411 a6,a7=mml2.retrieveFamilyIdsOnCells()
3412 self.assertTrue(a6.isEqual(DataArrayInt([0,0,0])))
3413 self.assertTrue(not a7) # copy here
3414 a8,a9=mml2.retrieveNumberIdsOnCells()
3415 self.assertTrue(not a8)
3416 self.assertTrue(a9) # nocopy here
3417 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3418 self.assertTrue(not a10)
3419 self.assertTrue(a11) # no copy here
3420 a12,a13=mml2.retrieveNumberIdsOnNodes()
3421 self.assertTrue(not a12)
3422 self.assertTrue(a13) # no copy here
3424 f=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3425 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3426 f.loadArraysIfNecessary()
3427 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3428 self.assertEqual(f.getName(),fieldName0)
3429 vExp=DataArrayDouble(4) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"])
3430 self.assertTrue(v.isEqual(vExp,1e-12))
3432 f=allFMTSLeavesPerCommonSupport1[0][0][0][1]
3433 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3434 f.loadArraysIfNecessary()
3435 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3436 self.assertEqual(f.getName(),fieldName0)
3437 vExp=DataArrayDouble(4) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"]) ; vExp.reverse()
3438 self.assertTrue(v.isEqual(vExp,1e-12))
3442 """ Non regression test for cartesian mesh whose the 3rd direction has only one node. It a false 3D mesh.
3444 fname="ForMEDReader24.med"
3445 fieldName0="zeFieldNode"
3446 cmesh=MEDCouplingCMesh("mesh")
3447 arr0=DataArrayDouble([0.,1.1,2.2,3.3,4.4])
3448 arr1=DataArrayDouble([0.,1.4,2.3])
3449 arr2=DataArrayDouble([5.])
3450 cmesh.setCoords(arr0,arr1,arr2)
3451 fmts0=MEDFileFieldMultiTS()
3452 fmts0.setDtUnit("s")
3455 f=MEDCouplingFieldDouble(ON_NODES) ; f.setName(fieldName0)
3457 arr=DataArrayDouble(15) ; arr.setInfoOnComponents(["tutu"]) ; arr.iota()
3460 f1ts=MEDFileField1TS()
3461 f1ts.setFieldNoProfileSBT(f)
3462 fmts0.pushBackTimeStep(f1ts)
3465 arr=DataArrayDouble(15) ; arr.setInfoOnComponents(["tutu"]) ; arr.iota()
3469 f1ts=MEDFileField1TS()
3470 f1ts.setFieldNoProfileSBT(f)
3471 fmts0.pushBackTimeStep(f1ts)
3473 mm=MEDFileCMesh() ; mm.setMesh(cmesh)
3475 fmts0.write(fname,0)
3476 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3477 ms=MEDFileMeshes(fname)
3478 fields=MEDFileFields(fname,False)
3479 fields.removeFieldsWithoutAnyTimeStep()
3480 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3481 allFMTSLeavesToDisplay=[]
3482 for fields in fields_per_mesh:
3483 allFMTSLeavesToDisplay2=[]
3485 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3487 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3489 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3490 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3491 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3492 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3493 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3494 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3495 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
3496 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
3498 mst=MEDFileMeshStruct.New(ms[0])
3500 fcscp=allFMTSLeavesPerCommonSupport[0][1]
3501 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3503 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
3504 (a,b,c),d=mml2.buildVTUArrays()
3505 self.assertTrue(d)#d is True because the a,b and c are directly those in the internal data structure
3506 self.assertTrue(a.isEqual(arr0,1e-12))
3507 self.assertTrue(b.isEqual(arr1,1e-12))
3508 self.assertTrue(c.isEqual(arr2,1e-12))
3510 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
3511 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3512 f.loadArraysIfNecessary()
3513 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3514 self.assertEqual(f.getName(),fieldName0)
3515 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3516 vExp=DataArrayDouble(15) ; vExp.iota(0) ; vExp.setInfoOnComponents(["tutu"])
3520 self.assertTrue(v.isEqual(vExp,1e-12))
3525 """ A tricky test that reproduces an invalid behaviour
3526 Here a same field is defined both on CELLS and GAUSS_PT, with a profile for each.
3527 The problem appears on array computation when performing CELLS then GAUSS_PT and CELLS again.
3529 fname="ForMEDReader25.med"
3531 coords=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.,0.,2.,1.,2.,2.,2.,0.,3.,1.,3.,2.,3.,1.,4.,1.,5.,1.,6.],15,2)
3532 m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coords)
3534 m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
3535 m0.insertNextCell(NORM_QUAD4,[1,4,5,2])
3536 m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
3537 m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
3538 m0.insertNextCell(NORM_QUAD4,[6,9,10,7])
3539 m0.insertNextCell(NORM_QUAD4,[7,10,11,8])
3540 m.setMeshAtLevel(0,m0)
3541 m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coords)
3543 m1.insertNextCell(NORM_SEG2,[10,12])
3544 m1.insertNextCell(NORM_SEG2,[12,13])
3545 m1.insertNextCell(NORM_SEG2,[13,14])
3546 m.setMeshAtLevel(-1,m1)
3547 m.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6]))
3548 m.setFamilyFieldArr(-1,DataArrayInt([-7,-8,-9]))
3549 m.setFamilyFieldArr(1,DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))
3550 m.setRenumFieldArr(0,DataArrayInt([101,102,103,104,105,106]))
3551 m.setRenumFieldArr(-1,DataArrayInt([107,108,109]))
3552 m.setRenumFieldArr(1,DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217]))
3554 fmts=MEDFileFieldMultiTS()
3560 f1ts=MEDFileField1TS()
3561 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name0)
3562 arr=DataArrayDouble([(-1,-11),(-2,-22)]) ; arr.setInfoOnComponents(info0)
3564 pfl0=DataArrayInt([0,1]) ; pfl0.setName(pflName0)
3565 f1ts.setFieldProfile(f,m,-1,pfl0)
3567 f2=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f2.setName(name0)
3568 arr=DataArrayDouble(15) ; arr.iota(1)
3569 arr=DataArrayDouble.Meld(arr,arr+10) ; arr.setInfoOnComponents(info0)
3571 pfl1=DataArrayInt([1,3,5]) ; pfl1.setName(pflName1)
3572 tmp=m0[pfl1] ; f2.setMesh(tmp)
3573 f2.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[-0.5,-0.5,0.5,-0.5,0.5,0.5,-0.5,0.5,0.,0.],[0.1,0.1,0.1,0.1,0.6])
3575 f1ts.setFieldProfile(f2,m,0,pfl1)
3576 fmts.pushBackTimeStep(f1ts)
3580 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3581 ms=MEDFileMeshes(fname)
3582 fields=MEDFileFields(fname,False) # false is absolutely necessary for the test
3583 fields.removeFieldsWithoutAnyTimeStep()
3584 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3585 allFMTSLeavesToDisplay=[]
3586 for fields in fields_per_mesh:
3587 allFMTSLeavesToDisplay2=[]
3589 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3591 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3593 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3594 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
3595 ### here the test is important !!! Pointers must be different !
3596 self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3597 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3598 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3599 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
3600 ### here the test is important !!! Pointers must be different !
3601 self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3602 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3603 self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3604 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3605 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3606 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
3608 mst=MEDFileMeshStruct.New(ms[0])
3609 # emulate first click
3610 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3611 self.assertEqual([NORM_SEG2],fcscp.getGeoTypesAt(0,ms[0]))
3612 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3614 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3615 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3616 self.assertTrue(not ncc) # copy here because 2D -> 3D
3617 expCoords=coords.changeNbOfComponents(3,0.)
3618 self.assertTrue(a0.isEqual(expCoords,1e-12))
3619 self.assertTrue(a1.isEqual(DataArrayByte([3,3])))
3620 self.assertTrue(a2.isEqual(DataArrayInt([0,3])))
3621 self.assertTrue(a3.isEqual(DataArrayInt([2,10,12,2,12,13])))
3622 self.assertTrue(a4 is None)
3623 self.assertTrue(a5 is None)
3624 a6,a7=mml2.retrieveFamilyIdsOnCells()
3625 self.assertTrue(a6.isEqual(DataArrayInt([-7,-8])))
3626 self.assertTrue(not a7) # copy here because profile on cells
3627 a8,a9=mml2.retrieveNumberIdsOnCells()
3628 self.assertTrue(a8.isEqual(DataArrayInt([107,108])))
3629 self.assertTrue(not a9) # copy here because profile on cells
3630 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3631 self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3632 self.assertTrue(a11) # no copy here
3633 a12,a13=mml2.retrieveNumberIdsOnNodes()
3634 self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3635 self.assertTrue(a13) # no copy here
3636 fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3637 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3638 fff0.loadArraysIfNecessary()
3639 self.assertEqual([ON_CELLS],fff0.getTypesOfFieldAvailable())
3640 v=mml.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3641 self.assertEqual(fff0.getName(),name0)
3642 self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3643 vExp=DataArrayDouble([(-1,-11),(-2,-22)]) ; vExp.setInfoOnComponents(info0)
3644 self.assertTrue(v.isEqual(vExp,1e-12))
3646 # emulate second click
3647 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3648 self.assertEqual([NORM_QUAD4],fcscp.getGeoTypesAt(0,ms[0]))
3649 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3651 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3652 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3653 self.assertTrue(not ncc) # copy here because 2D -> 3D
3654 expCoords=coords.changeNbOfComponents(3,0.)
3655 self.assertTrue(a0.isEqual(expCoords,1e-12))
3656 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9])))
3657 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10])))
3658 self.assertTrue(a3.isEqual(DataArrayInt([4,1,4,5,2,4,4,7,8,5,4,7,10,11,8])))
3659 self.assertTrue(a4 is None)
3660 self.assertTrue(a5 is None)
3661 a6,a7=mml2.retrieveFamilyIdsOnCells()
3662 self.assertTrue(a6.isEqual(DataArrayInt([-2,-4,-6])))
3663 self.assertTrue(not a7) # copy here because profile on cells
3664 a8,a9=mml2.retrieveNumberIdsOnCells()
3665 self.assertTrue(a8.isEqual(DataArrayInt([102,104,106])))
3666 self.assertTrue(not a9) # copy here because profile on cells
3667 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3668 self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3669 self.assertTrue(a11) # no copy here
3670 a12,a13=mml2.retrieveNumberIdsOnNodes()
3671 self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3672 self.assertTrue(a13) # no copy here
3673 fff1=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3674 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3675 fff1.loadArraysIfNecessary()
3676 self.assertEqual([ON_GAUSS_PT],fff1.getTypesOfFieldAvailable())
3677 v=mml.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3678 self.assertEqual(fff1.getName(),name0)
3679 self.assertEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer())
3680 vExp=DataArrayDouble([1.,11.,2.,12.,3.,13.,4.,14.,5.,15.,6.,16.,7.,17.,8.,18.,9.,19.,10.,20.,11.,21.,12.,22.,13.,23.,14.,24.,15.,25.],15,2) ; vExp.setInfoOnComponents(info0)
3681 self.assertTrue(v.isEqual(vExp,1e-12))
3682 # emulate third click
3683 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3684 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3686 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3687 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3688 self.assertTrue(not ncc) # copy here because 2D -> 3D
3689 expCoords=coords.changeNbOfComponents(3,0.)
3690 self.assertTrue(a0.isEqual(expCoords,1e-12))
3691 self.assertTrue(a1.isEqual(DataArrayByte([3,3])))
3692 self.assertTrue(a2.isEqual(DataArrayInt([0,3])))
3693 self.assertTrue(a3.isEqual(DataArrayInt([2,10,12,2,12,13])))
3694 self.assertTrue(a4 is None)
3695 self.assertTrue(a5 is None)
3696 a6,a7=mml2.retrieveFamilyIdsOnCells()
3697 self.assertTrue(a6.isEqual(DataArrayInt([-7,-8])))
3698 self.assertTrue(not a7) # copy here because profile on cells
3699 a8,a9=mml2.retrieveNumberIdsOnCells()
3700 self.assertTrue(a8.isEqual(DataArrayInt([107,108])))
3701 self.assertTrue(not a9) # copy here because profile on cells
3702 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3703 self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3704 self.assertTrue(a11) # no copy here
3705 a12,a13=mml2.retrieveNumberIdsOnNodes()
3706 self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3707 self.assertTrue(a13) # no copy here
3708 fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3709 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3710 fff0.loadArraysIfNecessary()
3711 self.assertEqual([ON_CELLS],fff0.getTypesOfFieldAvailable())
3712 v=mml.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3713 self.assertEqual(fff0.getName(),name0)
3714 self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3715 vExp=DataArrayDouble([(-1,-11),(-2,-22)]) ; vExp.setInfoOnComponents(info0)
3716 self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3721 """ Test focused on field on nodes (here f0Node and f1Node) lying on a profile of nodes that do not match perfectly a sub set of cells of its underlying mesh. See bug EDF 2405 and 2177.
3722 For this type of fields the support will contain only vertices.
3724 fname="ForMEDReader26.med"
3725 coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3726 m0=MEDCouplingUMesh("mesh",2)
3728 for elt in [[2,6,3],[6,7,3],[9,6,5],[9,10,6]]:
3729 m0.insertNextCell(NORM_TRI3,elt)
3731 for elt in [[0,4,5,1],[1,5,6,2],[4,8,9,5],[6,10,11,7],[8,12,13,9],[9,13,14,10],[10,14,15,11]]:
3732 m0.insertNextCell(NORM_QUAD4,elt)
3734 m0.setCoords(coords)
3737 mm.setMeshAtLevel(0,m0)
3738 mm.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11]))
3739 mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
3741 f1ts0Node=MEDFileField1TS()
3742 f1ts1Node=MEDFileField1TS()
3743 f1ts2Cell=MEDFileField1TS()
3744 f1ts3Cell=MEDFileField1TS()
3745 f1ts4Cell=MEDFileField1TS()
3746 f1ts5Node=MEDFileField1TS()
3748 pfl0=DataArrayInt([4,5,6,8,9,12]) ; pfl0.setName("pfl0")
3749 pfl1=DataArrayInt([0,1,4,5,7,10]) ; pfl1.setName("pfl1")
3750 pfl2=DataArrayInt([0,1,2,3,4,5,6,7,10,11,14,15]) ; pfl2.setName("pfl2")
3752 f0Node=MEDCouplingFieldDouble(ON_NODES) ; f0Node.setName("f0Node")
3753 arr0=DataArrayDouble(6) ; arr0.iota()
3754 f0Node.setArray(arr0)
3755 f1ts0Node.setFieldProfile(f0Node,mm,0,pfl0)
3757 f1Node=MEDCouplingFieldDouble(ON_NODES) ; f1Node.setName("f1Node")
3758 arr1=DataArrayDouble(6) ; arr1.iota() ; arr1.reverse()
3759 f1Node.setArray(arr1)
3760 f1ts1Node.setFieldProfile(f1Node,mm,0,pfl0)
3762 f2Cell=MEDCouplingFieldDouble(ON_CELLS) ; f2Cell.setName("f2Cell")
3763 arr2=DataArrayDouble([2,3,0,1,4,5])
3764 f2Cell.setArray(arr2)
3765 f1ts2Cell.setFieldProfile(f2Cell,mm,0,pfl1)
3767 f3Cell=MEDCouplingFieldDouble(ON_CELLS) ; f3Cell.setName("f3Cell")
3768 arr3=DataArrayDouble([5,4,3,2,1,0])
3769 f3Cell.setArray(arr3)
3770 f1ts3Cell.setFieldProfile(f3Cell,mm,0,pfl1)
3772 f4Cell=MEDCouplingFieldDouble(ON_CELLS) ; f4Cell.setName("f4Cell")
3773 arr4=DataArrayDouble([2,2,0,1,1,0])
3774 f4Cell.setArray(arr4)
3775 f1ts4Cell.setFieldProfile(f4Cell,mm,0,pfl1)
3777 f5Node=MEDCouplingFieldDouble(ON_NODES) ; f5Node.setName("f5Node")
3778 arr5=DataArrayDouble([0,1,2,3,10,11,13,2,11,1,10,0])
3779 f5Node.setArray(arr5)
3780 f1ts5Node.setFieldProfile(f5Node,mm,0,pfl2)
3783 for f in [f1ts0Node,f1ts1Node,f1ts2Cell,f1ts3Cell,f1ts4Cell,f1ts5Node]:
3784 fmts=MEDFileFieldMultiTS()
3785 fmts.pushBackTimeStep(f)
3790 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3791 ms=MEDFileMeshes(fname)
3792 fields=MEDFileFields(fname,False)
3793 fields.removeFieldsWithoutAnyTimeStep()
3794 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3795 allFMTSLeavesToDisplay=[]
3796 for fields in fields_per_mesh:
3797 allFMTSLeavesToDisplay2=[]
3799 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3801 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3803 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3804 self.assertEqual(len(allFMTSLeavesToDisplay[0]),6)
3805 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3806 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3807 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),6)
3808 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3809 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3810 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),4)
3811 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),2)# <- the smart one is here
3813 mst=MEDFileMeshStruct.New(ms[0])
3815 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3816 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3818 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3819 self.assertEqual([3,4,0],mml2.getGeoTypes())
3820 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3821 self.assertTrue(not ncc)
3822 self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,0.,3.,0.],6,3),1e-12))
3823 self.assertTrue(a1.isEqual(DataArrayByte([5,9,1])))
3824 self.assertTrue(a2.isEqual(DataArrayInt([0,4,9])))
3825 self.assertTrue(a3.isEqual(DataArrayInt([3,4,2,1,4,0,3,4,1,1,5])))
3826 self.assertTrue(a4 is None)
3827 self.assertTrue(a5 is None)
3828 a6,a7=mml2.retrieveFamilyIdsOnCells()
3829 self.assertTrue(a6.isEqual(DataArrayInt([-3,-7,13])))
3830 self.assertTrue(not a7) # copy here because profile on cells
3831 a8,a9=mml2.retrieveNumberIdsOnCells()
3832 self.assertTrue(a8 is None)
3833 self.assertTrue(a9) # no copy here because no number field
3834 a10,a11=mml2.retrieveFamilyIdsOnNodes()
3835 self.assertTrue(a10.isEqual(DataArrayInt([5,6,7,9,10,13])))
3836 self.assertTrue(not a11) # copy here
3837 a12,a13=mml2.retrieveNumberIdsOnNodes()
3838 self.assertTrue(a12 is None)
3839 self.assertTrue(a13) # no copy here because no number field
3841 fff0=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3842 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3843 fff0.loadArraysIfNecessary()
3844 v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3845 self.assertEqual(fff0.getName(),"f0Node")
3846 self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3847 vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.])
3848 self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3850 fff1=allFMTSLeavesPerCommonSupport1[1][0][1][0]
3851 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3852 fff1.loadArraysIfNecessary()
3853 v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3854 self.assertEqual(fff1.getName(),"f1Node")
3855 self.assertEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer())
3856 vExp=DataArrayDouble([5.,4.,3.,2.,1.,0.])
3857 self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3861 """ This test defines 2 fields f0 and f1 on nodes lying on an unstructured mesh with no cells.
3862 f0 is a field on all nodes. f1 is a partial field on nodes.
3864 fname="ForMEDReader27.med"
3865 coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3866 m0=MEDCouplingUMesh("mesh",2)
3868 m0.setCoords(coords)
3871 mm.setMeshAtLevel(0,m0)
3872 mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
3874 f1ts0=MEDFileField1TS()
3875 f1ts1=MEDFileField1TS()
3877 f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m0) ; f0.setName("f0NoPfl")
3878 arr0=DataArrayDouble([0.,1.,2.,3.,1.,1.5,2.2,3.1,2.,2.2,3.,3.1,3.,3.1,3.5,4.])
3881 f1ts0.setFieldNoProfileSBT(f0)
3882 self.assertEqual(f1ts0.getMeshName(),"mesh")
3884 pfl1=DataArrayInt([0,1,2,3,4,5,6,8,9,12]) ; pfl1.setName("pfl1")
3885 f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setName("f1Pfl")
3886 arr1=DataArrayDouble([3.,2.,1.,0.,2.,1.5,0.,1.,0.,0.2])
3888 f1ts1.setFieldProfile(f1,mm,0,pfl1)
3889 self.assertEqual(f1ts1.getMeshName(),"mesh")
3892 fmts0=MEDFileFieldMultiTS()
3893 fmts0.pushBackTimeStep(f1ts0)
3894 fmts1=MEDFileFieldMultiTS()
3895 fmts1.pushBackTimeStep(f1ts1)
3896 fs.pushField(fmts0) ; fs.pushField(fmts1)
3897 self.assertEqual(fs[0].getMeshName(),"mesh")
3898 self.assertEqual(fs[1].getMeshName(),"mesh")
3901 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3902 ms=MEDFileMeshes(fname)
3903 fields=MEDFileFields(fname,False)
3904 fields.removeFieldsWithoutAnyTimeStep()
3905 self.assertEqual(fields[0].getMeshName(),"mesh")
3906 self.assertEqual(fields[1].getMeshName(),"mesh")
3907 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3908 self.assertEqual(fields_per_mesh[0][0].getMeshName(),"mesh")
3909 self.assertEqual(fields_per_mesh[0][1].getMeshName(),"mesh")
3910 allFMTSLeavesToDisplay=[]
3911 for fields in fields_per_mesh:
3912 allFMTSLeavesToDisplay2=[]
3914 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3916 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3918 self.assertEqual(len(allFMTSLeavesToDisplay),1)
3919 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
3920 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3921 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3922 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
3923 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3924 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3925 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3926 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
3928 mst=MEDFileMeshStruct.New(ms[0])
3930 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3931 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3933 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3934 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3935 self.assertTrue(ncc)
3936 self.assertTrue(a0.isEqual(DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)]),1e-12))
3937 self.assertTrue(a1.isEqual(DataArrayByte([])))
3938 self.assertTrue(a2.isEqual(DataArrayInt([])))
3939 self.assertTrue(a3.isEqual(DataArrayInt([])))
3940 self.assertTrue(a4 is None)
3941 self.assertTrue(a5 is None)
3943 fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3944 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3945 fff0.loadArraysIfNecessary()
3946 v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3947 self.assertEqual(fff0.getName(),"f0NoPfl")
3948 self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3949 vExp=DataArrayDouble([0.,1.,2.,3.,1.,1.5,2.2,3.1,2.,2.2,3.,3.1,3.,3.1,3.5,4])
3950 self.assertTrue(v.isEqual(vExp,1e-12))
3952 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3953 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3955 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3956 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3957 self.assertTrue(not ncc)
3958 self.assertTrue(a0.isEqual(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,3,0)]),1e-12))
3959 self.assertTrue(a1.isEqual(DataArrayByte([])))
3960 self.assertTrue(a2.isEqual(DataArrayInt([])))
3961 self.assertTrue(a3.isEqual(DataArrayInt([])))
3962 self.assertTrue(a4 is None)
3963 self.assertTrue(a5 is None)
3964 fff1=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3965 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3966 fff1.loadArraysIfNecessary()
3967 v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3968 self.assertEqual(fff1.getName(),"f1Pfl")
3969 self.assertNotEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer()) # pointers are not equal because Profile
3970 vExp=DataArrayDouble([3.,2.,1.,0.,2.,1.5,0.,1.,0.,0.2])
3971 self.assertTrue(v.isEqual(vExp,1e-12))
3975 """ This test defines 2 fields f0,f1,f2,f3 lying on an unstructured mesh whith cells including NORM_POINT1.
3976 Both f0 and f1 are on NODES and f2 and f3 are on cells. f1 and f2 share the same support.
3977 f0 is on a nodal support that is not matchable with any cells (including NORM_POINT1)
3978 This test is a more aggressive version of test26.
3980 fname="ForMEDReader28.med"
3981 coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3982 m0=MEDCouplingUMesh("mesh",2)
3984 for elt in [[2,6,3],[6,7,3],[9,6,5],[9,10,6]]:
3985 m0.insertNextCell(NORM_TRI3,elt)
3987 for elt in [[0,4,5,1],[1,5,6,2],[4,8,9,5],[6,10,11,7],[8,12,13,9],[9,13,14,10],[10,14,15,11]]:
3988 m0.insertNextCell(NORM_QUAD4,elt)
3990 m0.setCoords(coords)
3991 m2=MEDCouplingUMesh("mesh",0) ; m2.setCoords(coords)
3993 for elt in [[8],[13]]:
3994 m2.insertNextCell(NORM_POINT1,elt)
3998 mm.setMeshAtLevel(0,m0)
3999 mm.setMeshAtLevel(-2,m2)
4000 mm.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11]))
4001 mm.setFamilyFieldArr(-2,DataArrayInt([-12,-13]))
4002 mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
4004 f1ts0Node=MEDFileField1TS()
4005 f1ts1Node=MEDFileField1TS()
4006 f1ts2Cell=MEDFileField1TS()
4007 f1ts3Cell=MEDFileField1TS()
4009 pfl0=DataArrayInt([4,5,6,8,9,12]) ; pfl0.setName("pfl0")
4010 pfl1=DataArrayInt([0,1,4,5,7,10]) ; pfl1.setName("pfl1")
4011 pfl2=DataArrayInt([0,1,2,3,4,5,6,7,10,11,14,15]) ; pfl2.setName("pfl2")
4013 f0Node=MEDCouplingFieldDouble(ON_NODES) ; f0Node.setName("f0Node")
4014 arr0=DataArrayDouble(6) ; arr0.iota()
4015 f0Node.setArray(arr0)
4016 f1ts0Node.setFieldProfile(f0Node,mm,0,pfl0)
4018 f1Node=MEDCouplingFieldDouble(ON_NODES) ; f1Node.setName("f1Node")
4019 arr1=DataArrayDouble(12) ; arr1.iota() ; arr1.reverse()
4020 f1Node.setArray(arr1)
4021 f1ts1Node.setFieldProfile(f1Node,mm,0,pfl2)
4023 f2Cell=MEDCouplingFieldDouble(ON_CELLS) ; f2Cell.setName("f2Cell")
4024 arr2=DataArrayDouble([2,3,0,1,4,5])
4025 f2Cell.setArray(arr2)
4026 f1ts2Cell.setFieldProfile(f2Cell,mm,0,pfl1)
4028 f3Cell=MEDCouplingFieldDouble(ON_CELLS) ; f3Cell.setName("f3Cell")
4029 arr3=DataArrayDouble([5,4,3,2,1,0]) ; f3Cell.setArray(arr3)
4030 f1ts3Cell.setFieldProfile(f3Cell,mm,0,pfl1)
4032 arr3=DataArrayDouble([-1.1,-3.1]) ; f3Cell.setArray(arr3)
4033 f1ts3Cell.setFieldNoProfileSBT(f3Cell)
4036 for f in [f1ts0Node,f1ts1Node,f1ts2Cell,f1ts3Cell]:
4037 fmts=MEDFileFieldMultiTS()
4038 fmts.pushBackTimeStep(f)
4043 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4044 ms=MEDFileMeshes(fname)
4045 fields=MEDFileFields(fname,False)
4046 fields.removeFieldsWithoutAnyTimeStep()
4047 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4048 allFMTSLeavesToDisplay=[]
4049 for fields in fields_per_mesh:
4050 allFMTSLeavesToDisplay2=[]
4052 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4054 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4056 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4057 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
4058 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4059 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4060 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
4061 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4062 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),3)
4063 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
4064 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
4065 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[2][0]),1)
4067 mst=MEDFileMeshStruct.New(ms[0])
4069 fcscp=allFMTSLeavesPerCommonSupport1[2][1]
4070 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4072 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4073 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4074 self.assertTrue(not ncc)
4075 self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,0.,3.,0.],6,3),1e-12))
4076 self.assertTrue(a1.isEqual(DataArrayByte([5,9,1,1])))
4077 self.assertTrue(a2.isEqual(DataArrayInt([0,4,9,11])))
4078 self.assertTrue(a3.isEqual(DataArrayInt([3,4,2,1,4,0,3,4,1,1,3,1,5])))
4079 self.assertTrue(a4 is None)
4080 self.assertTrue(a5 is None)
4081 a6,a7=mml2.retrieveFamilyIdsOnCells()
4082 self.assertTrue(a6.isEqual(DataArrayInt([-3,-7,-12,13])))
4083 self.assertTrue(not a7) # copy here because profile on cells
4084 a8,a9=mml2.retrieveNumberIdsOnCells()
4085 self.assertTrue(a8 is None)
4086 self.assertTrue(a9) # no copy here because no number field
4087 a10,a11=mml2.retrieveFamilyIdsOnNodes()
4088 self.assertTrue(a10.isEqual(DataArrayInt([5,6,7,9,10,13])))
4089 self.assertTrue(not a11) # copy here
4090 a12,a13=mml2.retrieveNumberIdsOnNodes()
4091 self.assertTrue(a12 is None)
4092 self.assertTrue(a13) # no copy here because no number field
4094 fff0=allFMTSLeavesPerCommonSupport1[2][0][0][0]
4095 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
4096 fff0.loadArraysIfNecessary()
4097 v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
4098 self.assertEqual(fff0.getName(),"f0Node")
4099 self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4100 vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.])
4101 self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
4103 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4104 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4106 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4107 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4108 self.assertTrue(not ncc)
4109 self.assertTrue(a0.isEqual(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(2,2,0),(3,2,0),(2,3,0),(3,3,0)]),1e-12))
4110 self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9,9])))
4111 self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18,23])))
4112 self.assertTrue(a3.isEqual(DataArrayInt([3,2,6,3,3,6,7,3,4,0,4,5,1,4,1,5,6,2,4,6,8,9,7,4,8,10,11,9])))
4113 self.assertTrue(a4 is None)
4114 self.assertTrue(a5 is None)
4115 fff1=allFMTSLeavesPerCommonSupport1[0][0][0][0]
4116 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
4117 fff1.loadArraysIfNecessary()
4118 v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
4119 self.assertEqual(fff1.getName(),"f2Cell")
4120 self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4121 vExp=DataArrayDouble([2,3,0,1,4,5])
4122 self.assertTrue(v.isEqual(vExp,1e-12))
4123 fff2=allFMTSLeavesPerCommonSupport1[0][0][1][0]
4124 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff2,mst)
4125 fff2.loadArraysIfNecessary()
4126 v=mml2.buildDataArray(fsst,fields,fff2.getUndergroundDataArray())
4127 self.assertEqual(fff2.getName(),"f1Node")
4128 self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4129 vExp=DataArrayDouble([11,10,9,8,7,6,5,4,3,2,1,0])
4130 self.assertTrue(v.isEqual(vExp,1e-12))
4132 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
4133 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4135 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4136 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4137 self.assertTrue(ncc)# here all the 16 nodes are taken
4138 self.assertTrue(a0.isEqual(DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)]),1e-12))
4139 self.assertTrue(a1.isEqual(DataArrayByte([1,1,5,5,9,9,9,9])))
4140 self.assertTrue(a2.isEqual(DataArrayInt([0,2,4,8,12,17,22,27])))
4141 self.assertTrue(a3.isEqual(DataArrayInt([1,8,1,13,3,2,6,3,3,6,7,3,4,0,4,5,1,4,1,5,6,2,4,6,10,11,7,4,10,14,15,11])))
4142 self.assertTrue(a4 is None)
4143 self.assertTrue(a5 is None)
4144 fff3=allFMTSLeavesPerCommonSupport1[1][0][0][0]
4145 fsst=MEDFileField1TSStructItem.BuildItemFrom(fff3,mst)
4146 fff3.loadArraysIfNecessary()
4147 v=mml2.buildDataArray(fsst,fields,fff3.getUndergroundDataArray())
4148 self.assertEqual(fff3.getName(),"f3Cell")
4149 self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4150 vExp=DataArrayDouble([-1.1,-3.1,5,4,3,2,1,0])
4151 self.assertTrue(v.isEqual(vExp,1e-12))
4155 """ This test focused on HEXA27 cell for which the MED numbering is not equal to the VTK numbering. So here the HEXA27 cell is those in MED file documentation (reference element).
4157 fname="ForMEDReader29.med"
4158 coo=DataArrayDouble([[0.,2.,2.],[0.,0.,2.],[2.,0.,2.],[2.,2.,2.],[0.,2.,0.],[0.,0.,0.],[2.,0.,0.],[2.,2.,0.], [0.,1.,2.],[1.,0.,2.],[2.,1.,2.],[1.,2.,2.], [0.,1.,0.],[1.,0.,0.],[2.,1.,0.],[1.,2.,0.], [0.,2.,1.],[0.,0.,1.],[2.,0.,1.],[2.,2.,1.], [1.,1.,2.], [0.,1.,1.],[1.,0.,1.],[2.,1.,1.],[1.,2.,1.], [1.,1.,0.], [1.,1.,1.]])
4159 m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
4161 # MED = [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]
4162 # VTK = [0,1,2,3,4,5,6,7, 8,9,10,11,12,13,14,15,16,17,18,19,24,22,21,23,20,25,26]
4163 m.insertNextCell(NORM_HEXA27,[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])
4164 fCell=MEDCouplingFieldDouble(ON_CELLS) ; fCell.setName("fCell")
4165 arrCell=DataArrayDouble([7.]) ; arrCell.setInfoOnComponent(0,"smth") ; fCell.setArray(arrCell)
4167 MEDLoader.WriteField(fname,fCell,True)
4168 refCoo=[-1.,-1.,-1.,-1.,1.,-1.,1.,1.,-1.,1.,-1.,-1.,-1.,-1.,1.,-1.,1.,1.,1.,1.,1.,1.,-1.,1.,-1.,0.,-1.,0.,1.,-1.,1.,0.,-1.,0.,-1.,-1.,-1.,0.,1.,0.,1.,1.,1.,0.,1.,0.,-1.,1.,-1.,-1.,0.,-1.,1.,0.,1.,1.,0.,1.,-1.,0.,0.,0.,-1.,-1.,0.,0.,0.,1.,0.,1.,0.,0.,0.,-1.,0.,0.,0.,1.,0.,0.,0.]
4169 weights=[0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.7023319615912209,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571]
4170 gCoords=[-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,0.0,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.0,0.0,0.0,0.0,0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,0.0,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483]
4171 fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
4173 fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
4174 arrGauss=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arrGauss.setInfoOnComponent(0,"gaussc") ; arrGauss.iota()
4175 fGauss.setArray(arrGauss)
4176 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,fGauss)
4177 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4178 ms=MEDFileMeshes(fname)
4179 fields=MEDFileFields(fname,False)
4180 fields.removeFieldsWithoutAnyTimeStep()
4181 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4182 allFMTSLeavesToDisplay=[]
4183 for fields in fields_per_mesh:
4184 allFMTSLeavesToDisplay2=[]
4186 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4188 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4190 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4191 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
4192 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4193 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4194 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
4195 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4196 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
4197 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
4199 mst=MEDFileMeshStruct.New(ms[0])
4201 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4202 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4204 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4205 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4206 self.assertTrue(a0.isEqual(coo,1e-12))
4207 self.assertTrue(a1.isEqual(DataArrayByte([29])))
4208 self.assertTrue(a2.isEqual(DataArrayInt([0])))
4209 # the connectivity must be not a iota as declared in m.insertNextCell
4210 self.assertTrue(a3.isEqual(DataArrayInt([27,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,24,22,21,23,20,25,26])))# the test is on this line to check that connectivity has been processed for HEXA27
4211 self.assertTrue(a4 is None)
4212 self.assertTrue(a5 is None)
4213 ffCell=allFMTSLeavesPerCommonSupport1[0][0][0][0]
4214 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4215 ffCell.loadArraysIfNecessary()
4216 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4217 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4218 self.assertEqual(ffCell.getName(),"fCell")
4219 self.assertTrue(v.isEqual(arrCell,1e-12)) ; self.assertTrue(v.isEqualWithoutConsideringStr(DataArrayDouble([7.]),1e-12)) ; self.assertEqual(v.getInfoOnComponents(),["smth"])
4222 ffGauss=allFMTSLeavesPerCommonSupport1[0][0][1][0]
4223 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffGauss,mst)
4224 ffGauss.loadArraysIfNecessary()
4225 v=mml2.buildDataArray(fsst,fields,ffGauss.getUndergroundDataArray())
4226 self.assertEqual(v.getHiddenCppPointer(),ffGauss.getUndergroundDataArray().getHiddenCppPointer())
4227 self.assertEqual(ffGauss.getName(),"fGauss")
4228 self.assertTrue(v.isEqual(arrGauss,1e-12)) ; self.assertTrue(v.isEqualWithoutConsideringStr(DataArrayDouble(range(27)),1e-12)) ; self.assertEqual(v.getInfoOnComponents(),["gaussc"])
4229 ffGauss=allFMTSLeavesPerCommonSupport1[0][0][1][0]
4233 """ This test is focused on cartesian meshes. Here the cartesian mesh "CartMesh" has a field on HEXA8 (FieldOnCells) and a field on QUAD4 (FieldOnFaces).
4234 So the first one (FieldOnCells) lies on a cartesian mesh whereas the second one lies on unstructured one.
4236 fname="ForMEDReader30.med"
4237 c=MEDCouplingCMesh()
4238 arrX=DataArrayDouble(3) ; arrX.iota()
4239 arrY=DataArrayDouble(4) ; arrY.iota()
4240 arrZ=DataArrayDouble(5) ; arrZ.iota()
4241 c.setCoords(arrX,arrY,arrZ)
4242 c.setName("CartMesh")
4245 tmpFacesMesh=c.build1SGTSubLevelMesh()
4246 famIdFaces=DataArrayInt(98) ; famIdFaces[:36]=-1 ; famIdFaces[36:68]=-2 ; famIdFaces[68:]=-3
4247 famIdCells=DataArrayInt(24) ; famIdCells[:]=0
4248 #cc.setFamilyFieldArr(0,famIdCells)
4249 #cc.setFamilyFieldArr(-1,famIdFaces)
4250 cc.addFamily("FacesX",-1) ; cc.addFamily("FacesY",-2) ; cc.addFamily("FacesZ",-3)
4251 cc.setFamiliesOnGroup("FacesX1",["FacesX"])
4252 cc.setFamiliesOnGroup("FacesY1",["FacesY"])
4253 cc.setFamiliesOnGroup("FacesZ1",["FacesZ"])
4255 fmts0=MEDFileFieldMultiTS()
4256 fmts1=MEDFileFieldMultiTS()
4257 for i in xrange(30):
4258 f1ts=MEDFileField1TS()
4259 fFaces=MEDCouplingFieldDouble(ON_CELLS) ; fFaces.setName("FieldOnFaces")
4260 arr=DataArrayDouble(98) ; arr.iota() ; arr[i]=100.
4261 fFaces.setArray(arr)
4262 fFaces.setTime(float(i)+0.1,i,-1)
4263 fFaces.setMesh(tmpFacesMesh)
4264 f1ts.setFieldNoProfileSBT(fFaces)
4265 fmts0.pushBackTimeStep(f1ts)
4267 f1ts=MEDFileField1TS()
4268 fCells=MEDCouplingFieldDouble(ON_CELLS) ; fCells.setName("FieldOnCells")
4269 arr=DataArrayDouble(24) ; arr.iota() ; arr[i%24]=30.
4270 fCells.setArray(arr)
4271 fCells.setTime(float(i)+0.1,i,-1)
4273 f1ts.setFieldNoProfileSBT(fCells)
4274 fmts1.pushBackTimeStep(f1ts)
4281 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4282 ms=MEDFileMeshes(fname)
4283 fields=MEDFileFields(fname,False)
4284 fields.removeFieldsWithoutAnyTimeStep()
4285 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4286 allFMTSLeavesToDisplay=[]
4287 for fields in fields_per_mesh:
4288 allFMTSLeavesToDisplay2=[]
4290 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4292 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4294 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4295 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
4296 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4297 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4298 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
4299 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4300 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
4301 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
4302 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
4304 mst=MEDFileMeshStruct.New(ms[0])
4306 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4307 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4309 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here CMesh is important
4310 (a,b,c),d=mml2.buildVTUArrays()
4311 self.assertTrue(d)#d is True because the a,b and c are directly those in the internal data structure
4312 self.assertTrue(a.isEqual(arrX,1e-12))
4313 self.assertTrue(b.isEqual(arrY,1e-12))
4314 self.assertTrue(c.isEqual(arrZ,1e-12))
4315 for i in xrange(30):
4316 ffCell=allFMTSLeavesPerCommonSupport1[0][0][0][i]
4317 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4318 ffCell.loadArraysIfNecessary()
4319 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4320 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4321 myarr=DataArrayDouble(24) ; myarr.iota() ; myarr[i%24]=30.
4322 self.assertEqual(ffCell.getName(),"FieldOnCells")
4323 self.assertTrue(v.isEqual(myarr,1e-12))
4326 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
4327 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4329 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here UMesh is important
4330 ref=ms[0].getImplicitFaceMesh().getCoords().getHiddenCppPointer()
4331 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4332 self.assertEqual(ref,a0.getHiddenCppPointer())
4333 self.assertTrue(ncc)
4334 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
4335 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485])))
4336 self.assertTrue(a3.isEqual(DataArrayInt([4,0,12,15,3,4,12,24,27,15,4,24,36,39,27,4,36,48,51,39,4,3,15,18,6,4,15,27,30,18,4,27,39,42,30,4,39,51,54,42,4,6,18,21,9,4,18,30,33,21,4,30,42,45,33,4,42,54,57,45,4,1,13,16,4,4,13,25,28,16,4,25,37,40,28,4,37,49,52,40,4,4,16,19,7,4,16,28,31,19,4,28,40,43,31,4,40,52,55,43,4,7,19,22,10,4,19,31,34,22,4,31,43,46,34,4,43,55,58,46,4,2,14,17,5,4,14,26,29,17,4,26,38,41,29,4,38,50,53,41,4,5,17,20,8,4,17,29,32,20,4,29,41,44,32,4,41,53,56,44,4,8,20,23,11,4,20,32,35,23,4,32,44,47,35,4,44,56,59,47,4,0,12,13,1,4,12,24,25,13,4,24,36,37,25,4,36,48,49,37,4,1,13,14,2,4,13,25,26,14,4,25,37,38,26,4,37,49,50,38,4,3,15,16,4,4,15,27,28,16,4,27,39,40,28,4,39,51,52,40,4,4,16,17,5,4,16,28,29,17,4,28,40,41,29,4,40,52,53,41,4,6,18,19,7,4,18,30,31,19,4,30,42,43,31,4,42,54,55,43,4,7,19,20,8,4,19,31,32,20,4,31,43,44,32,4,43,55,56,44,4,9,21,22,10,4,21,33,34,22,4,33,45,46,34,4,45,57,58,46,4,10,22,23,11,4,22,34,35,23,4,34,46,47,35,4,46,58,59,47,4,0,1,4,3,4,3,4,7,6,4,6,7,10,9,4,1,2,5,4,4,4,5,8,7,4,7,8,11,10,4,12,13,16,15,4,15,16,19,18,4,18,19,22,21,4,13,14,17,16,4,16,17,20,19,4,19,20,23,22,4,24,25,28,27,4,27,28,31,30,4,30,31,34,33,4,25,26,29,28,4,28,29,32,31,4,31,32,35,34,4,36,37,40,39,4,39,40,43,42,4,42,43,46,45,4,37,38,41,40,4,40,41,44,43,4,43,44,47,46,4,48,49,52,51,4,51,52,55,54,4,54,55,58,57,4,49,50,53,52,4,52,53,56,55,4,55,56,59,58])))
4337 self.assertTrue(a4 is None)
4338 self.assertTrue(a5 is None)
4339 for i in xrange(30):
4340 ffCell=allFMTSLeavesPerCommonSupport1[1][0][0][i]
4341 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4342 ffCell.loadArraysIfNecessary()
4343 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4344 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4345 myarr=DataArrayDouble(98) ; myarr.iota() ; myarr[i]=100.
4346 self.assertEqual(ffCell.getName(),"FieldOnFaces")
4347 self.assertTrue(v.isEqual(myarr,1e-12))
4352 """non regression test of EDF 7972"""
4353 fname="ForMEDReader31.med"
4354 c=MEDCouplingCMesh()
4355 arrX=DataArrayDouble(3) ; arrX.iota()
4356 arrY=DataArrayDouble(4) ; arrY.iota()
4357 arrZ=DataArrayDouble(5) ; arrZ.iota()
4358 c.setCoords(arrX,arrY,arrZ)
4359 c.setName("CartMesh")
4362 famIdCells=DataArrayInt(24) ; famIdCells[:]=0
4363 cc.setFamilyFieldArr(0,famIdCells)
4364 #cc.setFamilyFieldArr(-1,famIdFaces)
4365 cc.addFamily("FacesX",-1) ; cc.addFamily("FacesY",-2) ; cc.addFamily("FacesZ",-3)
4366 cc.setFamiliesOnGroup("FacesX1",["FacesX"])
4367 cc.setFamiliesOnGroup("FacesY1",["FacesY"])
4368 cc.setFamiliesOnGroup("FacesZ1",["FacesZ"])
4369 fmts0=MEDFileFieldMultiTS()
4370 fmts1=MEDFileFieldMultiTS()
4371 pfl=DataArrayInt(11) ; pfl.iota() ; pfl.setName("PflOnHECA8")
4372 for i in xrange(30):
4373 f1ts=MEDFileField1TS()
4374 fFaces=MEDCouplingFieldDouble(ON_CELLS) ; fFaces.setName("FieldOnCells")
4375 arr=DataArrayDouble(11) ; arr.iota() ; arr[i%11]=100.
4376 fFaces.setArray(arr)
4377 fFaces.setTime(float(i)+0.1,i,-1)
4378 fFaces.setMesh(c.buildUnstructured()[:11])
4379 f1ts.setFieldProfile(fFaces,cc,0,pfl)# here, a test is done to check that "NORM_HEXA8" string is not 30 times appended at the end of pfl name.
4380 self.assertEqual("PflOnHECA8",pfl.getName())
4381 fmts0.pushBackTimeStep(f1ts)
4387 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4388 ms=MEDFileMeshes(fname)
4389 fields=MEDFileFields(fname,False)
4390 fields.removeFieldsWithoutAnyTimeStep()
4391 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4392 allFMTSLeavesToDisplay=[]
4393 for fields in fields_per_mesh:
4394 allFMTSLeavesToDisplay2=[]
4396 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4398 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4400 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4401 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
4402 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4403 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4404 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
4405 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4406 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
4407 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
4409 mst=MEDFileMeshStruct.New(ms[0])
4411 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4412 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4414 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here UMesh is important
4415 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4416 self.assertTrue(not ncc)# here ncc=False because the coordinates are not in ms neither in children. This is the most important line in the test.
4417 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,3.,1.,1.,3.,1.,2.,3.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.,0.,3.,2.,1.,3.,2.,2.,3.,2.,0.,0.,3.,1.,0.,3.,2.,0.,3.,0.,1.,3.,1.,1.,3.,2.,1.,3.,0.,2.,3.,1.,2.,3.,2.,2.,3.,0.,3.,3.,1.,3.,3.,2.,3.,3.,0.,0.,4.,1.,0.,4.,2.,0.,4.,0.,1.,4.,1.,1.,4.,2.,1.,4.,0.,2.,4.,1.,2.,4.,2.,2.,4.,0.,3.,4.,1.,3.,4.,2.,3.,4.],60,3),1e-12))
4418 self.assertTrue(a1.isEqual(DataArrayByte([12,12,12,12,12,12,12,12,12,12,12])))
4419 self.assertTrue(a2.isEqual(DataArrayInt([0,9,18,27,36,45,54,63,72,81,90])))
4420 self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,3,4,13,12,15,16,8,2,1,4,5,14,13,16,17,8,4,3,6,7,16,15,18,19,8,5,4,7,8,17,16,19,20,8,7,6,9,10,19,18,21,22,8,8,7,10,11,20,19,22,23,8,13,12,15,16,25,24,27,28,8,14,13,16,17,26,25,28,29,8,16,15,18,19,28,27,30,31,8,17,16,19,20,29,28,31,32,8,19,18,21,22,31,30,33,34])))
4421 self.assertTrue(a4 is None)
4422 self.assertTrue(a5 is None)
4423 for i in xrange(30):
4424 ffCell=allFMTSLeavesPerCommonSupport1[0][0][0][i]
4425 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4426 ffCell.loadArraysIfNecessary()
4427 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4428 # self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer()) # to be improved... maybe this line could be true
4429 myarr=DataArrayDouble(11) ; myarr.iota() ; myarr[i%11]=100.
4430 self.assertEqual(ffCell.getName(),"FieldOnCells")
4431 self.assertTrue(v.isEqual(myarr,1e-12))
4436 """ This test is close to test30 except that here the profiles on dim-1 of structured mesh is considered here."""
4437 fname="ForMEDReader32.med"
4438 c=MEDCouplingCMesh()
4439 arrX=DataArrayDouble(3) ; arrX.iota()
4440 arrY=DataArrayDouble(4) ; arrY.iota()
4441 arrZ=DataArrayDouble(5) ; arrZ.iota()
4442 c.setCoords(arrX,arrY,arrZ)
4443 c.setName("CartMesh")
4446 tmpFacesMesh=c.build1SGTSubLevelMesh()
4447 famIdFaces=DataArrayInt(98) ; famIdFaces[:36]=-1 ; famIdFaces[36:68]=-2 ; famIdFaces[68:]=-3
4448 famIdCells=DataArrayInt(24) ; famIdCells[:]=0
4449 cc.setFamilyFieldArr(0,famIdCells)
4450 #cc.setFamilyFieldArr(-1,famIdFaces)
4451 cc.addFamily("FacesX",-1) ; cc.addFamily("FacesY",-2) ; cc.addFamily("FacesZ",-3)
4452 cc.setFamiliesOnGroup("FacesX1",["FacesX"])
4453 cc.setFamiliesOnGroup("FacesY1",["FacesY"])
4454 cc.setFamiliesOnGroup("FacesZ1",["FacesZ"])
4455 fmts0=MEDFileFieldMultiTS()
4456 fmts1=MEDFileFieldMultiTS()
4457 pfl=DataArrayInt(31) ; pfl.iota() ; pfl.setName("PflOnQUAD4")
4458 for i in xrange(30):
4459 f1ts=MEDFileField1TS()
4460 fFaces=MEDCouplingFieldDouble(ON_CELLS) ; fFaces.setName("FieldOnFaces")
4461 arr=DataArrayDouble(31) ; arr.iota() ; arr[i]=100.
4462 fFaces.setArray(arr)
4463 fFaces.setTime(float(i)+0.1,i,-1)
4464 fFaces.setMesh(tmpFacesMesh[:31])
4465 f1ts.setFieldProfile(fFaces,cc,-1,pfl)# here, a test is done to check that "NORM_QUAD4" string is not 30 times appended at the end of pfl name.
4466 self.assertEqual("PflOnQUAD4",pfl.getName())
4467 fmts0.pushBackTimeStep(f1ts)
4469 f1ts=MEDFileField1TS()
4470 fCells=MEDCouplingFieldDouble(ON_CELLS) ; fCells.setName("FieldOnCells")
4471 arr=DataArrayDouble(24) ; arr.iota() ; arr[i%24]=30.
4472 fCells.setArray(arr)
4473 fCells.setTime(float(i)+0.1,i,-1)
4475 f1ts.setFieldNoProfileSBT(fCells)
4476 fmts1.pushBackTimeStep(f1ts)
4483 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4484 ms=MEDFileMeshes(fname)
4485 fields=MEDFileFields(fname,False)
4486 fields.removeFieldsWithoutAnyTimeStep()
4487 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4488 allFMTSLeavesToDisplay=[]
4489 for fields in fields_per_mesh:
4490 allFMTSLeavesToDisplay2=[]
4492 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4494 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4496 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4497 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
4498 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4499 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4500 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
4501 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4502 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
4503 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
4504 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
4506 mst=MEDFileMeshStruct.New(ms[0])
4508 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4509 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4511 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here CMesh is important
4512 (a,b,c),d=mml2.buildVTUArrays()
4513 self.assertTrue(d)#d is True because the a,b and c are directly those in the internal data structure
4514 self.assertTrue(a.isEqual(arrX,1e-12))
4515 self.assertTrue(b.isEqual(arrY,1e-12))
4516 self.assertTrue(c.isEqual(arrZ,1e-12))
4517 for i in xrange(30):
4518 ffCell=allFMTSLeavesPerCommonSupport1[0][0][0][i]
4519 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4520 ffCell.loadArraysIfNecessary()
4521 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4522 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4523 myarr=DataArrayDouble(24) ; myarr.iota() ; myarr[i%24]=30.
4524 self.assertEqual(ffCell.getName(),"FieldOnCells")
4525 self.assertTrue(v.isEqual(myarr,1e-12))
4528 fcscp=allFMTSLeavesPerCommonSupport1[1][1]
4529 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4531 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here UMesh is important
4532 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4533 self.assertTrue(ncc)# True because, the coords are computed by the implicit unstructured level -1 structured mesh
4534 self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,3.,1.,1.,3.,1.,2.,3.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.,0.,3.,2.,1.,3.,2.,2.,3.,2.,0.,0.,3.,1.,0.,3.,2.,0.,3.,0.,1.,3.,1.,1.,3.,2.,1.,3.,0.,2.,3.,1.,2.,3.,2.,2.,3.,0.,3.,3.,1.,3.,3.,2.,3.,3.,0.,0.,4.,1.,0.,4.,2.,0.,4.,0.,1.,4.,1.,1.,4.,2.,1.,4.,0.,2.,4.,1.,2.,4.,2.,2.,4.,0.,3.,4.,1.,3.,4.,2.,3.,4.],60,3),1e-12))
4535 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
4536 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150])))
4537 self.assertTrue(a3.isEqual(DataArrayInt([4,0,12,15,3,4,12,24,27,15,4,24,36,39,27,4,36,48,51,39,4,3,15,18,6,4,15,27,30,18,4,27,39,42,30,4,39,51,54,42,4,6,18,21,9,4,18,30,33,21,4,30,42,45,33,4,42,54,57,45,4,1,13,16,4,4,13,25,28,16,4,25,37,40,28,4,37,49,52,40,4,4,16,19,7,4,16,28,31,19,4,28,40,43,31,4,40,52,55,43,4,7,19,22,10,4,19,31,34,22,4,31,43,46,34,4,43,55,58,46,4,2,14,17,5,4,14,26,29,17,4,26,38,41,29,4,38,50,53,41,4,5,17,20,8,4,17,29,32,20,4,29,41,44,32])))
4538 self.assertTrue(a4 is None)
4539 self.assertTrue(a5 is None)
4540 a6,a7=mml2.retrieveFamilyIdsOnCells()
4541 self.assertTrue(a6 is None)
4543 for i in xrange(30):
4544 ffCell=allFMTSLeavesPerCommonSupport1[1][0][0][i]
4545 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4546 ffCell.loadArraysIfNecessary()
4547 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4548 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4549 myarr=DataArrayDouble(31) ; myarr.iota() ; myarr[i]=100.
4550 self.assertEqual(ffCell.getName(),"FieldOnFaces")
4551 self.assertTrue(v.isEqual(myarr,1e-12))
4556 """Non regression test concerning polygons. Thanks Adrien. This bug can't be shown by simply reading an displaying a MED file containing only polygons. A filter must be applied on it to show it. The a2 array was responsible of that bug."""
4557 fname="ForMEDReader33.med"
4558 fieldName="ACellField"
4559 coo=DataArrayDouble([(5.5,0.5),(5.5,-0.5),(6.5,0.5),(6.5,-0.5),(6.5,1.5),(7.5,0.5),(7.5,-0.5),(7.5,1.5),(7.5,2.5),(8.5,0.5),(8.5,-0.5),(8.5,1.5),(8.5,2.5),(8.5,3.5),(8.55,0.5),(8.55,-0.5),(8.55,1.5),(8.55,2.5),(8.55,3.5)])
4560 m=MEDCouplingUMesh("mesh",2)
4563 for i,c in enumerate([(1,0,2,3),(3,2,5,6),(2,4,7,5),(6,5,9,10),(5,7,11,9),(7,8,12,11),(10,9,14,15),(9,11,16,14),(11,12,17,16),(12,13,18,17)]):
4570 m.insertNextCell(typ,c)
4573 mm.setMeshAtLevel(0,m)
4575 for i in xrange(15):
4576 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i)+0.1,i,0)
4577 fCell0.setName(fieldName) ; fCell0.setMesh(m)
4578 arr=DataArrayDouble(m.getNumberOfCells()) ; arr.iota(0) ; arr[i%10]=100.
4579 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]"])
4580 fCell0.checkCoherency()
4581 MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,fCell0)
4583 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4584 ms=MEDFileMeshes(fname)
4585 fields=MEDFileFields(fname,False)
4586 fields.removeFieldsWithoutAnyTimeStep()
4587 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4588 allFMTSLeavesToDisplay=[]
4589 for fields in fields_per_mesh:
4590 allFMTSLeavesToDisplay2=[]
4592 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4594 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4596 self.assertEqual(len(allFMTSLeavesToDisplay),1)
4597 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
4598 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4599 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4600 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
4601 allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4602 self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
4603 self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
4605 mst=MEDFileMeshStruct.New(ms[0])
4607 fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4608 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4610 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4611 ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4612 self.assertTrue(not ncc)# false beacause 2D in MED file
4613 self.assertTrue(a0.isEqual(DataArrayDouble([(5.5,0.5,0),(5.5,-0.5,0),(6.5,0.5,0),(6.5,-0.5,0),(6.5,1.5,0),(7.5,0.5,0),(7.5,-0.5,0),(7.5,1.5,0),(7.5,2.5,0),(8.5,0.5,0),(8.5,-0.5,0),(8.5,1.5,0),(8.5,2.5,0),(8.5,3.5,0),(8.55,0.5,0),(8.55,-0.5,0),(8.55,1.5,0),(8.55,2.5,0),(8.55,3.5,0)]),1e-12))
4614 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,7,7,7,7])))
4615 self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45])))# the bug was here.
4616 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,2,3,4,3,2,5,6,4,2,4,7,5,4,6,5,9,10,4,5,7,11,9,4,7,8,12,11,4,10,9,14,15,4,9,11,16,14,4,11,12,17,16,4,12,13,18,17])))
4617 self.assertTrue(a4 is None)
4618 self.assertTrue(a5 is None)
4619 for i in xrange(15):
4620 ffCell=allFMTSLeavesPerCommonSupport1[0][0][0][i]
4621 fsst=MEDFileField1TSStructItem.BuildItemFrom(ffCell,mst)
4622 ffCell.loadArraysIfNecessary()
4623 v=mml2.buildDataArray(fsst,fields,ffCell.getUndergroundDataArray())
4624 self.assertEqual(v.getHiddenCppPointer(),ffCell.getUndergroundDataArray().getHiddenCppPointer())
4625 myarr=DataArrayDouble(10) ; myarr.iota() ; myarr[i%10]=100. ; myarr.setInfoOnComponent(0,"Comp1 [m]")
4626 self.assertEqual(ffCell.getName(),fieldName)
4627 self.assertTrue(v.isEqual(myarr,1e-12))