1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015 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, or (at your option) any later version.
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
21 from MEDCoupling import *
22 from MEDCouplingDataForTest import MEDCouplingDataForTest
24 if MEDCouplingHasNumPyBindings():
28 from platform import architecture
29 from sys import getrefcount
31 import os,gc,weakref,cPickle,unittest
33 class MEDCouplingPickleTest(unittest.TestCase):
34 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
36 """ Test of a simple DataArrayDouble."""
37 x=DataArrayDouble(10,1) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
39 pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
40 xx=cPickle.loads(pickled)
41 self.assertTrue(xx.isEqual(x,1e-16))
42 # Bigger to check that the behavior is OK for large strings.
43 x=DataArrayDouble(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
45 pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
46 xx=cPickle.loads(pickled)
47 self.assertTrue(xx.isEqual(x,1e-16))
50 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
52 """ Test of a simple DataArrayInt."""
53 x=DataArrayInt(10) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
55 pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
56 xx=cPickle.loads(pickled)
57 self.assertTrue(xx.isEqual(x))
58 # Bigger to check that the behavior is OK for large strings.
59 x=DataArrayInt(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
61 pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
62 xx=cPickle.loads(pickled)
63 self.assertTrue(xx.isEqual(x))
66 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
68 """ Test of a MEDCouplingUMesh pickeling."""
69 arr=DataArrayDouble(10) ; arr.iota()
70 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
71 m=m.buildUnstructured()
73 m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
74 m.checkConsistencyLight()
75 st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
77 self.assertTrue(m2.isEqual(m,1e-16))
80 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
82 """ Idem test3 except that here serialization/deserialization is done explicitely."""
83 arr=DataArrayDouble(10) ; arr.iota()
84 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
85 m=m.buildUnstructured()
87 m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
88 m.checkConsistencyLight()
90 a0,a1,a2=m.getTinySerializationInformation()
93 m2.unserialization(a0,a1,b0,b1,a2);
94 self.assertTrue(m2.isEqual(m,1e-16))
97 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
99 """ Test of a MEDCouplingCMesh pickeling."""
100 arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
101 arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
102 arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
104 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
106 m.checkConsistencyLight()
107 st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
109 self.assertTrue(m2.isEqual(m,1e-16))
110 self.assertTrue(m2.getCoordsAt(0).isEqual(arrX,1e-16))
113 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
115 """ Test of a MEDCoupling1SGTUMesh pickeling."""
116 arr=DataArrayDouble(10) ; arr.iota()
117 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
118 m=m.build1SGTUnstructured()
119 self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
120 st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
122 self.assertTrue(m2.isEqual(m,1e-16))
125 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
127 """ Test of a MEDCoupling1DGTUMesh pickeling."""
128 arr=DataArrayDouble(10) ; arr.iota()
129 m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
130 m=m.buildUnstructured() ; m.convertAllToPoly()
131 m=MEDCoupling1DGTUMesh(m)
132 self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
133 st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
135 self.assertTrue(m2.isEqual(m,1e-16))
138 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
140 """ Test of a MEDCouplingMappedExtrudedMesh pickeling."""
141 arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
142 arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
143 arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
144 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
145 mesh3D=m.buildUnstructured() ; del m
147 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
148 mesh2D=m.buildUnstructured() ; del m
150 mesh2D.setCoords(mesh3D.getCoords())
151 mesh=MEDCouplingMappedExtrudedMesh(mesh3D,mesh2D,0) ; del mesh3D,mesh2D
152 self.assertTrue(isinstance(mesh,MEDCouplingMappedExtrudedMesh))
153 st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
155 self.assertTrue(m2.isEqual(mesh,1e-16))
158 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
160 """ Test of a MEDCouplingCurveLinearMesh pickeling."""
161 arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
162 arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
163 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
164 m=m.buildUnstructured()
166 mesh=MEDCouplingCurveLinearMesh() ; mesh.setCoords(m.getCoords()) ; del m
167 mesh.setNodeGridStructure([10,5])
168 st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
170 self.assertTrue(m2.isEqual(mesh,1e-16))
173 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
175 """ Test of a MEDCouplingIMesh pickeling."""
176 m=MEDCouplingIMesh("mesh",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m.setAxisUnit("km")
177 m.checkConsistencyLight()
178 st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
180 self.assertTrue(m2.isEqual(m,1e-16))
181 self.assertEqual(m2.getName(),m.getName())
184 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
186 """ Test of MEDCouplingFieldDouble lying on MEDCouplingCMesh pickeling. """
187 arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
188 arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
189 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
190 f=m.getMeasureField(True)
193 b=a[:] ; b.iota(7000.)
194 f.setArray(DataArrayDouble.Meld(a,b))
195 f.getArray().setInfoOnComponents(["u1","vv2"])
196 f.checkConsistencyLight();
198 st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
200 self.assertTrue(f2.isEqual(f,1e-16,1e-16))
201 self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
204 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
206 """ Test of MEDCouplingFieldDouble on Gauss Points lying on MEDCouplingUMesh pickeling."""
207 _a=0.446948490915965;
208 _b=0.091576213509771;
209 _p1=0.11169079483905;
210 _p2=0.0549758718227661;
211 refCoo1=[ 0.,0., 1.,0., 0.,1. ]
212 gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
213 2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ]
214 wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
219 m=MEDCouplingDataForTest.build2DTargetMesh_1();
220 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,NO_TIME);
222 self.assertEqual(5,f.getNumberOfMeshPlacesExpected());
223 self.assertEqual(0,f.getNbOfGaussLocalization());
224 f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1);
225 f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1); # not a bug only to check that it works well
226 self.assertRaises(InterpKernelException,f.setGaussLocalizationOnType,NORM_QUAD4,_refCoo1,_gsCoo1,_wg1)
227 self.assertEqual(1,f.getNbOfGaussLocalization());
228 refCoo2=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
232 f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo2,_gsCoo1,_wg1);
233 self.assertEqual(2,f.getNbOfGaussLocalization());
234 array=DataArrayDouble.New();
236 for i in xrange(18*2):
238 array.setValues(ptr,18,2);
239 ptr=array.getPointer();
241 f.setName("MyFirstFieldOnGaussPoint");
242 f.checkConsistencyLight();
243 self.assertAlmostEqual(27.,f.getIJK(2,5,0),14);
244 self.assertAlmostEqual(16.,f.getIJK(1,5,1),14);
246 f.clearGaussLocalizations();
247 self.assertEqual(0,f.getNbOfGaussLocalization());
248 self.assertRaises(InterpKernelException,f.checkConsistencyLight);
250 self.assertRaises(InterpKernelException,f.setGaussLocalizationOnCells,ids1,_refCoo2,_gsCoo1,_wg1);
251 self.assertEqual(0,f.getNbOfGaussLocalization());
253 f.setGaussLocalizationOnCells(ids2,_refCoo2,_gsCoo1,_wg1);
254 self.assertEqual(1,f.getNbOfGaussLocalization());
255 self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
256 self.assertRaises(InterpKernelException,f.getGaussLocalizationIdOfOneCell,1);
258 f.setGaussLocalizationOnCells(ids3,_refCoo1,_gsCoo1,_wg1);
259 self.assertEqual(2,f.getNbOfGaussLocalization());
260 self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
261 self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(1));
262 self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(2));
263 self.assertRaises(InterpKernelException,f.checkConsistencyLight);#<- cell 3 has no localization
267 _gsCoo2[0]=0.8888777776666;
268 _wg2[0]=0.1234567892377;
269 f.setGaussLocalizationOnCells(ids4,_refCoo2,_gsCoo2,_wg2);
270 self.assertEqual(3,f.getNbOfGaussLocalization());
271 tmpIds=f.getCellIdsHavingGaussLocalization(0);
272 self.assertEqual(ids2,list(tmpIds.getValues()));
273 self.assertRaises(InterpKernelException,f.checkConsistencyLight);#<- it's always not ok because undelying array not with the good size.
274 array2=f.getArray().subArray(0,10);
276 f.checkConsistencyLight();
278 st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
280 self.assertTrue(f2.isEqual(f,1e-16,1e-16))
281 self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
285 eStr="This is an exception."
286 e=InterpKernelException(eStr)
287 self.assertEqual(e.what(),eStr)
288 st=cPickle.dumps(e,cPickle.HIGHEST_PROTOCOL)
290 self.assertTrue(e is not e2)
291 self.assertTrue(isinstance(e2,InterpKernelException))
292 self.assertEqual(e2.what(),eStr)
299 if __name__=="__main__":