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