Salome HOME
0ac354343198c7f84f65a24e2edbd193b24ceb99
[modules/med.git] / src / MEDLoader / Swig / MEDLoaderTest4.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25
26 class MEDLoaderTest4(unittest.TestCase):
27     """
28     Test series to emulate the future MEDReader plugin for PARAVIS.
29     """
30     def test1(self):
31         """
32         This test is the most simple one. One time serie of one field with only cell fields with no profiles.
33         The only "difficulty" is that the cell field is lying on different levels (2D and 1D) to maximize the compatibility with ParaVIS.
34         """
35         fname="ForMEDReader1.med"
36         # building a mesh containing 4 tri3 + 5 quad4
37         tri=MEDCouplingUMesh("tri",2)
38         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
39         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
40         tris=[tri.deepCpy() for i in xrange(4)]
41         for i,elt in enumerate(tris): elt.translate([i,0])
42         tris=MEDCouplingUMesh.MergeUMeshes(tris)
43         quad=MEDCouplingUMesh("quad",2)
44         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
45         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
46         quads=[quad.deepCpy() for i in xrange(5)]
47         for i,elt in enumerate(quads): elt.translate([5+i,0])
48         quads=MEDCouplingUMesh.MergeUMeshes(quads)
49         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
50         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
51         m1=m.buildDescendingConnectivity()[0]
52         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
53         #
54         fieldName="zeField"
55         fs=MEDFileFieldMultiTS()
56         ##### Time step 0
57         i=0
58         f=MEDFileField1TS()
59         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
60         fCell0.setName(fieldName) ; fCell0.setMesh(m)
61         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
62         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
63         fCell0.checkCoherency()
64         f.setFieldNoProfileSBT(fCell0)
65         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
66         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
67         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
68         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
69         fCell1.checkCoherency()
70         f.setFieldNoProfileSBT(fCell1)
71         fs.pushBackTimeStep(f)
72         ##### Time step 1
73         i=1
74         f=MEDFileField1TS()
75         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
76         fCell0.setName(fieldName) ; fCell0.setMesh(m)
77         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
78         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
79         fCell0.checkCoherency()
80         f.setFieldNoProfileSBT(fCell0)
81         #
82         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
83         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
84         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
85         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
86         fCell1.checkCoherency()
87         f.setFieldNoProfileSBT(fCell1)
88         fs.pushBackTimeStep(f)
89         ##### Time step 2
90         i=2
91         f=MEDFileField1TS()
92         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
93         fCell0.setName(fieldName) ; fCell0.setMesh(m)
94         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
95         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
96         fCell0.checkCoherency()
97         f.setFieldNoProfileSBT(fCell0)
98         #
99         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
100         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
101         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
102         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
103         fCell1.checkCoherency()
104         f.setFieldNoProfileSBT(fCell1)
105         fs.pushBackTimeStep(f)
106         ##### Time step 3
107         i=3
108         f=MEDFileField1TS()
109         #
110         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
111         fCell0.setName(fieldName) ; fCell0.setMesh(m)
112         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
113         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
114         fCell0.checkCoherency()
115         f.setFieldNoProfileSBT(fCell0)
116         #
117         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
118         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
119         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
120         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
121         fCell1.checkCoherency()
122         f.setFieldNoProfileSBT(fCell1)
123         #
124         fs.pushBackTimeStep(f)
125         ##### Time step 4
126         i=4
127         f=MEDFileField1TS()
128         #
129         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
130         fCell0.setName(fieldName) ; fCell0.setMesh(m)
131         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
132         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
133         fCell0.checkCoherency()
134         f.setFieldNoProfileSBT(fCell0)
135         #
136         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
137         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
138         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
139         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
140         fCell1.checkCoherency()
141         f.setFieldNoProfileSBT(fCell1)
142         fs.pushBackTimeStep(f)
143         mm.write(fname,2)
144         fs.write(fname,0)
145         a0Exp=mm.getCoords().deepCpy()
146         del m,m1,mm,fs,f,fCell0,fCell1
147         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
148         ms=MEDFileMeshes(fname)
149         fields=MEDFileFields(fname,False) # False is important to not read the values
150         refMem=fields.getHeapMemorySize()
151         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
152         allFMTSLeavesToDisplay=[]
153         for fields in fields_per_mesh:
154             allFMTSLeavesToDisplay2=[]
155             for fmts in fields:
156                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
157                 pass
158             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
159             pass
160         self.assertEqual(len(allFMTSLeavesToDisplay),1)
161         self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
162         for fmts in allFMTSLeavesToDisplay[0]:
163             self.assertEqual(fmts.getTimeSteps(),[(0,0,0.),(1,0,1.),(2,0,2.),(3,0,3.),(4,0,4.)]) # All discretizations have the same time series
164             pass
165         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
166         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
167         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
168         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
169         #
170         mst=MEDFileMeshStruct.New(ms[0])
171         fcscp=allFMTSLeavesPerCommonSupport[0][1]
172         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
173         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
174         for i in xrange(1,5):
175             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
176             pass
177         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
178         self.assertTrue(a0.isEqual(a0Exp,1e-12))
179         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])))
180         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
181         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])))
182         self.assertTrue(a4 is None)
183         self.assertTrue(a5 is None)
184         for i in xrange(5):
185             fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
186             fields[0][i].loadArraysIfNecessary()
187             tmpMem=fields.getHeapMemorySize()
188             self.assertTrue(tmpMem-refMem>=41*2*8)
189             refMem=tmpMem
190             v=mml.buildDataArray(fsst,fields,fields[0][i].getUndergroundDataArray())
191             self.assertEqual(v.getHiddenCppPointer(),fields[0][i].getUndergroundDataArray().getHiddenCppPointer())
192             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
193             self.assertTrue(v.isEqual(vExp,1e-12))
194             pass
195         pass
196
197     def test2(self):
198         """
199         One time serie of one field with cell and node discretization in the same field with no profiles.
200         Here as there is no profile only one VTK support is requested.
201         """
202         fname="ForMEDReader2.med"
203         # building a mesh containing 4 tri3 + 5 quad4
204         tri=MEDCouplingUMesh("tri",2)
205         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
206         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
207         tris=[tri.deepCpy() for i in xrange(4)]
208         for i,elt in enumerate(tris): elt.translate([i,0])
209         tris=MEDCouplingUMesh.MergeUMeshes(tris)
210         quad=MEDCouplingUMesh("quad",2)
211         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
212         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
213         quads=[quad.deepCpy() for i in xrange(5)]
214         for i,elt in enumerate(quads): elt.translate([5+i,0])
215         quads=MEDCouplingUMesh.MergeUMeshes(quads)
216         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
217         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
218         m1=m.buildDescendingConnectivity()[0]
219         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
220         #
221         fieldName="zeField"
222         fs=MEDFileFieldMultiTS()
223         ##### Time step 0
224         i=0
225         f=MEDFileField1TS()
226         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
227         fCell0.setName(fieldName) ; fCell0.setMesh(m)
228         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
229         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
230         fCell0.checkCoherency()
231         f.setFieldNoProfileSBT(fCell0)
232         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
233         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
234         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
235         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
236         fCell1.checkCoherency()
237         f.setFieldNoProfileSBT(fCell1)
238         #
239         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
240         fNode.setName(fieldName) ; fNode.setMesh(m1)
241         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(300) ; arr.rearrange(2)
242         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
243         fNode.checkCoherency()
244         f.setFieldNoProfileSBT(fNode)
245         fs.pushBackTimeStep(f)
246         ##### Time step 1
247         i=1
248         f=MEDFileField1TS()
249         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
250         fCell0.setName(fieldName) ; fCell0.setMesh(m)
251         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
252         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
253         fCell0.checkCoherency()
254         f.setFieldNoProfileSBT(fCell0)
255         #
256         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
257         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
258         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
259         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
260         fCell1.checkCoherency()
261         f.setFieldNoProfileSBT(fCell1)
262         #
263         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
264         fNode.setName(fieldName) ; fNode.setMesh(m1)
265         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
266         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
267         fNode.checkCoherency()
268         f.setFieldNoProfileSBT(fNode)
269         fs.pushBackTimeStep(f)
270         ##### Time step 2
271         i=2
272         f=MEDFileField1TS()
273         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
274         fNode.setName(fieldName) ; fNode.setMesh(m1)
275         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(2300) ; arr.rearrange(2)
276         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
277         fNode.checkCoherency()
278         f.setFieldNoProfileSBT(fNode)
279         #
280         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
281         fCell0.setName(fieldName) ; fCell0.setMesh(m)
282         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
283         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
284         fCell0.checkCoherency()
285         f.setFieldNoProfileSBT(fCell0)
286         #
287         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
288         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
289         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
290         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
291         fCell1.checkCoherency()
292         f.setFieldNoProfileSBT(fCell1)
293         fs.pushBackTimeStep(f)
294         ##### Time step 3
295         i=3
296         f=MEDFileField1TS()
297         #
298         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
299         fCell0.setName(fieldName) ; fCell0.setMesh(m)
300         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
301         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
302         fCell0.checkCoherency()
303         f.setFieldNoProfileSBT(fCell0)
304         #
305         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
306         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
307         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
308         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
309         fCell1.checkCoherency()
310         f.setFieldNoProfileSBT(fCell1)
311         #
312         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
313         fNode.setName(fieldName) ; fNode.setMesh(m1)
314         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
315         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
316         fNode.checkCoherency()
317         f.setFieldNoProfileSBT(fNode)
318         #
319         fs.pushBackTimeStep(f)
320         ##### Time step 4
321         i=4
322         f=MEDFileField1TS()
323         #
324         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
325         fCell0.setName(fieldName) ; fCell0.setMesh(m)
326         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
327         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
328         fCell0.checkCoherency()
329         f.setFieldNoProfileSBT(fCell0)
330         #
331         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
332         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
333         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
334         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
335         fCell1.checkCoherency()
336         f.setFieldNoProfileSBT(fCell1)
337         #
338         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
339         fNode.setName(fieldName) ; fNode.setMesh(m1)
340         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(4300) ; arr.rearrange(2)
341         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
342         fNode.checkCoherency()
343         f.setFieldNoProfileSBT(fNode)
344         #
345         fs.pushBackTimeStep(f)
346         mm.write(fname,2)
347         fs.write(fname,0)
348         a0Exp=mm.getCoords().deepCpy()
349         del m,m1,mm,fs,f,fCell0,fCell1
350         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
351         ms=MEDFileMeshes(fname)
352         fields=MEDFileFields(fname,False)
353         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
354         allFMTSLeavesToDisplay=[]
355         for fields in fields_per_mesh:
356             allFMTSLeavesToDisplay2=[]
357             for fmts in fields:
358                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
359                 pass
360             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
361             pass
362         self.assertEqual(len(allFMTSLeavesToDisplay),1)
363         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
364         for fmts in allFMTSLeavesToDisplay[0]:
365             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
366             pass
367         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
368         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
369         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
370         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
371         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
372         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
373         #
374         mst=MEDFileMeshStruct.New(ms[0])
375         fcscp=allFMTSLeavesPerCommonSupport[0][1]
376         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
377         assert isinstance(mml,MEDUMeshMultiLev)
378         for i in xrange(1,5):
379             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
380             pass
381         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
382         self.assertTrue(a0.isEqual(a0Exp,1e-12))
383         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])))
384         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
385         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])))
386         self.assertTrue(a4 is None)
387         self.assertTrue(a5 is None)
388         # for cells
389         for i in xrange(5):
390             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
391             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
392             f.loadArraysIfNecessary()
393             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
394             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
395             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
396             self.assertTrue(v.isEqual(vExp,1e-12))
397             pass
398         for i in xrange(5):
399             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
400             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
401             f.loadArraysIfNecessary()
402             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
403             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
404             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
405             self.assertTrue(v.isEqual(vExp,1e-12))
406             pass
407         pass
408
409     def test3(self):
410         """ 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.
411         So two time step series on the same field. No profile here neither on cells nor on nodes.
412         """
413         fname="ForMEDReader3.med"
414         # building a mesh containing 4 tri3 + 5 quad4
415         tri=MEDCouplingUMesh("tri",2)
416         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
417         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
418         tris=[tri.deepCpy() for i in xrange(4)]
419         for i,elt in enumerate(tris): elt.translate([i,0])
420         tris=MEDCouplingUMesh.MergeUMeshes(tris)
421         quad=MEDCouplingUMesh("quad",2)
422         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
423         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
424         quads=[quad.deepCpy() for i in xrange(5)]
425         for i,elt in enumerate(quads): elt.translate([5+i,0])
426         quads=MEDCouplingUMesh.MergeUMeshes(quads)
427         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
428         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
429         m1=m.buildDescendingConnectivity()[0]
430         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
431         #
432         fieldName="zeField"
433         fs=MEDFileFieldMultiTS()
434         ##### Time step 0 on cells
435         i=0
436         f=MEDFileField1TS()
437         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
438         fCell0.setName(fieldName) ; fCell0.setMesh(m)
439         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
440         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
441         fCell0.checkCoherency()
442         f.setFieldNoProfileSBT(fCell0)
443         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
444         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
445         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
446         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
447         fCell1.checkCoherency()
448         f.setFieldNoProfileSBT(fCell1)
449         fs.pushBackTimeStep(f)
450         ##### Time step 1 on nodes
451         i=1
452         f=MEDFileField1TS()
453         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
454         fNode.setName(fieldName) ; fNode.setMesh(m1)
455         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
456         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
457         fNode.checkCoherency()
458         f.setFieldNoProfileSBT(fNode)
459         fs.pushBackTimeStep(f)
460         ##### Time step 2 on cells
461         i=2
462         f=MEDFileField1TS()
463         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
464         fCell0.setName(fieldName) ; fCell0.setMesh(m)
465         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
466         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
467         fCell0.checkCoherency()
468         f.setFieldNoProfileSBT(fCell0)
469         #
470         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
471         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
472         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
473         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
474         fCell1.checkCoherency()
475         f.setFieldNoProfileSBT(fCell1)
476         fs.pushBackTimeStep(f)
477         ##### Time step 3 on nodes
478         i=3
479         f=MEDFileField1TS()
480         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
481         fNode.setName(fieldName) ; fNode.setMesh(m1)
482         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
483         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
484         fNode.checkCoherency()
485         f.setFieldNoProfileSBT(fNode)
486         fs.pushBackTimeStep(f)
487         ##### Time step 4
488         i=4
489         f=MEDFileField1TS()
490         fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
491         fCell0.setName(fieldName) ; fCell0.setMesh(m)
492         arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
493         fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
494         fCell0.checkCoherency()
495         f.setFieldNoProfileSBT(fCell0)
496         #
497         fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
498         fCell1.setName(fieldName) ; fCell1.setMesh(m1)
499         arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
500         fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
501         fCell1.checkCoherency()
502         f.setFieldNoProfileSBT(fCell1)
503         #
504         fs.pushBackTimeStep(f)
505         mm.write(fname,2)
506         fs.write(fname,0)
507         a0Exp=mm.getCoords().deepCpy()
508         del m,m1,mm,fs,f,fCell0,fCell1
509         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
510         ms=MEDFileMeshes(fname)
511         fields=MEDFileFields(fname,False)
512         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
513         allFMTSLeavesToDisplay=[]
514         for fields in fields_per_mesh:
515             allFMTSLeavesToDisplay2=[]
516             for fmts in fields:
517                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
518                 pass
519             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
520             pass
521         self.assertEqual(len(allFMTSLeavesToDisplay),1)
522         self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
523         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
524         self.assertEqual(len(allFMTSLeavesPerTimeSeries),2) # two time series here : one for the cells, the second one for the nodes
525         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
526         self.assertEqual(len(allFMTSLeavesPerTimeSeries[1]),1)
527         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
528         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
529         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
530         #
531         mst=MEDFileMeshStruct.New(ms[0])
532         fcscp=allFMTSLeavesPerCommonSupport[0][1] # start with the cells
533         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
534         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
535         for i in xrange(1,3):
536             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
537             pass
538         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
539         self.assertTrue(a0.isEqual(a0Exp,1e-12))
540         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])))
541         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
542         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])))
543         assert a4 is None
544         assert a5 is None
545         # for cells
546         for i in xrange(3):
547             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
548             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
549             f.loadArraysIfNecessary()
550             self.assertEqual(f.getName(),"zeField")
551             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
552             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
553             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
554             self.assertTrue(v.isEqual(vExp,1e-12))
555             pass
556         # for nodes
557         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[1],ms[ms.getMeshesNames()[0]])
558         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
559         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
560         fcscp=allFMTSLeavesPerCommonSupport[0][1]
561         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
562         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
563         for i in xrange(1,2):
564             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
565             pass
566         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
567         self.assertTrue(a0.isEqual(a0Exp,1e-12))
568         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
569         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
570         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])))
571         self.assertTrue(a4 is None)
572         self.assertTrue(a5 is None)
573         for i in xrange(2):
574             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
575             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
576             f.loadArraysIfNecessary()
577             self.assertEqual(f.getName(),"zeField")
578             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
579             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
580             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
581             self.assertTrue(v.isEqual(vExp,1e-12))
582             pass
583         pass
584
585     def test4(self):
586         """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
587         """
588         fname="ForMEDReader4.med"
589         # building a mesh containing 4 tri3 + 5 quad4
590         tri=MEDCouplingUMesh("tri",2)
591         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
592         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
593         tris=[tri.deepCpy() for i in xrange(4)]
594         for i,elt in enumerate(tris): elt.translate([i,0])
595         tris=MEDCouplingUMesh.MergeUMeshes(tris)
596         quad=MEDCouplingUMesh("quad",2)
597         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
598         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
599         quads=[quad.deepCpy() for i in xrange(5)]
600         for i,elt in enumerate(quads): elt.translate([5+i,0])
601         quads=MEDCouplingUMesh.MergeUMeshes(quads)
602         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
603         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
604         mm=MEDFileUMesh() ; mm.setMeshes([m])
605         #
606         fieldName1="zeField1"
607         fieldName2="zeField2"
608         fieldName3="zeField3"
609         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
610         ##### Time step 0
611         i=0
612         f=MEDFileField1TS()
613         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
614         fNode.setName(fieldName1) ; fNode.setMesh(m)
615         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
616         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
617         fNode.checkCoherency()
618         f.setFieldNoProfileSBT(fNode)
619         fs1.pushBackTimeStep(f)
620         #
621         f=MEDFileField1TS()
622         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
623         fNode.setName(fieldName2) ; fNode.setMesh(m)
624         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
625         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
626         fNode.checkCoherency()
627         f.setFieldNoProfileSBT(fNode)
628         fs2.pushBackTimeStep(f)
629         #
630         f=MEDFileField1TS()
631         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
632         fNode.setName(fieldName3) ; fNode.setMesh(m)
633         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
634         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
635         fNode.checkCoherency()
636         f.setFieldNoProfileSBT(fNode)
637         fs3.pushBackTimeStep(f)
638         ##### Time step 1
639         i=1
640         f=MEDFileField1TS()
641         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
642         fNode.setName(fieldName1) ; fNode.setMesh(m)
643         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
644         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
645         fNode.checkCoherency()
646         f.setFieldNoProfileSBT(fNode)
647         fs1.pushBackTimeStep(f)
648         #
649         f=MEDFileField1TS()
650         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
651         fNode.setName(fieldName2) ; fNode.setMesh(m)
652         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
653         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
654         fNode.checkCoherency()
655         f.setFieldNoProfileSBT(fNode)
656         fs2.pushBackTimeStep(f)
657         #
658         f=MEDFileField1TS()
659         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
660         fNode.setName(fieldName3) ; fNode.setMesh(m)
661         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
662         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
663         fNode.checkCoherency()
664         f.setFieldNoProfileSBT(fNode)
665         fs3.pushBackTimeStep(f)
666         ##### Time step 2
667         i=2
668         f=MEDFileField1TS()
669         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
670         fNode.setName(fieldName1) ; fNode.setMesh(m)
671         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
672         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
673         fNode.checkCoherency()
674         f.setFieldNoProfileSBT(fNode)
675         fs1.pushBackTimeStep(f)
676         #
677         f=MEDFileField1TS()
678         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
679         fNode.setName(fieldName2) ; fNode.setMesh(m)
680         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
681         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
682         fNode.checkCoherency()
683         f.setFieldNoProfileSBT(fNode)
684         fs2.pushBackTimeStep(f)
685         #
686         f=MEDFileField1TS()
687         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
688         fNode.setName(fieldName3) ; fNode.setMesh(m)
689         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
690         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
691         fNode.checkCoherency()
692         f.setFieldNoProfileSBT(fNode)
693         fs3.pushBackTimeStep(f)
694         ##### Time step 3
695         i=3
696         f=MEDFileField1TS()
697         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
698         fNode.setName(fieldName1) ; fNode.setMesh(m)
699         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
700         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
701         fNode.checkCoherency()
702         f.setFieldNoProfileSBT(fNode)
703         fs1.pushBackTimeStep(f)
704         #
705         f=MEDFileField1TS()
706         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
707         fNode.setName(fieldName2) ; fNode.setMesh(m)
708         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
709         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
710         fNode.checkCoherency()
711         f.setFieldNoProfileSBT(fNode)
712         fs2.pushBackTimeStep(f)
713         #
714         f=MEDFileField1TS()
715         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
716         fNode.setName(fieldName3) ; fNode.setMesh(m)
717         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
718         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
719         fNode.checkCoherency()
720         f.setFieldNoProfileSBT(fNode)
721         fs3.pushBackTimeStep(f)
722         ##### Time step 4
723         i=4
724         f=MEDFileField1TS()
725         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
726         fNode.setName(fieldName1) ; fNode.setMesh(m)
727         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
728         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
729         fNode.checkCoherency()
730         f.setFieldNoProfileSBT(fNode)
731         fs1.pushBackTimeStep(f)
732         #
733         f=MEDFileField1TS()
734         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
735         fNode.setName(fieldName2) ; fNode.setMesh(m)
736         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
737         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
738         fNode.checkCoherency()
739         f.setFieldNoProfileSBT(fNode)
740         fs2.pushBackTimeStep(f)
741         #
742         f=MEDFileField1TS()
743         fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
744         fNode.setName(fieldName3) ; fNode.setMesh(m)
745         arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
746         fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
747         fNode.checkCoherency()
748         f.setFieldNoProfileSBT(fNode)
749         fs3.pushBackTimeStep(f)
750         #
751         mm.write(fname,2)
752         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
753         a0Exp=mm.getCoords().deepCpy()
754         del m,mm,fs1,fs2,fs3,f,fNode
755         ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
756         ms=MEDFileMeshes(fname)
757         fields=MEDFileFields(fname,False)
758         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
759         allFMTSLeavesToDisplay=[]
760         for fields in fields_per_mesh:
761             allFMTSLeavesToDisplay2=[]
762             for fmts in fields:
763                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
764                 pass
765             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
766             pass
767         self.assertEqual(len(allFMTSLeavesToDisplay),1)
768         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
769         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
770         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
771         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
772         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
773         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
774         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
775         #
776         mst=MEDFileMeshStruct.New(ms[0])
777         fcscp=allFMTSLeavesPerCommonSupport[0][1]
778         self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
779         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
780         fcscp=allFMTSLeavesPerCommonSupport[0][1]
781         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
782         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
783         for i in xrange(1,5):
784             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
785             pass
786         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
787         self.assertTrue(a0.isEqual(a0Exp,1e-12))
788         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
789         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
790         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])))
791         self.assertTrue(a4 is None)
792         self.assertTrue(a5 is None)
793         # test all the time steps of the 1/1 time step serie, on field 1
794         for i in xrange(5):
795             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
796             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
797             f.loadArraysIfNecessary()
798             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
799             self.assertEqual(f.getName(),fieldName1)
800             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
801             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
802             self.assertTrue(v.isEqual(vExp,1e-12))
803             pass
804         # test all the time steps of the 1/1 time step serie, on field 2
805         for i in xrange(5):
806             f=allFMTSLeavesPerCommonSupport[0][0][1][i]
807             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
808             f.loadArraysIfNecessary()
809             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
810             self.assertEqual(f.getName(),fieldName2)
811             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
812             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
813             self.assertTrue(v.isEqual(vExp,1e-12))
814             pass
815         # test all the time steps of the 1/1 time step serie, on field 3
816         for i in xrange(5):
817             f=allFMTSLeavesPerCommonSupport[0][0][2][i]
818             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
819             f.loadArraysIfNecessary()
820             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
821             self.assertEqual(f.getName(),fieldName3)
822             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
823             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
824             self.assertTrue(v.isEqual(vExp,1e-12))
825             pass
826         pass
827     
828     def test5(self):
829         fname="ForMEDReader5.med"
830         # building a mesh containing 6 tri3 + 5 quad4
831         m=MEDCouplingUMesh("mesh",2)
832         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]"])
833         m.setCoords(coords)
834         m.allocateCells()
835         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])
836         m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
837         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])
838         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
839         mm=MEDFileUMesh() ; mm.setMeshes([m])
840         #
841         fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
842         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
843         fieldName3="zeField3" ; pfl3=DataArrayInt([0,1,2,3,4,5,9,10]) ; pfl3.setName("pfl3") # on cells but different support
844         fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
845         #
846         for i in xrange(5):
847             f=MEDFileField1TS()
848             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
849             fNode.setName(fieldName1)
850             arr=DataArrayDouble(2*6) ; arr.iota(0+1000*i) ; arr.rearrange(2)
851             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
852             f.setFieldProfile(fNode,mm,0,pfl1)
853             fs1.pushBackTimeStep(f)
854             #
855             f=MEDFileField1TS()
856             fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
857             fNode.setName(fieldName2)
858             arr=DataArrayDouble(2*8) ; arr.iota(100+1000*i) ; arr.rearrange(2)
859             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
860             f.setFieldProfile(fNode,mm,0,pfl2)
861             fs2.pushBackTimeStep(f)
862             #
863             f=MEDFileField1TS()
864             fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
865             fNode.setName(fieldName3)
866             arr=DataArrayDouble(2*8) ; arr.iota(200+1000*i) ; arr.rearrange(2)
867             fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
868             f.setFieldProfile(fNode,mm,0,pfl3)
869             fs3.pushBackTimeStep(f)
870             pass
871         mm.write(fname,2)
872         fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
873         a0Exp=mm.getCoords().deepCpy()
874         del m,mm,fs1,fs2,fs3,f,fNode
875         ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
876         ms=MEDFileMeshes(fname)
877         fields=MEDFileFields(fname,False)
878         fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
879         allFMTSLeavesToDisplay=[]
880         for fields in fields_per_mesh:
881             allFMTSLeavesToDisplay2=[]
882             for fmts in fields:
883                 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
884                 pass
885             allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
886             pass
887         self.assertEqual(len(allFMTSLeavesToDisplay),1)
888         self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
889         allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
890         self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
891         self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
892         allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
893         ms[0].getDirectUndergroundSingleGeoTypeMeshes(0)
894         self.assertEqual(len(allFMTSLeavesPerCommonSupport),2) # 2 support here
895         self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
896         self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
897         #
898         mst=MEDFileMeshStruct.New(ms[0])
899         fcscp=allFMTSLeavesPerCommonSupport[0][1]
900         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
901         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
902         for i in xrange(1,5):
903             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
904             pass
905         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
906         self.assertTrue(a0.isEqual(a0Exp[pfl2],1e-12))
907         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
908         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18])))
909         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])))
910         assert a4 is None
911         assert a5 is None
912         for i in xrange(5):
913             nbOfT=[6,8]
914             fieldNames=[fieldName1,fieldName2]
915             for j in xrange(2):
916                 m={"i":j}
917                 f=allFMTSLeavesPerCommonSupport[0][0][j][i]
918                 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
919                 f.loadArraysIfNecessary()
920                 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
921                 self.assertEqual(f.getName(),fieldNames[j])
922                 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
923                 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])
924                 self.assertTrue(v.isEqual(vExp,1e-12))
925                 pass
926             pass
927         # Let's go for the 2nd support
928         fcscp=allFMTSLeavesPerCommonSupport[1][1]
929         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
930         self.assertTrue(isinstance(mml,MEDUMeshMultiLev))
931         for i in xrange(1,5):
932             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
933             pass
934         a0,a1,a2,a3,a4,a5=mml.buildVTUArrays()
935         self.assertTrue(a0.isEqual(a0Exp,1e-12))
936         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
937         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26])))
938         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])))
939         self.assertTrue(a4 is None)
940         self.assertTrue(a5 is None)
941         for i in xrange(5):
942             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
943             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
944             f.loadArraysIfNecessary()
945             v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
946             self.assertEqual(f.getName(),"zeField3")
947             self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
948             vExp=DataArrayDouble(8*2) ; vExp.iota(200+1000*i) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]'%m,'Com2_2 [s^2]'%m])
949             self.assertTrue(v.isEqual(vExp,1e-12))
950             pass
951         pass
952
953     pass
954
955 unittest.main()