1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 CEA/DEN, EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author : Anthony Geay (CEA/DEN)
22 from MEDLoader import *
24 from math import pi,e,sqrt
26 class MEDLoaderTest4(unittest.TestCase):
28 Test series to emulate the future MEDReader plugin for PARAVIS.
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.
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])
55 fs=MEDFileFieldMultiTS()
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)
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)
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)
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)
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)
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)
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)
124 fs.pushBackTimeStep(f)
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)
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)
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=[]
156 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
158 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
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
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]])
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))
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)
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)
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))
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.
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])
222 fs=MEDFileFieldMultiTS()
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
319 fs.pushBackTimeStep(f)
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)
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)
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)
345 fs.pushBackTimeStep(f)
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=[]
358 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
360 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
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
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]),2)
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))
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)
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))
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))
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.
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])
433 fs=MEDFileFieldMultiTS()
434 ##### Time step 0 on cells
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
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
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)
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
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)
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)
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)
504 fs.pushBackTimeStep(f)
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=[]
517 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
519 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
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)
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))
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])))
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))
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))
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)
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))
586 """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
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])
606 fieldName1="zeField1"
607 fieldName2="zeField2"
608 fieldName3="zeField3"
609 fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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=[]
763 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
765 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
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)
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))
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
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))
804 # test all the time steps of the 1/1 time step serie, on field 2
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))
815 # test all the time steps of the 1/1 time step serie, on field 3
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))