Salome HOME
MEDReader -> debugging session
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest4.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25
26 class MEDLoaderTest4(unittest.TestCase):
27     """
28     Test series to emulate the future MEDReader plugin for PARAVIS.
29     """
30     def test1(self):
31         """
32         This test is the most simple one. One time serie of one field with only cell fields with no profiles.
33         The only "difficulty" is that the cell field is lying on different levels (2D and 1D) to maximize the compatibility with ParaVIS.
34         """
35         fname="ForMEDReader1.med"
36         # building a mesh containing 4 tri3 + 5 quad4
37         tri=MEDCouplingUMesh("tri",2)
38         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
39         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
40         tris=[tri.deepCpy() for i in xrange(4)]
41         for i,elt in enumerate(tris): elt.translate([i,0])
42         tris=MEDCouplingUMesh.MergeUMeshes(tris)
43         quad=MEDCouplingUMesh("quad",2)
44         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
45         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
46         quads=[quad.deepCpy() for i in xrange(5)]
47         for i,elt in enumerate(quads): elt.translate([5+i,0])
48         quads=MEDCouplingUMesh.MergeUMeshes(quads)
49         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
50         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
51         m1=m.buildDescendingConnectivity()[0]
52         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
53         #
54         fieldName="zeField"
55         fs=MEDFileFieldMultiTS()
56         ##### Time step 0
57         i=0
58         f=MEDFileField1TS()
59         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
60         fCell0.setName(fieldName) ; fCell0.setMesh(m)
61         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
62         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
63         fCell0.checkCoherency()
64         f.setFieldNoProfileSBT(fCell0)
65         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
66         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
67         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
68         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
69         fCell1.checkCoherency()
70         f.setFieldNoProfileSBT(fCell1)
71         fs.pushBackTimeStep(f)
72         ##### Time step 1
73         i=1
74         f=MEDFileField1TS()
75         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
76         fCell0.setName(fieldName) ; fCell0.setMesh(m)
77         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
78         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
79         fCell0.checkCoherency()
80         f.setFieldNoProfileSBT(fCell0)
81         #
82         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
83         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
84         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
85         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
86         fCell1.checkCoherency()
87         f.setFieldNoProfileSBT(fCell1)
88         fs.pushBackTimeStep(f)
89         ##### Time step 2
90         i=2
91         f=MEDFileField1TS()
92         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
93         fCell0.setName(fieldName) ; fCell0.setMesh(m)
94         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
95         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
96         fCell0.checkCoherency()
97         f.setFieldNoProfileSBT(fCell0)
98         #
99         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
100         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
101         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
102         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
103         fCell1.checkCoherency()
104         f.setFieldNoProfileSBT(fCell1)
105         fs.pushBackTimeStep(f)
106         ##### Time step 3
107         i=3
108         f=MEDFileField1TS()
109         #
110         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
111         fCell0.setName(fieldName) ; fCell0.setMesh(m)
112         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
113         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
114         fCell0.checkCoherency()
115         f.setFieldNoProfileSBT(fCell0)
116         #
117         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
118         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
119         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
120         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
121         fCell1.checkCoherency()
122         f.setFieldNoProfileSBT(fCell1)
123         #
124         fs.pushBackTimeStep(f)
125         ##### Time step 4
126         i=4
127         f=MEDFileField1TS()
128         #
129         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
130         fCell0.setName(fieldName) ; fCell0.setMesh(m)
131         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
132         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
133         fCell0.checkCoherency()
134         f.setFieldNoProfileSBT(fCell0)
135         #
136         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
137         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
138         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
139         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
140         fCell1.checkCoherency()
141         f.setFieldNoProfileSBT(fCell1)
142         fs.pushBackTimeStep(f)
143         mm.write(fname,2)
144         fs.write(fname,0)
145         a0Exp=mm.getCoords().deepCpy()
146         del m,m1,mm,fs,f,fCell0,fCell1
147         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
148         ms=MEDFileMeshes(fname)
149         fields=MEDFileFields(fname,False) # False is important to not read the values
150         refMem=fields.getHeapMemorySize()
151         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
152         allFMTSLeavesToDisplay=[]
153         for fields in fields_per_mesh:
154             allFMTSLeavesToDisplay2=[]
155             for fmts in fields:
156                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
157                 pass
158             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
159             pass
160         self.assertEqual(len(allFMTSLeavesToDisplay),1)
161         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
162         for fmts in allFMTSLeavesToDisplay[0]:
163             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
164             pass
165         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
166         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
167         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
168         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
169         #
170         mst=MEDFileMeshStruct.New(ms[0])
171         fcscp=allFMTSLeavesPerCommonSupport[0][1]
172         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
173         mml2=mml.prepare()
174         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
175         for i in xrange(1,5):
176             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
177             pass
178         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
179         self.assertTrue(a0.isEqual(a0Exp,1e-12))
180         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])))
181         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])))
182         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])))
183         self.assertTrue(a4 is None)
184         self.assertTrue(a5 is None)
185         for i in xrange(5):
186             fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
187             fields[0][i].loadArraysIfNecessary()
188             tmpMem=fields.getHeapMemorySize()
189             self.assertTrue(tmpMem-refMem>=41*2*8)
190             refMem=tmpMem
191             v=mml.buildDataArray(fsst,fields,fields[0][i].getUndergroundDataArray())
192             self.assertEqual(v.getHiddenCppPointer(),fields[0][i].getUndergroundDataArray().getHiddenCppPointer())
193             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
194             self.assertTrue(v.isEqual(vExp,1e-12))
195             pass
196         pass
197
198     def test2(self):
199         """
200         One time serie of one field with cell and node discretization in the same field with no profiles.
201         Here as there is no profile only one VTK support is requested.
202         """
203         fname="ForMEDReader2.med"
204         # building a mesh containing 4 tri3 + 5 quad4
205         tri=MEDCouplingUMesh("tri",2)
206         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
207         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
208         tris=[tri.deepCpy() for i in xrange(4)]
209         for i,elt in enumerate(tris): elt.translate([i,0])
210         tris=MEDCouplingUMesh.MergeUMeshes(tris)
211         quad=MEDCouplingUMesh("quad",2)
212         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
213         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
214         quads=[quad.deepCpy() for i in xrange(5)]
215         for i,elt in enumerate(quads): elt.translate([5+i,0])
216         quads=MEDCouplingUMesh.MergeUMeshes(quads)
217         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
218         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
219         m1=m.buildDescendingConnectivity()[0]
220         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
221         #
222         fieldName="zeField"
223         fs=MEDFileFieldMultiTS()
224         ##### Time step 0
225         i=0
226         f=MEDFileField1TS()
227         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
228         fCell0.setName(fieldName) ; fCell0.setMesh(m)
229         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
230         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
231         fCell0.checkCoherency()
232         f.setFieldNoProfileSBT(fCell0)
233         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
234         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
235         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
236         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
237         fCell1.checkCoherency()
238         f.setFieldNoProfileSBT(fCell1)
239         #
240         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
241         fNode.setName(fieldName) ; fNode.setMesh(m1)
242         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(300) ; arr.rearrange(2)
243         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
244         fNode.checkCoherency()
245         f.setFieldNoProfileSBT(fNode)
246         fs.pushBackTimeStep(f)
247         ##### Time step 1
248         i=1
249         f=MEDFileField1TS()
250         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
251         fCell0.setName(fieldName) ; fCell0.setMesh(m)
252         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
253         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
254         fCell0.checkCoherency()
255         f.setFieldNoProfileSBT(fCell0)
256         #
257         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
258         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
259         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
260         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
261         fCell1.checkCoherency()
262         f.setFieldNoProfileSBT(fCell1)
263         #
264         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
265         fNode.setName(fieldName) ; fNode.setMesh(m1)
266         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
267         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
268         fNode.checkCoherency()
269         f.setFieldNoProfileSBT(fNode)
270         fs.pushBackTimeStep(f)
271         ##### Time step 2
272         i=2
273         f=MEDFileField1TS()
274         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
275         fNode.setName(fieldName) ; fNode.setMesh(m1)
276         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(2300) ; arr.rearrange(2)
277         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
278         fNode.checkCoherency()
279         f.setFieldNoProfileSBT(fNode)
280         #
281         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
282         fCell0.setName(fieldName) ; fCell0.setMesh(m)
283         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
284         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
285         fCell0.checkCoherency()
286         f.setFieldNoProfileSBT(fCell0)
287         #
288         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
289         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
290         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
291         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
292         fCell1.checkCoherency()
293         f.setFieldNoProfileSBT(fCell1)
294         fs.pushBackTimeStep(f)
295         ##### Time step 3
296         i=3
297         f=MEDFileField1TS()
298         #
299         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
300         fCell0.setName(fieldName) ; fCell0.setMesh(m)
301         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
302         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
303         fCell0.checkCoherency()
304         f.setFieldNoProfileSBT(fCell0)
305         #
306         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
307         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
308         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
309         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
310         fCell1.checkCoherency()
311         f.setFieldNoProfileSBT(fCell1)
312         #
313         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
314         fNode.setName(fieldName) ; fNode.setMesh(m1)
315         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
316         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
317         fNode.checkCoherency()
318         f.setFieldNoProfileSBT(fNode)
319         #
320         fs.pushBackTimeStep(f)
321         ##### Time step 4
322         i=4
323         f=MEDFileField1TS()
324         #
325         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
326         fCell0.setName(fieldName) ; fCell0.setMesh(m)
327         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
328         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
329         fCell0.checkCoherency()
330         f.setFieldNoProfileSBT(fCell0)
331         #
332         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
333         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
334         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
335         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
336         fCell1.checkCoherency()
337         f.setFieldNoProfileSBT(fCell1)
338         #
339         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
340         fNode.setName(fieldName) ; fNode.setMesh(m1)
341         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(4300) ; arr.rearrange(2)
342         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
343         fNode.checkCoherency()
344         f.setFieldNoProfileSBT(fNode)
345         #
346         fs.pushBackTimeStep(f)
347         mm.write(fname,2)
348         fs.write(fname,0)
349         a0Exp=mm.getCoords().deepCpy()
350         del m,m1,mm,fs,f,fCell0,fCell1
351         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
352         ms=MEDFileMeshes(fname)
353         fields=MEDFileFields(fname,False)
354         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
355         allFMTSLeavesToDisplay=[]
356         for fields in fields_per_mesh:
357             allFMTSLeavesToDisplay2=[]
358             for fmts in fields:
359                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
360                 pass
361             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
362             pass
363         self.assertEqual(len(allFMTSLeavesToDisplay),1)
364         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
365         for fmts in allFMTSLeavesToDisplay[0]:
366             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
367             pass
368         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
369         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
370         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
371         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
372         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
373         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
374         #
375         mst=MEDFileMeshStruct.New(ms[0])
376         fcscp=allFMTSLeavesPerCommonSupport[0][1]
377         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
378         mml2=mml.prepare()
379         assert isinstance(mml2,MEDUMeshMultiLev)
380         for i in xrange(1,5):
381             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
382             pass
383         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
384         self.assertTrue(a0.isEqual(a0Exp,1e-12))
385         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])))
386         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])))
387         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])))
388         self.assertTrue(a4 is None)
389         self.assertTrue(a5 is None)
390         # for cells
391         for i in xrange(5):
392             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
393             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
394             f.loadArraysIfNecessary()
395             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
396             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
397             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
398             self.assertTrue(v.isEqual(vExp,1e-12))
399             pass
400         for i in xrange(5):
401             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
402             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
403             f.loadArraysIfNecessary()
404             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
405             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
406             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
407             self.assertTrue(v.isEqual(vExp,1e-12))
408             pass
409         pass
410
411     def test3(self):
412         """ 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.
413         So two time step series on the same field. No profile here neither on cells nor on nodes.
414         """
415         fname="ForMEDReader3.med"
416         # building a mesh containing 4 tri3 + 5 quad4
417         tri=MEDCouplingUMesh("tri",2)
418         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
419         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
420         tris=[tri.deepCpy() for i in xrange(4)]
421         for i,elt in enumerate(tris): elt.translate([i,0])
422         tris=MEDCouplingUMesh.MergeUMeshes(tris)
423         quad=MEDCouplingUMesh("quad",2)
424         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
425         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
426         quads=[quad.deepCpy() for i in xrange(5)]
427         for i,elt in enumerate(quads): elt.translate([5+i,0])
428         quads=MEDCouplingUMesh.MergeUMeshes(quads)
429         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
430         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
431         m1=m.buildDescendingConnectivity()[0]
432         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
433         #
434         fieldName="zeField"
435         fs=MEDFileFieldMultiTS()
436         ##### Time step 0 on cells
437         i=0
438         f=MEDFileField1TS()
439         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
440         fCell0.setName(fieldName) ; fCell0.setMesh(m)
441         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
442         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
443         fCell0.checkCoherency()
444         f.setFieldNoProfileSBT(fCell0)
445         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
446         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
447         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
448         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
449         fCell1.checkCoherency()
450         f.setFieldNoProfileSBT(fCell1)
451         fs.pushBackTimeStep(f)
452         ##### Time step 1 on nodes
453         i=1
454         f=MEDFileField1TS()
455         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
456         fNode.setName(fieldName) ; fNode.setMesh(m1)
457         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
458         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
459         fNode.checkCoherency()
460         f.setFieldNoProfileSBT(fNode)
461         fs.pushBackTimeStep(f)
462         ##### Time step 2 on cells
463         i=2
464         f=MEDFileField1TS()
465         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
466         fCell0.setName(fieldName) ; fCell0.setMesh(m)
467         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
468         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
469         fCell0.checkCoherency()
470         f.setFieldNoProfileSBT(fCell0)
471         #
472         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
473         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
474         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
475         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
476         fCell1.checkCoherency()
477         f.setFieldNoProfileSBT(fCell1)
478         fs.pushBackTimeStep(f)
479         ##### Time step 3 on nodes
480         i=3
481         f=MEDFileField1TS()
482         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
483         fNode.setName(fieldName) ; fNode.setMesh(m1)
484         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
485         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
486         fNode.checkCoherency()
487         f.setFieldNoProfileSBT(fNode)
488         fs.pushBackTimeStep(f)
489         ##### Time step 4
490         i=4
491         f=MEDFileField1TS()
492         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
493         fCell0.setName(fieldName) ; fCell0.setMesh(m)
494         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
495         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
496         fCell0.checkCoherency()
497         f.setFieldNoProfileSBT(fCell0)
498         #
499         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
500         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
501         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
502         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
503         fCell1.checkCoherency()
504         f.setFieldNoProfileSBT(fCell1)
505         #
506         fs.pushBackTimeStep(f)
507         mm.write(fname,2)
508         fs.write(fname,0)
509         a0Exp=mm.getCoords().deepCpy()
510         del m,m1,mm,fs,f,fCell0,fCell1
511         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
512         ms=MEDFileMeshes(fname)
513         fields=MEDFileFields(fname,False)
514         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
515         allFMTSLeavesToDisplay=[]
516         for fields in fields_per_mesh:
517             allFMTSLeavesToDisplay2=[]
518             for fmts in fields:
519                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
520                 pass
521             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
522             pass
523         self.assertEqual(len(allFMTSLeavesToDisplay),1)
524         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
525         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
526         self.assertEqual(len(allFMTSLeavesPerTimeSeries),2) # two time series here : one for the cells, the second one for the nodes
527         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
528         self.assertEqual(len(allFMTSLeavesPerTimeSeries[1]),1)
529         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
530         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
531         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
532         #
533         mst=MEDFileMeshStruct.New(ms[0])
534         fcscp=allFMTSLeavesPerCommonSupport[0][1] # start with the cells
535         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
536         mml2=mml.prepare()
537         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
538         for i in xrange(1,3):
539             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
540             pass
541         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
542         self.assertTrue(a0.isEqual(a0Exp,1e-12))
543         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])))
544         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])))
545         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])))
546         assert a4 is None
547         assert a5 is None
548         # for cells
549         for i in xrange(3):
550             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
551             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
552             f.loadArraysIfNecessary()
553             self.assertEqual(f.getName(),"zeField")
554             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
555             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
556             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
557             self.assertTrue(v.isEqual(vExp,1e-12))
558             pass
559         # for nodes
560         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[1],ms[ms.getMeshesNames()[0]])
561         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
562         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
563         fcscp=allFMTSLeavesPerCommonSupport[0][1]
564         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
565         mml2=mml.prepare()
566         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
567         for i in xrange(1,2):
568             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
569             pass
570         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
571         self.assertTrue(a0.isEqual(a0Exp,1e-12))
572         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
573         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
574         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])))
575         self.assertTrue(a4 is None)
576         self.assertTrue(a5 is None)
577         for i in xrange(2):
578             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
579             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
580             f.loadArraysIfNecessary()
581             self.assertEqual(f.getName(),"zeField")
582             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
583             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
584             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
585             self.assertTrue(v.isEqual(vExp,1e-12))
586             pass
587         pass
588
589     def test4(self):
590         """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
591         """
592         fname="ForMEDReader4.med"
593         # building a mesh containing 4 tri3 + 5 quad4
594         tri=MEDCouplingUMesh("tri",2)
595         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
596         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
597         tris=[tri.deepCpy() for i in xrange(4)]
598         for i,elt in enumerate(tris): elt.translate([i,0])
599         tris=MEDCouplingUMesh.MergeUMeshes(tris)
600         quad=MEDCouplingUMesh("quad",2)
601         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
602         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
603         quads=[quad.deepCpy() for i in xrange(5)]
604         for i,elt in enumerate(quads): elt.translate([5+i,0])
605         quads=MEDCouplingUMesh.MergeUMeshes(quads)
606         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
607         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
608         mm=MEDFileUMesh() ; mm.setMeshes([m])
609         #
610         fieldName1="zeField1"
611         fieldName2="zeField2"
612         fieldName3="zeField3"
613         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
614         ##### Time step 0
615         i=0
616         f=MEDFileField1TS()
617         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
618         fNode.setName(fieldName1) ; fNode.setMesh(m)
619         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
620         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
621         fNode.checkCoherency()
622         f.setFieldNoProfileSBT(fNode)
623         fs1.pushBackTimeStep(f)
624         #
625         f=MEDFileField1TS()
626         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
627         fNode.setName(fieldName2) ; fNode.setMesh(m)
628         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
629         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
630         fNode.checkCoherency()
631         f.setFieldNoProfileSBT(fNode)
632         fs2.pushBackTimeStep(f)
633         #
634         f=MEDFileField1TS()
635         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
636         fNode.setName(fieldName3) ; fNode.setMesh(m)
637         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
638         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
639         fNode.checkCoherency()
640         f.setFieldNoProfileSBT(fNode)
641         fs3.pushBackTimeStep(f)
642         ##### Time step 1
643         i=1
644         f=MEDFileField1TS()
645         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
646         fNode.setName(fieldName1) ; fNode.setMesh(m)
647         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
648         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
649         fNode.checkCoherency()
650         f.setFieldNoProfileSBT(fNode)
651         fs1.pushBackTimeStep(f)
652         #
653         f=MEDFileField1TS()
654         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
655         fNode.setName(fieldName2) ; fNode.setMesh(m)
656         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
657         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
658         fNode.checkCoherency()
659         f.setFieldNoProfileSBT(fNode)
660         fs2.pushBackTimeStep(f)
661         #
662         f=MEDFileField1TS()
663         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
664         fNode.setName(fieldName3) ; fNode.setMesh(m)
665         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
666         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
667         fNode.checkCoherency()
668         f.setFieldNoProfileSBT(fNode)
669         fs3.pushBackTimeStep(f)
670         ##### Time step 2
671         i=2
672         f=MEDFileField1TS()
673         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
674         fNode.setName(fieldName1) ; fNode.setMesh(m)
675         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
676         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
677         fNode.checkCoherency()
678         f.setFieldNoProfileSBT(fNode)
679         fs1.pushBackTimeStep(f)
680         #
681         f=MEDFileField1TS()
682         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
683         fNode.setName(fieldName2) ; fNode.setMesh(m)
684         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
685         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
686         fNode.checkCoherency()
687         f.setFieldNoProfileSBT(fNode)
688         fs2.pushBackTimeStep(f)
689         #
690         f=MEDFileField1TS()
691         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
692         fNode.setName(fieldName3) ; fNode.setMesh(m)
693         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
694         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
695         fNode.checkCoherency()
696         f.setFieldNoProfileSBT(fNode)
697         fs3.pushBackTimeStep(f)
698         ##### Time step 3
699         i=3
700         f=MEDFileField1TS()
701         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
702         fNode.setName(fieldName1) ; fNode.setMesh(m)
703         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
704         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
705         fNode.checkCoherency()
706         f.setFieldNoProfileSBT(fNode)
707         fs1.pushBackTimeStep(f)
708         #
709         f=MEDFileField1TS()
710         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
711         fNode.setName(fieldName2) ; fNode.setMesh(m)
712         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
713         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
714         fNode.checkCoherency()
715         f.setFieldNoProfileSBT(fNode)
716         fs2.pushBackTimeStep(f)
717         #
718         f=MEDFileField1TS()
719         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
720         fNode.setName(fieldName3) ; fNode.setMesh(m)
721         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
722         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
723         fNode.checkCoherency()
724         f.setFieldNoProfileSBT(fNode)
725         fs3.pushBackTimeStep(f)
726         ##### Time step 4
727         i=4
728         f=MEDFileField1TS()
729         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
730         fNode.setName(fieldName1) ; fNode.setMesh(m)
731         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
732         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
733         fNode.checkCoherency()
734         f.setFieldNoProfileSBT(fNode)
735         fs1.pushBackTimeStep(f)
736         #
737         f=MEDFileField1TS()
738         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
739         fNode.setName(fieldName2) ; fNode.setMesh(m)
740         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
741         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
742         fNode.checkCoherency()
743         f.setFieldNoProfileSBT(fNode)
744         fs2.pushBackTimeStep(f)
745         #
746         f=MEDFileField1TS()
747         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
748         fNode.setName(fieldName3) ; fNode.setMesh(m)
749         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
750         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
751         fNode.checkCoherency()
752         f.setFieldNoProfileSBT(fNode)
753         fs3.pushBackTimeStep(f)
754         #
755         mm.write(fname,2)
756         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
757         a0Exp=mm.getCoords().deepCpy()
758         del m,mm,fs1,fs2,fs3,f,fNode
759         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
760         ms=MEDFileMeshes(fname)
761         fields=MEDFileFields(fname,False)
762         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
763         allFMTSLeavesToDisplay=[]
764         for fields in fields_per_mesh:
765             allFMTSLeavesToDisplay2=[]
766             for fmts in fields:
767                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
768                 pass
769             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
770             pass
771         self.assertEqual(len(allFMTSLeavesToDisplay),1)
772         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
773         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
774         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
775         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
776         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
777         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
778         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
779         #
780         mst=MEDFileMeshStruct.New(ms[0])
781         fcscp=allFMTSLeavesPerCommonSupport[0][1]
782         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
783         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
784         fcscp=allFMTSLeavesPerCommonSupport[0][1]
785         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
786         mml2=mml.prepare()
787         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
788         for i in xrange(1,5):
789             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
790             pass
791         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
792         self.assertTrue(a0.isEqual(a0Exp,1e-12))
793         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
794         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
795         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])))
796         self.assertTrue(a4 is None)
797         self.assertTrue(a5 is None)
798         # test all the time steps of the 1/1 time step serie, on field 1
799         for i in xrange(5):
800             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
801             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
802             f.loadArraysIfNecessary()
803             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
804             self.assertEqual(f.getName(),fieldName1)
805             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
806             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
807             self.assertTrue(v.isEqual(vExp,1e-12))
808             pass
809         # test all the time steps of the 1/1 time step serie, on field 2
810         for i in xrange(5):
811             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
812             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
813             f.loadArraysIfNecessary()
814             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
815             self.assertEqual(f.getName(),fieldName2)
816             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
817             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
818             self.assertTrue(v.isEqual(vExp,1e-12))
819             pass
820         # test all the time steps of the 1/1 time step serie, on field 3
821         for i in xrange(5):
822             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
823             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
824             f.loadArraysIfNecessary()
825             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
826             self.assertEqual(f.getName(),fieldName3)
827             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
828             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
829             self.assertTrue(v.isEqual(vExp,1e-12))
830             pass
831         pass
832     
833     def test5(self):
834         """ 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
835         mesh lies on a different mesh.
836         """
837         fname="ForMEDReader5.med"
838         # building a mesh containing 6 tri3 + 5 quad4
839         m=MEDCouplingUMesh("mesh",2)
840         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]"])
841         m.setCoords(coords)
842         m.allocateCells()
843         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])
844         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
845         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])
846         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
847         mm=MEDFileUMesh() ; mm.setMeshes([m])
848         #
849         fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
850         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
851         fieldName3="zeField3" ; pfl3=DataArrayInt([0,1,2,3,4,5,9,10]) ; pfl3.setName("pfl3") # on cells but different support
852         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
853         #
854         for i in xrange(5):
855             f=MEDFileField1TS()
856             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
857             fNode.setName(fieldName1)
858             arr=DataArrayDouble(2*6) ; arr.iota(0+1000*i) ; arr.rearrange(2)
859             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
860             f.setFieldProfile(fNode,mm,0,pfl1)
861             fs1.pushBackTimeStep(f)
862             #
863             f=MEDFileField1TS()
864             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
865             fNode.setName(fieldName2)
866             arr=DataArrayDouble(2*8) ; arr.iota(100+1000*i) ; arr.rearrange(2)
867             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
868             f.setFieldProfile(fNode,mm,0,pfl2)
869             fs2.pushBackTimeStep(f)
870             #
871             f=MEDFileField1TS()
872             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
873             fNode.setName(fieldName3)
874             arr=DataArrayDouble(2*8) ; arr.iota(200+1000*i) ; arr.rearrange(2)
875             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
876             f.setFieldProfile(fNode,mm,0,pfl3)
877             fs3.pushBackTimeStep(f)
878             pass
879         mm.write(fname,2)
880         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
881         a0Exp=mm.getCoords().deepCpy()
882         del m,mm,fs1,fs2,fs3,f,fNode
883         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
884         ms=MEDFileMeshes(fname)
885         fields=MEDFileFields(fname,False)
886         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
887         allFMTSLeavesToDisplay=[]
888         for fields in fields_per_mesh:
889             allFMTSLeavesToDisplay2=[]
890             for fmts in fields:
891                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
892                 pass
893             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
894             pass
895         self.assertEqual(len(allFMTSLeavesToDisplay),1)
896         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
897         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
898         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
899         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
900         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
901         ms[0].getDirectUndergroundSingleGeoTypeMeshes(0)
902         self.assertEqual(len(allFMTSLeavesPerCommonSupport),2) # 2 support here
903         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
904         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
905         #
906         mst=MEDFileMeshStruct.New(ms[0])
907         fcscp=allFMTSLeavesPerCommonSupport[0][1]
908         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
909         mml2=mml.prepare()
910         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
911         for i in xrange(1,5):
912             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
913             pass
914         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
915         self.assertTrue(a0.isEqual(a0Exp[pfl2],1e-12))
916         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
917         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18])))
918         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])))
919         assert a4 is None
920         assert a5 is None
921         for i in xrange(5):
922             nbOfT=[6,8]
923             fieldNames=[fieldName1,fieldName2]
924             for j in xrange(2):
925                 m={"i":j}
926                 f=allFMTSLeavesPerCommonSupport[0][0][j][i]
927                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
928                 f.loadArraysIfNecessary()
929                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
930                 self.assertEqual(f.getName(),fieldNames[j])
931                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
932                 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])
933                 self.assertTrue(v.isEqual(vExp,1e-12))
934                 pass
935             pass
936         # Let's go for the 2nd support
937         fcscp=allFMTSLeavesPerCommonSupport[1][1]
938         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
939         mml2=mml.prepare()
940         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
941         for i in xrange(1,5):
942             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
943             pass
944         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
945         self.assertTrue(a0.isEqual(a0Exp,1e-12))
946         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
947         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26])))
948         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])))
949         self.assertTrue(a4 is None)
950         self.assertTrue(a5 is None)
951         for i in xrange(5):
952             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
953             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
954             f.loadArraysIfNecessary()
955             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
956             self.assertEqual(f.getName(),"zeField3")
957             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
958             vExp=DataArrayDouble(8*2) ; vExp.iota(200+1000*i) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]'%m,'Com2_2 [s^2]'%m])
959             self.assertTrue(v.isEqual(vExp,1e-12))
960             pass
961         pass
962     
963     def test6(self):
964         """ This test plays with cartesian mesh and profiles. When a sub cartesian mesh can also be considered as a cartesian mesh it is done.
965         """
966         fname="ForMEDReader6.med"
967         m=MEDCouplingCMesh("mesh")
968         coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
969         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
970         m.setCoords(coordsX,coordsY)
971         mm=MEDFileCMesh() ; mm.setMesh(m)
972         #
973         fieldName0="zeField0" ; # on cells
974         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
975         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
976         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
977         fieldName4="zeField4" ;# on nodes
978         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
979         #
980         for i in xrange(5):
981             f=MEDFileField1TS()
982             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
983             fNode.setName(fieldName0) ; fNode.setMesh(m)
984             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
985             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
986             f.setFieldNoProfileSBT(fNode)
987             fs0.pushBackTimeStep(f)
988             #
989             f=MEDFileField1TS()
990             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
991             fNode.setName(fieldName1)
992             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
993             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
994             f.setFieldProfile(fNode,mm,0,pfl1)
995             self.assertEqual(pfl1.getName(),"pfl1")
996             fs1.pushBackTimeStep(f)
997             #
998             f=MEDFileField1TS()
999             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1000             fNode.setName(fieldName2)
1001             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1002             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1003             f.setFieldProfile(fNode,mm,0,pfl2)
1004             self.assertEqual(pfl2.getName(),"pfl2")
1005             fs2.pushBackTimeStep(f)
1006             #
1007             f=MEDFileField1TS()
1008             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1009             fNode.setName(fieldName3)
1010             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1011             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1012             f.setFieldProfile(fNode,mm,0,pfl3)
1013             self.assertEqual(pfl3.getName(),"pfl3")
1014             fs3.pushBackTimeStep(f)
1015             #
1016             f=MEDFileField1TS()
1017             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1018             fNode.setName(fieldName4) ; fNode.setMesh(m)
1019             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1020             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1021             f.setFieldNoProfileSBT(fNode)
1022             fs4.pushBackTimeStep(f)
1023             pass
1024         mm.write(fname,2)
1025         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1026         del m,mm,fs1,fs2,fs3,f,fNode
1027         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1028         ms=MEDFileMeshes(fname)
1029         fields=MEDFileFields(fname,False)
1030         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1031         allFMTSLeavesToDisplay=[]
1032         for fields in fields_per_mesh:
1033             allFMTSLeavesToDisplay2=[]
1034             for fmts in fields:
1035                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1036                 pass
1037             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1038             pass
1039         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1040         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1041         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1042         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1043         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1044         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1045         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1046         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1047         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1048         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1049         #
1050         mst=MEDFileMeshStruct.New(ms[0])
1051         #
1052         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1053         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1054         mml2=mml.prepare()
1055         a,b=mml2.buildVTUArrays()
1056         self.assertTrue(a.isEqual(coordsX,1e-12))
1057         self.assertTrue(b.isEqual(coordsY,1e-12))
1058         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
1059         for i in xrange(1,5):
1060             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1061             pass
1062         for i in xrange(5):
1063             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1064             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1065             f.loadArraysIfNecessary()
1066             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1067             self.assertEqual(f.getName(),fieldName0)
1068             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1069             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1070             self.assertTrue(v.isEqual(vExp,1e-12))
1071             #
1072             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1073             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1074             f.loadArraysIfNecessary()
1075             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1076             self.assertEqual(f.getName(),fieldName4)
1077             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1078             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1079             self.assertTrue(v.isEqual(vExp,1e-12))
1080             pass
1081         
1082         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1083         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1084         mml2=mml.prepare()
1085         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1086         a,b=mml2.buildVTUArrays()
1087         self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
1088         self.assertTrue(b.isEqual(coordsY,1e-12))
1089         for i in xrange(1,5):
1090             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1091             pass
1092         for i in xrange(5):
1093             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1094             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1095             f.loadArraysIfNecessary()
1096             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1097             self.assertEqual(f.getName(),fieldName1)
1098             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1099             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1100             self.assertTrue(v.isEqual(vExp,1e-12))
1101             #
1102             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1103             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1104             f.loadArraysIfNecessary()
1105             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1106             self.assertEqual(f.getName(),fieldName2)
1107             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1108             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1109             self.assertTrue(v.isEqual(vExp,1e-12))
1110             pass
1111         #
1112         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1113         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1114         mml2=mml.prepare()
1115         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1116         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1117         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)
1118         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1119         self.assertTrue(a0.isEqual(a0Exp,1e-12))
1120         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1121         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1122         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])))
1123         self.assertTrue(a4 is None)
1124         self.assertTrue(a5 is None)
1125         for i in xrange(5):
1126             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1127             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1128             f.loadArraysIfNecessary()
1129             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1130             self.assertEqual(f.getName(),fieldName3)
1131             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1132             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1133             self.assertTrue(v.isEqual(vExp,1e-12))
1134             pass
1135         pass
1136
1137     def test7(self):
1138         """ This test plays with curvilinear mesh and profiles. When a sub curvilinear mesh can also be considered as a cartesian mesh it is done.
1139         This test is very similar to the test6.
1140         """
1141         fname="ForMEDReader7.med"
1142         m=MEDCouplingCurveLinearMesh("mesh") ; m.setNodeGridStructure([5,3])
1143         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)
1144         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1145         m.setCoords(a0Exp)
1146         mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
1147         #
1148         fieldName0="zeField0" ; # on cells
1149         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1150         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1151         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1152         fieldName4="zeField4" ;# on nodes
1153         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1154         #
1155         for i in xrange(5):
1156             f=MEDFileField1TS()
1157             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1158             fNode.setName(fieldName0) ; fNode.setMesh(m)
1159             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1160             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1161             f.setFieldNoProfileSBT(fNode)
1162             fs0.pushBackTimeStep(f)
1163             #
1164             f=MEDFileField1TS()
1165             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1166             fNode.setName(fieldName1)
1167             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1168             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1169             f.setFieldProfile(fNode,mm,0,pfl1)
1170             self.assertEqual(pfl1.getName(),"pfl1")
1171             fs1.pushBackTimeStep(f)
1172             #
1173             f=MEDFileField1TS()
1174             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1175             fNode.setName(fieldName2)
1176             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1177             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1178             f.setFieldProfile(fNode,mm,0,pfl2)
1179             self.assertEqual(pfl2.getName(),"pfl2")
1180             fs2.pushBackTimeStep(f)
1181             #
1182             f=MEDFileField1TS()
1183             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1184             fNode.setName(fieldName3)
1185             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1186             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1187             f.setFieldProfile(fNode,mm,0,pfl3)
1188             self.assertEqual(pfl3.getName(),"pfl3")
1189             fs3.pushBackTimeStep(f)
1190             #
1191             f=MEDFileField1TS()
1192             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1193             fNode.setName(fieldName4) ; fNode.setMesh(m)
1194             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1195             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1196             f.setFieldNoProfileSBT(fNode)
1197             fs4.pushBackTimeStep(f)
1198             pass
1199         mm.write(fname,2)
1200         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1201         del m,mm,fs1,fs2,fs3,f,fNode
1202         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1203         ms=MEDFileMeshes(fname)
1204         fields=MEDFileFields(fname,False)
1205         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1206         allFMTSLeavesToDisplay=[]
1207         for fields in fields_per_mesh:
1208             allFMTSLeavesToDisplay2=[]
1209             for fmts in fields:
1210                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1211                 pass
1212             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1213             pass
1214         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1215         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1216         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1217         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1218         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1219         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1220         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1221         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1222         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1223         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1224         #
1225         mst=MEDFileMeshStruct.New(ms[0])
1226         #
1227         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1228         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1229         mml2=mml.prepare()
1230         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev))
1231         a,b=mml2.buildVTUArrays()
1232         self.assertTrue(a.isEqual(a0Exp,1e-12))
1233         self.assertEqual(b,[5,3])
1234         for i in xrange(1,5):
1235             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1236             pass
1237         for i in xrange(5):
1238             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1239             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1240             f.loadArraysIfNecessary()
1241             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1242             self.assertEqual(f.getName(),fieldName0)
1243             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1244             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1245             self.assertTrue(v.isEqual(vExp,1e-12))
1246             #
1247             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1248             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1249             f.loadArraysIfNecessary()
1250             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1251             self.assertEqual(f.getName(),fieldName4)
1252             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1253             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1254             self.assertTrue(v.isEqual(vExp,1e-12))
1255             pass
1256         #
1257         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1258         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1259         mml2=mml.prepare()
1260         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1261         a,b=mml2.buildVTUArrays()
1262         self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
1263         self.assertEqual(b,[3,3])
1264         for i in xrange(1,5):
1265             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1266             pass
1267         for i in xrange(5):
1268             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1269             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1270             f.loadArraysIfNecessary()
1271             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1272             self.assertEqual(f.getName(),fieldName1)
1273             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1274             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1275             self.assertTrue(v.isEqual(vExp,1e-12))
1276             #
1277             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1278             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1279             f.loadArraysIfNecessary()
1280             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1281             self.assertEqual(f.getName(),fieldName2)
1282             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1283             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1284             self.assertTrue(v.isEqual(vExp,1e-12))
1285             pass
1286         #
1287         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1288         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1289         mml2=mml.prepare()
1290         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1291         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1292         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)
1293         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1294         self.assertTrue(a0.isEqual(a0Exp,1e-12))
1295         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1296         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1297         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])))
1298         self.assertTrue(a4 is None)
1299         self.assertTrue(a5 is None)
1300         for i in xrange(5):
1301             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1302             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1303             f.loadArraysIfNecessary()
1304             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1305             self.assertEqual(f.getName(),fieldName3)
1306             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1307             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1308             self.assertTrue(v.isEqual(vExp,1e-12))
1309             pass
1310         pass
1311
1312     def test8(self):
1313         """ This test plays with with gauss fields with no profiles.
1314         """
1315         fname="ForMEDReader8.med"
1316         # building a mesh containing 6 tri3 + 5 quad4
1317         m=MEDCouplingUMesh("mesh",2)
1318         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]"])
1319         m.setCoords(coords)
1320         m.allocateCells()
1321         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])
1322         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1323         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])
1324         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1325         mm=MEDFileUMesh() ; mm.setMeshes([m])
1326         #
1327         fieldName0="zeField0"
1328         fieldName1="zeField1"
1329         fieldName2="zeField2"
1330         fieldName3="zeField3"
1331         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1332         for i in xrange(5):
1333             f=MEDFileField1TS()
1334             fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1335             fNode.setName(fieldName0) ; fNode.setMesh(m)
1336             arr=DataArrayDouble(2*38) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1337             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1338             f.setFieldNoProfileSBT(fNode)
1339             fs0.pushBackTimeStep(f)
1340             #
1341             f=MEDFileField1TS()
1342             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1343             fNode.setName(fieldName1) ; fNode.setMesh(m)
1344             arr=DataArrayDouble(2*11) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1345             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1346             f.setFieldNoProfileSBT(fNode)
1347             fs1.pushBackTimeStep(f)
1348             #
1349             f=MEDFileField1TS()
1350             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1351             fNode.setName(fieldName2) ; fNode.setMesh(m)
1352             fNode.setGaussLocalizationOnCells([0,1,2,3],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1353             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])
1354             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])
1355             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])
1356             arr=DataArrayDouble(2*(4*2+2*5+3*4+2*7)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1357             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1358             f.setFieldNoProfileSBT(fNode)
1359             fs2.pushBackTimeStep(f)
1360             #
1361             f=MEDFileField1TS()
1362             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1363             fNode.setName(fieldName3) ; fNode.setMesh(m)
1364             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1365             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1366             f.setFieldNoProfileSBT(fNode)
1367             fs3.pushBackTimeStep(f)
1368             #
1369             pass
1370         #
1371         mm.write(fname,2)
1372         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1373         a0Exp=mm.getCoords().deepCpy()
1374         del m,mm,fs1,fs2,fs3,f,fNode
1375         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1376         ms=MEDFileMeshes(fname)
1377         fields=MEDFileFields(fname,False)
1378         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1379         allFMTSLeavesToDisplay=[]
1380         for fields in fields_per_mesh:
1381             allFMTSLeavesToDisplay2=[]
1382             for fmts in fields:
1383                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1384                 pass
1385             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1386             pass
1387         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1388         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1389         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1390         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1391         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1392         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1393         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1394         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1395         #
1396         mst=MEDFileMeshStruct.New(ms[0])
1397         #
1398         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1399         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1400         mml2=mml.prepare()
1401         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1402         a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1403         self.assertTrue(a0.isEqual(a0Exp,1e-12))
1404         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
1405         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26,30,34,38])))
1406         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])))
1407         self.assertTrue(a4 is None)
1408         self.assertTrue(a5 is None)
1409         for i in xrange(1,5):
1410             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1411             pass
1412         for i in xrange(5):
1413             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1414             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1415             f.loadArraysIfNecessary()
1416             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1417             self.assertEqual(f.getName(),fieldName0)
1418             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1419             vExp=DataArrayDouble(38*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1420             self.assertTrue(v.isEqual(vExp,1e-12))
1421             #
1422             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1423             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1424             f.loadArraysIfNecessary()
1425             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1426             self.assertEqual(f.getName(),fieldName1)
1427             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1428             vExp=DataArrayDouble(11*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1429             self.assertTrue(v.isEqual(vExp,1e-12))
1430             #
1431             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1432             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1433             f.loadArraysIfNecessary()
1434             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1435             self.assertEqual(f.getName(),fieldName2)
1436             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1437             vExp=DataArrayDouble(44*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1438             self.assertTrue(v.isEqual(vExp,1e-12))
1439             #
1440             f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1441             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1442             f.loadArraysIfNecessary()
1443             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1444             self.assertEqual(f.getName(),fieldName3)
1445             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1446             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1447             self.assertTrue(v.isEqual(vExp,1e-12))
1448             pass
1449         #
1450         pass
1451     pass
1452
1453 unittest.main()