Salome HOME
lack of display of geo types in the tree in new MEDReader. Add methods for informatio...
[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([0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,100,104,108,112,117,122,127,132])))
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([0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,100,104,108,112,117,122,127,132])))
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([0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,100,104,108,112,117,122,127,132])))
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,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])))
587         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,21,26,31,36,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134])))
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,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])))
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([0,4,8,12,16,21,26,31,36])))
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([0,4,8,12,16,20])))
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([0,4,8,12,16,20,24,29])))
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         num=DataArrayInt(15) ; num.iota(200) ; mm.setRenumFieldArr(1,num) ; del num
1006         #
1007         fieldName0="zeField0" ; # on cells
1008         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1009         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1010         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1011         fieldName4="zeField4" ;# on nodes
1012         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1013         #
1014         for i in xrange(5):
1015             f=MEDFileField1TS()
1016             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1017             fNode.setName(fieldName0) ; fNode.setMesh(m)
1018             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1019             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1020             f.setFieldNoProfileSBT(fNode)
1021             fs0.pushBackTimeStep(f)
1022             #
1023             f=MEDFileField1TS()
1024             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1025             fNode.setName(fieldName1)
1026             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1027             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1028             f.setFieldProfile(fNode,mm,0,pfl1)
1029             self.assertEqual(pfl1.getName(),"pfl1")
1030             fs1.pushBackTimeStep(f)
1031             #
1032             f=MEDFileField1TS()
1033             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1034             fNode.setName(fieldName2)
1035             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1036             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1037             f.setFieldProfile(fNode,mm,0,pfl2)
1038             self.assertEqual(pfl2.getName(),"pfl2")
1039             fs2.pushBackTimeStep(f)
1040             #
1041             f=MEDFileField1TS()
1042             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1043             fNode.setName(fieldName3)
1044             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1045             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1046             f.setFieldProfile(fNode,mm,0,pfl3)
1047             self.assertEqual(pfl3.getName(),"pfl3")
1048             fs3.pushBackTimeStep(f)
1049             #
1050             f=MEDFileField1TS()
1051             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1052             fNode.setName(fieldName4) ; fNode.setMesh(m)
1053             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1054             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1055             f.setFieldNoProfileSBT(fNode)
1056             fs4.pushBackTimeStep(f)
1057             pass
1058         mm.write(fname,2)
1059         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1060         del m,mm,fs1,fs2,fs3,f,fNode
1061         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1062         ms=MEDFileMeshes(fname)
1063         fields=MEDFileFields(fname,False)
1064         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1065         allFMTSLeavesToDisplay=[]
1066         for fields in fields_per_mesh:
1067             allFMTSLeavesToDisplay2=[]
1068             for fmts in fields:
1069                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1070                 pass
1071             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1072             pass
1073         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1074         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1075         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1076         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1077         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1078         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1079         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1080         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1081         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1082         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1083         #
1084         mst=MEDFileMeshStruct.New(ms[0])
1085         #
1086         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1087         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1088         mml2=mml.prepare()
1089         (a,b),c=mml2.buildVTUArrays()
1090         self.assertTrue(c)# c is True here because the returned array is directly those coming from internal structure
1091         self.assertTrue(a.isEqual(coordsX,1e-12))
1092         self.assertTrue(b.isEqual(coordsY,1e-12))
1093         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
1094         for i in xrange(1,5):
1095             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1096             pass
1097         a6,a7=mml2.retrieveFamilyIdsOnCells()
1098         self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
1099         self.assertTrue(a7) # True because no copy
1100         a8,a9=mml2.retrieveNumberIdsOnCells()
1101         self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
1102         self.assertTrue(a9) # True because no copy
1103         a10,a11=mml2.retrieveNumberIdsOnNodes()
1104         self.assertTrue(a10.isEqual(DataArrayInt([200,201,202,203,204,205,206,207,208,209,210,211,212,213,214])))
1105         self.assertTrue(a11) # True because no copy
1106         for i in xrange(5):
1107             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1108             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1109             f.loadArraysIfNecessary()
1110             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1111             self.assertEqual(f.getName(),fieldName0)
1112             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1113             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1114             self.assertTrue(v.isEqual(vExp,1e-12))
1115             #
1116             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1117             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1118             f.loadArraysIfNecessary()
1119             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1120             self.assertEqual(f.getName(),fieldName4)
1121             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1122             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1123             self.assertTrue(v.isEqual(vExp,1e-12))
1124             pass
1125         
1126         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1127         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1128         mml2=mml.prepare()
1129         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1130         (a,b),c=mml2.buildVTUArrays()
1131         self.assertTrue(not c)# c is False because this a sub support specialy built for buildVTUArrays
1132         self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
1133         self.assertTrue(b.isEqual(coordsY,1e-12))
1134         a6,a7=mml2.retrieveFamilyIdsOnCells()
1135         self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
1136         self.assertTrue(not a7) # False because copy
1137         a8,a9=mml2.retrieveNumberIdsOnCells()
1138         self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
1139         self.assertTrue(not a9) # False because copy
1140         a10,a11=mml2.retrieveNumberIdsOnNodes()
1141         self.assertTrue(a10.isEqual(DataArrayInt([202,203,204,207,208,209,212,213,214])))
1142         self.assertTrue(not a11) # False because copy
1143         for i in xrange(1,5):
1144             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1145             pass
1146         for i in xrange(5):
1147             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1148             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1149             f.loadArraysIfNecessary()
1150             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1151             self.assertEqual(f.getName(),fieldName1)
1152             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1153             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1154             self.assertTrue(v.isEqual(vExp,1e-12))
1155             #
1156             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1157             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1158             f.loadArraysIfNecessary()
1159             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1160             self.assertEqual(f.getName(),fieldName2)
1161             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1162             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1163             self.assertTrue(v.isEqual(vExp,1e-12))
1164             pass
1165         #
1166         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1167         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1168         mml2=mml.prepare()
1169         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1170         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1171         self.assertTrue(not ncc)
1172         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)
1173         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1174         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1175         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1176         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15])))
1177         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])))
1178         self.assertTrue(a4 is None)
1179         self.assertTrue(a5 is None)
1180         a6,a7=mml2.retrieveFamilyIdsOnCells()
1181         self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
1182         self.assertTrue(not a7) # False because copy
1183         a8,a9=mml2.retrieveNumberIdsOnCells()
1184         self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
1185         self.assertTrue(not a9) # False because copy
1186         for i in xrange(5):
1187             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1188             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1189             f.loadArraysIfNecessary()
1190             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1191             self.assertEqual(f.getName(),fieldName3)
1192             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1193             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1194             self.assertTrue(v.isEqual(vExp,1e-12))
1195             pass
1196         pass
1197
1198     def test7(self):
1199         """ This test plays with curvilinear mesh and profiles. When a sub curvilinear mesh can also be considered as a cartesian mesh it is done.
1200         This test is very similar to the test6.
1201         """
1202         fname="ForMEDReader7.med"
1203         m=MEDCouplingCurveLinearMesh("mesh") ; m.setNodeGridStructure([5,3])
1204         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)
1205         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1206         m.setCoords(a0Exp)
1207         mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
1208         fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
1209         num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
1210         #
1211         fieldName0="zeField0" ; # on cells
1212         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1213         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1214         fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1215         fieldName4="zeField4" ;# on nodes
1216         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1217         #
1218         for i in xrange(5):
1219             f=MEDFileField1TS()
1220             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1221             fNode.setName(fieldName0) ; fNode.setMesh(m)
1222             arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1223             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1224             f.setFieldNoProfileSBT(fNode)
1225             fs0.pushBackTimeStep(f)
1226             #
1227             f=MEDFileField1TS()
1228             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1229             fNode.setName(fieldName1)
1230             arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1231             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1232             f.setFieldProfile(fNode,mm,0,pfl1)
1233             self.assertEqual(pfl1.getName(),"pfl1")
1234             fs1.pushBackTimeStep(f)
1235             #
1236             f=MEDFileField1TS()
1237             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1238             fNode.setName(fieldName2)
1239             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1240             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1241             f.setFieldProfile(fNode,mm,0,pfl2)
1242             self.assertEqual(pfl2.getName(),"pfl2")
1243             fs2.pushBackTimeStep(f)
1244             #
1245             f=MEDFileField1TS()
1246             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1247             fNode.setName(fieldName3)
1248             arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1249             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1250             f.setFieldProfile(fNode,mm,0,pfl3)
1251             self.assertEqual(pfl3.getName(),"pfl3")
1252             fs3.pushBackTimeStep(f)
1253             #
1254             f=MEDFileField1TS()
1255             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1256             fNode.setName(fieldName4) ; fNode.setMesh(m)
1257             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1258             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1259             f.setFieldNoProfileSBT(fNode)
1260             fs4.pushBackTimeStep(f)
1261             pass
1262         mm.write(fname,2)
1263         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1264         del m,mm,fs1,fs2,fs3,f,fNode
1265         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1266         ms=MEDFileMeshes(fname)
1267         fields=MEDFileFields(fname,False)
1268         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1269         allFMTSLeavesToDisplay=[]
1270         for fields in fields_per_mesh:
1271             allFMTSLeavesToDisplay2=[]
1272             for fmts in fields:
1273                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1274                 pass
1275             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1276             pass
1277         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1278         self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1279         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1280         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1281         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1282         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1283         self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1284         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1285         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1286         self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1287         #
1288         mst=MEDFileMeshStruct.New(ms[0])
1289         #
1290         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1291         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1292         mml2=mml.prepare()
1293         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev))
1294         a,b,c=mml2.buildVTUArrays()
1295         self.assertTrue(c)#True here because a is directly coming from internal data without copy
1296         self.assertTrue(a.isEqual(a0Exp,1e-12))
1297         self.assertEqual(b,[5,3])
1298         a6,a7=mml2.retrieveFamilyIdsOnCells()
1299         self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
1300         self.assertTrue(a7) # True because no copy
1301         a8,a9=mml2.retrieveNumberIdsOnCells()
1302         self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
1303         self.assertTrue(a9) # True because no copy
1304         for i in xrange(1,5):
1305             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1306             pass
1307         for i in xrange(5):
1308             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1309             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1310             f.loadArraysIfNecessary()
1311             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1312             self.assertEqual(f.getName(),fieldName0)
1313             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1314             vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1315             self.assertTrue(v.isEqual(vExp,1e-12))
1316             #
1317             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1318             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1319             f.loadArraysIfNecessary()
1320             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1321             self.assertEqual(f.getName(),fieldName4)
1322             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1323             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1324             self.assertTrue(v.isEqual(vExp,1e-12))
1325             pass
1326         #
1327         fcscp=allFMTSLeavesPerCommonSupport[1][1]
1328         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1329         mml2=mml.prepare()
1330         self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1331         a,b,c=mml2.buildVTUArrays()
1332         self.assertTrue(not c)#False here because a is the result of a computation not the internal strucutre
1333         self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
1334         self.assertEqual(b,[3,3])
1335         a6,a7=mml2.retrieveFamilyIdsOnCells()
1336         self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
1337         self.assertTrue(not a7) # False because copy
1338         a8,a9=mml2.retrieveNumberIdsOnCells()
1339         self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
1340         self.assertTrue(not a9) # False because copy
1341         for i in xrange(1,5):
1342             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1343             pass
1344         for i in xrange(5):
1345             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1346             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1347             f.loadArraysIfNecessary()
1348             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1349             self.assertEqual(f.getName(),fieldName1)
1350             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1351             vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1352             self.assertTrue(v.isEqual(vExp,1e-12))
1353             #
1354             f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1355             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1356             f.loadArraysIfNecessary()
1357             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1358             self.assertEqual(f.getName(),fieldName2)
1359             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1360             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1361             self.assertTrue(v.isEqual(vExp,1e-12))
1362             pass
1363         #
1364         fcscp=allFMTSLeavesPerCommonSupport[2][1]
1365         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1366         mml2=mml.prepare()
1367         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1368         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1369         self.assertTrue(not ncc)
1370         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)
1371         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1372         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1373         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1374         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15])))
1375         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])))
1376         self.assertTrue(a4 is None)
1377         self.assertTrue(a5 is None)
1378         a6,a7=mml2.retrieveFamilyIdsOnCells()
1379         self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
1380         self.assertTrue(not a7) # False because copy
1381         a8,a9=mml2.retrieveNumberIdsOnCells()
1382         self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
1383         self.assertTrue(not a9) # False because copy
1384         for i in xrange(5):
1385             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1386             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1387             f.loadArraysIfNecessary()
1388             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1389             self.assertEqual(f.getName(),fieldName3)
1390             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1391             vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1392             self.assertTrue(v.isEqual(vExp,1e-12))
1393             pass
1394         pass
1395
1396     def test8(self):
1397         """ This test plays with with gauss fields with no profiles.
1398         """
1399         fname="ForMEDReader8.med"
1400         # building a mesh containing 6 tri3 + 5 quad4
1401         m=MEDCouplingUMesh("mesh",2)
1402         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]"])
1403         m.setCoords(coords)
1404         m.allocateCells()
1405         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])
1406         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1407         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])
1408         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1409         mm=MEDFileUMesh() ; mm.setMeshes([m])
1410         #
1411         fieldName0="zeField0"
1412         fieldName1="zeField1"
1413         fieldName2="zeField2"
1414         fieldName3="zeField3"
1415         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1416         for i in xrange(5):
1417             f=MEDFileField1TS()
1418             fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1419             fNode.setName(fieldName0) ; fNode.setMesh(m)
1420             arr=DataArrayDouble(2*38) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1421             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1422             f.setFieldNoProfileSBT(fNode)
1423             fs0.pushBackTimeStep(f)
1424             #
1425             f=MEDFileField1TS()
1426             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1427             fNode.setName(fieldName1) ; fNode.setMesh(m)
1428             arr=DataArrayDouble(2*11) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1429             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1430             f.setFieldNoProfileSBT(fNode)
1431             fs1.pushBackTimeStep(f)
1432             #
1433             f=MEDFileField1TS()
1434             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1435             fNode.setName(fieldName2) ; fNode.setMesh(m)
1436             fNode.setGaussLocalizationOnCells([0,1,2,3],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1437             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])
1438             fNode.setGaussLocalizationOnCells([6,7,8],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1439             fNode.setGaussLocalizationOnCells([9,10],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1440             arr=DataArrayDouble(2*(4*2+2*5+3*4+2*7)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1441             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1442             f.setFieldNoProfileSBT(fNode)
1443             fs2.pushBackTimeStep(f)
1444             #
1445             f=MEDFileField1TS()
1446             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1447             fNode.setName(fieldName3) ; fNode.setMesh(m)
1448             arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1449             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1450             f.setFieldNoProfileSBT(fNode)
1451             fs3.pushBackTimeStep(f)
1452             #
1453             pass
1454         #
1455         mm.write(fname,2)
1456         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1457         a0Exp=mm.getCoords().deepCpy()
1458         del m,mm,fs1,fs2,fs3,f,fNode
1459         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1460         ms=MEDFileMeshes(fname)
1461         fields=MEDFileFields(fname,False)
1462         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1463         allFMTSLeavesToDisplay=[]
1464         for fields in fields_per_mesh:
1465             allFMTSLeavesToDisplay2=[]
1466             for fmts in fields:
1467                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1468                 pass
1469             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1470             pass
1471         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1472         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1473         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1474         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1475         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1476         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1477         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1478         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1479         #
1480         mst=MEDFileMeshStruct.New(ms[0])
1481         #
1482         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1483         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1484         mml2=mml.prepare()
1485         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1486         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1487         self.assertTrue(not ncc)
1488         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1489         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
1490         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,16,20,24,29,34,39,44])))
1491         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])))
1492         self.assertTrue(a4 is None)
1493         self.assertTrue(a5 is None)
1494         for i in xrange(1,5):
1495             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1496             pass
1497         for i in xrange(5):
1498             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1499             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1500             f.loadArraysIfNecessary()
1501             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1502             self.assertEqual(f.getName(),fieldName0)
1503             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1504             vExp=DataArrayDouble(38*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1505             self.assertTrue(v.isEqual(vExp,1e-12))
1506             #
1507             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1508             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1509             f.loadArraysIfNecessary()
1510             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1511             self.assertEqual(f.getName(),fieldName1)
1512             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1513             vExp=DataArrayDouble(11*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1514             self.assertTrue(v.isEqual(vExp,1e-12))
1515             #
1516             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1517             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1518             f.loadArraysIfNecessary()
1519             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1520             self.assertEqual(f.getName(),fieldName2)
1521             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1522             vExp=DataArrayDouble(44*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1523             self.assertTrue(v.isEqual(vExp,1e-12))
1524             #
1525             f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1526             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1527             f.loadArraysIfNecessary()
1528             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1529             self.assertEqual(f.getName(),fieldName3)
1530             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1531             vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1532             self.assertTrue(v.isEqual(vExp,1e-12))
1533             pass
1534         #
1535         pass
1536
1537     def test9(self):
1538         """ This test plays with with gauss fields with profiles.
1539         """
1540         fname="ForMEDReader9.med"
1541         # building a mesh containing 6 tri3 + 5 quad4
1542         m=MEDCouplingUMesh("mesh",2)
1543         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]"])
1544         m.setCoords(coords)
1545         m.allocateCells()
1546         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])
1547         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1548         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])
1549         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1550         mm=MEDFileUMesh() ; mm.setMeshes([m])
1551         #
1552         fieldName0="zeField0"
1553         fieldName1="zeField1"
1554         fieldName2="zeField2"
1555         fieldName3="zeField3"
1556         pfl1=DataArrayInt([0,1,7,9,10]) ; pfl1.setName("pfl1") # on cells
1557         pfl2=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl2.setName("pfl2") # on nodes
1558         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1559         for i in xrange(5):
1560             f=MEDFileField1TS()
1561             fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1562             fNode.setName(fieldName0)
1563             arr=DataArrayDouble(2*18) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1564             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1565             f.setFieldProfile(fNode,mm,0,pfl1)
1566             fs0.pushBackTimeStep(f)
1567             #
1568             f=MEDFileField1TS()
1569             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1570             fNode.setName(fieldName1)
1571             arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1572             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1573             f.setFieldProfile(fNode,mm,0,pfl1)
1574             fs1.pushBackTimeStep(f)
1575             #
1576             f=MEDFileField1TS()
1577             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1578             fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1579             fNode.setGaussLocalizationOnCells([0],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1580             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])
1581             fNode.setGaussLocalizationOnCells([2,3],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1582             fNode.setGaussLocalizationOnCells([4],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1583             arr=DataArrayDouble(2*(2*1+5*1+4*2+7*1)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1584             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1585             f.setFieldProfile(fNode,mm,0,pfl1)
1586             fs2.pushBackTimeStep(f)
1587             #
1588             f=MEDFileField1TS()
1589             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1590             fNode.setName(fieldName3)
1591             arr=DataArrayDouble(2*9) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1592             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1593             f.setFieldProfile(fNode,mm,0,pfl2)
1594             fs3.pushBackTimeStep(f)
1595             #
1596             pass
1597         #
1598         mm.write(fname,2)
1599         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1600         a0Exp=mm.getCoords().deepCpy()
1601         del m,mm,fs1,fs2,fs3,f,fNode
1602         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1603         ms=MEDFileMeshes(fname)
1604         fields=MEDFileFields(fname,False)
1605         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1606         allFMTSLeavesToDisplay=[]
1607         for fields in fields_per_mesh:
1608             allFMTSLeavesToDisplay2=[]
1609             for fmts in fields:
1610                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1611                 pass
1612             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1613             pass
1614         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1615         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1616         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1617         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1618         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1619         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1620         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1621         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1622         #
1623         mst=MEDFileMeshStruct.New(ms[0])
1624         #
1625         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1626         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1627         mml2=mml.prepare()
1628         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1629         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1630         self.assertTrue(not ncc)
1631         self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
1632         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1633         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18])))
1634         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])))
1635         self.assertTrue(a4 is None)
1636         self.assertTrue(a5 is None)
1637         for i in xrange(1,5):
1638             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1639             pass
1640         for i in xrange(5):
1641             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1642             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1643             f.loadArraysIfNecessary()
1644             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1645             self.assertEqual(f.getName(),fieldName0)
1646             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1647             vExp=DataArrayDouble(18*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1648             self.assertTrue(v.isEqual(vExp,1e-12))
1649             #
1650             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1651             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1652             f.loadArraysIfNecessary()
1653             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1654             self.assertEqual(f.getName(),fieldName1)
1655             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1656             vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1657             self.assertTrue(v.isEqual(vExp,1e-12))
1658             #
1659             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1660             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1661             f.loadArraysIfNecessary()
1662             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1663             self.assertEqual(f.getName(),fieldName2)
1664             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1665             vExp=DataArrayDouble(22*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1666             self.assertTrue(v.isEqual(vExp,1e-12))
1667             #
1668             f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1669             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1670             f.loadArraysIfNecessary()
1671             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1672             self.assertEqual(f.getName(),fieldName3)
1673             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1674             vExp=DataArrayDouble(9*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1675             self.assertTrue(v.isEqual(vExp,1e-12))
1676             pass
1677         pass
1678     
1679     def test10(self):
1680         """ This test plays with fields only on nodes containing profiles.
1681         """
1682         fname="ForMEDReader10.med"
1683         # building a mesh containing 6 tri3 + 5 quad4
1684         m=MEDCouplingUMesh("mesh",2)
1685         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]"])
1686         m.setCoords(coords)
1687         m.allocateCells()
1688         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])
1689         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1690         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])
1691         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1692         mm=MEDFileUMesh() ; mm.setMeshes([m])
1693         #
1694         fieldName0="zeField0"
1695         fieldName1="zeField1"
1696         fieldName2="zeField2"
1697         pfl1=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl1.setName("pfl1") # on nodes
1698         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS()
1699         for i in xrange(5):
1700             f=MEDFileField1TS()
1701             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1702             fNode.setName(fieldName0)
1703             arr=DataArrayDouble(2*9) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1704             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1705             f.setFieldProfile(fNode,mm,0,pfl1)
1706             fs0.pushBackTimeStep(f)
1707             #
1708             f=MEDFileField1TS()
1709             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1710             fNode.setName(fieldName1)
1711             arr=DataArrayDouble(2*9) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1712             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1713             f.setFieldProfile(fNode,mm,0,pfl1)
1714             fs1.pushBackTimeStep(f)
1715             #
1716             f=MEDFileField1TS()
1717             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1718             fNode.setName(fieldName2)
1719             arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1720             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1721             f.setFieldProfile(fNode,mm,0,pfl1)
1722             fs2.pushBackTimeStep(f)
1723             #
1724             pass
1725         #
1726         mm.write(fname,2)
1727         fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0)
1728         a0Exp=mm.getCoords().deepCpy()
1729         del m,mm,fs1,fs2,f,fNode
1730         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1731         ms=MEDFileMeshes(fname)
1732         fields=MEDFileFields(fname,False)
1733         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1734         allFMTSLeavesToDisplay=[]
1735         for fields in fields_per_mesh:
1736             allFMTSLeavesToDisplay2=[]
1737             for fmts in fields:
1738                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1739                 pass
1740             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1741             pass
1742         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1743         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
1744         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1745         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1746         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
1747         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1748         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1749         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
1750         #
1751         mst=MEDFileMeshStruct.New(ms[0])
1752         #
1753         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1754         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1755         mml2=mml.prepare()
1756         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1757         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1758         self.assertTrue(not ncc)
1759         self.assertTrue(a0.isEqual(a0Exp[pfl1].changeNbOfComponents(3,0.),1e-12))
1760         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1761         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18])))
1762         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])))
1763         self.assertTrue(a4 is None)
1764         self.assertTrue(a5 is None)
1765         for i in xrange(1,5):
1766             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1767             pass
1768         for i in xrange(5):
1769             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1770             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1771             f.loadArraysIfNecessary()
1772             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1773             self.assertEqual(f.getName(),fieldName0)
1774             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1775             vExp=DataArrayDouble(9*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1776             self.assertTrue(v.isEqual(vExp,1e-12))
1777             #
1778             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1779             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1780             f.loadArraysIfNecessary()
1781             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1782             self.assertEqual(f.getName(),fieldName1)
1783             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1784             vExp=DataArrayDouble(9*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1785             self.assertTrue(v.isEqual(vExp,1e-12))
1786             #
1787             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1788             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1789             f.loadArraysIfNecessary()
1790             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1791             self.assertEqual(f.getName(),fieldName2)
1792             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1793             vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1794             self.assertTrue(v.isEqual(vExp,1e-12))
1795             pass
1796         pass
1797     
1798     def test11(self):
1799         """ 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 !
1800         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.
1801         """
1802         fname="ForMEDReader11.med"
1803         m=MEDCouplingCMesh("mesh")
1804         arr=DataArrayDouble(5) ; arr.iota()
1805         m.setCoords(arr,arr)
1806         m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1807         mm=MEDFileUMesh() ; mm.setMeshes([m])
1808         #
1809         fieldName0="zeField0"
1810         fs0=MEDFileFieldMultiTS()
1811         for i in xrange(5):
1812             f=MEDFileField1TS()
1813             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1814             fNode.setName(fieldName0) ; fNode.setMesh(m)
1815             fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1816             fNode.setGaussLocalizationOnCells([1,5,8,9],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1817             fNode.setGaussLocalizationOnCells([6,10,13],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1818             fNode.setGaussLocalizationOnCells([11,12,14],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1819             arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1820             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1821             f.setFieldNoProfileSBT(fNode)
1822             fs0.pushBackTimeStep(f)
1823             pass
1824         mm.write(fname,2)
1825         fs0.write(fname,0)
1826         a0Exp=mm.getCoords().deepCpy()
1827         del m,mm,fs0,f,fNode
1828         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1829         ms=MEDFileMeshes(fname)
1830         fields=MEDFileFields(fname,False)
1831         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1832         allFMTSLeavesToDisplay=[]
1833         for fields in fields_per_mesh:
1834             allFMTSLeavesToDisplay2=[]
1835             for fmts in fields:
1836                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1837                 pass
1838             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1839             pass
1840         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1841         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
1842         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1843         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 1 field is defined on the same time steps
1844         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
1845         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1846         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1847         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
1848         #
1849         mst=MEDFileMeshStruct.New(ms[0])
1850         #
1851         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1852         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1853         mml2=mml.prepare()
1854         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1855         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1856         self.assertTrue(not ncc)
1857         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1858         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1859         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
1860         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]]
1861         self.assertTrue(a4 is None)
1862         self.assertTrue(a5 is None)
1863         for i in xrange(1,5):
1864             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1865             pass
1866         for i in xrange(5):
1867             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1868             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1869             f.loadArraysIfNecessary()
1870             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1871             self.assertEqual(f.getName(),fieldName0)
1872             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1873             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]'])
1874             vExp+=i*1000
1875             self.assertTrue(v.isEqual(vExp,1e-12))
1876             pass
1877         pass
1878
1879     def test12(self):
1880         """ This test is the second ultimate test for the profiles with gauss points.
1881         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.
1882         """
1883         fname="ForMEDReader12.med"
1884         m=MEDCouplingCMesh("mesh")
1885         arr=DataArrayDouble(5) ; arr.iota()
1886         m.setCoords(arr,arr)
1887         m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1888         mm=MEDFileUMesh() ; mm.setMeshes([m])
1889         #
1890         fieldName0="zeField0"
1891         fieldName1="zeField1"
1892         fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
1893         for i in xrange(5):
1894             f=MEDFileField1TS()
1895             fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1896             fNode.setName(fieldName0) ; fNode.setMesh(m)
1897             fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1898             fNode.setGaussLocalizationOnCells([1,5,8,9],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1899             fNode.setGaussLocalizationOnCells([6,10,13],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1900             fNode.setGaussLocalizationOnCells([11,12,14],[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1901             arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1902             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1903             f.setFieldNoProfileSBT(fNode)
1904             fs0.pushBackTimeStep(f)
1905             #
1906             f=MEDFileField1TS()
1907             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1908             fNode.setName(fieldName1) ; fNode.setMesh(m)
1909             arr=DataArrayDouble(2*16) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1910             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1911             f.setFieldNoProfileSBT(fNode)
1912             fs1.pushBackTimeStep(f)
1913             pass
1914         mm.write(fname,2)
1915         fs0.write(fname,0) ; fs1.write(fname,0)
1916         a0Exp=mm.getCoords().deepCpy()
1917         del m,mm,fs0,fs1,f,fNode
1918         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1919         ms=MEDFileMeshes(fname)
1920         fields=MEDFileFields(fname,False)
1921         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1922         allFMTSLeavesToDisplay=[]
1923         for fields in fields_per_mesh:
1924             allFMTSLeavesToDisplay2=[]
1925             for fmts in fields:
1926                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1927                 pass
1928             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1929             pass
1930         self.assertEqual(len(allFMTSLeavesToDisplay),1)
1931         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
1932         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1933         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1934         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
1935         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1936         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1937         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1938         #
1939         mst=MEDFileMeshStruct.New(ms[0])
1940         #
1941         fcscp=allFMTSLeavesPerCommonSupport[0][1]
1942         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1943         mml2=mml.prepare()
1944         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1945         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1946         self.assertTrue(not ncc)
1947         self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1948         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1949         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
1950         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
1951         self.assertTrue(a4 is None)
1952         self.assertTrue(a5 is None)
1953         for i in xrange(1,5):
1954             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1955             pass
1956         for i in xrange(5):
1957             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1958             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1959             f.loadArraysIfNecessary()
1960             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1961             self.assertEqual(f.getName(),fieldName0)
1962             #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1963             vExp=DataArrayDouble(65*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1964             self.assertTrue(v.isEqual(vExp,1e-12))
1965             #
1966             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1967             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1968             f.loadArraysIfNecessary()
1969             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1970             self.assertEqual(f.getName(),fieldName1)
1971             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1972             vExp=DataArrayDouble(16*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1973             self.assertTrue(v.isEqual(vExp,1e-12))
1974             pass
1975
1976     def test13(self):
1977             """ Testing polyhedrons mixed with hexa8"""
1978             fname="ForMEDReader13.med"
1979             m=MEDCouplingUMesh("mesh",3)
1980             m.allocateCells()
1981             m.insertNextCell(NORM_HEXA8,[1,0,6,7,13,12,18,19]) ; m.insertNextCell(NORM_HEXA8,[2,1,7,8,14,13,19,20])
1982             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])
1983             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])
1984             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])
1985             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]"])
1986             m.setCoords(coords)
1987             mm=MEDFileUMesh() ; mm.setMeshes([m])
1988             fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1989             fieldName0="zeField0"
1990             fieldName1="zeField1"
1991             fieldName2="zeField2" ; pfl1=DataArrayInt([2,3]) ; pfl1.setName("pfl1")
1992             fieldName3="zefield3" ; pfl2=DataArrayInt([2,3,4]) ; pfl2.setName("pfl2")
1993             for i in xrange(5):
1994                 f=MEDFileField1TS()
1995                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1996                 fNode.setName(fieldName0) ; fNode.setMesh(m)
1997                 arr=DataArrayDouble(2*5) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1998                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1999                 f.setFieldNoProfileSBT(fNode)
2000                 fs0.pushBackTimeStep(f)
2001                 #
2002                 f=MEDFileField1TS()
2003                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2004                 fNode.setName(fieldName1) ; fNode.setMesh(m)
2005                 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2006                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2007                 f.setFieldNoProfileSBT(fNode)
2008                 fs1.pushBackTimeStep(f)
2009                 #
2010                 f=MEDFileField1TS()
2011                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2012                 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
2013                 arr=DataArrayDouble(2*2) ; arr.iota(200+1000*i) ; arr.rearrange(2)
2014                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
2015                 f.setFieldProfile(fNode,mm,0,pfl1)
2016                 fs2.pushBackTimeStep(f)
2017                 #
2018                 f=MEDFileField1TS()
2019                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2020                 fNode.setName(fieldName3) ; fNode.setMesh(m[pfl2])
2021                 arr=DataArrayDouble(2*3) ; arr.iota(300+1000*i) ; arr.rearrange(2)
2022                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
2023                 f.setFieldProfile(fNode,mm,0,pfl2)
2024                 fs3.pushBackTimeStep(f)
2025                 pass
2026             mm.write(fname,2)
2027             fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
2028             a0Exp=mm.getCoords().deepCpy()
2029             del m,mm,fs0
2030             ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2031             ms=MEDFileMeshes(fname)
2032             fields=MEDFileFields(fname,False)
2033             fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2034             allFMTSLeavesToDisplay=[]
2035             for fields in fields_per_mesh:
2036                 allFMTSLeavesToDisplay2=[]
2037                 for fmts in fields:
2038                     allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2039                     pass
2040                 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2041                 pass
2042             self.assertEqual(len(allFMTSLeavesToDisplay),1)
2043             self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
2044             allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2045             self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2046             self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
2047             allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2048             self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
2049             self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2050             self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
2051             self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
2052             #
2053             mst=MEDFileMeshStruct.New(ms[0])
2054             #
2055             fcscp=allFMTSLeavesPerCommonSupport[0][1]
2056             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2057             mml2=mml.prepare()
2058             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2059             ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2060             self.assertTrue(ncc)
2061             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2062             self.assertTrue(a1.isEqual(DataArrayByte([12,12,42,42,42])))
2063             self.assertTrue(a2.isEqual(DataArrayInt([0,9,18,27,36])))
2064             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])))
2065             self.assertTrue(a4.isEqual(DataArrayInt([-1,-1,0,31,62])))
2066             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])))
2067             for i in xrange(1,5):
2068                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2069                 pass
2070             pass
2071             for i in xrange(5):
2072                 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2073                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2074                 f.loadArraysIfNecessary()
2075                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2076                 self.assertEqual(f.getName(),fieldName0)
2077                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2078                 vExp=DataArrayDouble(5*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2079                 self.assertTrue(v.isEqual(vExp,1e-12))
2080                 #
2081                 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2082                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2083                 f.loadArraysIfNecessary()
2084                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2085                 self.assertEqual(f.getName(),fieldName1)
2086                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2087                 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2088                 self.assertTrue(v.isEqual(vExp,1e-12))
2089                 pass
2090             #
2091             fcscp=allFMTSLeavesPerCommonSupport[1][1]
2092             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2093             mml2=mml.prepare()
2094             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2095             ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2096             self.assertTrue(ncc)
2097             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2098             self.assertTrue(a1.isEqual(DataArrayByte([42,42])))
2099             self.assertTrue(a2.isEqual(DataArrayInt([0,9])))
2100             self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22])))
2101             self.assertTrue(a4.isEqual(DataArrayInt([0,31])))
2102             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])))
2103             for i in xrange(1,5):
2104                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2105                 pass
2106             pass
2107             for i in xrange(5):
2108                 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
2109                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2110                 f.loadArraysIfNecessary()
2111                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2112                 self.assertEqual(f.getName(),fieldName2)
2113                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2114                 vExp=DataArrayDouble(2*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
2115                 self.assertTrue(v.isEqual(vExp,1e-12))
2116                 pass
2117             #
2118             fcscp=allFMTSLeavesPerCommonSupport[2][1]
2119             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2120             mml2=mml.prepare()
2121             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2122             ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2123             self.assertTrue(ncc)
2124             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2125             self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2126             self.assertTrue(a2.isEqual(DataArrayInt([0,9,18])))
2127             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])))
2128             self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2129             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])))
2130             for i in xrange(1,5):
2131                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2132                 pass
2133             pass
2134             for i in xrange(5):
2135                 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
2136                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2137                 f.loadArraysIfNecessary()
2138                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2139                 self.assertEqual(f.getName(),fieldName3)
2140                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2141                 vExp=DataArrayDouble(3*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
2142                 self.assertTrue(v.isEqual(vExp,1e-12))
2143                 pass
2144             pass
2145
2146     def test14(self):
2147             """ Testing only polyhedrons"""
2148             fname="ForMEDReader14.med"
2149             m=MEDCouplingUMesh("mesh",3)
2150             m.allocateCells()
2151             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])
2152             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])
2153             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])
2154             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]"])
2155             m.setCoords(coords)
2156             mm=MEDFileUMesh() ; mm.setMeshes([m])
2157             fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
2158             fieldName0="zeField0"
2159             fieldName1="zeField1"
2160             for i in xrange(5):
2161                 f=MEDFileField1TS()
2162                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2163                 fNode.setName(fieldName0) ; fNode.setMesh(m)
2164                 arr=DataArrayDouble(2*3) ; arr.iota(0+1000*i) ; arr.rearrange(2)
2165                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
2166                 f.setFieldNoProfileSBT(fNode)
2167                 fs0.pushBackTimeStep(f)
2168                 #
2169                 f=MEDFileField1TS()
2170                 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2171                 fNode.setName(fieldName1) ; fNode.setMesh(m)
2172                 arr=DataArrayDouble(2*3) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2173                 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2174                 f.setFieldNoProfileSBT(fNode)
2175                 fs1.pushBackTimeStep(f)
2176                 pass
2177             mm.write(fname,2)
2178             fs0.write(fname,0) ; fs1.write(fname,0)
2179             a0Exp=mm.getCoords().deepCpy()
2180             del m,mm,fs0
2181             ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2182             ms=MEDFileMeshes(fname)
2183             fields=MEDFileFields(fname,False)
2184             fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2185             allFMTSLeavesToDisplay=[]
2186             for fields in fields_per_mesh:
2187                 allFMTSLeavesToDisplay2=[]
2188                 for fmts in fields:
2189                     allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2190                     pass
2191                 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2192                 pass
2193             self.assertEqual(len(allFMTSLeavesToDisplay),1)
2194             self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2195             allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2196             self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2197             self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2198             allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2199             self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2200             self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2201             #
2202             mst=MEDFileMeshStruct.New(ms[0])
2203             #
2204             fcscp=allFMTSLeavesPerCommonSupport[0][1]
2205             mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2206             mml2=mml.prepare()
2207             self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2208             ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2209             self.assertTrue(ncc)
2210             self.assertTrue(a0.isEqual(a0Exp,1e-12))
2211             self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2212             self.assertTrue(a2.isEqual(DataArrayInt([0,9,18])))
2213             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])))
2214             self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2215             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])))
2216             for i in xrange(1,5):
2217                 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2218                 pass
2219             a6,a7=mml2.retrieveFamilyIdsOnCells()
2220             self.assertTrue(a6.isEqual(DataArrayInt([0,0,0])))
2221             self.assertTrue(a7)
2222             a8,a9=mml2.retrieveNumberIdsOnCells()
2223             self.assertTrue(a8 is None)
2224             self.assertTrue(a9)
2225             for i in xrange(5):
2226                 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2227                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2228                 f.loadArraysIfNecessary()
2229                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2230                 self.assertEqual(f.getName(),fieldName0)
2231                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2232                 vExp=DataArrayDouble(3*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2233                 self.assertTrue(v.isEqual(vExp,1e-12))
2234                 #
2235                 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2236                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2237                 f.loadArraysIfNecessary()
2238                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2239                 self.assertEqual(f.getName(),fieldName1)
2240                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2241                 vExp=DataArrayDouble(3*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2242                 self.assertTrue(v.isEqual(vExp,1e-12))
2243                 pass
2244             pass
2245
2246     def test15(self):
2247         """
2248         "ForMEDReader15.med" file has a spaceDim 3 mesh "mesh" (it is important !)
2249         and a field "zeField" lying on a single geometric type for Cell discr and node part.
2250         Test that can appear the most simple but it hides a big issue of MEDReader
2251         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.
2252         """
2253         fname="ForMEDReader15.med"
2254         m0=MEDCouplingCMesh()
2255         arr=DataArrayDouble(3) ; arr.iota(0)
2256         m0.setCoords(arr,arr,arr)
2257         m0.setName("mesh")
2258         m0=m0.buildUnstructured()
2259         #
2260         fieldName="zeField"
2261         fCell=MEDCouplingFieldDouble(ON_CELLS)
2262         fCell.setName(fieldName)
2263         fCell.setMesh(m0)
2264         #
2265         fNode=MEDCouplingFieldDouble(ON_NODES)
2266         fNode.setName(fieldName)
2267         fNode.setMesh(m0)
2268         #
2269         mm=MEDFileUMesh()
2270         mm.setMeshAtLevel(0,m0)
2271         fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
2272         num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
2273         #
2274         ffs=MEDFileFieldMultiTS()
2275         # TimeStep 0
2276         t=(1.,0,0) ; off=0.
2277         f1ts=MEDFileField1TS()
2278         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2279         fCell.setArray(a)
2280         fCell.setTime(*t)
2281         fCell.checkCoherency()
2282         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2283         a=a.negate()
2284         fNode.setArray(a)
2285         fNode.setTime(*t)
2286         fNode.checkCoherency()
2287         f1ts.setFieldNoProfileSBT(fCell)
2288         f1ts.setFieldNoProfileSBT(fNode)
2289         ffs.pushBackTimeStep(f1ts)
2290         # TimeStep 1
2291         t=(2.1,1,0) ; off=100.
2292         f1ts=MEDFileField1TS()
2293         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2294         fCell.setArray(a)
2295         fCell.setTime(*t)
2296         fCell.checkCoherency()
2297         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2298         a=a.negate()
2299         fNode.setArray(a)
2300         fNode.setTime(*t)
2301         fNode.checkCoherency()
2302         f1ts.setFieldNoProfileSBT(fCell)
2303         f1ts.setFieldNoProfileSBT(fNode)
2304         ffs.pushBackTimeStep(f1ts)
2305         # TimeStep 2
2306         t=(3.2,2,0) ; off=200.
2307         f1ts=MEDFileField1TS()
2308         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2309         fCell.setArray(a)
2310         fCell.setTime(*t)
2311         fCell.checkCoherency()
2312         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2313         a=a.negate()
2314         fNode.setArray(a)
2315         fNode.setTime(*t)
2316         fNode.checkCoherency()
2317         f1ts.setFieldNoProfileSBT(fCell)
2318         f1ts.setFieldNoProfileSBT(fNode)
2319         ffs.pushBackTimeStep(f1ts)
2320         # TimeStep 3
2321         t=(4.3,3,1) ; off=300.
2322         f1ts=MEDFileField1TS()
2323         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2324         fCell.setArray(a)
2325         fCell.setTime(*t)
2326         fCell.checkCoherency()
2327         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2328         a=a.negate()
2329         fNode.setArray(a)
2330         fNode.setTime(*t)
2331         fNode.checkCoherency()
2332         f1ts.setFieldNoProfileSBT(fCell)
2333         f1ts.setFieldNoProfileSBT(fNode)
2334         ffs.pushBackTimeStep(f1ts)
2335         #
2336         mm.write(fname,2)
2337         ffs.write(fname,0)
2338         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2339         ms=MEDFileMeshes(fname)
2340         fields=MEDFileFields(fname,False)
2341         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2342         allFMTSLeavesToDisplay=[]
2343         for fields in fields_per_mesh:
2344             allFMTSLeavesToDisplay2=[]
2345             for fmts in fields:
2346                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2347                 pass
2348             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2349             pass
2350         self.assertEqual(len(allFMTSLeavesToDisplay),1)
2351         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2352         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2353         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2354         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2355         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2356         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2357         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2358         #
2359         mst=MEDFileMeshStruct.New(ms[0])
2360         #
2361         fcscp=allFMTSLeavesPerCommonSupport[0][1]
2362         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2363         mml2=mml.prepare()
2364         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2365         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2366         self.assertTrue(ncc)
2367         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))
2368         self.assertTrue(a1.isEqual(DataArrayByte([12,12,12,12,12,12,12,12])))
2369         self.assertTrue(a2.isEqual(DataArrayInt([0,9,18,27,36,45,54,63])))
2370         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])))
2371         self.assertTrue(a4 is None)
2372         self.assertTrue(a5 is None)
2373         a6,a7=mml2.retrieveFamilyIdsOnCells()
2374         self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
2375         self.assertTrue(a7) # no copy here
2376         a8,a9=mml2.retrieveNumberIdsOnCells()
2377         self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
2378         self.assertTrue(a9) # no copy here
2379         pass
2380
2381     def test16(self):
2382         """ Here 2 meshes "mesh1" and "mesh2" and 4 fields (no profiles here) :
2383         - "zeField1_0" (CELLS) and "zeField2_0" (NODES) on "mesh1"
2384         - "zeField3_1" (CELLS) and "zeField4_1" (NODES) on "mesh2"
2385         time steps series are the same for the whole 4 fields
2386         """
2387         fname="ForMEDReader16.med"
2388         m0=MEDCouplingCMesh()
2389         arr=DataArrayDouble(3) ; arr.iota(0)
2390         m0.setCoords(arr,arr,arr)
2391         m0.setName("mesh1")
2392         m0=m0.buildUnstructured()
2393         #
2394         fCell1=MEDCouplingFieldDouble(ON_CELLS)
2395         fCell1.setName("zeField1_0")
2396         fCell1.setMesh(m0)
2397         #
2398         fNode1=MEDCouplingFieldDouble(ON_NODES)
2399         fNode1.setName("zeField2_0")
2400         fNode1.setMesh(m0)
2401         #
2402         mms=MEDFileMeshes()
2403         mm1=MEDFileUMesh()
2404         mm1.setMeshAtLevel(0,m0)
2405         fam=DataArrayInt([0,1,0,1,2,3,2,3]); mm1.setFamilyFieldArr(0,fam) ; del fam
2406         num=DataArrayInt(8) ; num.iota(100) ; mm1.setRenumFieldArr(0,num) ; del num
2407         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)
2408         mm1.setFamiliesIdsOnGroup("Grp1_1",[0,1]) ; mm1.setFamiliesIdsOnGroup("Grp1_2",[2,3])
2409         mms.pushMesh(mm1) ; del mm1
2410         #
2411         m1=m0.deepCpy() ; m1.translate([2.5,0.,0.]) ; m1.setName("mesh2")
2412         #
2413         fCell2=MEDCouplingFieldDouble(ON_CELLS)
2414         fCell2.setName("zeField3_1")
2415         fCell2.setMesh(m1)
2416         #
2417         fNode2=MEDCouplingFieldDouble(ON_NODES)
2418         fNode2.setName("zeField4_1")
2419         fNode2.setMesh(m1)
2420         #
2421         mm2=MEDFileUMesh()
2422         mm2.setMeshAtLevel(0,m1)
2423         fam=DataArrayInt([0,1,0,1,2,3,2,3]); mm2.setFamilyFieldArr(0,fam) ; del fam
2424         num=DataArrayInt(8) ; num.iota(200) ; mm2.setRenumFieldArr(0,num) ; del num
2425         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)
2426         mm2.setFamiliesIdsOnGroup("Grp2_1",[0,1]) ; mm2.setFamiliesIdsOnGroup("Grp2_2",[2,3]) ; mm2.setFamiliesIdsOnGroup("Grp2_3",[1,2,3])
2427         mms.pushMesh(mm2) ; del mm2
2428         ffs1_1=MEDFileFieldMultiTS()
2429         ffs1_2=MEDFileFieldMultiTS()
2430         ffs2_1=MEDFileFieldMultiTS()
2431         ffs2_2=MEDFileFieldMultiTS()
2432         mts=MEDFileFields()
2433         for elt in ffs1_1,ffs1_2,ffs2_1,ffs2_2:
2434             mts.pushField(elt)
2435             pass
2436         # TimeStep 0
2437         t=(1.,0,0) ; off=0.
2438         f1ts1=MEDFileField1TS()
2439         f1ts2=MEDFileField1TS()
2440         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2441         fCell1.setArray(a)
2442         fCell1.setTime(*t)
2443         fCell1.checkCoherency()
2444         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2445         a=a.negate()
2446         fNode1.setArray(a)
2447         fNode1.setTime(*t)
2448         fNode1.checkCoherency()
2449         f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2450         f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2451         #
2452         f1ts1=MEDFileField1TS()
2453         f1ts2=MEDFileField1TS()
2454         a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2455         fCell2.setArray(a)
2456         fCell2.setTime(*t)
2457         fCell2.checkCoherency()
2458         a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2459         a=a.negate()
2460         fNode2.setArray(a)
2461         fNode2.setTime(*t)
2462         fNode2.checkCoherency()
2463         f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2464         f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2465         # TimeStep 1
2466         t=(2.1,1,0) ; off=100.
2467         f1ts1=MEDFileField1TS()
2468         f1ts2=MEDFileField1TS()
2469         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2470         fCell1.setArray(a)
2471         fCell1.setTime(*t)
2472         fCell1.checkCoherency()
2473         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2474         a=a.negate()
2475         fNode1.setArray(a)
2476         fNode1.setTime(*t)
2477         fNode1.checkCoherency()
2478         f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2479         f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2480         #
2481         f1ts1=MEDFileField1TS()
2482         f1ts2=MEDFileField1TS()
2483         a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2484         fCell2.setArray(a)
2485         fCell2.setTime(*t)
2486         fCell2.checkCoherency()
2487         a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2488         a=a.negate()
2489         fNode2.setArray(a)
2490         fNode2.setTime(*t)
2491         fNode2.checkCoherency()
2492         f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2493         f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2494         # TimeStep 2
2495         t=(3.1,2,0) ; off=200.
2496         f1ts1=MEDFileField1TS()
2497         f1ts2=MEDFileField1TS()
2498         a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2499         fCell1.setArray(a)
2500         fCell1.setTime(*t)
2501         fCell1.checkCoherency()
2502         a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2503         a=a.negate()
2504         fNode1.setArray(a)
2505         fNode1.setTime(*t)
2506         fNode1.checkCoherency()
2507         f1ts1.setFieldNoProfileSBT(fCell1) ; ffs1_1.pushBackTimeStep(f1ts1)
2508         f1ts2.setFieldNoProfileSBT(fNode1) ; ffs1_2.pushBackTimeStep(f1ts2)
2509         #
2510         f1ts1=MEDFileField1TS()
2511         f1ts2=MEDFileField1TS()
2512         a=DataArrayDouble(m1.getNumberOfCells()) ; a.iota(1000.+off) ; a.setInfoOnComponents(["xx [m]"])
2513         fCell2.setArray(a)
2514         fCell2.setTime(*t)
2515         fCell2.checkCoherency()
2516         a=DataArrayDouble(m1.getNumberOfNodes()) ; a.iota(1000+off) ; a.setInfoOnComponents(["xx [m]"])
2517         a=a.negate()
2518         fNode2.setArray(a)
2519         fNode2.setTime(*t)
2520         fNode2.checkCoherency()
2521         f1ts1.setFieldNoProfileSBT(fCell2) ; ffs2_1.pushBackTimeStep(f1ts1)
2522         f1ts2.setFieldNoProfileSBT(fNode2) ; ffs2_2.pushBackTimeStep(f1ts2)
2523         #
2524         mms.write(fname,2) ; mts.write(fname,0)
2525         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2526         ms=MEDFileMeshes(fname)
2527         fields=MEDFileFields(fname,False)
2528         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2529         allFMTSLeavesToDisplay=[]
2530         for fields in fields_per_mesh:
2531             allFMTSLeavesToDisplay2=[]
2532             for fmts in fields:
2533                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2534                 pass
2535             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2536             pass
2537         self.assertEqual(len(allFMTSLeavesToDisplay),2)
2538         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2539         self.assertEqual(len(allFMTSLeavesToDisplay[1]),2)
2540         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2541         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2542         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
2543         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2544         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2545         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
2546         allFMTSLeavesPerCommonSupport2=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2547         self.assertEqual(len(allFMTSLeavesPerCommonSupport2),1)
2548         self.assertEqual(len(allFMTSLeavesPerCommonSupport2[0][0]),2)
2549         pass
2550
2551     def test17(self):
2552         """ First test on GAUSS_NE (Elno). Here no Profiles.
2553         2 times steps.
2554         """
2555         fname="ForMEDReader17.med"
2556         fieldName1="MyFirstElno"
2557         fieldName2="ACellField"
2558         fieldName3="ANodeField"
2559         coo=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.],6,2)
2560         m=MEDCouplingUMesh("mesh",2)
2561         m.setCoords(coo)
2562         m.allocateCells()
2563         m.insertNextCell(NORM_QUAD4,[0,3,4,1])
2564         m.insertNextCell(NORM_QUAD4,[1,4,5,2])
2565         m.checkCoherency2()
2566         #
2567         t=(1.1,0,-1)
2568         f=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f.setTime(*t) ; f.setMesh(m)
2569         f.setArray(DataArrayDouble([3.,5.,7.,6.,2.,3.,11.,8.]))
2570         f.setName(fieldName1)
2571         f.checkCoherency()
2572         MEDLoader.WriteField(fname,f,True)
2573         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2574         f2.setArray(DataArrayDouble([7.,11.],2,1))
2575         f2.setName(fieldName2)
2576         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2577         f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2578         f3.setArray(DataArrayDouble([1.,2.,4.,1.,2.,4.],6,1))
2579         f3.setName(fieldName3)
2580         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2581         #
2582         t=(2.1,1,-1)
2583         f=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f.setTime(*t) ; f.setMesh(m)
2584         f.setArray(DataArrayDouble([7.,6.,3.,5.,11.,8.,2.,3.]))
2585         f.setName(fieldName1)
2586         f.checkCoherency()
2587         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f)
2588         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2589         f2.setArray(DataArrayDouble([11.,7.],2,1))
2590         f2.setName(fieldName2)
2591         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2592         f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2593         f3.setArray(DataArrayDouble([4.,2.,1.,4.,2.,1.],6,1))
2594         f3.setName(fieldName3)
2595         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2596         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2597         ms=MEDFileMeshes(fname)
2598         fields=MEDFileFields(fname,False)
2599         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2600         allFMTSLeavesToDisplay=[]
2601         for fields in fields_per_mesh:
2602             allFMTSLeavesToDisplay2=[]
2603             for fmts in fields:
2604                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2605                 pass
2606             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2607             pass
2608         self.assertEqual(len(allFMTSLeavesToDisplay),1)
2609         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2610         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2611         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2612         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2613         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2614         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2615         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2616         #
2617         mst=MEDFileMeshStruct.New(ms[0])
2618         #
2619         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2620         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2621         mml2=mml.prepare()
2622         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2623         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2624         self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2625         self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2626         self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2627         self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2628         self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2629         self.assertTrue(a4 is None)
2630         self.assertTrue(a5 is None)
2631         a6,a7=mml2.retrieveFamilyIdsOnCells()
2632         self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2633         self.assertTrue(a7) # no copy here
2634         a8,a9=mml2.retrieveNumberIdsOnCells()
2635         self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2636         self.assertTrue(a9) # no copy here
2637         for i in xrange(1,2):
2638             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2639             pass
2640         vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2641         vExp1=[DataArrayDouble([3.,5.,7.,6.,2.,3.,11.,8.]),DataArrayDouble([7.,6.,3.,5.,11.,8.,2.,3.])]
2642         for i in xrange(2):
2643             f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2644             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2645             f.loadArraysIfNecessary()
2646             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2647             self.assertEqual(f.getName(),fieldName2)
2648             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2649             self.assertTrue(v.isEqual(vExp0[i],1e-12))
2650             #
2651             f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2652             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2653             f.loadArraysIfNecessary()
2654             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2655             self.assertEqual(f.getName(),fieldName1)
2656             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2657             self.assertTrue(v.isEqual(vExp1[i],1e-12))
2658             pass
2659         pass
2660     
2661     def test18(self):
2662         """ First test on GAUSS_PT. Here no Profiles. 2 times steps.
2663         """
2664         fname="ForMEDReader18.med"
2665         fieldName1="MyFirstGauss"
2666         fieldName2="ACellField"
2667         fieldName3="ANodeField"
2668         coo=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.],6,2)
2669         m=MEDCouplingUMesh("mesh",2)
2670         m.setCoords(coo)
2671         m.allocateCells()
2672         m.insertNextCell(NORM_QUAD4,[0,3,4,1])
2673         m.insertNextCell(NORM_QUAD4,[1,4,5,2])
2674         m.checkCoherency2()
2675         #
2676         t=(1.1,0,-1)
2677         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setTime(*t) ; f.setMesh(m)
2678         f.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.2,0.2,0.8,0.8],[0.7,0.3])
2679         f.setArray(DataArrayDouble([3.,5.,4.,6.])) ; f.getArray().setInfoOnComponents(["Smth"])
2680         f.setName(fieldName1)
2681         f.checkCoherency()
2682         MEDLoader.WriteField(fname,f,True)
2683         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2684         f2.setArray(DataArrayDouble([7.,11.],2,1))
2685         f2.setName(fieldName2)
2686         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2687         f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2688         f3.setArray(DataArrayDouble([1.,2.,4.,1.,2.,4.],6,1))
2689         f3.setName(fieldName3)
2690         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2691         #
2692         t=(2.1,1,-1)
2693         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setTime(*t) ; f.setMesh(m)
2694         f.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.2,0.2,0.8,0.8],[0.7,0.3])
2695         f.setArray(DataArrayDouble([5.,3.,6.,4.])) ; f.getArray().setInfoOnComponents(["Smth"])
2696         f.setName(fieldName1)
2697         f.checkCoherency()
2698         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f)
2699         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(*t) ; f2.setMesh(m)
2700         f2.setArray(DataArrayDouble([11.,7.],2,1))
2701         f2.setName(fieldName2)
2702         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
2703         f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setTime(*t) ; f3.setMesh(m)
2704         f3.setArray(DataArrayDouble([4.,2.,1.,4.,2.,1.],6,1))
2705         f3.setName(fieldName3)
2706         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
2707         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2708         ms=MEDFileMeshes(fname)
2709         fields=MEDFileFields(fname,False)
2710         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2711         allFMTSLeavesToDisplay=[]
2712         for fields in fields_per_mesh:
2713             allFMTSLeavesToDisplay2=[]
2714             for fmts in fields:
2715                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2716                 pass
2717             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2718             pass
2719         self.assertEqual(len(allFMTSLeavesToDisplay),1)
2720         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2721         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2722         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2723         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2724         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2725         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2726         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2727         #
2728         mst=MEDFileMeshStruct.New(ms[0])
2729         #
2730         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2731         self.assertEqual([NORM_QUAD4],fcscp.getGeoTypesAt(0,ms[0]))
2732         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2733         mml2=mml.prepare()
2734         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2735         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2736         self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2737         self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2738         self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2739         self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2740         self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2741         self.assertTrue(a4 is None)
2742         self.assertTrue(a5 is None)
2743         a6,a7=mml2.retrieveFamilyIdsOnCells()
2744         self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2745         self.assertTrue(a7) # no copy here
2746         a8,a9=mml2.retrieveNumberIdsOnCells()
2747         self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2748         self.assertTrue(a9) # no copy here
2749         for i in xrange(1,2):
2750             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2751             pass
2752         vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2753         vExp1=[DataArrayDouble([3.,5.,4.,6.]),DataArrayDouble([5.,3.,6.,4.])]
2754         for i in xrange(2):
2755             f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2756             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2757             f.loadArraysIfNecessary()
2758             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2759             self.assertEqual(f.getName(),fieldName2)
2760             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2761             self.assertTrue(v.isEqual(vExp0[i],1e-12))
2762             #
2763             f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2764             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2765             f.loadArraysIfNecessary()
2766             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2767             self.assertEqual(f.getName(),fieldName1)
2768             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2769             vExp1[i].setInfoOnComponents(["Smth"])
2770             self.assertTrue(v.isEqual(vExp1[i],1e-12))
2771             pass
2772         ## Now same exercise but with a different load strategy. All is load directly.
2773         ms=MEDFileMeshes(fname)
2774         fields=MEDFileFields(fname) # here all is read, the SauvReader (or other Reader) is emulated
2775         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2776         allFMTSLeavesToDisplay=[]
2777         for fields in fields_per_mesh:
2778             allFMTSLeavesToDisplay2=[]
2779             for fmts in fields:
2780                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2781                 pass
2782             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2783             pass
2784         self.assertEqual(len(allFMTSLeavesToDisplay),1)
2785         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
2786         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2787         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2788         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
2789         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2790         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2791         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),3)
2792         #
2793         mst=MEDFileMeshStruct.New(ms[0])
2794         #
2795         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2796         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2797         mml2=mml.prepare()
2798         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2799         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2800         self.assertTrue(not ncc) # spaceDim 2 -> VTK wants 3D
2801         self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.],6,3),1e-12))
2802         self.assertTrue(a1.isEqual(DataArrayByte([9,9])))
2803         self.assertTrue(a2.isEqual(DataArrayInt([0,5])))
2804         self.assertTrue(a3.isEqual(DataArrayInt([4,0,3,4,1,4,1,4,5,2])))
2805         self.assertTrue(a4 is None)
2806         self.assertTrue(a5 is None)
2807         a6,a7=mml2.retrieveFamilyIdsOnCells()
2808         self.assertTrue(a6.isEqual(DataArrayInt([0,0])))
2809         self.assertTrue(a7) # no copy here
2810         a8,a9=mml2.retrieveNumberIdsOnCells()
2811         self.assertTrue(a8.isEqual(DataArrayInt([0,1])))
2812         self.assertTrue(a9) # no copy here
2813         for i in xrange(1,2):
2814             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2815             pass
2816         vExp0=[DataArrayDouble([7.,11.]),DataArrayDouble([11.,7.])]
2817         vExp1=[DataArrayDouble([3.,5.,4.,6.]),DataArrayDouble([5.,3.,6.,4.])]
2818         for i in xrange(2):
2819             f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2820             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst) # no load needed here
2821             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2822             self.assertEqual(f.getName(),fieldName2)
2823             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2824             self.assertTrue(v.isEqual(vExp0[i],1e-12))
2825             #
2826             f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
2827             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst) # no load needed here
2828             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2829             self.assertEqual(f.getName(),fieldName1)
2830             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2831             vExp1[i].setInfoOnComponents(["Smth"])
2832             self.assertTrue(v.isEqual(vExp1[i],1e-12))
2833             pass
2834         pass
2835     
2836     def test19(self):
2837         """
2838         This test is a simple non profile CELL field but lying on cells of dimension -1 (not 0 as "usual").
2839         """
2840         fname="ForMEDReader19.med"
2841         fieldName="ACellFieldOnDimM1"
2842         coo=DataArrayDouble(3) ; coo.iota()
2843         m=MEDCouplingCMesh() ; m.setCoords(coo,coo,coo) ; m.setName("mesh")
2844         m0=m.buildUnstructured() ; del m
2845         m1=m0.computeSkin()
2846         #
2847         mm=MEDFileUMesh()                                
2848         mm.setMeshAtLevel(0,m0)
2849         mm.setMeshAtLevel(-1,m1)
2850         ff=MEDFileFieldMultiTS()
2851         # time 0
2852         t=(1.1,1,-1)
2853         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setTime(*t) ; f.setMesh(m1)
2854         f.setName(fieldName)
2855         arr=DataArrayDouble(24) ; arr.iota() ; arr.setInfoOnComponents(["AStr"])
2856         f.setArray(arr)
2857         f.checkCoherency()
2858         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f)
2859         ff.pushBackTimeStep(f1ts)
2860         # time 1
2861         t=(2.1,2,-2)
2862         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setTime(*t) ; f.setMesh(m1)
2863         f.setName(fieldName)
2864         arr=DataArrayDouble(24) ; arr.iota() ; arr.reverse() ; arr.setInfoOnComponents(["AStr"])
2865         f.setArray(arr)
2866         f.checkCoherency()
2867         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f)
2868         ff.pushBackTimeStep(f1ts)
2869         #
2870         mm.write(fname,2)
2871         ff.write(fname,0)
2872         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2873         ms=MEDFileMeshes(fname)
2874         fields=MEDFileFields(fname,False)
2875         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2876         allFMTSLeavesToDisplay=[]
2877         for fields in fields_per_mesh:
2878             allFMTSLeavesToDisplay2=[]
2879             for fmts in fields:
2880                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2881                 pass
2882             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2883             pass
2884         self.assertEqual(len(allFMTSLeavesToDisplay),1)
2885         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
2886         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2887         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
2888         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
2889         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
2890         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
2891         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
2892         #
2893         mst=MEDFileMeshStruct.New(ms[0])
2894         #
2895         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
2896         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2897         mml2=mml.prepare()
2898         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2899         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2900         self.assertTrue(ncc)
2901         self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.],27,3),1e-12))
2902         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
2903         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115])))
2904         self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,3,4,4,1,10,9,0,4,0,9,12,3,4,2,1,4,5,4,2,11,10,1,4,5,14,11,2,4,4,3,6,7,4,3,12,15,6,4,6,15,16,7,4,5,4,7,8,4,7,16,17,8,4,8,17,14,5,4,19,22,21,18,4,10,19,18,9,4,9,18,21,12,4,20,23,22,19,4,11,20,19,10,4,14,23,20,11,4,22,25,24,21,4,12,21,24,15,4,15,24,25,16,4,23,26,25,22,4,16,25,26,17,4,17,26,23,14])))
2905         self.assertTrue(a4 is None)
2906         self.assertTrue(a5 is None)
2907         a6,a7=mml2.retrieveFamilyIdsOnCells()
2908         self.assertTrue(a6.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])))
2909         self.assertTrue(a7) # no copy here
2910         a8,a9=mml2.retrieveNumberIdsOnCells()
2911         self.assertTrue(a8 is None)
2912         self.assertTrue(a9) # no copy here
2913         a10,a11=mml2.retrieveFamilyIdsOnNodes()
2914         self.assertTrue(not a10)
2915         self.assertTrue(a11) # no copy here
2916         a12,a13=mml2.retrieveNumberIdsOnNodes()
2917         self.assertTrue(not a12)
2918         self.assertTrue(a13) # no copy here
2919         for i in xrange(1,2):
2920             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2921             pass
2922         for i in xrange(2):
2923             f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
2924             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2925             f.loadArraysIfNecessary()
2926             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2927             self.assertEqual(f.getName(),fieldName)
2928             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2929             vExp=DataArrayDouble(24) ; vExp.iota()
2930             if i==1: vExp.reverse()
2931             vExp.setInfoOnComponents(["AStr"])
2932             self.assertTrue(v.isEqual(vExp,1e-12))
2933             pass
2934         pass
2935
2936     def test20(self):
2937         """ This test works with groups/families on cells AND on nodes. Here 4 fields each on same time steps (2).
2938         1 field on CELLS without profile, 1 field on CELLS with profile, 1 field on NODES without profile, 1 field on NODES with profile.
2939         All of these 4 fields lies on a single mesh "mesh". The 2 fields on profile lies on a same support.
2940         One drawback of this test : no multi geom type. Coming soon !
2941         """
2942         fname="ForMEDReader20.med"
2943         fieldName0="ANodeField"
2944         fieldName1="ACellField"
2945         fieldName2="ANodeFieldPfl"
2946         fieldName3="ACellFieldPfl"
2947         pfl2=DataArrayInt([5,6,7,10,11,12,15,16,17,20,21,22]) ; pfl2.setName("pfl2")
2948         pfl3=DataArrayInt([4,5,8,9,12,13]) ; pfl3.setName("pfl3")
2949         #
2950         arr=DataArrayDouble(5) ; arr.iota()
2951         m=MEDCouplingCMesh("mesh") ; m.setCoords(arr,arr)
2952         m=m.buildUnstructured()
2953         mm=MEDFileUMesh()
2954         mm.setMeshAtLevel(0,m)
2955         fs=MEDFileFields()
2956         fmts0=MEDFileFieldMultiTS() ; fs.pushField(fmts0)
2957         fmts0.setDtUnit("s")
2958         fmts1=MEDFileFieldMultiTS() ; fs.pushField(fmts1)
2959         fmts1.setDtUnit("s")
2960         fmts2=MEDFileFieldMultiTS() ; fs.pushField(fmts2)
2961         fmts2.setDtUnit("s")
2962         fmts3=MEDFileFieldMultiTS() ; fs.pushField(fmts3)
2963         fmts3.setDtUnit("s")
2964         ####
2965         t=(1.1,0,-2)
2966         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m)
2967         f0.setName(fieldName0) ; f0.setTime(*t)
2968         da=m.getCoords().magnitude() ; da.setInfoOnComponents(["zeInfo"])
2969         f0.setArray(da)
2970         f0.checkCoherency()
2971         f1ts=MEDFileField1TS()
2972         f1ts.setFieldNoProfileSBT(f0)
2973         fmts0.pushBackTimeStep(f1ts)
2974         #
2975         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(m)
2976         f1.setName(fieldName1) ; f1.setTime(*t)
2977         da=m.getBarycenterAndOwner().magnitude() ; da.setInfoOnComponents(["zeInfoCell"])
2978         f1.setArray(da)
2979         f1.checkCoherency()
2980         f1ts=MEDFileField1TS()
2981         f1ts.setFieldNoProfileSBT(f1)
2982         fmts1.pushBackTimeStep(f1ts)
2983         #
2984         f2=MEDCouplingFieldDouble(ON_NODES) ; mTmp=m[pfl3] ; mTmp.zipCoords() ; mTmp.setName(m.getName()) ; f2.setMesh(mTmp)
2985         f2.setName(fieldName2) ; f2.setTime(*t)
2986         da=m.getCoords().magnitude()[pfl2] ; da.setInfoOnComponents(["zzzz"])
2987         f2.setArray(da)
2988         f2.checkCoherency()
2989         f1ts=MEDFileField1TS()
2990         f1ts.setFieldProfile(f2,mm,0,pfl2)
2991         fmts2.pushBackTimeStep(f1ts)
2992         #
2993         f3=MEDCouplingFieldDouble(ON_CELLS) ; mTmp=m[pfl3] ; mTmp.setName(m.getName()) ; f3.setMesh(mTmp)
2994         f3.setName(fieldName3) ; f3.setTime(*t)
2995         da=mTmp.getBarycenterAndOwner().magnitude() ; da.setInfoOnComponents(["abcdefg"])
2996         f3.setArray(da)
2997         f3.checkCoherency()
2998         f1ts=MEDFileField1TS()
2999         f1ts.setFieldProfile(f3,mm,0,pfl3)
3000         fmts3.pushBackTimeStep(f1ts)
3001         ####
3002         t=(2.1,1,-3)
3003         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m)
3004         f0.setName(fieldName0) ; f0.setTime(*t)
3005         da=m.getCoords().magnitude() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3006         f0.setArray(da)
3007         f0.checkCoherency()
3008         f1ts=MEDFileField1TS()
3009         f1ts.setFieldNoProfileSBT(f0)
3010         fmts0.pushBackTimeStep(f1ts)
3011         #
3012         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(m)
3013         f1.setName(fieldName1) ; f1.setTime(*t)
3014         da=m.getBarycenterAndOwner().magnitude() ; da.reverse() ; da.setInfoOnComponents(["zeInfoCell"])
3015         f1.setArray(da)
3016         f1.checkCoherency()
3017         f1ts=MEDFileField1TS()
3018         f1ts.setFieldNoProfileSBT(f1)
3019         fmts1.pushBackTimeStep(f1ts)
3020         #
3021         f2=MEDCouplingFieldDouble(ON_NODES) ; mTmp=m[pfl3] ; mTmp.zipCoords() ; mTmp.setName(m.getName()) ; f2.setMesh(mTmp)
3022         f2.setName(fieldName2) ; f2.setTime(*t)
3023         da=m.getCoords().magnitude()[pfl2] ; da.reverse() ; da.setInfoOnComponents(["zzzz"])
3024         f2.setArray(da)
3025         f2.checkCoherency()
3026         f1ts=MEDFileField1TS()
3027         f1ts.setFieldProfile(f2,mm,0,pfl2)
3028         fmts2.pushBackTimeStep(f1ts)
3029         #
3030         f3=MEDCouplingFieldDouble(ON_CELLS) ; mTmp=m[pfl3] ; mTmp.setName(m.getName()) ; f3.setMesh(mTmp)
3031         f3.setName(fieldName3) ; f3.setTime(*t)
3032         da=mTmp.getBarycenterAndOwner().magnitude() ; da.reverse() ; da.setInfoOnComponents(["abcdefg"])
3033         f3.setArray(da)
3034         f3.checkCoherency()
3035         f1ts=MEDFileField1TS()
3036         f1ts.setFieldProfile(f3,mm,0,pfl3)
3037         fmts3.pushBackTimeStep(f1ts)
3038         ####
3039         grp1=DataArrayInt([6,7,8,11,12,13,16,17,18]) ; grp1.setName("grp1")
3040         grp2=DataArrayInt([10,11,15,16,20,21]) ; grp2.setName("grp2")
3041         mm.setGroupsAtLevel(1,[grp1,grp2])
3042         grp3=DataArrayInt([4,5,6]) ; grp3.setName("grp3")
3043         grp4=DataArrayInt([8,9,10]) ; grp4.setName("grp4")
3044         mm.setGroupsAtLevel(0,[grp3,grp4])
3045         d=DataArrayInt(25) ; d.iota() ; d*=10 ;  mm.setRenumFieldArr(1,d)
3046         d=DataArrayInt(16) ; d.iota() ; d*=11 ;  mm.setRenumFieldArr(0,d)
3047         mm.write(fname,2)
3048         fs.appendGlobs(fmts2,1e-12)
3049         fs.appendGlobs(fmts3,1e-12)
3050         fs.write(fname,0)
3051         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3052         ms=MEDFileMeshes(fname)
3053         fields=MEDFileFields(fname,False)
3054         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3055         allFMTSLeavesToDisplay=[]
3056         for fields in fields_per_mesh:
3057             allFMTSLeavesToDisplay2=[]
3058             for fmts in fields:
3059                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3060                 pass
3061             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3062             pass
3063         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3064         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
3065         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3066         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3067         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
3068         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3069         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3070         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
3071         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),2)
3072         #
3073         mst=MEDFileMeshStruct.New(ms[0])
3074         #
3075         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3076         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3077         mml2=mml.prepare()
3078         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3079         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3080         self.assertTrue(not ncc)
3081         self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,3.,2.,0.,4.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,3.,3.,0.,4.,3.,0.,0.,4.,0.,1.,4.,0.,2.,4.,0.,3.,4.,0.,4.,4.,0.],25,3),1e-12))
3082         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
3083         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75])))
3084         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])))
3085         self.assertTrue(a4 is None)
3086         self.assertTrue(a5 is None)
3087         a6,a7=mml2.retrieveFamilyIdsOnCells()
3088         self.assertTrue(a6.isEqual(DataArrayInt([-5,-5,-5,-5,-6,-6,-6,-5,-7,-7,-7,-5,-5,-5,-5,-5])))
3089         self.assertTrue(a7) # no copy here
3090         a8,a9=mml2.retrieveNumberIdsOnCells()
3091         self.assertTrue(a8.isEqual(DataArrayInt([0,11,22,33,44,55,66,77,88,99,110,121,132,143,154,165])))
3092         self.assertTrue(a9) # no copy here
3093         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3094         self.assertTrue(a10.isEqual(DataArrayInt([1,1,1,1,1,1,2,2,2,1,3,4,2,2,1,3,4,2,2,1,3,3,1,1,1])))
3095         self.assertTrue(a11) # no copy here
3096         a12,a13=mml2.retrieveNumberIdsOnNodes()
3097         self.assertTrue(a12.isEqual(DataArrayInt([0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240])))
3098         self.assertTrue(a13) # no copy here
3099         for i in xrange(1,2):
3100             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
3101             pass
3102         for i in xrange(2):
3103             f=allFMTSLeavesPerCommonSupport1[0][0][0][i]
3104             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3105             f.loadArraysIfNecessary()
3106             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3107             self.assertEqual(f.getName(),fieldName1)
3108             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3109             vExp=DataArrayDouble([0.7071067811865476,1.5811388300841898,2.5495097567963922,3.5355339059327378,1.5811388300841898,2.1213203435596424,2.9154759474226504,3.8078865529319543,2.5495097567963922,2.9154759474226504,3.5355339059327378,4.301162633521313,3.5355339059327378,3.8078865529319543,4.301162633521313,4.949747468305833])
3110             if i==1: vExp.reverse()
3111             vExp.setInfoOnComponents(["zeInfoCell"])
3112             self.assertTrue(v.isEqual(vExp,1e-12))
3113             #
3114             f=allFMTSLeavesPerCommonSupport1[0][0][1][i]
3115             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3116             f.loadArraysIfNecessary()
3117             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3118             self.assertEqual(f.getName(),fieldName0)
3119             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3120             vExp=DataArrayDouble([0.,1.,2.,3.,4.,1.,1.4142135623730951,2.23606797749979,3.1622776601683795,4.123105625617661,2.,2.23606797749979,2.8284271247461903,3.605551275463989,4.47213595499958,3.,3.1622776601683795,3.605551275463989,4.242640687119285,5.,4.,4.123105625617661,4.47213595499958,5.,5.656854249492381])
3121             if i==1: vExp.reverse()
3122             vExp.setInfoOnComponents(["zeInfo"])
3123             self.assertTrue(v.isEqual(vExp,1e-12))
3124             pass
3125         ### Testing the 2nd support
3126         fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3127         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3128         mml2=mml.prepare()
3129         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3130         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3131         self.assertTrue(not ncc)
3132         self.assertTrue(not ncc)
3133         self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,3.,0.,1.,3.,0.,2.,3.,0.,0.,4.,0.,1.,4.,0.,2.,4.,0.],12,3),1e-12))
3134         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9])))
3135         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10,15,20,25])))
3136         self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
3137         self.assertTrue(a4 is None)
3138         self.assertTrue(a5 is None)
3139         a6,a7=mml2.retrieveFamilyIdsOnCells()
3140         self.assertTrue(a6.isEqual(DataArrayInt([-6,-6,-7,-7,-5,-5])))
3141         self.assertTrue(not a7) # copy here
3142         a8,a9=mml2.retrieveNumberIdsOnCells()
3143         self.assertTrue(a8.isEqual(DataArrayInt([44,55,88,99,132,143])))
3144         self.assertTrue(not a9) # copy here
3145         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3146         self.assertTrue(a10.isEqual(DataArrayInt([1,2,2,3,4,2,3,4,2,3,3,1])))
3147         self.assertTrue(not a11) # copy here
3148         a12,a13=mml2.retrieveNumberIdsOnNodes()
3149         self.assertTrue(a12.isEqual(DataArrayInt([50,60,70,100,110,120,150,160,170,200,210,220])))
3150         self.assertTrue(not a13) # copy here
3151         for i in xrange(2):
3152             f=allFMTSLeavesPerCommonSupport1[1][0][0][i]
3153             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3154             f.loadArraysIfNecessary()
3155             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3156             self.assertEqual(f.getName(),fieldName3)
3157             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3158             vExp=DataArrayDouble([1.5811388300842,2.1213203435596,2.5495097567964,2.9154759474227,3.5355339059327,3.807886552932])
3159             if i==1: vExp.reverse()
3160             vExp.setInfoOnComponents(["abcdefg"])
3161             self.assertTrue(v.isEqual(vExp,1e-12))
3162             #
3163             f=allFMTSLeavesPerCommonSupport1[1][0][1][i]
3164             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3165             f.loadArraysIfNecessary()
3166             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3167             self.assertEqual(f.getName(),fieldName2)
3168             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3169             vExp=DataArrayDouble([1.,1.4142135623731,2.2360679774998,2.,2.2360679774998,2.8284271247462,3.,3.1622776601684,3.605551275464,4.,4.1231056256177,4.4721359549996])
3170             if i==1: vExp.reverse()
3171             vExp.setInfoOnComponents(["zzzz"])
3172             self.assertTrue(v.isEqual(vExp,1e-12))
3173             pass
3174         pass
3175
3176     def test21(self):
3177         """ Here the created MED file contains only a mesh. The aim here is to test capability of MEDReader to support no fields.
3178         This test checks nothing but write a MED file to be used by MEDReader tests.
3179         """
3180         fname="ForMEDReader21.med"
3181         mm=MEDFileUMesh()
3182         #
3183         m0=MEDCouplingCMesh("mesh") ; arr=DataArrayDouble(5) ; arr.iota() ; m0.setCoords(arr,arr) ; m0=m0.buildUnstructured()
3184         mm.setMeshAtLevel(0,m0)
3185         grp0=DataArrayInt([5,6,9,10]) ; grp0.setName("Inside2D")
3186         grp1=DataArrayInt([0,1,2,3,4,7,8,11,12,13,14,15]) ; grp1.setName("Border2D")
3187         grp2=DataArrayInt([2,3,6,7]) ; grp2.setName("LowerRight2D")
3188         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3189         #
3190         m1=MEDCouplingUMesh(m0.getName(),1) ; m1.setCoords(m0.getCoords()) ; m1.allocateCells()
3191         for elt in [[0,1],[1,2],[2,3],[3,4],[4,9],[9,14],[14,19],[19,24],[24,23],[23,22],[22,21],[21,20],[20,15],[15,10],[10,5],[5,0],[2,7],[7,12],[12,17],[17,22],
3192                     [10,11],[11,12],[12,13],[13,14]]:
3193             m1.insertNextCell(NORM_SEG2,elt)
3194             pass
3195         mm.setMeshAtLevel(-1,m1)
3196         grp4=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) ; grp4.setName("Border1D")
3197         grp5=DataArrayInt([16,17,18,19,20,21,22,23]) ; grp5.setName("Inside1D")
3198         grp6=DataArrayInt([18,19,22,23]) ; grp6.setName("UpperRight1D")
3199         mm.setGroupsAtLevel(-1,[grp4,grp5,grp6])
3200         #
3201         grp7=DataArrayInt([1,2,3,6,7,8,11,12,13,16,17,18,21,22,23]) ; grp7.setName("InsideYNode")
3202         grp8=DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; grp8.setName("InsideXNode")
3203         mm.setGroupsAtLevel(1,[grp7,grp8])
3204         #
3205         mm.write(fname,2)
3206         pass
3207
3208     def test22(self):
3209         """ Use case where a field on nodes (ANodeField) on a mesh defined both in meshdim 2 and meshdim 1.
3210         The only possible geometrical support that suits the field is those with meshdim equal to 1 (-1 in relative).
3211         """
3212         fname="ForMEDReader22.med"
3213         fieldName0="ANodeField"
3214         mm=MEDFileUMesh()
3215         coo=DataArrayDouble([(4.,3.),(7.,3.),(2.,5.),(6.,5.),(9.,5.),(4.,7.),(8.,7.),(3.,8.),(9.,8.)])
3216         m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coo) ; m0.allocateCells() ; m0.insertNextCell(NORM_TRI3,[2,3,0]) ; m0.insertNextCell(NORM_TRI3,[3,1,0]) ; m0.insertNextCell(NORM_TRI3,[3,4,1])
3217         mm.setMeshAtLevel(0,m0)
3218         m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coo) ; m1.allocateCells() ; m1.insertNextCell(NORM_SEG2,[2,0]) ;  m1.insertNextCell(NORM_SEG2,[0,1]) ; m1.insertNextCell(NORM_SEG2,[1,4])
3219         m1.insertNextCell(NORM_SEG2,[3,5]) ; m1.insertNextCell(NORM_SEG2,[5,7]) ; m1.insertNextCell(NORM_SEG2,[3,6]) ; m1.insertNextCell(NORM_SEG2,[6,8])
3220         mm.setMeshAtLevel(-1,m1)
3221         fs=MEDFileFields()
3222         fmts0=MEDFileFieldMultiTS() ; fs.pushField(fmts0)
3223         fmts0.setDtUnit("s")
3224         #
3225         t=(1.1,0,-2)
3226         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1)
3227         f0.setName(fieldName0) ; f0.setTime(*t)
3228         da=DataArrayDouble(9) ; da.iota() ; da.setInfoOnComponents(["zeInfo"])
3229         f0.setArray(da)
3230         f0.checkCoherency()
3231         f1ts=MEDFileField1TS()
3232         f1ts.setFieldNoProfileSBT(f0)
3233         fmts0.pushBackTimeStep(f1ts)
3234         #
3235         t=(2.1,1,-3)
3236         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1)
3237         f0.setName(fieldName0) ; f0.setTime(*t)
3238         da=DataArrayDouble(9) ; da.iota() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3239         f0.setArray(da)
3240         f0.checkCoherency()
3241         f1ts=MEDFileField1TS()
3242         f1ts.setFieldNoProfileSBT(f0)
3243         fmts0.pushBackTimeStep(f1ts)
3244         #
3245         mm.write(fname,2)
3246         fs.write(fname,0)
3247         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3248         ms=MEDFileMeshes(fname)
3249         fields=MEDFileFields(fname,False)
3250         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3251         allFMTSLeavesToDisplay=[]
3252         for fields in fields_per_mesh:
3253             allFMTSLeavesToDisplay2=[]
3254             for fmts in fields:
3255                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3256                 pass
3257             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3258             pass
3259         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3260         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3261         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3262         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3263         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3264         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3265         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
3266         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3267         #
3268         mst=MEDFileMeshStruct.New(ms[0])
3269         #
3270         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3271         self.assertEqual([NORM_TRI3,NORM_SEG2],fcscp.getGeoTypesAt(0,ms[0]))#contains all cell types of underlying mesh because only nodes with no profiles
3272         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3273         mml2=mml.prepare()
3274         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3275         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3276         self.assertTrue(not ncc)
3277         self.assertTrue(a0.isEqual(DataArrayDouble([(4.,3.,0.),(7.,3.,0.),(2.,5.,0.),(6.,5.,0.),(9.,5.,0.),(4.,7.,0.),(8.,7.,0.),(3.,8.,0.),(9.,8.,0.)]),1e-12))
3278         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,3,3,3,3,3,3,3])))
3279         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,12,15,18,21,24,27,30])))
3280         self.assertTrue(a3.isEqual(DataArrayInt([3,2,3,0,3,3,1,0,3,3,4,1,2,2,0,2,0,1,2,1,4,2,3,5,2,5,7,2,3,6,2,6,8])))
3281         self.assertTrue(a4 is None)
3282         self.assertTrue(a5 is None)
3283         a6,a7=mml2.retrieveFamilyIdsOnCells()
3284         self.assertTrue(a6.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0])))
3285         self.assertTrue(not a7) # copy here
3286         a8,a9=mml2.retrieveNumberIdsOnCells()
3287         self.assertTrue(not a8)
3288         self.assertTrue(a9) # nocopy here
3289         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3290         self.assertTrue(not a10)
3291         self.assertTrue(a11) # no copy here
3292         a12,a13=mml2.retrieveNumberIdsOnNodes()
3293         self.assertTrue(not a12)
3294         self.assertTrue(a13) # no copy here
3295         #
3296         f=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3297         fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3298         f.loadArraysIfNecessary()
3299         v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3300         self.assertEqual(f.getName(),fieldName0)
3301         self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3302         vExp=DataArrayDouble(9) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"])
3303         self.assertTrue(v.isEqual(vExp,1e-12))
3304         #
3305         f=allFMTSLeavesPerCommonSupport1[0][0][0][1]
3306         fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3307         f.loadArraysIfNecessary()
3308         v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3309         self.assertEqual(f.getName(),fieldName0)
3310         self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3311         vExp=DataArrayDouble(9) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"]) ; vExp.reverse()
3312         self.assertTrue(v.isEqual(vExp,1e-12))
3313         pass 
3314     
3315     def test23(self):
3316         """ Non regression test 2219 of modes. Idem than test22 except that here the node field is on profile.
3317         """
3318         fname="ForMEDReader23.med"
3319         fieldName0="ANodeField"
3320         mm=MEDFileUMesh()
3321         coo=DataArrayDouble([(4.,3.),(7.,3.),(2.,5.),(6.,5.),(9.,5.),(4.,7.),(8.,7.),(3.,8.),(9.,8.)])
3322         m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coo) ; m0.allocateCells() ; m0.insertNextCell(NORM_TRI3,[2,3,0]) ; m0.insertNextCell(NORM_TRI3,[3,1,0]) ; m0.insertNextCell(NORM_TRI3,[3,4,1])
3323         mm.setMeshAtLevel(0,m0)
3324         m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coo) ; m1.allocateCells() ; m1.insertNextCell(NORM_SEG2,[2,0]) ;  m1.insertNextCell(NORM_SEG2,[0,1]) ; m1.insertNextCell(NORM_SEG2,[1,4])
3325         m1.insertNextCell(NORM_SEG2,[3,5]) ; m1.insertNextCell(NORM_SEG2,[5,7]) ; m1.insertNextCell(NORM_SEG2,[3,6]) ; m1.insertNextCell(NORM_SEG2,[6,8])
3326         mm.setMeshAtLevel(-1,m1)
3327         fmts0=MEDFileFieldMultiTS()
3328         fmts0.setDtUnit("s")
3329         #
3330         pfl=DataArrayInt([0,1,2,4]) ; pfl.setName("pfl")
3331         pflCell=DataArrayInt([0,1,2]) ; m1Part=m1[pflCell] ; m1Part.zipCoords()
3332         #
3333         t=(1.1,0,-2)
3334         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1Part)
3335         f0.setName(fieldName0) ; f0.setTime(*t)
3336         da=DataArrayDouble(4) ; da.iota() ; da.setInfoOnComponents(["zeInfo"])
3337         f0.setArray(da)
3338         f0.checkCoherency()
3339         f1ts=MEDFileField1TS()
3340         f1ts.setFieldProfile(f0,mm,-1,pfl)
3341         fmts0.pushBackTimeStep(f1ts)
3342         #
3343         t=(2.1,1,-3)
3344         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m1Part)
3345         f0.setName(fieldName0) ; f0.setTime(*t)
3346         da=DataArrayDouble(4) ; da.iota() ; da.reverse() ; da.setInfoOnComponents(["zeInfo"])
3347         f0.setArray(da)
3348         f0.checkCoherency()
3349         f1ts=MEDFileField1TS()
3350         f1ts.setFieldProfile(f0,mm,-1,pfl)
3351         fmts0.pushBackTimeStep(f1ts)
3352         mm.write(fname,2)
3353         fmts0.write(fname,0)
3354         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3355         ms=MEDFileMeshes(fname)
3356         fields=MEDFileFields(fname,False)
3357         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3358         allFMTSLeavesToDisplay=[]
3359         for fields in fields_per_mesh:
3360             allFMTSLeavesToDisplay2=[]
3361             for fmts in fields:
3362                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3363                 pass
3364             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3365             pass
3366         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3367         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3368         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3369         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3370         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3371         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3372         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),1)
3373         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3374         #
3375         mst=MEDFileMeshStruct.New(ms[0])
3376         #
3377         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3378         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3379         mml2=mml.prepare()
3380         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3381         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3382         self.assertTrue(not ncc)
3383         self.assertTrue(a0.isEqual(DataArrayDouble([(4.,3.,0.),(7.,3.,0.),(2.,5.,0.),(9.,5.,0.)]),1e-12))
3384         self.assertTrue(a1.isEqual(DataArrayByte([3,3,3])))
3385         self.assertTrue(a2.isEqual(DataArrayInt([0,3,6])))
3386         self.assertTrue(a3.isEqual(DataArrayInt([2,2,0,2,0,1,2,1,3])))
3387         self.assertTrue(a4 is None)
3388         self.assertTrue(a5 is None)
3389         a6,a7=mml2.retrieveFamilyIdsOnCells()
3390         self.assertTrue(a6.isEqual(DataArrayInt([0,0,0])))
3391         self.assertTrue(not a7) # copy here
3392         a8,a9=mml2.retrieveNumberIdsOnCells()
3393         self.assertTrue(not a8)
3394         self.assertTrue(a9) # nocopy here
3395         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3396         self.assertTrue(not a10)
3397         self.assertTrue(a11) # no copy here
3398         a12,a13=mml2.retrieveNumberIdsOnNodes()
3399         self.assertTrue(not a12)
3400         self.assertTrue(a13) # no copy here
3401         #
3402         f=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3403         fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3404         f.loadArraysIfNecessary()
3405         v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3406         self.assertEqual(f.getName(),fieldName0)
3407         vExp=DataArrayDouble(4) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"])
3408         self.assertTrue(v.isEqual(vExp,1e-12))
3409         #
3410         f=allFMTSLeavesPerCommonSupport1[0][0][0][1]
3411         fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3412         f.loadArraysIfNecessary()
3413         v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3414         self.assertEqual(f.getName(),fieldName0)
3415         vExp=DataArrayDouble(4) ; vExp.iota() ; vExp.setInfoOnComponents(["zeInfo"]) ; vExp.reverse()
3416         self.assertTrue(v.isEqual(vExp,1e-12))
3417         pass
3418
3419     def test24(self):
3420         """ Non regression test for cartesian mesh whose the 3rd direction has only one node. It a false 3D mesh.
3421         """
3422         fname="ForMEDReader24.med"
3423         fieldName0="zeFieldNode"
3424         cmesh=MEDCouplingCMesh("mesh")
3425         arr0=DataArrayDouble([0.,1.1,2.2,3.3,4.4])
3426         arr1=DataArrayDouble([0.,1.4,2.3])
3427         arr2=DataArrayDouble([5.])
3428         cmesh.setCoords(arr0,arr1,arr2)
3429         fmts0=MEDFileFieldMultiTS()
3430         fmts0.setDtUnit("s")
3431         #
3432         t=(1.1,2,3)
3433         f=MEDCouplingFieldDouble(ON_NODES) ; f.setName(fieldName0)
3434         f.setMesh(cmesh)
3435         arr=DataArrayDouble(15) ; arr.setInfoOnComponents(["tutu"]) ; arr.iota()
3436         f.setArray(arr)
3437         f.setTime(*t)
3438         f1ts=MEDFileField1TS()
3439         f1ts.setFieldNoProfileSBT(f)
3440         fmts0.pushBackTimeStep(f1ts)
3441         #
3442         t=(3.3,4,5)
3443         arr=DataArrayDouble(15) ; arr.setInfoOnComponents(["tutu"]) ; arr.iota()
3444         arr.reverse()
3445         f.setArray(arr)
3446         f.setTime(*t)
3447         f1ts=MEDFileField1TS()
3448         f1ts.setFieldNoProfileSBT(f)
3449         fmts0.pushBackTimeStep(f1ts)
3450         #
3451         mm=MEDFileCMesh() ; mm.setMesh(cmesh)
3452         mm.write(fname,2)
3453         fmts0.write(fname,0)
3454         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3455         ms=MEDFileMeshes(fname)
3456         fields=MEDFileFields(fname,False)
3457         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3458         allFMTSLeavesToDisplay=[]
3459         for fields in fields_per_mesh:
3460             allFMTSLeavesToDisplay2=[]
3461             for fmts in fields:
3462                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3463                 pass
3464             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3465             pass
3466         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3467         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
3468         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3469         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3470         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
3471         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3472         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
3473         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
3474         #
3475         mst=MEDFileMeshStruct.New(ms[0])
3476         #
3477         fcscp=allFMTSLeavesPerCommonSupport[0][1]
3478         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3479         mml2=mml.prepare()
3480         self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
3481         (a,b,c),d=mml2.buildVTUArrays()
3482         self.assertTrue(d)#d is True because the a,b and c are directly those in the internal data structure
3483         self.assertTrue(a.isEqual(arr0,1e-12))
3484         self.assertTrue(b.isEqual(arr1,1e-12))
3485         self.assertTrue(c.isEqual(arr2,1e-12))
3486         for i in xrange(2):
3487             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
3488             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
3489             f.loadArraysIfNecessary()
3490             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
3491             self.assertEqual(f.getName(),fieldName0)
3492             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
3493             vExp=DataArrayDouble(15) ; vExp.iota(0) ; vExp.setInfoOnComponents(["tutu"])
3494             if i==1:
3495                 vExp.reverse()
3496                 pass
3497             self.assertTrue(v.isEqual(vExp,1e-12))
3498             pass
3499         pass
3500
3501     def test25(self):
3502         """ A tricky test that reproduces an invalid behaviour
3503         Here a same field is defined both on CELLS and GAUSS_PT, with a profile for each.
3504         The problem appears on array computation when performing CELLS then GAUSS_PT and CELLS again.
3505         """
3506         fname="ForMEDReader25.med"
3507         m=MEDFileUMesh()
3508         coords=DataArrayDouble([0.,0.,1.,0.,2.,0.,0.,1.,1.,1.,2.,1.,0.,2.,1.,2.,2.,2.,0.,3.,1.,3.,2.,3.,1.,4.,1.,5.,1.,6.],15,2)
3509         m0=MEDCouplingUMesh("mesh",2) ; m0.setCoords(coords)
3510         m0.allocateCells()
3511         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
3512         m0.insertNextCell(NORM_QUAD4,[1,4,5,2])
3513         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
3514         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
3515         m0.insertNextCell(NORM_QUAD4,[6,9,10,7])
3516         m0.insertNextCell(NORM_QUAD4,[7,10,11,8])
3517         m.setMeshAtLevel(0,m0)
3518         m1=MEDCouplingUMesh("mesh",1) ; m1.setCoords(coords)
3519         m1.allocateCells()
3520         m1.insertNextCell(NORM_SEG2,[10,12])
3521         m1.insertNextCell(NORM_SEG2,[12,13])
3522         m1.insertNextCell(NORM_SEG2,[13,14])
3523         m.setMeshAtLevel(-1,m1)
3524         m.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6]))
3525         m.setFamilyFieldArr(-1,DataArrayInt([-7,-8,-9]))
3526         m.setFamilyFieldArr(1,DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))
3527         m.setRenumFieldArr(0,DataArrayInt([101,102,103,104,105,106]))
3528         m.setRenumFieldArr(-1,DataArrayInt([107,108,109]))
3529         m.setRenumFieldArr(1,DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217]))
3530         #
3531         fmts=MEDFileFieldMultiTS()
3532         info0=["aa","bbb"]
3533         name0="zeField"
3534         pflName0="pfl"
3535         pflName1="pfl2"
3536         #
3537         f1ts=MEDFileField1TS()
3538         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name0)
3539         arr=DataArrayDouble([(-1,-11),(-2,-22)]) ; arr.setInfoOnComponents(info0)
3540         f.setArray(arr)
3541         pfl0=DataArrayInt([0,1]) ; pfl0.setName(pflName0)
3542         f1ts.setFieldProfile(f,m,-1,pfl0)
3543         del f
3544         f2=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f2.setName(name0)
3545         arr=DataArrayDouble(15) ; arr.iota(1)
3546         arr=DataArrayDouble.Meld(arr,arr+10) ; arr.setInfoOnComponents(info0)
3547         f2.setArray(arr)
3548         pfl1=DataArrayInt([1,3,5]) ; pfl1.setName(pflName1)
3549         tmp=m0[pfl1] ; f2.setMesh(tmp)
3550         f2.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[-0.5,-0.5,0.5,-0.5,0.5,0.5,-0.5,0.5,0.,0.],[0.1,0.1,0.1,0.1,0.6])
3551         f2.checkCoherency()
3552         f1ts.setFieldProfile(f2,m,0,pfl1)
3553         fmts.pushBackTimeStep(f1ts)
3554         #
3555         m.write(fname,2)
3556         fmts.write(fname,0)
3557         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3558         ms=MEDFileMeshes(fname)
3559         fields=MEDFileFields(fname,False) # false is absolutely necessary for the test
3560         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3561         allFMTSLeavesToDisplay=[]
3562         for fields in fields_per_mesh:
3563             allFMTSLeavesToDisplay2=[]
3564             for fmts in fields:
3565                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3566                 pass
3567             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3568             pass
3569         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3570         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
3571         ### here the test is important !!! Pointers must be different !
3572         self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3573         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3574         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3575         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
3576         ### here the test is important !!! Pointers must be different !
3577         self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3578         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3579         self.assertTrue(allFMTSLeavesToDisplay[0][0][0].getUndergroundDataArray().getHiddenCppPointer()!=allFMTSLeavesToDisplay[0][1][0].getUndergroundDataArray().getHiddenCppPointer())
3580         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3581         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3582         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
3583         #
3584         mst=MEDFileMeshStruct.New(ms[0])
3585         # emulate first click
3586         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3587         self.assertEqual([NORM_SEG2],fcscp.getGeoTypesAt(0,ms[0]))
3588         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3589         mml2=mml.prepare()
3590         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3591         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3592         self.assertTrue(not ncc) # copy here because 2D -> 3D
3593         expCoords=coords.changeNbOfComponents(3,0.)
3594         self.assertTrue(a0.isEqual(expCoords,1e-12))
3595         self.assertTrue(a1.isEqual(DataArrayByte([3,3])))
3596         self.assertTrue(a2.isEqual(DataArrayInt([0,3])))
3597         self.assertTrue(a3.isEqual(DataArrayInt([2,10,12,2,12,13])))
3598         self.assertTrue(a4 is None)
3599         self.assertTrue(a5 is None)
3600         a6,a7=mml2.retrieveFamilyIdsOnCells()
3601         self.assertTrue(a6.isEqual(DataArrayInt([-7,-8])))
3602         self.assertTrue(not a7) # copy here because profile on cells
3603         a8,a9=mml2.retrieveNumberIdsOnCells()
3604         self.assertTrue(a8.isEqual(DataArrayInt([107,108])))
3605         self.assertTrue(not a9) # copy here because profile on cells
3606         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3607         self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3608         self.assertTrue(a11) # no copy here
3609         a12,a13=mml2.retrieveNumberIdsOnNodes()
3610         self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3611         self.assertTrue(a13) # no copy here
3612         fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3613         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3614         fff0.loadArraysIfNecessary()
3615         self.assertEqual([ON_CELLS],fff0.getTypesOfFieldAvailable())
3616         v=mml.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3617         self.assertEqual(fff0.getName(),name0)
3618         self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3619         vExp=DataArrayDouble([(-1,-11),(-2,-22)]) ; vExp.setInfoOnComponents(info0)
3620         self.assertTrue(v.isEqual(vExp,1e-12))
3621         del fff0
3622         # emulate second click
3623         fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3624         self.assertEqual([NORM_QUAD4],fcscp.getGeoTypesAt(0,ms[0]))
3625         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3626         mml2=mml.prepare()
3627         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3628         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3629         self.assertTrue(not ncc) # copy here because 2D -> 3D
3630         expCoords=coords.changeNbOfComponents(3,0.)
3631         self.assertTrue(a0.isEqual(expCoords,1e-12))
3632         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9])))
3633         self.assertTrue(a2.isEqual(DataArrayInt([0,5,10])))
3634         self.assertTrue(a3.isEqual(DataArrayInt([4,1,4,5,2,4,4,7,8,5,4,7,10,11,8])))
3635         self.assertTrue(a4 is None)
3636         self.assertTrue(a5 is None)
3637         a6,a7=mml2.retrieveFamilyIdsOnCells()
3638         self.assertTrue(a6.isEqual(DataArrayInt([-2,-4,-6])))
3639         self.assertTrue(not a7) # copy here because profile on cells
3640         a8,a9=mml2.retrieveNumberIdsOnCells()
3641         self.assertTrue(a8.isEqual(DataArrayInt([102,104,106])))
3642         self.assertTrue(not a9) # copy here because profile on cells
3643         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3644         self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3645         self.assertTrue(a11) # no copy here
3646         a12,a13=mml2.retrieveNumberIdsOnNodes()
3647         self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3648         self.assertTrue(a13) # no copy here
3649         fff1=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3650         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3651         fff1.loadArraysIfNecessary()
3652         self.assertEqual([ON_GAUSS_PT],fff1.getTypesOfFieldAvailable())
3653         v=mml.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3654         self.assertEqual(fff1.getName(),name0)
3655         self.assertEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer())
3656         vExp=DataArrayDouble([1.,11.,2.,12.,3.,13.,4.,14.,5.,15.,6.,16.,7.,17.,8.,18.,9.,19.,10.,20.,11.,21.,12.,22.,13.,23.,14.,24.,15.,25.],15,2) ; vExp.setInfoOnComponents(info0)
3657         self.assertTrue(v.isEqual(vExp,1e-12))
3658         # emulate third click
3659         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3660         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3661         mml2=mml.prepare()
3662         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3663         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3664         self.assertTrue(not ncc) # copy here because 2D -> 3D
3665         expCoords=coords.changeNbOfComponents(3,0.)
3666         self.assertTrue(a0.isEqual(expCoords,1e-12))
3667         self.assertTrue(a1.isEqual(DataArrayByte([3,3])))
3668         self.assertTrue(a2.isEqual(DataArrayInt([0,3])))
3669         self.assertTrue(a3.isEqual(DataArrayInt([2,10,12,2,12,13])))
3670         self.assertTrue(a4 is None)
3671         self.assertTrue(a5 is None)
3672         a6,a7=mml2.retrieveFamilyIdsOnCells()
3673         self.assertTrue(a6.isEqual(DataArrayInt([-7,-8])))
3674         self.assertTrue(not a7) # copy here because profile on cells
3675         a8,a9=mml2.retrieveNumberIdsOnCells()
3676         self.assertTrue(a8.isEqual(DataArrayInt([107,108])))
3677         self.assertTrue(not a9) # copy here because profile on cells
3678         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3679         self.assertTrue(a10.isEqual(DataArrayInt([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])))
3680         self.assertTrue(a11) # no copy here
3681         a12,a13=mml2.retrieveNumberIdsOnNodes()
3682         self.assertTrue(a12.isEqual(DataArrayInt([203,204,205,206,207,208,209,210,211,212,213,214,215,216,217])))
3683         self.assertTrue(a13) # no copy here
3684         fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3685         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3686         fff0.loadArraysIfNecessary()
3687         self.assertEqual([ON_CELLS],fff0.getTypesOfFieldAvailable())
3688         v=mml.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3689         self.assertEqual(fff0.getName(),name0)
3690         self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3691         vExp=DataArrayDouble([(-1,-11),(-2,-22)]) ; vExp.setInfoOnComponents(info0)
3692         self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3693         del fff0
3694         pass
3695
3696     def test26(self):
3697         """ Test focused on field on nodes (here f0Node and f1Node) lying on a profile of nodes that do not match perfectly a sub set of cells of its underlying mesh. See bug EDF 2405 and 2177.
3698         For this type of fields the support will contain only vertices.
3699         """
3700         fname="ForMEDReader26.med"
3701         coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3702         m0=MEDCouplingUMesh("mesh",2)
3703         m0.allocateCells()
3704         for elt in [[2,6,3],[6,7,3],[9,6,5],[9,10,6]]:
3705             m0.insertNextCell(NORM_TRI3,elt)
3706             pass
3707         for elt in [[0,4,5,1],[1,5,6,2],[4,8,9,5],[6,10,11,7],[8,12,13,9],[9,13,14,10],[10,14,15,11]]:
3708             m0.insertNextCell(NORM_QUAD4,elt)
3709             pass
3710         m0.setCoords(coords)
3711         ##
3712         mm=MEDFileUMesh()
3713         mm.setMeshAtLevel(0,m0)
3714         mm.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11]))
3715         mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
3716         #
3717         f1ts0Node=MEDFileField1TS()
3718         f1ts1Node=MEDFileField1TS()
3719         f1ts2Cell=MEDFileField1TS()
3720         f1ts3Cell=MEDFileField1TS()
3721         f1ts4Cell=MEDFileField1TS()
3722         f1ts5Node=MEDFileField1TS()
3723         #
3724         pfl0=DataArrayInt([4,5,6,8,9,12]) ; pfl0.setName("pfl0")
3725         pfl1=DataArrayInt([0,1,4,5,7,10]) ; pfl1.setName("pfl1")
3726         pfl2=DataArrayInt([0,1,2,3,4,5,6,7,10,11,14,15]) ; pfl2.setName("pfl2")
3727         #
3728         f0Node=MEDCouplingFieldDouble(ON_NODES) ; f0Node.setName("f0Node")
3729         arr0=DataArrayDouble(6) ; arr0.iota()
3730         f0Node.setArray(arr0)
3731         f1ts0Node.setFieldProfile(f0Node,mm,0,pfl0)
3732         #
3733         f1Node=MEDCouplingFieldDouble(ON_NODES) ; f1Node.setName("f1Node")
3734         arr1=DataArrayDouble(6) ; arr1.iota() ; arr1.reverse()
3735         f1Node.setArray(arr1)
3736         f1ts1Node.setFieldProfile(f1Node,mm,0,pfl0)
3737         #
3738         f2Cell=MEDCouplingFieldDouble(ON_CELLS) ; f2Cell.setName("f2Cell")
3739         arr2=DataArrayDouble([2,3,0,1,4,5])
3740         f2Cell.setArray(arr2)
3741         f1ts2Cell.setFieldProfile(f2Cell,mm,0,pfl1)
3742         #
3743         f3Cell=MEDCouplingFieldDouble(ON_CELLS) ; f3Cell.setName("f3Cell")
3744         arr3=DataArrayDouble([5,4,3,2,1,0])
3745         f3Cell.setArray(arr3)
3746         f1ts3Cell.setFieldProfile(f3Cell,mm,0,pfl1)
3747         #
3748         f4Cell=MEDCouplingFieldDouble(ON_CELLS) ; f4Cell.setName("f4Cell")
3749         arr4=DataArrayDouble([2,2,0,1,1,0])
3750         f4Cell.setArray(arr4)
3751         f1ts4Cell.setFieldProfile(f4Cell,mm,0,pfl1)
3752         #
3753         f5Node=MEDCouplingFieldDouble(ON_NODES) ; f5Node.setName("f5Node")
3754         arr5=DataArrayDouble([0,1,2,3,10,11,13,2,11,1,10,0])
3755         f5Node.setArray(arr5)
3756         f1ts5Node.setFieldProfile(f5Node,mm,0,pfl2)
3757         #
3758         fs=MEDFileFields()
3759         for f in [f1ts0Node,f1ts1Node,f1ts2Cell,f1ts3Cell,f1ts4Cell,f1ts5Node]:
3760             fmts=MEDFileFieldMultiTS()
3761             fmts.pushBackTimeStep(f)
3762             fs.pushField(fmts)
3763             pass
3764         mm.write(fname,2)
3765         fs.write(fname,0)
3766         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3767         ms=MEDFileMeshes(fname)
3768         fields=MEDFileFields(fname,False)
3769         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3770         allFMTSLeavesToDisplay=[]
3771         for fields in fields_per_mesh:
3772             allFMTSLeavesToDisplay2=[]
3773             for fmts in fields:
3774                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3775                 pass
3776             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3777             pass
3778         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3779         self.assertEqual(len(allFMTSLeavesToDisplay[0]),6)
3780         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3781         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3782         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),6)
3783         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3784         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3785         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),4)
3786         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),2)# <- the smart one is here
3787         #
3788         mst=MEDFileMeshStruct.New(ms[0])
3789         #
3790         fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3791         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3792         mml2=mml.prepare()
3793         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3794         self.assertEqual([3,4,0],mml2.getGeoTypes())
3795         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3796         self.assertTrue(not ncc)
3797         self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,0.,3.,0.],6,3),1e-12))
3798         self.assertTrue(a1.isEqual(DataArrayByte([5,9,1])))
3799         self.assertTrue(a2.isEqual(DataArrayInt([0,4,9])))
3800         self.assertTrue(a3.isEqual(DataArrayInt([3,4,2,1,4,0,3,4,1,1,5])))
3801         self.assertTrue(a4 is None)
3802         self.assertTrue(a5 is None)
3803         a6,a7=mml2.retrieveFamilyIdsOnCells()
3804         self.assertTrue(a6.isEqual(DataArrayInt([-3,-7,13])))
3805         self.assertTrue(not a7) # copy here because profile on cells
3806         a8,a9=mml2.retrieveNumberIdsOnCells()
3807         self.assertTrue(a8 is None)
3808         self.assertTrue(a9) # no copy here because no number field
3809         a10,a11=mml2.retrieveFamilyIdsOnNodes()
3810         self.assertTrue(a10.isEqual(DataArrayInt([5,6,7,9,10,13])))
3811         self.assertTrue(not a11) # copy here
3812         a12,a13=mml2.retrieveNumberIdsOnNodes()
3813         self.assertTrue(a12 is None)
3814         self.assertTrue(a13) # no copy here because no number field
3815         #
3816         fff0=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3817         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3818         fff0.loadArraysIfNecessary()
3819         v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3820         self.assertEqual(fff0.getName(),"f0Node")
3821         self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3822         vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.])
3823         self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3824         #
3825         fff1=allFMTSLeavesPerCommonSupport1[1][0][1][0]
3826         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3827         fff1.loadArraysIfNecessary()
3828         v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3829         self.assertEqual(fff1.getName(),"f1Node")
3830         self.assertEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer())
3831         vExp=DataArrayDouble([5.,4.,3.,2.,1.,0.])
3832         self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
3833         pass
3834
3835     def test27(self):
3836         """ This test defines 2 fields f0 and f1 on nodes lying on an unstructured mesh with no cells.
3837         f0 is a field on all nodes. f1 is a partial field on nodes.
3838         """
3839         fname="ForMEDReader27.med"
3840         coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3841         m0=MEDCouplingUMesh("mesh",2)
3842         m0.allocateCells()
3843         m0.setCoords(coords)
3844         ##
3845         mm=MEDFileUMesh()
3846         mm.setMeshAtLevel(0,m0)
3847         mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
3848         #
3849         f1ts0=MEDFileField1TS()
3850         f1ts1=MEDFileField1TS()
3851         #
3852         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m0) ; f0.setName("f0NoPfl")
3853         arr0=DataArrayDouble([0.,1.,2.,3.,1.,1.5,2.2,3.1,2.,2.2,3.,3.1,3.,3.1,3.5,4.])
3854         f0.setArray(arr0)
3855         f0.checkCoherency()
3856         f1ts0.setFieldNoProfileSBT(f0)
3857         self.assertEqual(f1ts0.getMeshName(),"mesh")
3858         #
3859         pfl1=DataArrayInt([0,1,2,3,4,5,6,8,9,12]) ; pfl1.setName("pfl1")
3860         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setName("f1Pfl")
3861         arr1=DataArrayDouble([3.,2.,1.,0.,2.,1.5,0.,1.,0.,0.2])
3862         f1.setArray(arr1)
3863         f1ts1.setFieldProfile(f1,mm,0,pfl1)
3864         self.assertEqual(f1ts1.getMeshName(),"mesh")
3865         #
3866         fs=MEDFileFields()
3867         fmts0=MEDFileFieldMultiTS()
3868         fmts0.pushBackTimeStep(f1ts0)
3869         fmts1=MEDFileFieldMultiTS()
3870         fmts1.pushBackTimeStep(f1ts1)
3871         fs.pushField(fmts0) ; fs.pushField(fmts1)
3872         self.assertEqual(fs[0].getMeshName(),"mesh")
3873         self.assertEqual(fs[1].getMeshName(),"mesh")
3874         mm.write(fname,2)
3875         fs.write(fname,0)
3876         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
3877         ms=MEDFileMeshes(fname)
3878         fields=MEDFileFields(fname,False)
3879         self.assertEqual(fields[0].getMeshName(),"mesh")
3880         self.assertEqual(fields[1].getMeshName(),"mesh")
3881         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
3882         self.assertEqual(fields_per_mesh[0][0].getMeshName(),"mesh")
3883         self.assertEqual(fields_per_mesh[0][1].getMeshName(),"mesh")
3884         allFMTSLeavesToDisplay=[]
3885         for fields in fields_per_mesh:
3886             allFMTSLeavesToDisplay2=[]
3887             for fmts in fields:
3888                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
3889                 pass
3890             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
3891             pass
3892         self.assertEqual(len(allFMTSLeavesToDisplay),1)
3893         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
3894         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
3895         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
3896         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
3897         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
3898         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),2)
3899         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),1)
3900         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
3901         #
3902         mst=MEDFileMeshStruct.New(ms[0])
3903         #
3904         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
3905         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3906         mml2=mml.prepare()
3907         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3908         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3909         self.assertTrue(ncc)
3910         self.assertTrue(a0.isEqual(DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)]),1e-12))
3911         self.assertTrue(a1.isEqual(DataArrayByte([])))
3912         self.assertTrue(a2.isEqual(DataArrayInt([])))
3913         self.assertTrue(a3.isEqual(DataArrayInt([])))
3914         self.assertTrue(a4 is None)
3915         self.assertTrue(a5 is None)
3916         #
3917         fff0=allFMTSLeavesPerCommonSupport1[0][0][0][0]
3918         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
3919         fff0.loadArraysIfNecessary()
3920         v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
3921         self.assertEqual(fff0.getName(),"f0NoPfl")
3922         self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
3923         vExp=DataArrayDouble([0.,1.,2.,3.,1.,1.5,2.2,3.1,2.,2.2,3.,3.1,3.,3.1,3.5,4])
3924         self.assertTrue(v.isEqual(vExp,1e-12))
3925         #
3926         fcscp=allFMTSLeavesPerCommonSupport1[1][1]
3927         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
3928         mml2=mml.prepare()
3929         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
3930         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
3931         self.assertTrue(not ncc)
3932         self.assertTrue(a0.isEqual(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(0,3,0)]),1e-12))
3933         self.assertTrue(a1.isEqual(DataArrayByte([])))
3934         self.assertTrue(a2.isEqual(DataArrayInt([])))
3935         self.assertTrue(a3.isEqual(DataArrayInt([])))
3936         self.assertTrue(a4 is None)
3937         self.assertTrue(a5 is None)
3938         fff1=allFMTSLeavesPerCommonSupport1[1][0][0][0]
3939         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
3940         fff1.loadArraysIfNecessary()
3941         v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
3942         self.assertEqual(fff1.getName(),"f1Pfl")
3943         self.assertNotEqual(v.getHiddenCppPointer(),fff1.getUndergroundDataArray().getHiddenCppPointer()) # pointers are not equal because Profile
3944         vExp=DataArrayDouble([3.,2.,1.,0.,2.,1.5,0.,1.,0.,0.2])
3945         self.assertTrue(v.isEqual(vExp,1e-12))
3946         pass
3947
3948     def test28(self):
3949         """ This test defines 2 fields f0,f1,f2,f3 lying on an unstructured mesh whith cells including NORM_POINT1.
3950         Both f0 and f1 are on NODES and f2 and f3 are on cells. f1 and f2 share the same support.
3951         f0 is on a nodal support that is not matchable with any cells (including NORM_POINT1)
3952         This test is a more aggressive version of test26.
3953         """
3954         fname="ForMEDReader28.med"
3955         coords=DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)])
3956         m0=MEDCouplingUMesh("mesh",2)
3957         m0.allocateCells()
3958         for elt in [[2,6,3],[6,7,3],[9,6,5],[9,10,6]]:
3959             m0.insertNextCell(NORM_TRI3,elt)
3960             pass
3961         for elt in [[0,4,5,1],[1,5,6,2],[4,8,9,5],[6,10,11,7],[8,12,13,9],[9,13,14,10],[10,14,15,11]]:
3962             m0.insertNextCell(NORM_QUAD4,elt)
3963             pass
3964         m0.setCoords(coords)
3965         m2=MEDCouplingUMesh("mesh",0) ; m2.setCoords(coords)
3966         m2.allocateCells()
3967         for elt in [[8],[13]]:
3968             m2.insertNextCell(NORM_POINT1,elt)
3969             pass
3970         ##
3971         mm=MEDFileUMesh()
3972         mm.setMeshAtLevel(0,m0)
3973         mm.setMeshAtLevel(-2,m2)
3974         mm.setFamilyFieldArr(0,DataArrayInt([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11]))
3975         mm.setFamilyFieldArr(-2,DataArrayInt([-12,-13]))
3976         mm.setFamilyFieldArr(1,DataArrayInt([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))
3977         #
3978         f1ts0Node=MEDFileField1TS()
3979         f1ts1Node=MEDFileField1TS()
3980         f1ts2Cell=MEDFileField1TS()
3981         f1ts3Cell=MEDFileField1TS()
3982         #
3983         pfl0=DataArrayInt([4,5,6,8,9,12]) ; pfl0.setName("pfl0")
3984         pfl1=DataArrayInt([0,1,4,5,7,10]) ; pfl1.setName("pfl1")
3985         pfl2=DataArrayInt([0,1,2,3,4,5,6,7,10,11,14,15]) ; pfl2.setName("pfl2")
3986         #
3987         f0Node=MEDCouplingFieldDouble(ON_NODES) ; f0Node.setName("f0Node")
3988         arr0=DataArrayDouble(6) ; arr0.iota()
3989         f0Node.setArray(arr0)
3990         f1ts0Node.setFieldProfile(f0Node,mm,0,pfl0)
3991         #
3992         f1Node=MEDCouplingFieldDouble(ON_NODES) ; f1Node.setName("f1Node")
3993         arr1=DataArrayDouble(12) ; arr1.iota() ; arr1.reverse()
3994         f1Node.setArray(arr1)
3995         f1ts1Node.setFieldProfile(f1Node,mm,0,pfl2)
3996         #
3997         f2Cell=MEDCouplingFieldDouble(ON_CELLS) ; f2Cell.setName("f2Cell")
3998         arr2=DataArrayDouble([2,3,0,1,4,5])
3999         f2Cell.setArray(arr2)
4000         f1ts2Cell.setFieldProfile(f2Cell,mm,0,pfl1)
4001         #
4002         f3Cell=MEDCouplingFieldDouble(ON_CELLS) ; f3Cell.setName("f3Cell")
4003         arr3=DataArrayDouble([5,4,3,2,1,0]) ; f3Cell.setArray(arr3)
4004         f1ts3Cell.setFieldProfile(f3Cell,mm,0,pfl1)
4005         f3Cell.setMesh(m2)
4006         arr3=DataArrayDouble([-1.1,-3.1]) ; f3Cell.setArray(arr3)
4007         f1ts3Cell.setFieldNoProfileSBT(f3Cell)
4008         #
4009         fs=MEDFileFields()
4010         for f in [f1ts0Node,f1ts1Node,f1ts2Cell,f1ts3Cell]:
4011             fmts=MEDFileFieldMultiTS()
4012             fmts.pushBackTimeStep(f)
4013             fs.pushField(fmts)
4014             pass
4015         mm.write(fname,2)
4016         fs.write(fname,0)
4017         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
4018         ms=MEDFileMeshes(fname)
4019         fields=MEDFileFields(fname,False)
4020         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
4021         allFMTSLeavesToDisplay=[]
4022         for fields in fields_per_mesh:
4023             allFMTSLeavesToDisplay2=[]
4024             for fmts in fields:
4025                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
4026                 pass
4027             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
4028             pass
4029         self.assertEqual(len(allFMTSLeavesToDisplay),1)
4030         self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
4031         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
4032         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
4033         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
4034         allFMTSLeavesPerCommonSupport1=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesToDisplay[0],ms[ms.getMeshesNames()[0]])
4035         self.assertEqual(len(allFMTSLeavesPerCommonSupport1),3)
4036         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[0][0]),2)
4037         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[1][0]),1)
4038         self.assertEqual(len(allFMTSLeavesPerCommonSupport1[2][0]),1)
4039         #
4040         mst=MEDFileMeshStruct.New(ms[0])
4041         #
4042         fcscp=allFMTSLeavesPerCommonSupport1[2][1]
4043         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4044         mml2=mml.prepare()
4045         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4046         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4047         self.assertTrue(not ncc)
4048         self.assertTrue(a0.isEqual(DataArrayDouble([0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,0.,3.,0.],6,3),1e-12))
4049         self.assertTrue(a1.isEqual(DataArrayByte([5,9,1,1])))
4050         self.assertTrue(a2.isEqual(DataArrayInt([0,4,9,11])))
4051         self.assertTrue(a3.isEqual(DataArrayInt([3,4,2,1,4,0,3,4,1,1,3,1,5])))
4052         self.assertTrue(a4 is None)
4053         self.assertTrue(a5 is None)
4054         a6,a7=mml2.retrieveFamilyIdsOnCells()
4055         self.assertTrue(a6.isEqual(DataArrayInt([-3,-7,-12,13])))
4056         self.assertTrue(not a7) # copy here because profile on cells
4057         a8,a9=mml2.retrieveNumberIdsOnCells()
4058         self.assertTrue(a8 is None)
4059         self.assertTrue(a9) # no copy here because no number field
4060         a10,a11=mml2.retrieveFamilyIdsOnNodes()
4061         self.assertTrue(a10.isEqual(DataArrayInt([5,6,7,9,10,13])))
4062         self.assertTrue(not a11) # copy here
4063         a12,a13=mml2.retrieveNumberIdsOnNodes()
4064         self.assertTrue(a12 is None)
4065         self.assertTrue(a13) # no copy here because no number field
4066         #
4067         fff0=allFMTSLeavesPerCommonSupport1[2][0][0][0]
4068         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff0,mst)
4069         fff0.loadArraysIfNecessary()
4070         v=mml2.buildDataArray(fsst,fields,fff0.getUndergroundDataArray())
4071         self.assertEqual(fff0.getName(),"f0Node")
4072         self.assertEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4073         vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.])
4074         self.assertTrue(v.isEqual(vExp,1e-12)) # <- THE test is here !!!
4075         ###
4076         fcscp=allFMTSLeavesPerCommonSupport1[0][1]
4077         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4078         mml2=mml.prepare()
4079         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4080         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4081         self.assertTrue(not ncc)
4082         self.assertTrue(a0.isEqual(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(2,2,0),(3,2,0),(2,3,0),(3,3,0)]),1e-12))
4083         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9,9])))
4084         self.assertTrue(a2.isEqual(DataArrayInt([0,4,8,13,18,23])))
4085         self.assertTrue(a3.isEqual(DataArrayInt([3,2,6,3,3,6,7,3,4,0,4,5,1,4,1,5,6,2,4,6,8,9,7,4,8,10,11,9])))
4086         self.assertTrue(a4 is None)
4087         self.assertTrue(a5 is None)
4088         fff1=allFMTSLeavesPerCommonSupport1[0][0][0][0]
4089         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff1,mst)
4090         fff1.loadArraysIfNecessary()
4091         v=mml2.buildDataArray(fsst,fields,fff1.getUndergroundDataArray())
4092         self.assertEqual(fff1.getName(),"f2Cell")
4093         self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4094         vExp=DataArrayDouble([2,3,0,1,4,5])
4095         self.assertTrue(v.isEqual(vExp,1e-12))
4096         fff2=allFMTSLeavesPerCommonSupport1[0][0][1][0]
4097         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff2,mst)
4098         fff2.loadArraysIfNecessary()
4099         v=mml2.buildDataArray(fsst,fields,fff2.getUndergroundDataArray())
4100         self.assertEqual(fff2.getName(),"f1Node")
4101         self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4102         vExp=DataArrayDouble([11,10,9,8,7,6,5,4,3,2,1,0])
4103         self.assertTrue(v.isEqual(vExp,1e-12))
4104         ###
4105         fcscp=allFMTSLeavesPerCommonSupport1[1][1]
4106         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
4107         mml2=mml.prepare()
4108         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
4109         ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
4110         self.assertTrue(ncc)# here all the 16 nodes are taken
4111         self.assertTrue(a0.isEqual(DataArrayDouble([(0.,0.,0.),(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.)]),1e-12))
4112         self.assertTrue(a1.isEqual(DataArrayByte([1,1,5,5,9,9,9,9])))
4113         self.assertTrue(a2.isEqual(DataArrayInt([0,2,4,8,12,17,22,27])))
4114         self.assertTrue(a3.isEqual(DataArrayInt([1,8,1,13,3,2,6,3,3,6,7,3,4,0,4,5,1,4,1,5,6,2,4,6,10,11,7,4,10,14,15,11])))
4115         self.assertTrue(a4 is None)
4116         self.assertTrue(a5 is None)
4117         fff3=allFMTSLeavesPerCommonSupport1[1][0][0][0]
4118         fsst=MEDFileField1TSStructItem.BuildItemFrom(fff3,mst)
4119         fff3.loadArraysIfNecessary()
4120         v=mml2.buildDataArray(fsst,fields,fff3.getUndergroundDataArray())
4121         self.assertEqual(fff3.getName(),"f3Cell")
4122         self.assertNotEqual(v.getHiddenCppPointer(),fff0.getUndergroundDataArray().getHiddenCppPointer())
4123         vExp=DataArrayDouble([-1.1,-3.1,5,4,3,2,1,0])
4124         self.assertTrue(v.isEqual(vExp,1e-12))
4125         pass
4126     pass
4127
4128 unittest.main()