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