]> SALOME platform Git repositories - tools/medcoupling.git/blob - src/MEDLoader/Swig/MEDLoaderTest4.py
Salome HOME
Don't run the test with numpy if this optional product is not used
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest4.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25
26 class MEDLoaderTest4(unittest.TestCase):
27     """
28     Test series to emulate the future MEDReader plugin for PARAVIS.
29     """
30     def test1(self):
31         """
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.
34         """
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)
55         #
56         fieldName="zeField"
57         fs=MEDFileFieldMultiTS()
58         ##### Time step 0
59         i=0
60         f=MEDFileField1TS()
61         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
62         fCell0.setName(fieldName) ; fCell0.setMesh(m)
63         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
64         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
65         fCell0.checkCoherency()
66         f.setFieldNoProfileSBT(fCell0)
67         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
68         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
69         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
70         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
71         fCell1.checkCoherency()
72         f.setFieldNoProfileSBT(fCell1)
73         fs.pushBackTimeStep(f)
74         ##### Time step 1
75         i=1
76         f=MEDFileField1TS()
77         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
78         fCell0.setName(fieldName) ; fCell0.setMesh(m)
79         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
80         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
81         fCell0.checkCoherency()
82         f.setFieldNoProfileSBT(fCell0)
83         #
84         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
85         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
86         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
87         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
88         fCell1.checkCoherency()
89         f.setFieldNoProfileSBT(fCell1)
90         fs.pushBackTimeStep(f)
91         ##### Time step 2
92         i=2
93         f=MEDFileField1TS()
94         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
95         fCell0.setName(fieldName) ; fCell0.setMesh(m)
96         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
97         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
98         fCell0.checkCoherency()
99         f.setFieldNoProfileSBT(fCell0)
100         #
101         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
102         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
103         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
104         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
105         fCell1.checkCoherency()
106         f.setFieldNoProfileSBT(fCell1)
107         fs.pushBackTimeStep(f)
108         ##### Time step 3
109         i=3
110         f=MEDFileField1TS()
111         #
112         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
113         fCell0.setName(fieldName) ; fCell0.setMesh(m)
114         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
115         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
116         fCell0.checkCoherency()
117         f.setFieldNoProfileSBT(fCell0)
118         #
119         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
120         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
121         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
122         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
123         fCell1.checkCoherency()
124         f.setFieldNoProfileSBT(fCell1)
125         #
126         fs.pushBackTimeStep(f)
127         ##### Time step 4
128         i=4
129         f=MEDFileField1TS()
130         #
131         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
132         fCell0.setName(fieldName) ; fCell0.setMesh(m)
133         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
134         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
135         fCell0.checkCoherency()
136         f.setFieldNoProfileSBT(fCell0)
137         #
138         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
139         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
140         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
141         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
142         fCell1.checkCoherency()
143         f.setFieldNoProfileSBT(fCell1)
144         fs.pushBackTimeStep(f)
145         mm.write(fname,2)
146         fs.write(fname,0)
147         a0Exp=mm.getCoords().deepCpy()
148         del m,m1,mm,fs,f,fCell0,fCell1
149         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
150         ms=MEDFileMeshes(fname)
151         fields=MEDFileFields(fname,False) # False is important to not read the values
152         refMem=fields.getHeapMemorySize()
153         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
154         allFMTSLeavesToDisplay=[]
155         for fields in fields_per_mesh:
156             allFMTSLeavesToDisplay2=[]
157             for fmts in fields:
158                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
159                 pass
160             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
161             pass
162         self.assertEqual(len(allFMTSLeavesToDisplay),1)
163         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
164         for fmts in allFMTSLeavesToDisplay[0]:
165             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
166             pass
167         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
168         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
169         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
170         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
171         #
172         mst=MEDFileMeshStruct.New(ms[0])
173         fcscp=allFMTSLeavesPerCommonSupport[0][1]
174         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
175         mml2=mml.prepare()
176         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
177         for i in xrange(1,5):
178             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
179             pass
180         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
181         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
182         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])))
183         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
184         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])))
185         self.assertTrue(a4 is None)
186         self.assertTrue(a5 is None)
187         a6,a7=mml2.retrieveFamilyIdsOnCells()
188         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])))
189         self.assertTrue(not a7)
190         for i in xrange(5):
191             fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
192             fields[0][i].loadArraysIfNecessary()
193             tmpMem=fields.getHeapMemorySize()
194             self.assertTrue(tmpMem-refMem>=41*2*8)
195             refMem=tmpMem
196             v=mml.buildDataArray(fsst,fields,fields[0][i].getUndergroundDataArray())
197             self.assertEqual(v.getHiddenCppPointer(),fields[0][i].getUndergroundDataArray().getHiddenCppPointer())
198             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
199             self.assertTrue(v.isEqual(vExp,1e-12))
200             pass
201         pass
202
203     def test2(self):
204         """
205         One time serie of one field with cell and node discretization in the same field with no profiles.
206         Here as there is no profile only one VTK support is requested.
207         """
208         fname="ForMEDReader2.med"
209         # building a mesh containing 4 tri3 + 5 quad4
210         tri=MEDCouplingUMesh("tri",2)
211         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
212         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
213         tris=[tri.deepCpy() for i in xrange(4)]
214         for i,elt in enumerate(tris): elt.translate([i,0])
215         tris=MEDCouplingUMesh.MergeUMeshes(tris)
216         quad=MEDCouplingUMesh("quad",2)
217         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
218         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
219         quads=[quad.deepCpy() for i in xrange(5)]
220         for i,elt in enumerate(quads): elt.translate([5+i,0])
221         quads=MEDCouplingUMesh.MergeUMeshes(quads)
222         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
223         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
224         m1=m.buildDescendingConnectivity()[0]
225         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
226         #
227         fieldName="zeField"
228         fs=MEDFileFieldMultiTS()
229         ##### Time step 0
230         i=0
231         f=MEDFileField1TS()
232         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
233         fCell0.setName(fieldName) ; fCell0.setMesh(m)
234         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
235         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
236         fCell0.checkCoherency()
237         f.setFieldNoProfileSBT(fCell0)
238         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
239         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
240         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
241         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
242         fCell1.checkCoherency()
243         f.setFieldNoProfileSBT(fCell1)
244         #
245         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
246         fNode.setName(fieldName) ; fNode.setMesh(m1)
247         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(300) ; arr.rearrange(2)
248         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
249         fNode.checkCoherency()
250         f.setFieldNoProfileSBT(fNode)
251         fs.pushBackTimeStep(f)
252         ##### Time step 1
253         i=1
254         f=MEDFileField1TS()
255         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
256         fCell0.setName(fieldName) ; fCell0.setMesh(m)
257         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
258         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
259         fCell0.checkCoherency()
260         f.setFieldNoProfileSBT(fCell0)
261         #
262         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
263         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
264         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
265         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
266         fCell1.checkCoherency()
267         f.setFieldNoProfileSBT(fCell1)
268         #
269         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
270         fNode.setName(fieldName) ; fNode.setMesh(m1)
271         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
272         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
273         fNode.checkCoherency()
274         f.setFieldNoProfileSBT(fNode)
275         fs.pushBackTimeStep(f)
276         ##### Time step 2
277         i=2
278         f=MEDFileField1TS()
279         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
280         fNode.setName(fieldName) ; fNode.setMesh(m1)
281         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(2300) ; arr.rearrange(2)
282         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
283         fNode.checkCoherency()
284         f.setFieldNoProfileSBT(fNode)
285         #
286         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
287         fCell0.setName(fieldName) ; fCell0.setMesh(m)
288         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
289         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
290         fCell0.checkCoherency()
291         f.setFieldNoProfileSBT(fCell0)
292         #
293         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
294         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
295         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
296         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
297         fCell1.checkCoherency()
298         f.setFieldNoProfileSBT(fCell1)
299         fs.pushBackTimeStep(f)
300         ##### Time step 3
301         i=3
302         f=MEDFileField1TS()
303         #
304         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
305         fCell0.setName(fieldName) ; fCell0.setMesh(m)
306         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
307         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
308         fCell0.checkCoherency()
309         f.setFieldNoProfileSBT(fCell0)
310         #
311         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
312         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
313         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
314         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
315         fCell1.checkCoherency()
316         f.setFieldNoProfileSBT(fCell1)
317         #
318         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
319         fNode.setName(fieldName) ; fNode.setMesh(m1)
320         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
321         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
322         fNode.checkCoherency()
323         f.setFieldNoProfileSBT(fNode)
324         #
325         fs.pushBackTimeStep(f)
326         ##### Time step 4
327         i=4
328         f=MEDFileField1TS()
329         #
330         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
331         fCell0.setName(fieldName) ; fCell0.setMesh(m)
332         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
333         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
334         fCell0.checkCoherency()
335         f.setFieldNoProfileSBT(fCell0)
336         #
337         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
338         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
339         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
340         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
341         fCell1.checkCoherency()
342         f.setFieldNoProfileSBT(fCell1)
343         #
344         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
345         fNode.setName(fieldName) ; fNode.setMesh(m1)
346         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(4300) ; arr.rearrange(2)
347         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
348         fNode.checkCoherency()
349         f.setFieldNoProfileSBT(fNode)
350         #
351         fs.pushBackTimeStep(f)
352         mm.write(fname,2)
353         fs.write(fname,0)
354         a0Exp=mm.getCoords().deepCpy()
355         del m,m1,mm,fs,f,fCell0,fCell1
356         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
357         ms=MEDFileMeshes(fname)
358         fields=MEDFileFields(fname,False)
359         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
360         allFMTSLeavesToDisplay=[]
361         for fields in fields_per_mesh:
362             allFMTSLeavesToDisplay2=[]
363             for fmts in fields:
364                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
365                 pass
366             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
367             pass
368         self.assertEqual(len(allFMTSLeavesToDisplay),1)
369         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
370         for fmts in allFMTSLeavesToDisplay[0]:
371             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
372             pass
373         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
374         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
375         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
376         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
377         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
378         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
379         #
380         mst=MEDFileMeshStruct.New(ms[0])
381         fcscp=allFMTSLeavesPerCommonSupport[0][1]
382         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
383         mml2=mml.prepare()
384         assert isinstance(mml2,MEDUMeshMultiLev)
385         for i in xrange(1,5):
386             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
387             pass
388         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
389         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
390         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])))
391         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
392         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])))
393         self.assertTrue(a4 is None)
394         self.assertTrue(a5 is None)
395         # for cells
396         for i in xrange(5):
397             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
398             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
399             f.loadArraysIfNecessary()
400             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
401             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
402             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
403             self.assertTrue(v.isEqual(vExp,1e-12))
404             pass
405         for i in xrange(5):
406             f=allFMTSLeavesPerCommonSupport[0][0][1][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([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
412             self.assertTrue(v.isEqual(vExp,1e-12))
413             pass
414         pass
415
416     def test3(self):
417         """ 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.
418         So two time step series on the same field. No profile here neither on cells nor on nodes.
419         """
420         fname="ForMEDReader3.med"
421         # building a mesh containing 4 tri3 + 5 quad4
422         tri=MEDCouplingUMesh("tri",2)
423         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
424         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
425         tris=[tri.deepCpy() for i in xrange(4)]
426         for i,elt in enumerate(tris): elt.translate([i,0])
427         tris=MEDCouplingUMesh.MergeUMeshes(tris)
428         quad=MEDCouplingUMesh("quad",2)
429         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
430         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
431         quads=[quad.deepCpy() for i in xrange(5)]
432         for i,elt in enumerate(quads): elt.translate([5+i,0])
433         quads=MEDCouplingUMesh.MergeUMeshes(quads)
434         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
435         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
436         m1=m.buildDescendingConnectivity()[0]
437         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
438         #
439         fieldName="zeField"
440         fs=MEDFileFieldMultiTS()
441         ##### Time step 0 on cells
442         i=0
443         f=MEDFileField1TS()
444         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
445         fCell0.setName(fieldName) ; fCell0.setMesh(m)
446         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
447         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
448         fCell0.checkCoherency()
449         f.setFieldNoProfileSBT(fCell0)
450         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
451         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
452         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
453         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
454         fCell1.checkCoherency()
455         f.setFieldNoProfileSBT(fCell1)
456         fs.pushBackTimeStep(f)
457         ##### Time step 1 on nodes
458         i=1
459         f=MEDFileField1TS()
460         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
461         fNode.setName(fieldName) ; fNode.setMesh(m1)
462         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
463         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
464         fNode.checkCoherency()
465         f.setFieldNoProfileSBT(fNode)
466         fs.pushBackTimeStep(f)
467         ##### Time step 2 on cells
468         i=2
469         f=MEDFileField1TS()
470         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
471         fCell0.setName(fieldName) ; fCell0.setMesh(m)
472         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
473         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
474         fCell0.checkCoherency()
475         f.setFieldNoProfileSBT(fCell0)
476         #
477         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
478         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
479         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
480         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
481         fCell1.checkCoherency()
482         f.setFieldNoProfileSBT(fCell1)
483         fs.pushBackTimeStep(f)
484         ##### Time step 3 on nodes
485         i=3
486         f=MEDFileField1TS()
487         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
488         fNode.setName(fieldName) ; fNode.setMesh(m1)
489         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
490         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
491         fNode.checkCoherency()
492         f.setFieldNoProfileSBT(fNode)
493         fs.pushBackTimeStep(f)
494         ##### Time step 4
495         i=4
496         f=MEDFileField1TS()
497         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
498         fCell0.setName(fieldName) ; fCell0.setMesh(m)
499         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
500         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
501         fCell0.checkCoherency()
502         f.setFieldNoProfileSBT(fCell0)
503         #
504         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
505         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
506         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
507         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
508         fCell1.checkCoherency()
509         f.setFieldNoProfileSBT(fCell1)
510         #
511         fs.pushBackTimeStep(f)
512         mm.write(fname,2)
513         fs.write(fname,0)
514         a0Exp=mm.getCoords().deepCpy()
515         del m,m1,mm,fs,f,fCell0,fCell1
516         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
517         ms=MEDFileMeshes(fname)
518         fields=MEDFileFields(fname,False)
519         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
520         allFMTSLeavesToDisplay=[]
521         for fields in fields_per_mesh:
522             allFMTSLeavesToDisplay2=[]
523             for fmts in fields:
524                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
525                 pass
526             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
527             pass
528         self.assertEqual(len(allFMTSLeavesToDisplay),1)
529         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
530         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
531         self.assertEqual(len(allFMTSLeavesPerTimeSeries),2) # two time series here : one for the cells, the second one for the nodes
532         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
533         self.assertEqual(len(allFMTSLeavesPerTimeSeries[1]),1)
534         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
535         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
536         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
537         #
538         mst=MEDFileMeshStruct.New(ms[0])
539         fcscp=allFMTSLeavesPerCommonSupport[0][1] # start with the cells
540         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
541         mml2=mml.prepare()
542         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
543         for i in xrange(1,3):
544             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
545             pass
546         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
547         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
548         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])))
549         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
550         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])))
551         assert a4 is None
552         assert a5 is None
553         # for cells
554         for i in xrange(3):
555             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
556             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
557             f.loadArraysIfNecessary()
558             self.assertEqual(f.getName(),"zeField")
559             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
560             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
561             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
562             self.assertTrue(v.isEqual(vExp,1e-12))
563             pass
564         # for nodes
565         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[1],ms[ms.getMeshesNames()[0]])
566         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
567         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
568         fcscp=allFMTSLeavesPerCommonSupport[0][1]
569         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
570         mml2=mml.prepare()
571         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
572         for i in xrange(1,2):
573             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
574             pass
575         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
576         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
577         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
578         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
579         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])))
580         self.assertTrue(a4 is None)
581         self.assertTrue(a5 is None)
582         for i in xrange(2):
583             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
584             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
585             f.loadArraysIfNecessary()
586             self.assertEqual(f.getName(),"zeField")
587             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
588             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
589             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
590             self.assertTrue(v.isEqual(vExp,1e-12))
591             pass
592         pass
593
594     def test4(self):
595         """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
596         """
597         fname="ForMEDReader4.med"
598         # building a mesh containing 4 tri3 + 5 quad4
599         tri=MEDCouplingUMesh("tri",2)
600         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
601         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
602         tris=[tri.deepCpy() for i in xrange(4)]
603         for i,elt in enumerate(tris): elt.translate([i,0])
604         tris=MEDCouplingUMesh.MergeUMeshes(tris)
605         quad=MEDCouplingUMesh("quad",2)
606         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
607         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
608         quads=[quad.deepCpy() for i in xrange(5)]
609         for i,elt in enumerate(quads): elt.translate([5+i,0])
610         quads=MEDCouplingUMesh.MergeUMeshes(quads)
611         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
612         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
613         mm=MEDFileUMesh() ; mm.setMeshes([m])
614         #
615         fieldName1="zeField1"
616         fieldName2="zeField2"
617         fieldName3="zeField3"
618         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
619         ##### Time step 0
620         i=0
621         f=MEDFileField1TS()
622         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
623         fNode.setName(fieldName1) ; fNode.setMesh(m)
624         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
625         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
626         fNode.checkCoherency()
627         f.setFieldNoProfileSBT(fNode)
628         fs1.pushBackTimeStep(f)
629         #
630         f=MEDFileField1TS()
631         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
632         fNode.setName(fieldName2) ; fNode.setMesh(m)
633         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
634         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
635         fNode.checkCoherency()
636         f.setFieldNoProfileSBT(fNode)
637         fs2.pushBackTimeStep(f)
638         #
639         f=MEDFileField1TS()
640         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
641         fNode.setName(fieldName3) ; fNode.setMesh(m)
642         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
643         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
644         fNode.checkCoherency()
645         f.setFieldNoProfileSBT(fNode)
646         fs3.pushBackTimeStep(f)
647         ##### Time step 1
648         i=1
649         f=MEDFileField1TS()
650         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
651         fNode.setName(fieldName1) ; fNode.setMesh(m)
652         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
653         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
654         fNode.checkCoherency()
655         f.setFieldNoProfileSBT(fNode)
656         fs1.pushBackTimeStep(f)
657         #
658         f=MEDFileField1TS()
659         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
660         fNode.setName(fieldName2) ; fNode.setMesh(m)
661         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
662         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
663         fNode.checkCoherency()
664         f.setFieldNoProfileSBT(fNode)
665         fs2.pushBackTimeStep(f)
666         #
667         f=MEDFileField1TS()
668         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
669         fNode.setName(fieldName3) ; fNode.setMesh(m)
670         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
671         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
672         fNode.checkCoherency()
673         f.setFieldNoProfileSBT(fNode)
674         fs3.pushBackTimeStep(f)
675         ##### Time step 2
676         i=2
677         f=MEDFileField1TS()
678         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
679         fNode.setName(fieldName1) ; fNode.setMesh(m)
680         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
681         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
682         fNode.checkCoherency()
683         f.setFieldNoProfileSBT(fNode)
684         fs1.pushBackTimeStep(f)
685         #
686         f=MEDFileField1TS()
687         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
688         fNode.setName(fieldName2) ; fNode.setMesh(m)
689         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
690         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
691         fNode.checkCoherency()
692         f.setFieldNoProfileSBT(fNode)
693         fs2.pushBackTimeStep(f)
694         #
695         f=MEDFileField1TS()
696         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
697         fNode.setName(fieldName3) ; fNode.setMesh(m)
698         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
699         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
700         fNode.checkCoherency()
701         f.setFieldNoProfileSBT(fNode)
702         fs3.pushBackTimeStep(f)
703         ##### Time step 3
704         i=3
705         f=MEDFileField1TS()
706         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
707         fNode.setName(fieldName1) ; fNode.setMesh(m)
708         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
709         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
710         fNode.checkCoherency()
711         f.setFieldNoProfileSBT(fNode)
712         fs1.pushBackTimeStep(f)
713         #
714         f=MEDFileField1TS()
715         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
716         fNode.setName(fieldName2) ; fNode.setMesh(m)
717         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
718         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
719         fNode.checkCoherency()
720         f.setFieldNoProfileSBT(fNode)
721         fs2.pushBackTimeStep(f)
722         #
723         f=MEDFileField1TS()
724         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
725         fNode.setName(fieldName3) ; fNode.setMesh(m)
726         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
727         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
728         fNode.checkCoherency()
729         f.setFieldNoProfileSBT(fNode)
730         fs3.pushBackTimeStep(f)
731         ##### Time step 4
732         i=4
733         f=MEDFileField1TS()
734         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
735         fNode.setName(fieldName1) ; fNode.setMesh(m)
736         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
737         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
738         fNode.checkCoherency()
739         f.setFieldNoProfileSBT(fNode)
740         fs1.pushBackTimeStep(f)
741         #
742         f=MEDFileField1TS()
743         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
744         fNode.setName(fieldName2) ; fNode.setMesh(m)
745         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
746         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
747         fNode.checkCoherency()
748         f.setFieldNoProfileSBT(fNode)
749         fs2.pushBackTimeStep(f)
750         #
751         f=MEDFileField1TS()
752         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
753         fNode.setName(fieldName3) ; fNode.setMesh(m)
754         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
755         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
756         fNode.checkCoherency()
757         f.setFieldNoProfileSBT(fNode)
758         fs3.pushBackTimeStep(f)
759         #
760         mm.write(fname,2)
761         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
762         a0Exp=mm.getCoords().deepCpy()
763         del m,mm,fs1,fs2,fs3,f,fNode
764         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
765         ms=MEDFileMeshes(fname)
766         fields=MEDFileFields(fname,False)
767         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
768         allFMTSLeavesToDisplay=[]
769         for fields in fields_per_mesh:
770             allFMTSLeavesToDisplay2=[]
771             for fmts in fields:
772                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
773                 pass
774             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
775             pass
776         self.assertEqual(len(allFMTSLeavesToDisplay),1)
777         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
778         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
779         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
780         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
781         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
782         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
783         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
784         #
785         mst=MEDFileMeshStruct.New(ms[0])
786         fcscp=allFMTSLeavesPerCommonSupport[0][1]
787         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
788         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
789         fcscp=allFMTSLeavesPerCommonSupport[0][1]
790         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
791         mml2=mml.prepare()
792         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
793         for i in xrange(1,5):
794             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
795             pass
796         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
797         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
798         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
799         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
800         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])))
801         self.assertTrue(a4 is None)
802         self.assertTrue(a5 is None)
803         # test all the time steps of the 1/1 time step serie, on field 1
804         for i in xrange(5):
805             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
806             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
807             f.loadArraysIfNecessary()
808             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
809             self.assertEqual(f.getName(),fieldName1)
810             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
811             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
812             self.assertTrue(v.isEqual(vExp,1e-12))
813             pass
814         # test all the time steps of the 1/1 time step serie, on field 2
815         for i in xrange(5):
816             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
817             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
818             f.loadArraysIfNecessary()
819             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
820             self.assertEqual(f.getName(),fieldName2)
821             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
822             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
823             self.assertTrue(v.isEqual(vExp,1e-12))
824             pass
825         # test all the time steps of the 1/1 time step serie, on field 3
826         for i in xrange(5):
827             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
828             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
829             f.loadArraysIfNecessary()
830             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
831             self.assertEqual(f.getName(),fieldName3)
832             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
833             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
834             self.assertTrue(v.isEqual(vExp,1e-12))
835             pass
836         pass
837     
838     def test5(self):
839         """ 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
840         mesh lies on a different mesh.
841         """
842         fname="ForMEDReader5.med"
843         # building a mesh containing 6 tri3 + 5 quad4
844         m=MEDCouplingUMesh("mesh",2)
845         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]"])
846         m.setCoords(coords)
847         m.allocateCells()
848         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])
849         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
850         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])
851         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
852         mm=MEDFileUMesh() ; mm.setMeshes([m])
853         #
854         fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
855         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
856         fieldName3="zeField3" ; pfl3=DataArrayInt([0,1,2,3,4,5,9,10]) ; pfl3.setName("pfl3") # on cells but different support
857         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
858         #
859         for i in xrange(5):
860             f=MEDFileField1TS()
861             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
862             fNode.setName(fieldName1)
863             arr=DataArrayDouble(2*6) ; arr.iota(0+1000*i) ; arr.rearrange(2)
864             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
865             f.setFieldProfile(fNode,mm,0,pfl1)
866             fs1.pushBackTimeStep(f)
867             #
868             f=MEDFileField1TS()
869             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
870             fNode.setName(fieldName2)
871             arr=DataArrayDouble(2*8) ; arr.iota(100+1000*i) ; arr.rearrange(2)
872             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
873             f.setFieldProfile(fNode,mm,0,pfl2)
874             fs2.pushBackTimeStep(f)
875             #
876             f=MEDFileField1TS()
877             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
878             fNode.setName(fieldName3)
879             arr=DataArrayDouble(2*8) ; arr.iota(200+1000*i) ; arr.rearrange(2)
880             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
881             f.setFieldProfile(fNode,mm,0,pfl3)
882             fs3.pushBackTimeStep(f)
883             pass
884         mm.write(fname,2)
885         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
886         a0Exp=mm.getCoords().deepCpy()
887         del m,mm,fs1,fs2,fs3,f,fNode
888         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
889         ms=MEDFileMeshes(fname)
890         fields=MEDFileFields(fname,False)
891         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
892         allFMTSLeavesToDisplay=[]
893         for fields in fields_per_mesh:
894             allFMTSLeavesToDisplay2=[]
895             for fmts in fields:
896                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
897                 pass
898             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
899             pass
900         self.assertEqual(len(allFMTSLeavesToDisplay),1)
901         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
902         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
903         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
904         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
905         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
906         ms[0].getDirectUndergroundSingleGeoTypeMeshes(0)
907         self.assertEqual(len(allFMTSLeavesPerCommonSupport),2) # 2 support here
908         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
909         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
910         #
911         mst=MEDFileMeshStruct.New(ms[0])
912         fcscp=allFMTSLeavesPerCommonSupport[0][1]
913         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
914         mml2=mml.prepare()
915         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
916         for i in xrange(1,5):
917             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
918             pass
919         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
920         self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
921         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
922         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18])))
923         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])))
924         assert a4 is None
925         assert a5 is None
926         for i in xrange(5):
927             nbOfT=[6,8]
928             fieldNames=[fieldName1,fieldName2]
929             for j in xrange(2):
930                 m={"i":j}
931                 f=allFMTSLeavesPerCommonSupport[0][0][j][i]
932                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
933                 f.loadArraysIfNecessary()
934                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
935                 self.assertEqual(f.getName(),fieldNames[j])
936                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
937                 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])
938                 self.assertTrue(v.isEqual(vExp,1e-12))
939                 pass
940             pass
941         # Let's go for the 2nd support
942         fcscp=allFMTSLeavesPerCommonSupport[1][1]
943         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
944         mml2=mml.prepare()
945         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
946         for i in xrange(1,5):
947             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
948             pass
949         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
950         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
951         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
952         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26])))
953         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])))
954         self.assertTrue(a4 is None)
955         self.assertTrue(a5 is None)
956         for i in xrange(5):
957             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
958             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
959             f.loadArraysIfNecessary()
960             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
961             self.assertEqual(f.getName(),"zeField3")
962             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
963             vExp=DataArrayDouble(8*2) ; vExp.iota(200+1000*i) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]'%m,'Com2_2 [s^2]'%m])
964             self.assertTrue(v.isEqual(vExp,1e-12))
965             pass
966         pass
967     
968     def test6(self):
969         """ This test plays with cartesian mesh and profiles. When a sub cartesian mesh can also be considered as a cartesian mesh it is done.
970         """
971         fname="ForMEDReader6.med"
972         m=MEDCouplingCMesh("mesh")
973         coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
974         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
975         m.setCoords(coordsX,coordsY)
976         mm=MEDFileCMesh() ; mm.setMesh(m)
977         #
978         fieldName0="zeField0" ; # on cells
979         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
980         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
981         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
982         fieldName4="zeField4" ;# on nodes
983         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
984         #
985         for i in xrange(5):
986             f=MEDFileField1TS()
987             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
988             fNode.setName(fieldName0) ; fNode.setMesh(m)
989             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
990             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
991             f.setFieldNoProfileSBT(fNode)
992             fs0.pushBackTimeStep(f)
993             #
994             f=MEDFileField1TS()
995             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
996             fNode.setName(fieldName1)
997             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
998             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
999             f.setFieldProfile(fNode,mm,0,pfl1)
1000             self.assertEqual(pfl1.getName(),"pfl1")
1001             fs1.pushBackTimeStep(f)
1002             #
1003             f=MEDFileField1TS()
1004             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1005             fNode.setName(fieldName2)
1006             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1007             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1008             f.setFieldProfile(fNode,mm,0,pfl2)
1009             self.assertEqual(pfl2.getName(),"pfl2")
1010             fs2.pushBackTimeStep(f)
1011             #
1012             f=MEDFileField1TS()
1013             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1014             fNode.setName(fieldName3)
1015             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1016             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1017             f.setFieldProfile(fNode,mm,0,pfl3)
1018             self.assertEqual(pfl3.getName(),"pfl3")
1019             fs3.pushBackTimeStep(f)
1020             #
1021             f=MEDFileField1TS()
1022             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1023             fNode.setName(fieldName4) ; fNode.setMesh(m)
1024             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1025             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1026             f.setFieldNoProfileSBT(fNode)
1027             fs4.pushBackTimeStep(f)
1028             pass
1029         mm.write(fname,2)
1030         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1031         del m,mm,fs1,fs2,fs3,f,fNode
1032         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1033         ms=MEDFileMeshes(fname)
1034         fields=MEDFileFields(fname,False)
1035         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1036         allFMTSLeavesToDisplay=[]
1037         for fields in fields_per_mesh:
1038             allFMTSLeavesToDisplay2=[]
1039             for fmts in fields:
1040                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1041                 pass
1042             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1043             pass
1044         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1045         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1046         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1047         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1048         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1049         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1050         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1051         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1052         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1053         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1054         #
1055         mst=MEDFileMeshStruct.New(ms[0])
1056         #
1057         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1058         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1059         mml2=mml.prepare()
1060         a,b=mml2.buildVTUArrays()
1061         self.assertTrue(a.isEqual(coordsX,1e-12))
1062         self.assertTrue(b.isEqual(coordsY,1e-12))
1063         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
1064         for i in xrange(1,5):
1065             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1066             pass
1067         for i in xrange(5):
1068             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1069             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1070             f.loadArraysIfNecessary()
1071             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1072             self.assertEqual(f.getName(),fieldName0)
1073             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1074             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1075             self.assertTrue(v.isEqual(vExp,1e-12))
1076             #
1077             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1078             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1079             f.loadArraysIfNecessary()
1080             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1081             self.assertEqual(f.getName(),fieldName4)
1082             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1083             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1084             self.assertTrue(v.isEqual(vExp,1e-12))
1085             pass
1086         
1087         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1088         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1089         mml2=mml.prepare()
1090         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1091         a,b=mml2.buildVTUArrays()
1092         self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
1093         self.assertTrue(b.isEqual(coordsY,1e-12))
1094         for i in xrange(1,5):
1095             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1096             pass
1097         for i in xrange(5):
1098             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1099             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1100             f.loadArraysIfNecessary()
1101             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1102             self.assertEqual(f.getName(),fieldName1)
1103             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1104             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1105             self.assertTrue(v.isEqual(vExp,1e-12))
1106             #
1107             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1108             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1109             f.loadArraysIfNecessary()
1110             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1111             self.assertEqual(f.getName(),fieldName2)
1112             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1113             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1114             self.assertTrue(v.isEqual(vExp,1e-12))
1115             pass
1116         #
1117         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1118         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1119         mml2=mml.prepare()
1120         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1121         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1122         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)
1123         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1124         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1125         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1126         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1127         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])))
1128         self.assertTrue(a4 is None)
1129         self.assertTrue(a5 is None)
1130         for i in xrange(5):
1131             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1132             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1133             f.loadArraysIfNecessary()
1134             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1135             self.assertEqual(f.getName(),fieldName3)
1136             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1137             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1138             self.assertTrue(v.isEqual(vExp,1e-12))
1139             pass
1140         pass
1141
1142     def test7(self):
1143         """ This test plays with curvilinear mesh and profiles. When a sub curvilinear mesh can also be considered as a cartesian mesh it is done.
1144         This test is very similar to the test6.
1145         """
1146         fname="ForMEDReader7.med"
1147         m=MEDCouplingCurveLinearMesh("mesh") ; m.setNodeGridStructure([5,3])
1148         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)
1149         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1150         m.setCoords(a0Exp)
1151         mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
1152         #
1153         fieldName0="zeField0" ; # on cells
1154         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1155         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1156         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1157         fieldName4="zeField4" ;# on nodes
1158         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1159         #
1160         for i in xrange(5):
1161             f=MEDFileField1TS()
1162             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1163             fNode.setName(fieldName0) ; fNode.setMesh(m)
1164             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1165             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1166             f.setFieldNoProfileSBT(fNode)
1167             fs0.pushBackTimeStep(f)
1168             #
1169             f=MEDFileField1TS()
1170             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1171             fNode.setName(fieldName1)
1172             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1173             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1174             f.setFieldProfile(fNode,mm,0,pfl1)
1175             self.assertEqual(pfl1.getName(),"pfl1")
1176             fs1.pushBackTimeStep(f)
1177             #
1178             f=MEDFileField1TS()
1179             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1180             fNode.setName(fieldName2)
1181             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1182             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1183             f.setFieldProfile(fNode,mm,0,pfl2)
1184             self.assertEqual(pfl2.getName(),"pfl2")
1185             fs2.pushBackTimeStep(f)
1186             #
1187             f=MEDFileField1TS()
1188             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1189             fNode.setName(fieldName3)
1190             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1191             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1192             f.setFieldProfile(fNode,mm,0,pfl3)
1193             self.assertEqual(pfl3.getName(),"pfl3")
1194             fs3.pushBackTimeStep(f)
1195             #
1196             f=MEDFileField1TS()
1197             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1198             fNode.setName(fieldName4) ; fNode.setMesh(m)
1199             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1200             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1201             f.setFieldNoProfileSBT(fNode)
1202             fs4.pushBackTimeStep(f)
1203             pass
1204         mm.write(fname,2)
1205         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1206         del m,mm,fs1,fs2,fs3,f,fNode
1207         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1208         ms=MEDFileMeshes(fname)
1209         fields=MEDFileFields(fname,False)
1210         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1211         allFMTSLeavesToDisplay=[]
1212         for fields in fields_per_mesh:
1213             allFMTSLeavesToDisplay2=[]
1214             for fmts in fields:
1215                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1216                 pass
1217             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1218             pass
1219         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1220         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1221         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1222         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1223         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1224         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1225         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1226         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1227         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1228         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1229         #
1230         mst=MEDFileMeshStruct.New(ms[0])
1231         #
1232         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1233         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1234         mml2=mml.prepare()
1235         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev))
1236         a,b=mml2.buildVTUArrays()
1237         self.assertTrue(a.isEqual(a0Exp,1e-12))
1238         self.assertEqual(b,[5,3])
1239         for i in xrange(1,5):
1240             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1241             pass
1242         for i in xrange(5):
1243             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1244             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1245             f.loadArraysIfNecessary()
1246             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1247             self.assertEqual(f.getName(),fieldName0)
1248             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1249             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1250             self.assertTrue(v.isEqual(vExp,1e-12))
1251             #
1252             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1253             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1254             f.loadArraysIfNecessary()
1255             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1256             self.assertEqual(f.getName(),fieldName4)
1257             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1258             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1259             self.assertTrue(v.isEqual(vExp,1e-12))
1260             pass
1261         #
1262         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1263         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1264         mml2=mml.prepare()
1265         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1266         a,b=mml2.buildVTUArrays()
1267         self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
1268         self.assertEqual(b,[3,3])
1269         for i in xrange(1,5):
1270             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1271             pass
1272         for i in xrange(5):
1273             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1274             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1275             f.loadArraysIfNecessary()
1276             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1277             self.assertEqual(f.getName(),fieldName1)
1278             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1279             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1280             self.assertTrue(v.isEqual(vExp,1e-12))
1281             #
1282             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1283             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1284             f.loadArraysIfNecessary()
1285             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1286             self.assertEqual(f.getName(),fieldName2)
1287             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1288             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1289             self.assertTrue(v.isEqual(vExp,1e-12))
1290             pass
1291         #
1292         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1293         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1294         mml2=mml.prepare()
1295         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1296         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1297         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)
1298         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1299         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1300         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1301         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1302         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])))
1303         self.assertTrue(a4 is None)
1304         self.assertTrue(a5 is None)
1305         for i in xrange(5):
1306             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1307             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1308             f.loadArraysIfNecessary()
1309             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1310             self.assertEqual(f.getName(),fieldName3)
1311             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1312             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1313             self.assertTrue(v.isEqual(vExp,1e-12))
1314             pass
1315         pass
1316
1317     def test8(self):
1318         """ This test plays with with gauss fields with no profiles.
1319         """
1320         fname="ForMEDReader8.med"
1321         # building a mesh containing 6 tri3 + 5 quad4
1322         m=MEDCouplingUMesh("mesh",2)
1323         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]"])
1324         m.setCoords(coords)
1325         m.allocateCells()
1326         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])
1327         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1328         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])
1329         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1330         mm=MEDFileUMesh() ; mm.setMeshes([m])
1331         #
1332         fieldName0="zeField0"
1333         fieldName1="zeField1"
1334         fieldName2="zeField2"
1335         fieldName3="zeField3"
1336         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1337         for i in xrange(5):
1338             f=MEDFileField1TS()
1339             fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1340             fNode.setName(fieldName0) ; fNode.setMesh(m)
1341             arr=DataArrayDouble(2*38) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1342             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1343             f.setFieldNoProfileSBT(fNode)
1344             fs0.pushBackTimeStep(f)
1345             #
1346             f=MEDFileField1TS()
1347             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1348             fNode.setName(fieldName1) ; fNode.setMesh(m)
1349             arr=DataArrayDouble(2*11) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1350             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1351             f.setFieldNoProfileSBT(fNode)
1352             fs1.pushBackTimeStep(f)
1353             #
1354             f=MEDFileField1TS()
1355             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1356             fNode.setName(fieldName2) ; fNode.setMesh(m)
1357             fNode.setGaussLocalizationOnCells([0,1,2,3],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1358             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])
1359             fNode.setGaussLocalizationOnCells([6,7,8],[0.,0.,1.,0.,1.,1.,0.,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])
1360             fNode.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.,0.,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])
1361             arr=DataArrayDouble(2*(4*2+2*5+3*4+2*7)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1362             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1363             f.setFieldNoProfileSBT(fNode)
1364             fs2.pushBackTimeStep(f)
1365             #
1366             f=MEDFileField1TS()
1367             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1368             fNode.setName(fieldName3) ; fNode.setMesh(m)
1369             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1370             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1371             f.setFieldNoProfileSBT(fNode)
1372             fs3.pushBackTimeStep(f)
1373             #
1374             pass
1375         #
1376         mm.write(fname,2)
1377         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1378         a0Exp=mm.getCoords().deepCpy()
1379         del m,mm,fs1,fs2,fs3,f,fNode
1380         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1381         ms=MEDFileMeshes(fname)
1382         fields=MEDFileFields(fname,False)
1383         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1384         allFMTSLeavesToDisplay=[]
1385         for fields in fields_per_mesh:
1386             allFMTSLeavesToDisplay2=[]
1387             for fmts in fields:
1388                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1389                 pass
1390             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1391             pass
1392         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1393         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1394         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1395         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1396         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1397         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1398         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1399         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1400         #
1401         mst=MEDFileMeshStruct.New(ms[0])
1402         #
1403         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1404         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1405         mml2=mml.prepare()
1406         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1407         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1408         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1409         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
1410         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26,30,34,38])))
1411         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])))
1412         self.assertTrue(a4 is None)
1413         self.assertTrue(a5 is None)
1414         for i in xrange(1,5):
1415             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1416             pass
1417         for i in xrange(5):
1418             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1419             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1420             f.loadArraysIfNecessary()
1421             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1422             self.assertEqual(f.getName(),fieldName0)
1423             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1424             vExp=DataArrayDouble(38*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1425             self.assertTrue(v.isEqual(vExp,1e-12))
1426             #
1427             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1428             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1429             f.loadArraysIfNecessary()
1430             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1431             self.assertEqual(f.getName(),fieldName1)
1432             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1433             vExp=DataArrayDouble(11*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1434             self.assertTrue(v.isEqual(vExp,1e-12))
1435             #
1436             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1437             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1438             f.loadArraysIfNecessary()
1439             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1440             self.assertEqual(f.getName(),fieldName2)
1441             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1442             vExp=DataArrayDouble(44*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1443             self.assertTrue(v.isEqual(vExp,1e-12))
1444             #
1445             f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1446             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1447             f.loadArraysIfNecessary()
1448             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1449             self.assertEqual(f.getName(),fieldName3)
1450             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1451             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1452             self.assertTrue(v.isEqual(vExp,1e-12))
1453             pass
1454         #
1455         pass
1456
1457     def test9(self):
1458         """ This test plays with with gauss fields with profiles.
1459         """
1460         fname="ForMEDReader9.med"
1461         # building a mesh containing 6 tri3 + 5 quad4
1462         m=MEDCouplingUMesh("mesh",2)
1463         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]"])
1464         m.setCoords(coords)
1465         m.allocateCells()
1466         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])
1467         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1468         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])
1469         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1470         mm=MEDFileUMesh() ; mm.setMeshes([m])
1471         #
1472         fieldName0="zeField0"
1473         fieldName1="zeField1"
1474         fieldName2="zeField2"
1475         fieldName3="zeField3"
1476         pfl1=DataArrayInt([0,1,7,9,10]) ; pfl1.setName("pfl1") # on cells
1477         pfl2=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl2.setName("pfl2") # on nodes
1478         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1479         for i in xrange(5):
1480             f=MEDFileField1TS()
1481             fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1482             fNode.setName(fieldName0)
1483             arr=DataArrayDouble(2*18) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1484             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1485             f.setFieldProfile(fNode,mm,0,pfl1)
1486             fs0.pushBackTimeStep(f)
1487             #
1488             f=MEDFileField1TS()
1489             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1490             fNode.setName(fieldName1)
1491             arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1492             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1493             f.setFieldProfile(fNode,mm,0,pfl1)
1494             fs1.pushBackTimeStep(f)
1495             #
1496             f=MEDFileField1TS()
1497             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1498             fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1499             fNode.setGaussLocalizationOnCells([0],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1500             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])
1501             fNode.setGaussLocalizationOnCells([2,3],[0.,0.,1.,0.,1.,1.,0.,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])
1502             fNode.setGaussLocalizationOnCells([4],[0.,0.,1.,0.,1.,1.,0.,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])
1503             arr=DataArrayDouble(2*(2*1+5*1+4*2+7*1)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1504             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1505             f.setFieldProfile(fNode,mm,0,pfl1)
1506             fs2.pushBackTimeStep(f)
1507             #
1508             f=MEDFileField1TS()
1509             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1510             fNode.setName(fieldName3)
1511             arr=DataArrayDouble(2*9) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1512             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1513             f.setFieldProfile(fNode,mm,0,pfl2)
1514             fs3.pushBackTimeStep(f)
1515             #
1516             pass
1517         #
1518         mm.write(fname,2)
1519         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1520         a0Exp=mm.getCoords().deepCpy()
1521         del m,mm,fs1,fs2,fs3,f,fNode
1522         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1523         ms=MEDFileMeshes(fname)
1524         fields=MEDFileFields(fname,False)
1525         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1526         allFMTSLeavesToDisplay=[]
1527         for fields in fields_per_mesh:
1528             allFMTSLeavesToDisplay2=[]
1529             for fmts in fields:
1530                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1531                 pass
1532             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1533             pass
1534         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1535         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1536         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1537         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1538         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1539         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1540         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1541         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1542         #
1543         mst=MEDFileMeshStruct.New(ms[0])
1544         #
1545         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1546         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1547         mml2=mml.prepare()
1548         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1549         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1550         self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
1551         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1552         self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
1553         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])))
1554         self.assertTrue(a4 is None)
1555         self.assertTrue(a5 is None)
1556         for i in xrange(1,5):
1557             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1558             pass
1559         for i in xrange(5):
1560             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1561             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1562             f.loadArraysIfNecessary()
1563             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1564             self.assertEqual(f.getName(),fieldName0)
1565             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1566             vExp=DataArrayDouble(18*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1567             self.assertTrue(v.isEqual(vExp,1e-12))
1568             #
1569             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1570             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1571             f.loadArraysIfNecessary()
1572             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1573             self.assertEqual(f.getName(),fieldName1)
1574             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1575             vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1576             self.assertTrue(v.isEqual(vExp,1e-12))
1577             #
1578             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1579             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1580             f.loadArraysIfNecessary()
1581             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1582             self.assertEqual(f.getName(),fieldName2)
1583             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1584             vExp=DataArrayDouble(22*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1585             self.assertTrue(v.isEqual(vExp,1e-12))
1586             #
1587             f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1588             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1589             f.loadArraysIfNecessary()
1590             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1591             self.assertEqual(f.getName(),fieldName3)
1592             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1593             vExp=DataArrayDouble(9*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1594             self.assertTrue(v.isEqual(vExp,1e-12))
1595             pass
1596         pass
1597     
1598     def test10(self):
1599         """ This test plays with fields only on nodes containing profiles.
1600         """
1601         fname="ForMEDReader10.med"
1602         # building a mesh containing 6 tri3 + 5 quad4
1603         m=MEDCouplingUMesh("mesh",2)
1604         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]"])
1605         m.setCoords(coords)
1606         m.allocateCells()
1607         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])
1608         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1609         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])
1610         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1611         mm=MEDFileUMesh() ; mm.setMeshes([m])
1612         #
1613         fieldName0="zeField0"
1614         fieldName1="zeField1"
1615         fieldName2="zeField2"
1616         pfl1=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl1.setName("pfl1") # on nodes
1617         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS()
1618         for i in xrange(5):
1619             f=MEDFileField1TS()
1620             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1621             fNode.setName(fieldName0)
1622             arr=DataArrayDouble(2*9) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1623             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1624             f.setFieldProfile(fNode,mm,0,pfl1)
1625             fs0.pushBackTimeStep(f)
1626             #
1627             f=MEDFileField1TS()
1628             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1629             fNode.setName(fieldName1)
1630             arr=DataArrayDouble(2*9) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1631             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1632             f.setFieldProfile(fNode,mm,0,pfl1)
1633             fs1.pushBackTimeStep(f)
1634             #
1635             f=MEDFileField1TS()
1636             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1637             fNode.setName(fieldName2)
1638             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1639             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1640             f.setFieldProfile(fNode,mm,0,pfl1)
1641             fs2.pushBackTimeStep(f)
1642             #
1643             pass
1644         #
1645         mm.write(fname,2)
1646         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0)
1647         a0Exp=mm.getCoords().deepCpy()
1648         del m,mm,fs1,fs2,f,fNode
1649         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1650         ms=MEDFileMeshes(fname)
1651         fields=MEDFileFields(fname,False)
1652         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1653         allFMTSLeavesToDisplay=[]
1654         for fields in fields_per_mesh:
1655             allFMTSLeavesToDisplay2=[]
1656             for fmts in fields:
1657                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1658                 pass
1659             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1660             pass
1661         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1662         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
1663         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1664         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1665         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
1666         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1667         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1668         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
1669         #
1670         mst=MEDFileMeshStruct.New(ms[0])
1671         #
1672         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1673         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1674         mml2=mml.prepare()
1675         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1676         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1677         self.assertTrue(a0.isEqual(a0Exp[pfl1].changeNbOfComponents(3,0.),1e-12))
1678         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1679         self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
1680         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])))
1681         self.assertTrue(a4 is None)
1682         self.assertTrue(a5 is None)
1683         for i in xrange(1,5):
1684             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1685             pass
1686         for i in xrange(5):
1687             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1688             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1689             f.loadArraysIfNecessary()
1690             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1691             self.assertEqual(f.getName(),fieldName0)
1692             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1693             vExp=DataArrayDouble(9*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1694             self.assertTrue(v.isEqual(vExp,1e-12))
1695             #
1696             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1697             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1698             f.loadArraysIfNecessary()
1699             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1700             self.assertEqual(f.getName(),fieldName1)
1701             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1702             vExp=DataArrayDouble(9*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1703             self.assertTrue(v.isEqual(vExp,1e-12))
1704             #
1705             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1706             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1707             f.loadArraysIfNecessary()
1708             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1709             self.assertEqual(f.getName(),fieldName2)
1710             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1711             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1712             self.assertTrue(v.isEqual(vExp,1e-12))
1713             pass
1714         pass
1715     
1716     def test11(self):
1717         """ 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 !
1718         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.
1719         """
1720         fname="ForMEDReader11.med"
1721         m=MEDCouplingCMesh("mesh")
1722         arr=DataArrayDouble(5) ; arr.iota()
1723         m.setCoords(arr,arr)
1724         m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1725         mm=MEDFileUMesh() ; mm.setMeshes([m])
1726         #
1727         fieldName0="zeField0"
1728         fs0=MEDFileFieldMultiTS()
1729         for i in xrange(5):
1730             f=MEDFileField1TS()
1731             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1732             fNode.setName(fieldName0) ; fNode.setMesh(m)
1733             fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1734             fNode.setGaussLocalizationOnCells([1,5,8,9],[0.,0.,1.,0.,1.,1.,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])
1735             fNode.setGaussLocalizationOnCells([6,10,13],[0.,0.,1.,0.,1.,1.,0.,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])
1736             fNode.setGaussLocalizationOnCells([11,12,14],[0.,0.,1.,0.,1.,1.,0.,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])
1737             arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1738             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1739             f.setFieldNoProfileSBT(fNode)
1740             fs0.pushBackTimeStep(f)
1741             pass
1742         mm.write(fname,2)
1743         fs0.write(fname,0)
1744         a0Exp=mm.getCoords().deepCpy()
1745         del m,mm,fs0,f,fNode
1746         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1747         ms=MEDFileMeshes(fname)
1748         fields=MEDFileFields(fname,False)
1749         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1750         allFMTSLeavesToDisplay=[]
1751         for fields in fields_per_mesh:
1752             allFMTSLeavesToDisplay2=[]
1753             for fmts in fields:
1754                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1755                 pass
1756             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1757             pass
1758         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1759         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
1760         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1761         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 1 field is defined on the same time steps
1762         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
1763         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1764         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1765         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
1766         #
1767         mst=MEDFileMeshStruct.New(ms[0])
1768         #
1769         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1770         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1771         mml2=mml.prepare()
1772         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1773         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1774         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1775         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1776         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
1777         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]]
1778         self.assertTrue(a4 is None)
1779         self.assertTrue(a5 is None)
1780         for i in xrange(1,5):
1781             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1782             pass
1783         for i in xrange(5):
1784             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1785             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1786             f.loadArraysIfNecessary()
1787             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1788             self.assertEqual(f.getName(),fieldName0)
1789             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1790             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]'])
1791             vExp+=i*1000
1792             self.assertTrue(v.isEqual(vExp,1e-12))
1793             pass
1794         pass
1795
1796     def test12(self):
1797         """ This test is the second ultimate test for the profiles with gauss points.
1798         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.
1799         """
1800         fname="ForMEDReader12.med"
1801         m=MEDCouplingCMesh("mesh")
1802         arr=DataArrayDouble(5) ; arr.iota()
1803         m.setCoords(arr,arr)
1804         m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1805         mm=MEDFileUMesh() ; mm.setMeshes([m])
1806         #
1807         fieldName0="zeField0"
1808         fieldName1="zeField1"
1809         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
1810         for i in xrange(5):
1811             f=MEDFileField1TS()
1812             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1813             fNode.setName(fieldName0) ; fNode.setMesh(m)
1814             fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1815             fNode.setGaussLocalizationOnCells([1,5,8,9],[0.,0.,1.,0.,1.,1.,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])
1816             fNode.setGaussLocalizationOnCells([6,10,13],[0.,0.,1.,0.,1.,1.,0.,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])
1817             fNode.setGaussLocalizationOnCells([11,12,14],[0.,0.,1.,0.,1.,1.,0.,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])
1818             arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1819             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1820             f.setFieldNoProfileSBT(fNode)
1821             fs0.pushBackTimeStep(f)
1822             #
1823             f=MEDFileField1TS()
1824             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1825             fNode.setName(fieldName1) ; fNode.setMesh(m)
1826             arr=DataArrayDouble(2*16) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1827             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1828             f.setFieldNoProfileSBT(fNode)
1829             fs1.pushBackTimeStep(f)
1830             pass
1831         mm.write(fname,2)
1832         fs0.write(fname,0) ; fs1.write(fname,0)
1833         a0Exp=mm.getCoords().deepCpy()
1834         del m,mm,fs0,fs1,f,fNode
1835         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1836         ms=MEDFileMeshes(fname)
1837         fields=MEDFileFields(fname,False)
1838         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1839         allFMTSLeavesToDisplay=[]
1840         for fields in fields_per_mesh:
1841             allFMTSLeavesToDisplay2=[]
1842             for fmts in fields:
1843                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1844                 pass
1845             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1846             pass
1847         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1848         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
1849         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1850         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1851         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
1852         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1853         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1854         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1855         #
1856         mst=MEDFileMeshStruct.New(ms[0])
1857         #
1858         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1859         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1860         mml2=mml.prepare()
1861         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1862         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1863         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1864         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1865         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
1866         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
1867         self.assertTrue(a4 is None)
1868         self.assertTrue(a5 is None)
1869         for i in xrange(1,5):
1870             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1871             pass
1872         for i in xrange(5):
1873             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1874             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1875             f.loadArraysIfNecessary()
1876             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1877             self.assertEqual(f.getName(),fieldName0)
1878             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1879             vExp=DataArrayDouble(65*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1880             self.assertTrue(v.isEqual(vExp,1e-12))
1881             #
1882             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1883             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1884             f.loadArraysIfNecessary()
1885             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1886             self.assertEqual(f.getName(),fieldName1)
1887             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1888             vExp=DataArrayDouble(16*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1889             self.assertTrue(v.isEqual(vExp,1e-12))
1890             pass
1891
1892     def test13(self):
1893             """ Testing polyhedrons mixed with hexa8"""
1894             fname="ForMEDReader13.med"
1895             m=MEDCouplingUMesh("mesh",3)
1896             m.allocateCells()
1897             m.insertNextCell(NORM_HEXA8,[1,0,6,7,13,12,18,19]) ; m.insertNextCell(NORM_HEXA8,[2,1,7,8,14,13,19,20])
1898             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])
1899             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])
1900             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])
1901             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]"])
1902             m.setCoords(coords)
1903             mm=MEDFileUMesh() ; mm.setMeshes([m])
1904             fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1905             fieldName0="zeField0"
1906             fieldName1="zeField1"
1907             fieldName2="zeField2" ; pfl1=DataArrayInt([2,3]) ; pfl1.setName("pfl1")
1908             fieldName3="zefield3" ; pfl2=DataArrayInt([2,3,4]) ; pfl2.setName("pfl2")
1909             for i in xrange(5):
1910                 f=MEDFileField1TS()
1911                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1912                 fNode.setName(fieldName0) ; fNode.setMesh(m)
1913                 arr=DataArrayDouble(2*5) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1914                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1915                 f.setFieldNoProfileSBT(fNode)
1916                 fs0.pushBackTimeStep(f)
1917                 #
1918                 f=MEDFileField1TS()
1919                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1920                 fNode.setName(fieldName1) ; fNode.setMesh(m)
1921                 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1922                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1923                 f.setFieldNoProfileSBT(fNode)
1924                 fs1.pushBackTimeStep(f)
1925                 #
1926                 f=MEDFileField1TS()
1927                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1928                 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1929                 arr=DataArrayDouble(2*2) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1930                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1931                 f.setFieldProfile(fNode,mm,0,pfl1)
1932                 fs2.pushBackTimeStep(f)
1933                 #
1934                 f=MEDFileField1TS()
1935                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1936                 fNode.setName(fieldName3) ; fNode.setMesh(m[pfl2])
1937                 arr=DataArrayDouble(2*3) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1938                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1939                 f.setFieldProfile(fNode,mm,0,pfl2)
1940                 fs3.pushBackTimeStep(f)
1941                 pass
1942             mm.write(fname,2)
1943             fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1944             a0Exp=mm.getCoords().deepCpy()
1945             del m,mm,fs0
1946             ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1947             ms=MEDFileMeshes(fname)
1948             fields=MEDFileFields(fname,False)
1949             fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1950             allFMTSLeavesToDisplay=[]
1951             for fields in fields_per_mesh:
1952                 allFMTSLeavesToDisplay2=[]
1953                 for fmts in fields:
1954                     allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1955                     pass
1956                 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1957                 pass
1958             self.assertEqual(len(allFMTSLeavesToDisplay),1)
1959             self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1960             allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1961             self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1962             self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1963             allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1964             self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1965             self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1966             self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
1967             self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1968             #
1969             mst=MEDFileMeshStruct.New(ms[0])
1970             #
1971             fcscp=allFMTSLeavesPerCommonSupport[0][1]
1972             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1973             mml2=mml.prepare()
1974             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1975             a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1976             self.assertTrue(a0.isEqual(a0Exp,1e-12))
1977             self.assertTrue(a1.isEqual(DataArrayByte([12,12,42,42,42])))
1978             self.assertTrue(a2.isEqual(DataArrayInt([8,16,24,32,40])))
1979             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])))
1980             self.assertTrue(a4.isEqual(DataArrayInt([-1,-1,0,31,62])))
1981             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])))
1982             for i in xrange(1,5):
1983                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1984                 pass
1985             pass
1986             for i in xrange(5):
1987                 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1988                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1989                 f.loadArraysIfNecessary()
1990                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1991                 self.assertEqual(f.getName(),fieldName0)
1992                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1993                 vExp=DataArrayDouble(5*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1994                 self.assertTrue(v.isEqual(vExp,1e-12))
1995                 #
1996                 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1997                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1998                 f.loadArraysIfNecessary()
1999                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2000                 self.assertEqual(f.getName(),fieldName1)
2001                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2002                 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2003                 self.assertTrue(v.isEqual(vExp,1e-12))
2004                 pass
2005             #
2006             fcscp=allFMTSLeavesPerCommonSupport[1][1]
2007             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2008             mml2=mml.prepare()
2009             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2010             a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2011             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2012             self.assertTrue(a1.isEqual(DataArrayByte([42,42])))
2013             self.assertTrue(a2.isEqual(DataArrayInt([8,16])))
2014             self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22])))
2015             self.assertTrue(a4.isEqual(DataArrayInt([0,31])))
2016             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])))
2017             for i in xrange(1,5):
2018                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2019                 pass
2020             pass
2021             for i in xrange(5):
2022                 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
2023                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2024                 f.loadArraysIfNecessary()
2025                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2026                 self.assertEqual(f.getName(),fieldName2)
2027                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2028                 vExp=DataArrayDouble(2*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
2029                 self.assertTrue(v.isEqual(vExp,1e-12))
2030                 pass
2031             #
2032             fcscp=allFMTSLeavesPerCommonSupport[2][1]
2033             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2034             mml2=mml.prepare()
2035             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2036             a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2037             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2038             self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2039             self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
2040             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])))
2041             self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2042             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])))
2043             for i in xrange(1,5):
2044                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2045                 pass
2046             pass
2047             for i in xrange(5):
2048                 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
2049                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2050                 f.loadArraysIfNecessary()
2051                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2052                 self.assertEqual(f.getName(),fieldName3)
2053                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2054                 vExp=DataArrayDouble(3*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
2055                 self.assertTrue(v.isEqual(vExp,1e-12))
2056                 pass
2057             pass
2058
2059     def test14(self):
2060             """ Testing only polyhedrons"""
2061             fname="ForMEDReader14.med"
2062             m=MEDCouplingUMesh("mesh",3)
2063             m.allocateCells()
2064             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])
2065             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])
2066             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])
2067             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]"])
2068             m.setCoords(coords)
2069             mm=MEDFileUMesh() ; mm.setMeshes([m])
2070             fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
2071             fieldName0="zeField0"
2072             fieldName1="zeField1"
2073             for i in xrange(5):
2074                 f=MEDFileField1TS()
2075                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2076                 fNode.setName(fieldName0) ; fNode.setMesh(m)
2077                 arr=DataArrayDouble(2*3) ; arr.iota(0+1000*i) ; arr.rearrange(2)
2078                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
2079                 f.setFieldNoProfileSBT(fNode)
2080                 fs0.pushBackTimeStep(f)
2081                 #
2082                 f=MEDFileField1TS()
2083                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2084                 fNode.setName(fieldName1) ; fNode.setMesh(m)
2085                 arr=DataArrayDouble(2*3) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2086                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2087                 f.setFieldNoProfileSBT(fNode)
2088                 fs1.pushBackTimeStep(f)
2089                 pass
2090             mm.write(fname,2)
2091             fs0.write(fname,0) ; fs1.write(fname,0)
2092             a0Exp=mm.getCoords().deepCpy()
2093             del m,mm,fs0
2094             ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2095             ms=MEDFileMeshes(fname)
2096             fields=MEDFileFields(fname,False)
2097             fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2098             allFMTSLeavesToDisplay=[]
2099             for fields in fields_per_mesh:
2100                 allFMTSLeavesToDisplay2=[]
2101                 for fmts in fields:
2102                     allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2103                     pass
2104                 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2105                 pass
2106             self.assertEqual(len(allFMTSLeavesToDisplay),1)
2107             self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2108             allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2109             self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2110             self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2111             allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2112             self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2113             self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2114             #
2115             mst=MEDFileMeshStruct.New(ms[0])
2116             #
2117             fcscp=allFMTSLeavesPerCommonSupport[0][1]
2118             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2119             mml2=mml.prepare()
2120             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2121             a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2122             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2123             self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2124             self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
2125             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])))
2126             self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2127             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])))
2128             for i in xrange(1,5):
2129                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2130                 pass
2131             pass
2132             for i in xrange(5):
2133                 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2134                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2135                 f.loadArraysIfNecessary()
2136                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2137                 self.assertEqual(f.getName(),fieldName0)
2138                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2139                 vExp=DataArrayDouble(3*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2140                 self.assertTrue(v.isEqual(vExp,1e-12))
2141                 #
2142                 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2143                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2144                 f.loadArraysIfNecessary()
2145                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2146                 self.assertEqual(f.getName(),fieldName1)
2147                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2148                 vExp=DataArrayDouble(3*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2149                 self.assertTrue(v.isEqual(vExp,1e-12))
2150                 pass
2151             pass
2152
2153     def test15(self):
2154         """
2155         "ForMEDReader15.med" file has a spaceDim 3 mesh "mesh" (it is important !)
2156         and a field "zeField" lying on a single geometric type for Cell discr and node part.
2157         Test that can appear the most simple but it hides a big issue of MEDReader
2158         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.
2159         """
2160         fname="ForMEDReader15.med"
2161         m0=MEDCouplingCMesh()
2162         arr=DataArrayDouble(5) ; arr.iota(0)
2163         m0.setCoords(arr,arr,arr)
2164         m0.setName("mesh")
2165         m0=m0.buildUnstructured()
2166         #
2167         fieldName="zeField"
2168         fCell=MEDCouplingFieldDouble(ON_CELLS)
2169         fCell.setName(fieldName)
2170         fCell.setMesh(m0)
2171         #
2172         fNode=MEDCouplingFieldDouble(ON_NODES)
2173         fNode.setName(fieldName)
2174         fNode.setMesh(m0)
2175         #
2176         mm=MEDFileUMesh()
2177         mm.setMeshAtLevel(0,m0)
2178         #
2179         ffs=MEDFileFieldMultiTS()
2180         # TimeStep 0
2181         t=(1.,0,0) ; off=0.
2182         f1ts=MEDFileField1TS()
2183         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2184         fCell.setArray(a)
2185         fCell.setTime(*t)
2186         fCell.checkCoherency()
2187         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2188         a=a.negate()
2189         fNode.setArray(a)
2190         fNode.setTime(*t)
2191         fNode.checkCoherency()
2192         f1ts.setFieldNoProfileSBT(fCell)
2193         f1ts.setFieldNoProfileSBT(fNode)
2194         ffs.pushBackTimeStep(f1ts)
2195         # TimeStep 1
2196         t=(2.1,1,0) ; off=100.
2197         f1ts=MEDFileField1TS()
2198         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2199         fCell.setArray(a)
2200         fCell.setTime(*t)
2201         fCell.checkCoherency()
2202         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2203         a=a.negate()
2204         fNode.setArray(a)
2205         fNode.setTime(*t)
2206         fNode.checkCoherency()
2207         f1ts.setFieldNoProfileSBT(fCell)
2208         f1ts.setFieldNoProfileSBT(fNode)
2209         ffs.pushBackTimeStep(f1ts)
2210         # TimeStep 2
2211         t=(3.2,2,0) ; off=200.
2212         f1ts=MEDFileField1TS()
2213         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2214         fCell.setArray(a)
2215         fCell.setTime(*t)
2216         fCell.checkCoherency()
2217         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2218         a=a.negate()
2219         fNode.setArray(a)
2220         fNode.setTime(*t)
2221         fNode.checkCoherency()
2222         f1ts.setFieldNoProfileSBT(fCell)
2223         f1ts.setFieldNoProfileSBT(fNode)
2224         ffs.pushBackTimeStep(f1ts)
2225         # TimeStep 3
2226         t=(4.3,3,1) ; off=300.
2227         f1ts=MEDFileField1TS()
2228         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2229         fCell.setArray(a)
2230         fCell.setTime(*t)
2231         fCell.checkCoherency()
2232         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2233         a=a.negate()
2234         fNode.setArray(a)
2235         fNode.setTime(*t)
2236         fNode.checkCoherency()
2237         f1ts.setFieldNoProfileSBT(fCell)
2238         f1ts.setFieldNoProfileSBT(fNode)
2239         ffs.pushBackTimeStep(f1ts)
2240         #
2241         mm.write(fname,2)
2242         ffs.write(fname,0)
2243         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2244         
2245         pass
2246
2247     pass
2248
2249 unittest.main()