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)
174 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
175 for i in xrange(1,5):
176 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
178 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
179 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
180 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
181 self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
182 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
183 self.assertTrue(a4 is None)
184 self.assertTrue(a5 is None)
186 fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
187 fields[0][i].loadArraysIfNecessary()
188 tmpMem=fields.getHeapMemorySize()
189 self.assertTrue(tmpMem-refMem>=41*2*8)
191 v=mml.buildDataArray(fsst,fields,fields[0][i].getUndergroundDataArray())
192 self.assertEqual(v.getHiddenCppPointer(),fields[0][i].getUndergroundDataArray().getHiddenCppPointer())
193 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
194 self.assertTrue(v.isEqual(vExp,1e-12))
200 One time serie of one field with cell and node discretization in the same field with no profiles.
201 Here as there is no profile only one VTK support is requested.
203 fname="ForMEDReader2.med"
204 # building a mesh containing 4 tri3 + 5 quad4
205 tri=MEDCouplingUMesh("tri",2)
206 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
207 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
208 tris=[tri.deepCpy() for i in xrange(4)]
209 for i,elt in enumerate(tris): elt.translate([i,0])
210 tris=MEDCouplingUMesh.MergeUMeshes(tris)
211 quad=MEDCouplingUMesh("quad",2)
212 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
213 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
214 quads=[quad.deepCpy() for i in xrange(5)]
215 for i,elt in enumerate(quads): elt.translate([5+i,0])
216 quads=MEDCouplingUMesh.MergeUMeshes(quads)
217 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
218 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
219 m1=m.buildDescendingConnectivity()[0]
220 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
223 fs=MEDFileFieldMultiTS()
227 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
228 fCell0.setName(fieldName) ; fCell0.setMesh(m)
229 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
230 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
231 fCell0.checkCoherency()
232 f.setFieldNoProfileSBT(fCell0)
233 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
234 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
235 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
236 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
237 fCell1.checkCoherency()
238 f.setFieldNoProfileSBT(fCell1)
240 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
241 fNode.setName(fieldName) ; fNode.setMesh(m1)
242 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(300) ; arr.rearrange(2)
243 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
244 fNode.checkCoherency()
245 f.setFieldNoProfileSBT(fNode)
246 fs.pushBackTimeStep(f)
250 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
251 fCell0.setName(fieldName) ; fCell0.setMesh(m)
252 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(1100) ; arr.rearrange(2)
253 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
254 fCell0.checkCoherency()
255 f.setFieldNoProfileSBT(fCell0)
257 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
258 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
259 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(1200) ; arr.rearrange(2)
260 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
261 fCell1.checkCoherency()
262 f.setFieldNoProfileSBT(fCell1)
264 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
265 fNode.setName(fieldName) ; fNode.setMesh(m1)
266 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
267 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
268 fNode.checkCoherency()
269 f.setFieldNoProfileSBT(fNode)
270 fs.pushBackTimeStep(f)
274 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
275 fNode.setName(fieldName) ; fNode.setMesh(m1)
276 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(2300) ; arr.rearrange(2)
277 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
278 fNode.checkCoherency()
279 f.setFieldNoProfileSBT(fNode)
281 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
282 fCell0.setName(fieldName) ; fCell0.setMesh(m)
283 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
284 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
285 fCell0.checkCoherency()
286 f.setFieldNoProfileSBT(fCell0)
288 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
289 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
290 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
291 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
292 fCell1.checkCoherency()
293 f.setFieldNoProfileSBT(fCell1)
294 fs.pushBackTimeStep(f)
299 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
300 fCell0.setName(fieldName) ; fCell0.setMesh(m)
301 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(3100) ; arr.rearrange(2)
302 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
303 fCell0.checkCoherency()
304 f.setFieldNoProfileSBT(fCell0)
306 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
307 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
308 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(3200) ; arr.rearrange(2)
309 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
310 fCell1.checkCoherency()
311 f.setFieldNoProfileSBT(fCell1)
313 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
314 fNode.setName(fieldName) ; fNode.setMesh(m1)
315 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
316 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
317 fNode.checkCoherency()
318 f.setFieldNoProfileSBT(fNode)
320 fs.pushBackTimeStep(f)
325 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
326 fCell0.setName(fieldName) ; fCell0.setMesh(m)
327 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
328 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
329 fCell0.checkCoherency()
330 f.setFieldNoProfileSBT(fCell0)
332 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
333 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
334 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
335 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
336 fCell1.checkCoherency()
337 f.setFieldNoProfileSBT(fCell1)
339 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
340 fNode.setName(fieldName) ; fNode.setMesh(m1)
341 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(4300) ; arr.rearrange(2)
342 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
343 fNode.checkCoherency()
344 f.setFieldNoProfileSBT(fNode)
346 fs.pushBackTimeStep(f)
349 a0Exp=mm.getCoords().deepCpy()
350 del m,m1,mm,fs,f,fCell0,fCell1
351 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
352 ms=MEDFileMeshes(fname)
353 fields=MEDFileFields(fname,False)
354 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
355 allFMTSLeavesToDisplay=[]
356 for fields in fields_per_mesh:
357 allFMTSLeavesToDisplay2=[]
359 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
361 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
363 self.assertEqual(len(allFMTSLeavesToDisplay),1)
364 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
365 for fmts in allFMTSLeavesToDisplay[0]:
366 self.assertEqual(fmts.getTimeSteps(),[(0,0,0.),(1,0,1.),(2,0,2.),(3,0,3.),(4,0,4.)]) # All discretizations have the same time series
368 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
369 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1)
370 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
371 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
372 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
373 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
375 mst=MEDFileMeshStruct.New(ms[0])
376 fcscp=allFMTSLeavesPerCommonSupport[0][1]
377 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
379 assert isinstance(mml2,MEDUMeshMultiLev)
380 for i in xrange(1,5):
381 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
383 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
384 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
385 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
386 self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
387 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
388 self.assertTrue(a4 is None)
389 self.assertTrue(a5 is None)
392 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
393 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
394 f.loadArraysIfNecessary()
395 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
396 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
397 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
398 self.assertTrue(v.isEqual(vExp,1e-12))
401 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
402 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
403 f.loadArraysIfNecessary()
404 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
405 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
406 vExp=DataArrayDouble([300.,301.,302.,303.,304.,305.,306.,307.,308.,309.,310.,311.,312.,313.,314.,315.,316.,317.,318.,319.,320.,321.,322.,323.,324.,325.,326.,327.,328.,329.,330.,331.,332.,333.,334.,335.,336.,337.,338.,339.,340.,341.,342.,343.,344.,345.,346.,347.,348.,349.,350.,351.,352.,353.,354.,355.,356.,357.,358.,359.,360.,361.,362.,363.],32,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*1000
407 self.assertTrue(v.isEqual(vExp,1e-12))
412 """ This test is more advanced a same field is defined on CELLS for time steps 0, 2 and 4, and on NODES for time steps 1 and 3.
413 So two time step series on the same field. No profile here neither on cells nor on nodes.
415 fname="ForMEDReader3.med"
416 # building a mesh containing 4 tri3 + 5 quad4
417 tri=MEDCouplingUMesh("tri",2)
418 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
419 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
420 tris=[tri.deepCpy() for i in xrange(4)]
421 for i,elt in enumerate(tris): elt.translate([i,0])
422 tris=MEDCouplingUMesh.MergeUMeshes(tris)
423 quad=MEDCouplingUMesh("quad",2)
424 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
425 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
426 quads=[quad.deepCpy() for i in xrange(5)]
427 for i,elt in enumerate(quads): elt.translate([5+i,0])
428 quads=MEDCouplingUMesh.MergeUMeshes(quads)
429 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
430 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
431 m1=m.buildDescendingConnectivity()[0]
432 mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
435 fs=MEDFileFieldMultiTS()
436 ##### Time step 0 on cells
439 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
440 fCell0.setName(fieldName) ; fCell0.setMesh(m)
441 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(100) ; arr.rearrange(2)
442 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
443 fCell0.checkCoherency()
444 f.setFieldNoProfileSBT(fCell0)
445 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
446 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
447 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(200) ; arr.rearrange(2)
448 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
449 fCell1.checkCoherency()
450 f.setFieldNoProfileSBT(fCell1)
451 fs.pushBackTimeStep(f)
452 ##### Time step 1 on nodes
455 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
456 fNode.setName(fieldName) ; fNode.setMesh(m1)
457 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(1300) ; arr.rearrange(2)
458 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
459 fNode.checkCoherency()
460 f.setFieldNoProfileSBT(fNode)
461 fs.pushBackTimeStep(f)
462 ##### Time step 2 on cells
465 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
466 fCell0.setName(fieldName) ; fCell0.setMesh(m)
467 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(2100) ; arr.rearrange(2)
468 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
469 fCell0.checkCoherency()
470 f.setFieldNoProfileSBT(fCell0)
472 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
473 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
474 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(2200) ; arr.rearrange(2)
475 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
476 fCell1.checkCoherency()
477 f.setFieldNoProfileSBT(fCell1)
478 fs.pushBackTimeStep(f)
479 ##### Time step 3 on nodes
482 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
483 fNode.setName(fieldName) ; fNode.setMesh(m1)
484 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(3300) ; arr.rearrange(2)
485 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
486 fNode.checkCoherency()
487 f.setFieldNoProfileSBT(fNode)
488 fs.pushBackTimeStep(f)
492 fCell0=MEDCouplingFieldDouble(ON_CELLS) ; fCell0.setTime(float(i),i,0)
493 fCell0.setName(fieldName) ; fCell0.setMesh(m)
494 arr=DataArrayDouble(2*m.getNumberOfCells()) ; arr.iota(4100) ; arr.rearrange(2)
495 fCell0.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
496 fCell0.checkCoherency()
497 f.setFieldNoProfileSBT(fCell0)
499 fCell1=MEDCouplingFieldDouble(ON_CELLS) ; fCell1.setTime(float(i),i,0)
500 fCell1.setName(fieldName) ; fCell1.setMesh(m1)
501 arr=DataArrayDouble(2*m1.getNumberOfCells()) ; arr.iota(4200) ; arr.rearrange(2)
502 fCell1.setArray(arr) ; arr.setInfoOnComponents(["Comp1 [m]","Com2 [s^2]"])
503 fCell1.checkCoherency()
504 f.setFieldNoProfileSBT(fCell1)
506 fs.pushBackTimeStep(f)
509 a0Exp=mm.getCoords().deepCpy()
510 del m,m1,mm,fs,f,fCell0,fCell1
511 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
512 ms=MEDFileMeshes(fname)
513 fields=MEDFileFields(fname,False)
514 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
515 allFMTSLeavesToDisplay=[]
516 for fields in fields_per_mesh:
517 allFMTSLeavesToDisplay2=[]
519 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
521 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
523 self.assertEqual(len(allFMTSLeavesToDisplay),1)
524 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
525 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
526 self.assertEqual(len(allFMTSLeavesPerTimeSeries),2) # two time series here : one for the cells, the second one for the nodes
527 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
528 self.assertEqual(len(allFMTSLeavesPerTimeSeries[1]),1)
529 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
530 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
531 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
533 mst=MEDFileMeshStruct.New(ms[0])
534 fcscp=allFMTSLeavesPerCommonSupport[0][1] # start with the cells
535 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
537 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
538 for i in xrange(1,3):
539 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
541 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
542 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
543 self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
544 self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
545 self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
550 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
551 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
552 f.loadArraysIfNecessary()
553 self.assertEqual(f.getName(),"zeField")
554 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
555 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
556 vExp=DataArrayDouble([200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,250.,251.,252.,253.,254.,255.,256.,257.,258.,259.,260.,261.,262.,263.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,116.,117.],41,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*2000
557 self.assertTrue(v.isEqual(vExp,1e-12))
560 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[1],ms[ms.getMeshesNames()[0]])
561 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
562 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
563 fcscp=allFMTSLeavesPerCommonSupport[0][1]
564 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
566 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
567 for i in xrange(1,2):
568 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
570 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
571 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
572 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
573 self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
574 self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
575 self.assertTrue(a4 is None)
576 self.assertTrue(a5 is None)
578 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
579 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)# Second 0 is for cells
580 f.loadArraysIfNecessary()
581 self.assertEqual(f.getName(),"zeField")
582 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
583 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
584 vExp=DataArrayDouble([300.,301.,302.,303.,304.,305.,306.,307.,308.,309.,310.,311.,312.,313.,314.,315.,316.,317.,318.,319.,320.,321.,322.,323.,324.,325.,326.,327.,328.,329.,330.,331.,332.,333.,334.,335.,336.,337.,338.,339.,340.,341.,342.,343.,344.,345.,346.,347.,348.,349.,350.,351.,352.,353.,354.,355.,356.,357.,358.,359.,360.,361.,362.,363.],32,2) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp.setInfoOnComponents(['Comp1 [m]','Com2 [s^2]']) ; vExp+=i*2000+1000
585 self.assertTrue(v.isEqual(vExp,1e-12))
590 """ This test defines 3 fields on nodes on the same mesh. All of these fields have no profile.
592 fname="ForMEDReader4.med"
593 # building a mesh containing 4 tri3 + 5 quad4
594 tri=MEDCouplingUMesh("tri",2)
595 tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
596 tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
597 tris=[tri.deepCpy() for i in xrange(4)]
598 for i,elt in enumerate(tris): elt.translate([i,0])
599 tris=MEDCouplingUMesh.MergeUMeshes(tris)
600 quad=MEDCouplingUMesh("quad",2)
601 quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
602 quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
603 quads=[quad.deepCpy() for i in xrange(5)]
604 for i,elt in enumerate(quads): elt.translate([5+i,0])
605 quads=MEDCouplingUMesh.MergeUMeshes(quads)
606 m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
607 m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
608 mm=MEDFileUMesh() ; mm.setMeshes([m])
610 fieldName1="zeField1"
611 fieldName2="zeField2"
612 fieldName3="zeField3"
613 fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
617 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
618 fNode.setName(fieldName1) ; fNode.setMesh(m)
619 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
620 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
621 fNode.checkCoherency()
622 f.setFieldNoProfileSBT(fNode)
623 fs1.pushBackTimeStep(f)
626 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
627 fNode.setName(fieldName2) ; fNode.setMesh(m)
628 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
629 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
630 fNode.checkCoherency()
631 f.setFieldNoProfileSBT(fNode)
632 fs2.pushBackTimeStep(f)
635 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
636 fNode.setName(fieldName3) ; fNode.setMesh(m)
637 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
638 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
639 fNode.checkCoherency()
640 f.setFieldNoProfileSBT(fNode)
641 fs3.pushBackTimeStep(f)
645 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
646 fNode.setName(fieldName1) ; fNode.setMesh(m)
647 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
648 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
649 fNode.checkCoherency()
650 f.setFieldNoProfileSBT(fNode)
651 fs1.pushBackTimeStep(f)
654 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
655 fNode.setName(fieldName2) ; fNode.setMesh(m)
656 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
657 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
658 fNode.checkCoherency()
659 f.setFieldNoProfileSBT(fNode)
660 fs2.pushBackTimeStep(f)
663 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
664 fNode.setName(fieldName3) ; fNode.setMesh(m)
665 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
666 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
667 fNode.checkCoherency()
668 f.setFieldNoProfileSBT(fNode)
669 fs3.pushBackTimeStep(f)
673 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
674 fNode.setName(fieldName1) ; fNode.setMesh(m)
675 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
676 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
677 fNode.checkCoherency()
678 f.setFieldNoProfileSBT(fNode)
679 fs1.pushBackTimeStep(f)
682 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
683 fNode.setName(fieldName2) ; fNode.setMesh(m)
684 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
685 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
686 fNode.checkCoherency()
687 f.setFieldNoProfileSBT(fNode)
688 fs2.pushBackTimeStep(f)
691 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
692 fNode.setName(fieldName3) ; fNode.setMesh(m)
693 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
694 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
695 fNode.checkCoherency()
696 f.setFieldNoProfileSBT(fNode)
697 fs3.pushBackTimeStep(f)
701 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
702 fNode.setName(fieldName1) ; fNode.setMesh(m)
703 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
704 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
705 fNode.checkCoherency()
706 f.setFieldNoProfileSBT(fNode)
707 fs1.pushBackTimeStep(f)
710 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
711 fNode.setName(fieldName2) ; fNode.setMesh(m)
712 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
713 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
714 fNode.checkCoherency()
715 f.setFieldNoProfileSBT(fNode)
716 fs2.pushBackTimeStep(f)
719 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
720 fNode.setName(fieldName3) ; fNode.setMesh(m)
721 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
722 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
723 fNode.checkCoherency()
724 f.setFieldNoProfileSBT(fNode)
725 fs3.pushBackTimeStep(f)
729 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
730 fNode.setName(fieldName1) ; fNode.setMesh(m)
731 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(0+1000*i) ; arr.rearrange(2)
732 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
733 fNode.checkCoherency()
734 f.setFieldNoProfileSBT(fNode)
735 fs1.pushBackTimeStep(f)
738 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
739 fNode.setName(fieldName2) ; fNode.setMesh(m)
740 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(100+1000*i) ; arr.rearrange(2)
741 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
742 fNode.checkCoherency()
743 f.setFieldNoProfileSBT(fNode)
744 fs2.pushBackTimeStep(f)
747 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
748 fNode.setName(fieldName3) ; fNode.setMesh(m)
749 arr=DataArrayDouble(2*m.getNumberOfNodes()) ; arr.iota(200+1000*i) ; arr.rearrange(2)
750 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
751 fNode.checkCoherency()
752 f.setFieldNoProfileSBT(fNode)
753 fs3.pushBackTimeStep(f)
756 fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
757 a0Exp=mm.getCoords().deepCpy()
758 del m,mm,fs1,fs2,fs3,f,fNode
759 ########## GO for reading in MEDReader, by not loading all. Mesh is fully loaded but not fields values
760 ms=MEDFileMeshes(fname)
761 fields=MEDFileFields(fname,False)
762 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
763 allFMTSLeavesToDisplay=[]
764 for fields in fields_per_mesh:
765 allFMTSLeavesToDisplay2=[]
767 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
769 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
771 self.assertEqual(len(allFMTSLeavesToDisplay),1)
772 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
773 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
774 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
775 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
776 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
777 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
778 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
780 mst=MEDFileMeshStruct.New(ms[0])
781 fcscp=allFMTSLeavesPerCommonSupport[0][1]
782 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
783 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
784 fcscp=allFMTSLeavesPerCommonSupport[0][1]
785 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
787 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
788 for i in xrange(1,5):
789 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
791 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
792 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
793 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
794 self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
795 self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
796 self.assertTrue(a4 is None)
797 self.assertTrue(a5 is None)
798 # test all the time steps of the 1/1 time step serie, on field 1
800 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
801 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
802 f.loadArraysIfNecessary()
803 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
804 self.assertEqual(f.getName(),fieldName1)
805 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
806 vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]']) ; vExp+=i*1000
807 self.assertTrue(v.isEqual(vExp,1e-12))
809 # test all the time steps of the 1/1 time step serie, on field 2
811 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
812 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
813 f.loadArraysIfNecessary()
814 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
815 self.assertEqual(f.getName(),fieldName2)
816 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
817 vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]']) ; vExp+=i*1000+100
818 self.assertTrue(v.isEqual(vExp,1e-12))
820 # test all the time steps of the 1/1 time step serie, on field 3
822 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
823 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
824 f.loadArraysIfNecessary()
825 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
826 self.assertEqual(f.getName(),fieldName3)
827 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
828 vExp=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.],32,2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]']) ; vExp+=i*1000+200
829 self.assertTrue(v.isEqual(vExp,1e-12))
834 """ This test plays with profiles both cell profiles and node profiles. Two first fields (resp on cells and on nodes) lie on the same mesh support whereas the third
835 mesh lies on a different mesh.
837 fname="ForMEDReader5.med"
838 # building a mesh containing 6 tri3 + 5 quad4
839 m=MEDCouplingUMesh("mesh",2)
840 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
843 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
844 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
845 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
846 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
847 mm=MEDFileUMesh() ; mm.setMeshes([m])
849 fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
850 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
851 fieldName3="zeField3" ; pfl3=DataArrayInt([0,1,2,3,4,5,9,10]) ; pfl3.setName("pfl3") # on cells but different support
852 fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
856 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
857 fNode.setName(fieldName1)
858 arr=DataArrayDouble(2*6) ; arr.iota(0+1000*i) ; arr.rearrange(2)
859 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
860 f.setFieldProfile(fNode,mm,0,pfl1)
861 fs1.pushBackTimeStep(f)
864 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
865 fNode.setName(fieldName2)
866 arr=DataArrayDouble(2*8) ; arr.iota(100+1000*i) ; arr.rearrange(2)
867 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
868 f.setFieldProfile(fNode,mm,0,pfl2)
869 fs2.pushBackTimeStep(f)
872 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
873 fNode.setName(fieldName3)
874 arr=DataArrayDouble(2*8) ; arr.iota(200+1000*i) ; arr.rearrange(2)
875 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
876 f.setFieldProfile(fNode,mm,0,pfl3)
877 fs3.pushBackTimeStep(f)
880 fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
881 a0Exp=mm.getCoords().deepCpy()
882 del m,mm,fs1,fs2,fs3,f,fNode
883 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
884 ms=MEDFileMeshes(fname)
885 fields=MEDFileFields(fname,False)
886 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
887 allFMTSLeavesToDisplay=[]
888 for fields in fields_per_mesh:
889 allFMTSLeavesToDisplay2=[]
891 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
893 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
895 self.assertEqual(len(allFMTSLeavesToDisplay),1)
896 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
897 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
898 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 3 fields are defined on the same time steps
899 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
900 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
901 ms[0].getDirectUndergroundSingleGeoTypeMeshes(0)
902 self.assertEqual(len(allFMTSLeavesPerCommonSupport),2) # 2 support here
903 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
904 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
906 mst=MEDFileMeshStruct.New(ms[0])
907 fcscp=allFMTSLeavesPerCommonSupport[0][1]
908 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
910 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
911 for i in xrange(1,5):
912 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
914 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
915 self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
916 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
917 self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18])))
918 self.assertTrue(a3.isEqual(DataArrayInt([3,0,3,1,3,3,4,1,3,1,4,2,3,4,5,2,3,6,5,4,3,6,7,5])))
923 fieldNames=[fieldName1,fieldName2]
926 f=allFMTSLeavesPerCommonSupport[0][0][j][i]
927 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
928 f.loadArraysIfNecessary()
929 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
930 self.assertEqual(f.getName(),fieldNames[j])
931 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
932 vExp=DataArrayDouble(nbOfT[j]*2) ; vExp.iota(j*100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_%(i)i [m]'%m,'Com2_%(i)i [s^2]'%m])
933 self.assertTrue(v.isEqual(vExp,1e-12))
936 # Let's go for the 2nd support
937 fcscp=allFMTSLeavesPerCommonSupport[1][1]
938 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
940 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
941 for i in xrange(1,5):
942 self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
944 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
945 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
946 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
947 self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26])))
948 self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,6,11,12,7,4,12,13,8,7])))
949 self.assertTrue(a4 is None)
950 self.assertTrue(a5 is None)
952 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
953 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
954 f.loadArraysIfNecessary()
955 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
956 self.assertEqual(f.getName(),"zeField3")
957 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
958 vExp=DataArrayDouble(8*2) ; vExp.iota(200+1000*i) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]'%m,'Com2_2 [s^2]'%m])
959 self.assertTrue(v.isEqual(vExp,1e-12))
964 """ This test plays with cartesian mesh and profiles. When a sub cartesian mesh can also be considered as a cartesian mesh it is done.
966 fname="ForMEDReader6.med"
967 m=MEDCouplingCMesh("mesh")
968 coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
969 coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
970 m.setCoords(coordsX,coordsY)
971 mm=MEDFileCMesh() ; mm.setMesh(m)
973 fieldName0="zeField0" ; # on cells
974 fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
975 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
976 fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
977 fieldName4="zeField4" ;# on nodes
978 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
982 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
983 fNode.setName(fieldName0) ; fNode.setMesh(m)
984 arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
985 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
986 f.setFieldNoProfileSBT(fNode)
987 fs0.pushBackTimeStep(f)
990 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
991 fNode.setName(fieldName1)
992 arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
993 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
994 f.setFieldProfile(fNode,mm,0,pfl1)
995 self.assertEqual(pfl1.getName(),"pfl1")
996 fs1.pushBackTimeStep(f)
999 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1000 fNode.setName(fieldName2)
1001 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1002 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1003 f.setFieldProfile(fNode,mm,0,pfl2)
1004 self.assertEqual(pfl2.getName(),"pfl2")
1005 fs2.pushBackTimeStep(f)
1008 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1009 fNode.setName(fieldName3)
1010 arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1011 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1012 f.setFieldProfile(fNode,mm,0,pfl3)
1013 self.assertEqual(pfl3.getName(),"pfl3")
1014 fs3.pushBackTimeStep(f)
1017 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1018 fNode.setName(fieldName4) ; fNode.setMesh(m)
1019 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1020 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1021 f.setFieldNoProfileSBT(fNode)
1022 fs4.pushBackTimeStep(f)
1025 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1026 del m,mm,fs1,fs2,fs3,f,fNode
1027 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1028 ms=MEDFileMeshes(fname)
1029 fields=MEDFileFields(fname,False)
1030 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1031 allFMTSLeavesToDisplay=[]
1032 for fields in fields_per_mesh:
1033 allFMTSLeavesToDisplay2=[]
1035 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1037 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1039 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1040 self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1041 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1042 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1043 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1044 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1045 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1046 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1047 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1048 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1050 mst=MEDFileMeshStruct.New(ms[0])
1052 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1053 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1055 a,b=mml2.buildVTUArrays()
1056 self.assertTrue(a.isEqual(coordsX,1e-12))
1057 self.assertTrue(b.isEqual(coordsY,1e-12))
1058 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev))
1059 for i in xrange(1,5):
1060 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1063 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1064 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1065 f.loadArraysIfNecessary()
1066 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1067 self.assertEqual(f.getName(),fieldName0)
1068 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1069 vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1070 self.assertTrue(v.isEqual(vExp,1e-12))
1072 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1073 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1074 f.loadArraysIfNecessary()
1075 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1076 self.assertEqual(f.getName(),fieldName4)
1077 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1078 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1079 self.assertTrue(v.isEqual(vExp,1e-12))
1082 fcscp=allFMTSLeavesPerCommonSupport[1][1]
1083 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1085 self.assertTrue(isinstance(mml2,MEDCMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1086 a,b=mml2.buildVTUArrays()
1087 self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
1088 self.assertTrue(b.isEqual(coordsY,1e-12))
1089 for i in xrange(1,5):
1090 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1093 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1094 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1095 f.loadArraysIfNecessary()
1096 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1097 self.assertEqual(f.getName(),fieldName1)
1098 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1099 vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1100 self.assertTrue(v.isEqual(vExp,1e-12))
1102 f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1103 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1104 f.loadArraysIfNecessary()
1105 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1106 self.assertEqual(f.getName(),fieldName2)
1107 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1108 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1109 self.assertTrue(v.isEqual(vExp,1e-12))
1112 fcscp=allFMTSLeavesPerCommonSupport[2][1]
1113 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1115 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1116 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1117 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1118 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1119 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1120 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1121 self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1122 self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
1123 self.assertTrue(a4 is None)
1124 self.assertTrue(a5 is None)
1126 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1127 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1128 f.loadArraysIfNecessary()
1129 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1130 self.assertEqual(f.getName(),fieldName3)
1131 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1132 vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1133 self.assertTrue(v.isEqual(vExp,1e-12))
1138 """ This test plays with curvilinear mesh and profiles. When a sub curvilinear mesh can also be considered as a cartesian mesh it is done.
1139 This test is very similar to the test6.
1141 fname="ForMEDReader7.med"
1142 m=MEDCouplingCurveLinearMesh("mesh") ; m.setNodeGridStructure([5,3])
1143 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1144 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1146 mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
1148 fieldName0="zeField0" ; # on cells
1149 fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
1150 fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,12,13,14]) ; pfl2.setName("pfl2") # on nodes
1151 fieldName3="zeField3" ; pfl3=DataArrayInt([2,3,5,7]) ; pfl3.setName("pfl3") # on cells but different support
1152 fieldName4="zeField4" ;# on nodes
1153 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS() ; fs4=MEDFileFieldMultiTS()
1157 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1158 fNode.setName(fieldName0) ; fNode.setMesh(m)
1159 arr=DataArrayDouble(2*8) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1160 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1161 f.setFieldNoProfileSBT(fNode)
1162 fs0.pushBackTimeStep(f)
1165 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1166 fNode.setName(fieldName1)
1167 arr=DataArrayDouble(2*4) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1168 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1169 f.setFieldProfile(fNode,mm,0,pfl1)
1170 self.assertEqual(pfl1.getName(),"pfl1")
1171 fs1.pushBackTimeStep(f)
1174 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1175 fNode.setName(fieldName2)
1176 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1177 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1178 f.setFieldProfile(fNode,mm,0,pfl2)
1179 self.assertEqual(pfl2.getName(),"pfl2")
1180 fs2.pushBackTimeStep(f)
1183 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1184 fNode.setName(fieldName3)
1185 arr=DataArrayDouble(2*4) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1186 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1187 f.setFieldProfile(fNode,mm,0,pfl3)
1188 self.assertEqual(pfl3.getName(),"pfl3")
1189 fs3.pushBackTimeStep(f)
1192 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1193 fNode.setName(fieldName4) ; fNode.setMesh(m)
1194 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1195 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_4 [m]","Com2_4 [s^2]"]) ; fNode.checkCoherency()
1196 f.setFieldNoProfileSBT(fNode)
1197 fs4.pushBackTimeStep(f)
1200 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0) ; fs4.write(fname,0)
1201 del m,mm,fs1,fs2,fs3,f,fNode
1202 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1203 ms=MEDFileMeshes(fname)
1204 fields=MEDFileFields(fname,False)
1205 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1206 allFMTSLeavesToDisplay=[]
1207 for fields in fields_per_mesh:
1208 allFMTSLeavesToDisplay2=[]
1210 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1212 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1214 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1215 self.assertEqual(len(allFMTSLeavesToDisplay[0]),5)
1216 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1217 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 5 fields are defined on the same time steps
1218 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),5)
1219 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1220 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1221 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1222 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),2)
1223 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1225 mst=MEDFileMeshStruct.New(ms[0])
1227 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1228 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1230 self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev))
1231 a,b=mml2.buildVTUArrays()
1232 self.assertTrue(a.isEqual(a0Exp,1e-12))
1233 self.assertEqual(b,[5,3])
1234 for i in xrange(1,5):
1235 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1238 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1239 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1240 f.loadArraysIfNecessary()
1241 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1242 self.assertEqual(f.getName(),fieldName0)
1243 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1244 vExp=DataArrayDouble(8*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1245 self.assertTrue(v.isEqual(vExp,1e-12))
1247 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1248 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1249 f.loadArraysIfNecessary()
1250 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1251 self.assertEqual(f.getName(),fieldName4)
1252 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1253 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_4 [m]','Com2_4 [s^2]'])
1254 self.assertTrue(v.isEqual(vExp,1e-12))
1257 fcscp=allFMTSLeavesPerCommonSupport[1][1]
1258 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1260 self.assertTrue(isinstance(mml2,MEDCurveLinearMeshMultiLev)) # here the 2nd support is a part of CMesh that is also a CMesh -> CMesh not a UMesh
1261 a,b=mml2.buildVTUArrays()
1262 self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
1263 self.assertEqual(b,[3,3])
1264 for i in xrange(1,5):
1265 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1268 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
1269 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1270 f.loadArraysIfNecessary()
1271 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1272 self.assertEqual(f.getName(),fieldName1)
1273 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1274 vExp=DataArrayDouble(4*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1275 self.assertTrue(v.isEqual(vExp,1e-12))
1277 f=allFMTSLeavesPerCommonSupport[1][0][1][i]
1278 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1279 f.loadArraysIfNecessary()
1280 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1281 self.assertEqual(f.getName(),fieldName2)
1282 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1283 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1284 self.assertTrue(v.isEqual(vExp,1e-12))
1287 fcscp=allFMTSLeavesPerCommonSupport[2][1]
1288 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1290 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
1291 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1292 a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
1293 a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
1294 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1295 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
1296 self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
1297 self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
1298 self.assertTrue(a4 is None)
1299 self.assertTrue(a5 is None)
1301 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
1302 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1303 f.loadArraysIfNecessary()
1304 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1305 self.assertEqual(f.getName(),fieldName3)
1306 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1307 vExp=DataArrayDouble(4*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1308 self.assertTrue(v.isEqual(vExp,1e-12))
1313 """ This test plays with with gauss fields with no profiles.
1315 fname="ForMEDReader8.med"
1316 # building a mesh containing 6 tri3 + 5 quad4
1317 m=MEDCouplingUMesh("mesh",2)
1318 coords=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)]) ; coords.setInfoOnComponents(["XX [m]","YYY [km]"])
1321 m.insertNextCell(NORM_TRI3,[2,7,3]) ; m.insertNextCell(NORM_TRI3,[7,8,3]) ; m.insertNextCell(NORM_TRI3,[3,8,4]) ; m.insertNextCell(NORM_TRI3,[8,9,4])
1322 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1323 m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
1324 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1325 mm=MEDFileUMesh() ; mm.setMeshes([m])
1327 fieldName0="zeField0"
1328 fieldName1="zeField1"
1329 fieldName2="zeField2"
1330 fieldName3="zeField3"
1331 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1334 fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1335 fNode.setName(fieldName0) ; fNode.setMesh(m)
1336 arr=DataArrayDouble(2*38) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1337 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1338 f.setFieldNoProfileSBT(fNode)
1339 fs0.pushBackTimeStep(f)
1342 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1343 fNode.setName(fieldName1) ; fNode.setMesh(m)
1344 arr=DataArrayDouble(2*11) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1345 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1346 f.setFieldNoProfileSBT(fNode)
1347 fs1.pushBackTimeStep(f)
1350 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1351 fNode.setName(fieldName2) ; fNode.setMesh(m)
1352 fNode.setGaussLocalizationOnCells([0,1,2,3],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1353 fNode.setGaussLocalizationOnCells([4,5],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1354 fNode.setGaussLocalizationOnCells([6,7,8],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1355 fNode.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1356 arr=DataArrayDouble(2*(4*2+2*5+3*4+2*7)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1357 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1358 f.setFieldNoProfileSBT(fNode)
1359 fs2.pushBackTimeStep(f)
1362 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1363 fNode.setName(fieldName3) ; fNode.setMesh(m)
1364 arr=DataArrayDouble(2*15) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1365 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1366 f.setFieldNoProfileSBT(fNode)
1367 fs3.pushBackTimeStep(f)
1372 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1373 a0Exp=mm.getCoords().deepCpy()
1374 del m,mm,fs1,fs2,fs3,f,fNode
1375 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1376 ms=MEDFileMeshes(fname)
1377 fields=MEDFileFields(fname,False)
1378 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1379 allFMTSLeavesToDisplay=[]
1380 for fields in fields_per_mesh:
1381 allFMTSLeavesToDisplay2=[]
1383 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1385 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1387 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1388 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1389 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1390 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1391 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1392 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1393 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1394 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1396 mst=MEDFileMeshStruct.New(ms[0])
1398 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1399 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1401 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1402 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1403 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1404 self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
1405 self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26,30,34,38])))
1406 self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,0,5,6,1,4,1,6,7,2,4,5,10,11,6,4,6,11,12,7,4,12,13,8,7])))
1407 self.assertTrue(a4 is None)
1408 self.assertTrue(a5 is None)
1409 for i in xrange(1,5):
1410 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1413 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1414 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1415 f.loadArraysIfNecessary()
1416 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1417 self.assertEqual(f.getName(),fieldName0)
1418 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1419 vExp=DataArrayDouble(38*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1420 self.assertTrue(v.isEqual(vExp,1e-12))
1422 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1423 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1424 f.loadArraysIfNecessary()
1425 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1426 self.assertEqual(f.getName(),fieldName1)
1427 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1428 vExp=DataArrayDouble(11*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1429 self.assertTrue(v.isEqual(vExp,1e-12))
1431 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1432 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1433 f.loadArraysIfNecessary()
1434 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1435 self.assertEqual(f.getName(),fieldName2)
1436 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1437 vExp=DataArrayDouble(44*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1438 self.assertTrue(v.isEqual(vExp,1e-12))
1440 f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1441 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1442 f.loadArraysIfNecessary()
1443 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1444 self.assertEqual(f.getName(),fieldName3)
1445 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1446 vExp=DataArrayDouble(15*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1447 self.assertTrue(v.isEqual(vExp,1e-12))
1453 """ This test plays with with gauss fields with profiles.
1455 fname="ForMEDReader9.med"
1456 # building a mesh containing 6 tri3 + 5 quad4
1457 m=MEDCouplingUMesh("mesh",2)
1458 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]"])
1461 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])
1462 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1463 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])
1464 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1465 mm=MEDFileUMesh() ; mm.setMeshes([m])
1467 fieldName0="zeField0"
1468 fieldName1="zeField1"
1469 fieldName2="zeField2"
1470 fieldName3="zeField3"
1471 pfl1=DataArrayInt([0,1,7,9,10]) ; pfl1.setName("pfl1") # on cells
1472 pfl2=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl2.setName("pfl2") # on nodes
1473 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1476 fNode=MEDCouplingFieldDouble(ON_GAUSS_NE) ; fNode.setTime(float(i),i,0)
1477 fNode.setName(fieldName0)
1478 arr=DataArrayDouble(2*18) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1479 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1480 f.setFieldProfile(fNode,mm,0,pfl1)
1481 fs0.pushBackTimeStep(f)
1484 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1485 fNode.setName(fieldName1)
1486 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1487 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1488 f.setFieldProfile(fNode,mm,0,pfl1)
1489 fs1.pushBackTimeStep(f)
1492 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1493 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1494 fNode.setGaussLocalizationOnCells([0],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1495 fNode.setGaussLocalizationOnCells([1],[0.,0.,1.,0.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1496 fNode.setGaussLocalizationOnCells([2,3],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1497 fNode.setGaussLocalizationOnCells([4],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1498 arr=DataArrayDouble(2*(2*1+5*1+4*2+7*1)) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1499 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1500 f.setFieldProfile(fNode,mm,0,pfl1)
1501 fs2.pushBackTimeStep(f)
1504 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1505 fNode.setName(fieldName3)
1506 arr=DataArrayDouble(2*9) ; arr.iota(400+1000*i) ; arr.rearrange(2)
1507 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"])
1508 f.setFieldProfile(fNode,mm,0,pfl2)
1509 fs3.pushBackTimeStep(f)
1514 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1515 a0Exp=mm.getCoords().deepCpy()
1516 del m,mm,fs1,fs2,fs3,f,fNode
1517 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1518 ms=MEDFileMeshes(fname)
1519 fields=MEDFileFields(fname,False)
1520 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1521 allFMTSLeavesToDisplay=[]
1522 for fields in fields_per_mesh:
1523 allFMTSLeavesToDisplay2=[]
1525 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1527 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1529 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1530 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1531 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1532 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1533 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1534 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1535 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1536 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),4)
1538 mst=MEDFileMeshStruct.New(ms[0])
1540 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1541 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1543 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1544 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1545 self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
1546 self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1547 self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
1548 self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
1549 self.assertTrue(a4 is None)
1550 self.assertTrue(a5 is None)
1551 for i in xrange(1,5):
1552 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1555 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1556 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1557 f.loadArraysIfNecessary()
1558 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1559 self.assertEqual(f.getName(),fieldName0)
1560 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1561 vExp=DataArrayDouble(18*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1562 self.assertTrue(v.isEqual(vExp,1e-12))
1564 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1565 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1566 f.loadArraysIfNecessary()
1567 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1568 self.assertEqual(f.getName(),fieldName1)
1569 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1570 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1571 self.assertTrue(v.isEqual(vExp,1e-12))
1573 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1574 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1575 f.loadArraysIfNecessary()
1576 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1577 self.assertEqual(f.getName(),fieldName2)
1578 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1579 vExp=DataArrayDouble(22*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1580 self.assertTrue(v.isEqual(vExp,1e-12))
1582 f=allFMTSLeavesPerCommonSupport[0][0][3][i]
1583 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1584 f.loadArraysIfNecessary()
1585 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1586 self.assertEqual(f.getName(),fieldName3)
1587 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1588 vExp=DataArrayDouble(9*2) ; vExp.iota(400+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
1589 self.assertTrue(v.isEqual(vExp,1e-12))
1594 """ This test plays with fields only on nodes containing profiles.
1596 fname="ForMEDReader10.med"
1597 # building a mesh containing 6 tri3 + 5 quad4
1598 m=MEDCouplingUMesh("mesh",2)
1599 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]"])
1602 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])
1603 m.insertNextCell(NORM_TRI3,[13,9,8]) ; m.insertNextCell(NORM_TRI3,[13,14,9])
1604 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])
1605 m.insertNextCell(NORM_QUAD4,[12,13,8,7])
1606 mm=MEDFileUMesh() ; mm.setMeshes([m])
1608 fieldName0="zeField0"
1609 fieldName1="zeField1"
1610 fieldName2="zeField2"
1611 pfl1=DataArrayInt([1,2,3,6,7,8,11,12,13]) ; pfl1.setName("pfl1") # on nodes
1612 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS()
1615 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1616 fNode.setName(fieldName0)
1617 arr=DataArrayDouble(2*9) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1618 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"])
1619 f.setFieldProfile(fNode,mm,0,pfl1)
1620 fs0.pushBackTimeStep(f)
1623 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1624 fNode.setName(fieldName1)
1625 arr=DataArrayDouble(2*9) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1626 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"])
1627 f.setFieldProfile(fNode,mm,0,pfl1)
1628 fs1.pushBackTimeStep(f)
1631 fNode=MEDCouplingFieldDouble(ON_NODES) ; fNode.setTime(float(i),i,0)
1632 fNode.setName(fieldName2)
1633 arr=DataArrayDouble(2*9) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1634 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"])
1635 f.setFieldProfile(fNode,mm,0,pfl1)
1636 fs2.pushBackTimeStep(f)
1641 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0)
1642 a0Exp=mm.getCoords().deepCpy()
1643 del m,mm,fs1,fs2,f,fNode
1644 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1645 ms=MEDFileMeshes(fname)
1646 fields=MEDFileFields(fname,False)
1647 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1648 allFMTSLeavesToDisplay=[]
1649 for fields in fields_per_mesh:
1650 allFMTSLeavesToDisplay2=[]
1652 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1654 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1656 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1657 self.assertEqual(len(allFMTSLeavesToDisplay[0]),3)
1658 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1659 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 4 fields are defined on the same time steps
1660 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),3)
1661 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1662 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1663 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),3)
1665 mst=MEDFileMeshStruct.New(ms[0])
1667 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1668 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1670 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1671 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1672 self.assertTrue(a0.isEqual(a0Exp[pfl1].changeNbOfComponents(3,0.),1e-12))
1673 self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
1674 self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
1675 self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
1676 self.assertTrue(a4 is None)
1677 self.assertTrue(a5 is None)
1678 for i in xrange(1,5):
1679 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1682 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1683 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1684 f.loadArraysIfNecessary()
1685 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1686 self.assertEqual(f.getName(),fieldName0)
1687 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1688 vExp=DataArrayDouble(9*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1689 self.assertTrue(v.isEqual(vExp,1e-12))
1691 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1692 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1693 f.loadArraysIfNecessary()
1694 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1695 self.assertEqual(f.getName(),fieldName1)
1696 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1697 vExp=DataArrayDouble(9*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1698 self.assertTrue(v.isEqual(vExp,1e-12))
1700 f=allFMTSLeavesPerCommonSupport[0][0][2][i]
1701 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1702 f.loadArraysIfNecessary()
1703 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1704 self.assertEqual(f.getName(),fieldName2)
1705 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug
1706 vExp=DataArrayDouble(9*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
1707 self.assertTrue(v.isEqual(vExp,1e-12))
1712 """ This test is the ultimate test for the profiles with gauss points. It tests that even if there is non contiguous parts in definition of gauss points, it works !
1713 WARNING here, as no other discretizations exists, the priority is given to the field -> the mesh is renumbered to accelerate the build of array of field.
1715 fname="ForMEDReader11.med"
1716 m=MEDCouplingCMesh("mesh")
1717 arr=DataArrayDouble(5) ; arr.iota()
1718 m.setCoords(arr,arr)
1719 m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1720 mm=MEDFileUMesh() ; mm.setMeshes([m])
1722 fieldName0="zeField0"
1723 fs0=MEDFileFieldMultiTS()
1726 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1727 fNode.setName(fieldName0) ; fNode.setMesh(m)
1728 fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1729 fNode.setGaussLocalizationOnCells([1,5,8,9],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1730 fNode.setGaussLocalizationOnCells([6,10,13],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1731 fNode.setGaussLocalizationOnCells([11,12,14],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1732 arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1733 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1734 f.setFieldNoProfileSBT(fNode)
1735 fs0.pushBackTimeStep(f)
1739 a0Exp=mm.getCoords().deepCpy()
1740 del m,mm,fs0,f,fNode
1741 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1742 ms=MEDFileMeshes(fname)
1743 fields=MEDFileFields(fname,False)
1744 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1745 allFMTSLeavesToDisplay=[]
1746 for fields in fields_per_mesh:
1747 allFMTSLeavesToDisplay2=[]
1749 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1751 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1753 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1754 self.assertEqual(len(allFMTSLeavesToDisplay[0]),1)
1755 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1756 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 1 field is defined on the same time steps
1757 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),1)
1758 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1759 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1760 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),1)
1762 mst=MEDFileMeshStruct.New(ms[0])
1764 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1765 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1767 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1768 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1769 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1770 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1771 self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
1772 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,9,8,13,14,4,19,18,23,24,4,2,1,6,7,4,7,6,11,12,4,11,10,15,16,4,12,11,16,17,4,8,7,12,13,4,13,12,17,18,4,17,16,21,22,4,14,13,18,19,4,16,15,20,21,4,18,17,22,23]))) # <- here the mesh is renumbered : the mesh is equal to m[[0,2,3,4,7,15, 1,5,8,9, 6,10,13, 11,12,14]]
1773 self.assertTrue(a4 is None)
1774 self.assertTrue(a5 is None)
1775 for i in xrange(1,5):
1776 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1779 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1780 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1781 f.loadArraysIfNecessary()
1782 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1783 self.assertEqual(f.getName(),fieldName0)
1784 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1785 vExp=DataArrayDouble([0.,1.,2.,3.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,44.,45.,46.,47.,126.,127.,128.,129.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.,64.,65.,66.,67.,36.,37.,38.,39.,40.,41.,42.,43.,68.,69.,70.,71.,72.,73.,74.,75.,104.,105.,106.,107.,108.,109.,110.,111.,76.,77.,78.,79.,80.,81.,82.,83.,84.,85.,86.,87.,88.,89.,90.,91.,92.,93.,94.,95.,96.,97.,98.,99.,100.,101.,102.,103.,112.,113.,114.,115.,116.,117.,118.,119.,120.,121.,122.,123.,124.,125.],65,2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1787 self.assertTrue(v.isEqual(vExp,1e-12))
1792 """ This test is the second ultimate test for the profiles with gauss points.
1793 This test is close to test11 but here a 2nd field on cells without profile. So here the mesh is expected to be the same than m.
1795 fname="ForMEDReader12.med"
1796 m=MEDCouplingCMesh("mesh")
1797 arr=DataArrayDouble(5) ; arr.iota()
1798 m.setCoords(arr,arr)
1799 m=m.buildUnstructured() ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
1800 mm=MEDFileUMesh() ; mm.setMeshes([m])
1802 fieldName0="zeField0"
1803 fieldName1="zeField1"
1804 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
1807 fNode=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fNode.setTime(float(i),i,0)
1808 fNode.setName(fieldName0) ; fNode.setMesh(m)
1809 fNode.setGaussLocalizationOnCells([0,2,3,4,7,15],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7],[0.8,0.2])
1810 fNode.setGaussLocalizationOnCells([1,5,8,9],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3],[0.8,0.05,0.1,0.04,0.01])
1811 fNode.setGaussLocalizationOnCells([6,10,13],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2],[0.8,0.05,0.1,0.04])
1812 fNode.setGaussLocalizationOnCells([11,12,14],[0.,0.,1.,0.,1.,1.,0.,1.],[0.5,0.5,0.7,0.7,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.8,0.8],[0.8,0.05,0.1,0.01,0.02,0.005,0.005])
1813 arr=DataArrayDouble(2*(2*6+5*4+4*3+7*3)) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1814 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1815 f.setFieldNoProfileSBT(fNode)
1816 fs0.pushBackTimeStep(f)
1819 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1820 fNode.setName(fieldName1) ; fNode.setMesh(m)
1821 arr=DataArrayDouble(2*16) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1822 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1823 f.setFieldNoProfileSBT(fNode)
1824 fs1.pushBackTimeStep(f)
1827 fs0.write(fname,0) ; fs1.write(fname,0)
1828 a0Exp=mm.getCoords().deepCpy()
1829 del m,mm,fs0,fs1,f,fNode
1830 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1831 ms=MEDFileMeshes(fname)
1832 fields=MEDFileFields(fname,False)
1833 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1834 allFMTSLeavesToDisplay=[]
1835 for fields in fields_per_mesh:
1836 allFMTSLeavesToDisplay2=[]
1838 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1840 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1842 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1843 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
1844 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1845 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1846 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
1847 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1848 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
1849 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1851 mst=MEDFileMeshStruct.New(ms[0])
1853 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1854 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1856 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1857 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1858 self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
1859 self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
1860 self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
1861 self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24]))) # <- here the mesh is NOT renumbered : the mesh is equal to m
1862 self.assertTrue(a4 is None)
1863 self.assertTrue(a5 is None)
1864 for i in xrange(1,5):
1865 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1868 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1869 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1870 f.loadArraysIfNecessary()
1871 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1872 self.assertEqual(f.getName(),fieldName0)
1873 #self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1874 vExp=DataArrayDouble(65*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1875 self.assertTrue(v.isEqual(vExp,1e-12))
1877 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1878 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1879 f.loadArraysIfNecessary()
1880 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1881 self.assertEqual(f.getName(),fieldName1)
1882 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer()) # not a bug : huge reordering performed !
1883 vExp=DataArrayDouble(16*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1884 self.assertTrue(v.isEqual(vExp,1e-12))
1888 """ Testing polyhedrons mixed with hexa8"""
1889 fname="ForMEDReader13.med"
1890 m=MEDCouplingUMesh("mesh",3)
1892 m.insertNextCell(NORM_HEXA8,[1,0,6,7,13,12,18,19]) ; m.insertNextCell(NORM_HEXA8,[2,1,7,8,14,13,19,20])
1893 m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
1894 m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
1895 m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
1896 coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
1898 mm=MEDFileUMesh() ; mm.setMeshes([m])
1899 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
1900 fieldName0="zeField0"
1901 fieldName1="zeField1"
1902 fieldName2="zeField2" ; pfl1=DataArrayInt([2,3]) ; pfl1.setName("pfl1")
1903 fieldName3="zefield3" ; pfl2=DataArrayInt([2,3,4]) ; pfl2.setName("pfl2")
1906 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1907 fNode.setName(fieldName0) ; fNode.setMesh(m)
1908 arr=DataArrayDouble(2*5) ; arr.iota(0+1000*i) ; arr.rearrange(2)
1909 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
1910 f.setFieldNoProfileSBT(fNode)
1911 fs0.pushBackTimeStep(f)
1914 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1915 fNode.setName(fieldName1) ; fNode.setMesh(m)
1916 arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
1917 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
1918 f.setFieldNoProfileSBT(fNode)
1919 fs1.pushBackTimeStep(f)
1922 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1923 fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
1924 arr=DataArrayDouble(2*2) ; arr.iota(200+1000*i) ; arr.rearrange(2)
1925 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
1926 f.setFieldProfile(fNode,mm,0,pfl1)
1927 fs2.pushBackTimeStep(f)
1930 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
1931 fNode.setName(fieldName3) ; fNode.setMesh(m[pfl2])
1932 arr=DataArrayDouble(2*3) ; arr.iota(300+1000*i) ; arr.rearrange(2)
1933 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
1934 f.setFieldProfile(fNode,mm,0,pfl2)
1935 fs3.pushBackTimeStep(f)
1938 fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
1939 a0Exp=mm.getCoords().deepCpy()
1941 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
1942 ms=MEDFileMeshes(fname)
1943 fields=MEDFileFields(fname,False)
1944 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
1945 allFMTSLeavesToDisplay=[]
1946 for fields in fields_per_mesh:
1947 allFMTSLeavesToDisplay2=[]
1949 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
1951 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
1953 self.assertEqual(len(allFMTSLeavesToDisplay),1)
1954 self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
1955 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
1956 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
1957 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
1958 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
1959 self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
1960 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
1961 self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
1962 self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
1964 mst=MEDFileMeshStruct.New(ms[0])
1966 fcscp=allFMTSLeavesPerCommonSupport[0][1]
1967 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
1969 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
1970 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
1971 self.assertTrue(a0.isEqual(a0Exp,1e-12))
1972 self.assertTrue(a1.isEqual(DataArrayByte([12,12,42,42,42])))
1973 self.assertTrue(a2.isEqual(DataArrayInt([8,16,24,32,40])))
1974 self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,6,7,13,12,18,19,8,2,1,7,8,14,13,19,20,8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
1975 self.assertTrue(a4.isEqual(DataArrayInt([-1,-1,0,31,62])))
1976 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
1977 for i in xrange(1,5):
1978 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
1982 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
1983 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1984 f.loadArraysIfNecessary()
1985 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1986 self.assertEqual(f.getName(),fieldName0)
1987 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1988 vExp=DataArrayDouble(5*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
1989 self.assertTrue(v.isEqual(vExp,1e-12))
1991 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
1992 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
1993 f.loadArraysIfNecessary()
1994 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
1995 self.assertEqual(f.getName(),fieldName1)
1996 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
1997 vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
1998 self.assertTrue(v.isEqual(vExp,1e-12))
2001 fcscp=allFMTSLeavesPerCommonSupport[1][1]
2002 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2004 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2005 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2006 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2007 self.assertTrue(a1.isEqual(DataArrayByte([42,42])))
2008 self.assertTrue(a2.isEqual(DataArrayInt([8,16])))
2009 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22])))
2010 self.assertTrue(a4.isEqual(DataArrayInt([0,31])))
2011 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4])))
2012 for i in xrange(1,5):
2013 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2017 f=allFMTSLeavesPerCommonSupport[1][0][0][i]
2018 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2019 f.loadArraysIfNecessary()
2020 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2021 self.assertEqual(f.getName(),fieldName2)
2022 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2023 vExp=DataArrayDouble(2*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
2024 self.assertTrue(v.isEqual(vExp,1e-12))
2027 fcscp=allFMTSLeavesPerCommonSupport[2][1]
2028 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2030 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2031 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2032 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2033 self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2034 self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
2035 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
2036 self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2037 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
2038 for i in xrange(1,5):
2039 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2043 f=allFMTSLeavesPerCommonSupport[2][0][0][i]
2044 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2045 f.loadArraysIfNecessary()
2046 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2047 self.assertEqual(f.getName(),fieldName3)
2048 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2049 vExp=DataArrayDouble(3*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
2050 self.assertTrue(v.isEqual(vExp,1e-12))
2055 """ Testing only polyhedrons"""
2056 fname="ForMEDReader14.med"
2057 m=MEDCouplingUMesh("mesh",3)
2059 m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
2060 m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
2061 m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
2062 coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
2064 mm=MEDFileUMesh() ; mm.setMeshes([m])
2065 fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
2066 fieldName0="zeField0"
2067 fieldName1="zeField1"
2070 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2071 fNode.setName(fieldName0) ; fNode.setMesh(m)
2072 arr=DataArrayDouble(2*3) ; arr.iota(0+1000*i) ; arr.rearrange(2)
2073 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
2074 f.setFieldNoProfileSBT(fNode)
2075 fs0.pushBackTimeStep(f)
2078 fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
2079 fNode.setName(fieldName1) ; fNode.setMesh(m)
2080 arr=DataArrayDouble(2*3) ; arr.iota(100+1000*i) ; arr.rearrange(2)
2081 fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
2082 f.setFieldNoProfileSBT(fNode)
2083 fs1.pushBackTimeStep(f)
2086 fs0.write(fname,0) ; fs1.write(fname,0)
2087 a0Exp=mm.getCoords().deepCpy()
2089 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
2090 ms=MEDFileMeshes(fname)
2091 fields=MEDFileFields(fname,False)
2092 fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
2093 allFMTSLeavesToDisplay=[]
2094 for fields in fields_per_mesh:
2095 allFMTSLeavesToDisplay2=[]
2097 allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
2099 allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
2101 self.assertEqual(len(allFMTSLeavesToDisplay),1)
2102 self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
2103 allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
2104 self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
2105 self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
2106 allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
2107 self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
2108 self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
2110 mst=MEDFileMeshStruct.New(ms[0])
2112 fcscp=allFMTSLeavesPerCommonSupport[0][1]
2113 mml=fcscp.buildFromScratchDataSetSupport(0,fields)
2115 self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
2116 a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
2117 self.assertTrue(a0.isEqual(a0Exp,1e-12))
2118 self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
2119 self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
2120 self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
2121 self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
2122 self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
2123 for i in xrange(1,5):
2124 self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
2128 f=allFMTSLeavesPerCommonSupport[0][0][0][i]
2129 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2130 f.loadArraysIfNecessary()
2131 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2132 self.assertEqual(f.getName(),fieldName0)
2133 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2134 vExp=DataArrayDouble(3*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
2135 self.assertTrue(v.isEqual(vExp,1e-12))
2137 f=allFMTSLeavesPerCommonSupport[0][0][1][i]
2138 fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
2139 f.loadArraysIfNecessary()
2140 v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
2141 self.assertEqual(f.getName(),fieldName1)
2142 self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
2143 vExp=DataArrayDouble(3*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
2144 self.assertTrue(v.isEqual(vExp,1e-12))
2150 "ForMEDReader15.med" file has a spaceDim 3 mesh "mesh" (it is important !)
2151 and a field "zeField" lying on a single geometric type for Cell discr and node part.
2152 Test that can appear the most simple but it hides a big issue of MEDReader
2153 that copies are reduced at most. So it can leads to SIGSEGV if the memory management is not OK for int* and double * similar between VTK and MEDCoupling.
2155 fname="ForMEDReader15.med"
2156 m0=MEDCouplingCMesh()
2157 arr=DataArrayDouble(5) ; arr.iota(0)
2158 m0.setCoords(arr,arr,arr)
2160 m0=m0.buildUnstructured()
2163 fCell=MEDCouplingFieldDouble(ON_CELLS)
2164 fCell.setName(fieldName)
2167 fNode=MEDCouplingFieldDouble(ON_NODES)
2168 fNode.setName(fieldName)
2172 mm.setMeshAtLevel(0,m0)
2174 ffs=MEDFileFieldMultiTS()
2177 f1ts=MEDFileField1TS()
2178 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2181 fCell.checkCoherency()
2182 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2186 fNode.checkCoherency()
2187 f1ts.setFieldNoProfileSBT(fCell)
2188 f1ts.setFieldNoProfileSBT(fNode)
2189 ffs.pushBackTimeStep(f1ts)
2191 t=(2.1,1,0) ; off=100.
2192 f1ts=MEDFileField1TS()
2193 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2196 fCell.checkCoherency()
2197 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2201 fNode.checkCoherency()
2202 f1ts.setFieldNoProfileSBT(fCell)
2203 f1ts.setFieldNoProfileSBT(fNode)
2204 ffs.pushBackTimeStep(f1ts)
2206 t=(3.2,2,0) ; off=200.
2207 f1ts=MEDFileField1TS()
2208 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2211 fCell.checkCoherency()
2212 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2216 fNode.checkCoherency()
2217 f1ts.setFieldNoProfileSBT(fCell)
2218 f1ts.setFieldNoProfileSBT(fNode)
2219 ffs.pushBackTimeStep(f1ts)
2221 t=(4.3,3,1) ; off=300.
2222 f1ts=MEDFileField1TS()
2223 a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2226 fCell.checkCoherency()
2227 a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
2231 fNode.checkCoherency()
2232 f1ts.setFieldNoProfileSBT(fCell)
2233 f1ts.setFieldNoProfileSBT(fNode)
2234 ffs.pushBackTimeStep(f1ts)
2238 ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values