Salome HOME
CS work : MeshGems reader/writer
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderDataForTest.py
index 45a35e9419598775a8667ff9dee7cb39cd55e126..348247b38a92bcbe58672dbea5e3ca62ad09d69e 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+# Copyright (C) 2007-2020  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 from MEDLoader import *
 from math import pi,e,sqrt
 
+def WriteInTmpDir(func):
+    def decaratedFunc(*args,**kwargs):
+        import tempfile,os
+        ret = None
+        with tempfile.TemporaryDirectory() as tmpdirname:
+            os.chdir(tmpdirname)
+            ret = func(*args,**kwargs)
+            pass
+        return ret
+    return decaratedFunc
+
 class MEDLoaderDataForTest:
+    @classmethod
     def build1DMesh_1(cls):
         coords=[ 0.0, 0.3, 0.75, 1.0, 1.4, 1.3 ]
         conn=[ 0,1, 1,2, 2,3 , 3,4,5]
@@ -41,6 +53,7 @@ class MEDLoaderDataForTest:
         mesh.setCoords(myCoords);
         return mesh;
 
+    @classmethod
     def build2DCurveMesh_1(cls):
         coords=[ 0.0,0.0, 0.3,0.3, 0.75,0.75, 1.0,1.0, 1.4,1.4, 1.3,1.3 ]
         conn=[ 0,1, 1,2, 2,3 , 3,4,5]
@@ -58,6 +71,7 @@ class MEDLoaderDataForTest:
         mesh.setCoords(myCoords);
         return mesh;
 
+    @classmethod
     def build2DMesh_1(cls):
         targetCoords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7,
                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
@@ -80,6 +94,7 @@ class MEDLoaderDataForTest:
         targetMesh.setCoords(myCoords)
         return targetMesh;
 
+    @classmethod
     def build2DMesh_2(cls):
         targetCoords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7,
                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
@@ -102,6 +117,7 @@ class MEDLoaderDataForTest:
         return targetMesh;
 
     #this mesh has several cells duplicated ! it is not beautiful but efficient to test file WR.
+    @classmethod
     def build2DMesh_3(cls):
         targetCoords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7,
                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
@@ -131,6 +147,7 @@ class MEDLoaderDataForTest:
         targetMesh.setCoords(myCoords);
         return targetMesh;
 
+    @classmethod
     def build3DMesh_1(cls):
         coords=[0.,0.,0., 1.,1.,0., 1.,1.25,0., 0.,1.,0., 1.,1.5,0., 2.,0.,0., 2.,1.,0., 1.,2.,0., 0.,2.,0., 3.,1.,0.,
                 3.,2.,0., 0.,1.,0., 1.,3.,0., 2.,2.,0., 2.,3.,0.,
@@ -192,7 +209,8 @@ class MEDLoaderDataForTest:
         myCoords.setInfoOnComponent(2,"t [kW]");
         ret.setCoords(myCoords);
         return ret;
-    
+
+    @classmethod
     def build3DSurfMesh_1(cls):
         targetCoords=[-0.3,-0.3,-0.3, 0.2,-0.3,-0.3, 0.7,-0.3,-0.3, -0.3,0.2,-0.3, 0.2,0.2,-0.3, 0.7,0.2,-0.3, -0.3,0.7,-0.3, 0.2,0.7,-0.3, 0.7,0.7,-0.3
                       ,-0.05,0.95,-0.3, 0.2,1.2,-0.3, 0.45,0.95,-0.3]
@@ -214,7 +232,8 @@ class MEDLoaderDataForTest:
         myCoords.setInfoOnComponent(2,"ff [km]");#component 1 is not set for test
         targetMesh.setCoords(myCoords);
         return targetMesh;
-    
+
+    @classmethod
     def build3DMesh_2(cls):
         m3dsurfBase=MEDLoaderDataForTest.build3DSurfMesh_1();
         numbers=[0,1,2,3,5]
@@ -229,6 +248,7 @@ class MEDLoaderDataForTest:
         ret=m3dsurf.buildExtrudedMesh(m1d,0);
         return ret;
 
+    @classmethod
     def buildMultiLevelMesh_1(cls):
         coo=[10.,0.,10.,1.25,10.,2.5,10.,3.75,10.,5.,8.75,0.,8.75,1.25,8.75,2.5,8.75,3.75,8.75,5.,7.5,0.,7.5,1.25,7.5,2.5,7.5,3.75,7.5,5.,6.25,0.,6.25,1.25,6.25,2.5,6.25,3.75,6.25,5.,5.,0.,5.,1.25,5.,2.5,5.,3.75,5.,5.,3.75,0.,3.75,1.25,3.75,2.5,3.75,3.75,3.75,5.,2.5,0.,2.5,1.25,2.5,2.5,2.5,3.75,2.5,5.,1.25,0.,1.25,1.25,1.25,2.5,1.25,3.75,1.25,5.,0.,1.25,0.,2.5,0.,3.75,0.,5.,0.,0.,0.,5.,10.,5.,0.,10.,10.,10.,5.,5.,5.,5.,5.,10.,5.,10.,0.625,5.,1.25,5.,1.875,5.,2.5,5.,3.125,5.,3.75,5.,4.375,5.,5.,6.25,5.,7.5,5.,8.75,4.375,10.,3.75,10.,3.125,10.,2.5,10.,1.875,10.,1.25,10.,0.625,10.,0.,8.75,0.,7.5,0.,6.25,4.375,6.25,4.375,7.5,4.375,8.75,3.75,6.25,3.75,7.5,3.75,8.75,3.125,6.25,3.125,7.5,3.125,8.75,2.5,6.25,2.5,7.5,2.5,8.75,1.875,6.25,1.875,7.5,1.875,8.75,1.25,6.25,1.25,7.5,1.25,8.75,0.625,6.25,0.625,7.5,0.625,8.75,5.625,5.,6.25,5.,6.875,5.,7.5,5.,8.125,5.,8.75,5.,9.375,5.,10.,6.25,10.,7.5,10.,8.75,9.375,10.,8.75,10.,8.125,10.,7.5,10.,6.875,10.,6.25,10.,5.625,10.,5.,8.75,5.,7.5,5.,6.25,9.375,6.25,9.375,7.5,9.375,8.75,8.75,6.25,8.75,7.5,8.75,8.75,8.125,6.25,8.125,7.5,8.125,8.75,7.5,6.25,7.5,7.5,7.5,8.75,6.875,6.25,6.875,7.5,6.875,8.75,6.25,6.25,6.25,7.5,6.25,8.75,5.625,6.25,5.625,7.5,5.625,8.75]
         coo2=DataArrayDouble.New()
@@ -314,6 +334,7 @@ class MEDLoaderDataForTest:
         famIdsPerGrp=[[5],[-11],[1],[-8],[4],[-10],[-12],[2],[-9],[-4],[-5],[-6],[-7],[-4,-5,-6,-7],[6],[-14],[7],[-19],[8],[-17],[9],[-20],[10],[-15],[11],[-18],[12],[-21],[13],[-16],[3],[-13],[-3,-2,-1],[-3],[-2],[-1],[-4,-5,-6,-7,-3,-2,-1],[3]]
         return m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp
 
+    @classmethod
     def buildMLMeshUnPolyze(cls,tester):
         """Level 0 (meshDim=3) - 2 TETRA4 + 3 PENTA6 + 2 POLYH
         # POLYH #0 becomes 1 TETRA4
@@ -332,7 +353,7 @@ class MEDLoaderDataForTest:
             pass
         mesh0.finishInsertingCells()
         mesh0.setCoords(coords)
-        
+
         meshM1=MEDCouplingUMesh(meshName,2)
         typeM1=[NORM_TRI3,NORM_TRI3, NORM_QUAD4,NORM_QUAD4,NORM_QUAD4, NORM_POLYGON,NORM_POLYGON,NORM_POLYGON,NORM_POLYGON]
         connM1=[[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]]
@@ -369,6 +390,7 @@ class MEDLoaderDataForTest:
         da=DataArrayInt.New(mm.getNumberOfNodes()) ; da.iota(8) ; mm.setRenumFieldArr(1,da)
         return mm
 
+    @classmethod
     def buildVecFieldOnCells_1(cls):
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
         nbOfCells=mesh.getNumberOfCells();
@@ -382,11 +404,43 @@ class MEDLoaderDataForTest:
         array.setInfoOnComponent(1,"density [g/cm^3]");
         array.setInfoOnComponent(2,"temperature [K]");
         f1.setArray(array);
-        tmp=array.getPointer();
         f1.setTime(2.,0,1);
         f1.checkConsistencyLight();
         return f1;
 
+    @classmethod
+    def buildIntVecFieldOnCells_1(cls):
+        mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
+        nbOfCells=mesh.getNumberOfCells();
+        f1=MEDCouplingFieldInt.New(ON_CELLS,ONE_TIME);
+        f1.setName("IntVectorFieldOnCells");
+        f1.setMesh(mesh);
+        array=DataArrayInt32([0,10,20,1,11,21,2,12,22,3,13,23,4,14,24,5,15,25],nbOfCells ,3)
+        array.setInfoOnComponent(0,"va1 [MW/m^3]");
+        array.setInfoOnComponent(1,"va2 [g/cm^3]");
+        array.setInfoOnComponent(2,"val3 [K]");
+        f1.setArray(array);
+        f1.setTime(2.,0,1);
+        f1.checkConsistencyLight();
+        return f1;
+
+    @classmethod
+    def buildFloatVecFieldOnCells_1(cls):
+        mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
+        nbOfCells=mesh.getNumberOfCells();
+        f1=MEDCouplingFieldFloat.New(ON_CELLS,ONE_TIME);
+        f1.setName("FloatVectorFieldOnCells");
+        f1.setMesh(mesh);
+        array=DataArrayFloat([0.,10.,20.,1.,11.,21.,2.,12.,22.,3.,13.,23.,4.,14.,24.,5.,15.,25.], nbOfCells, 3);
+        array.setInfoOnComponent(0,"power [MW/m^3]");
+        array.setInfoOnComponent(1,"density [g/cm^3]");
+        array.setInfoOnComponent(2,"temperature [K]");
+        f1.setArray(array);
+        f1.setTime(2.,0,1);
+        f1.checkConsistencyLight();
+        return f1;
+
+    @classmethod
     def buildVecFieldOnNodes_1(cls):
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
         nbOfNodes=mesh.getNumberOfNodes();
@@ -405,6 +459,7 @@ class MEDLoaderDataForTest:
         f1.checkConsistencyLight();
         return f1;
 
+    @classmethod
     def buildVecFieldOnGauss_1(cls):
         _a=0.446948490915965;
         _b=0.091576213509771;
@@ -447,6 +502,7 @@ class MEDLoaderDataForTest:
         f.checkConsistencyLight();
         return f;
 
+    @classmethod
     def buildVecFieldOnGauss_2(cls):
         _a=0.446948490915965;
         _b=0.091576213509771;
@@ -497,6 +553,7 @@ class MEDLoaderDataForTest:
         return f;
 
     # idem buildVecFieldOnGauss_2 except that different discretizations are sorted inside one type
+    @classmethod
     def buildVecFieldOnGauss_2_Simpler(cls):
         _a=0.446948490915965;
         _b=0.091576213509771;
@@ -546,6 +603,7 @@ class MEDLoaderDataForTest:
         f.checkConsistencyLight();
         return f;
 
+    @classmethod
     def buildVecFieldOnGaussNE_1(cls):
         m=MEDLoaderDataForTest.build2DMesh_2();
         f=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME);
@@ -562,6 +620,7 @@ class MEDLoaderDataForTest:
         f.checkConsistencyLight();
         return f;
 
+    @classmethod
     def buildACompleteMEDDataStructureWithFieldsOnCells_1(cls):
         coo=DataArrayDouble([0,0,1,0,2,0,0,1,1,1,2,1,0,2,1,2,2,2],9,2)
         m0=MEDCouplingUMesh("mesh",2)
@@ -658,6 +717,7 @@ class MEDLoaderDataForTest:
         data=MEDFileData() ; data.setMeshes(ms) ; data.setFields(fs)
         return data
 
+    @classmethod
     def buildAMEDFileDataWithGroupOnOneFamilyForSauv(self):
         # Coordinates
         coords = [0.,0., 0.,1., 1.,1., 1.,0.]
@@ -706,23 +766,271 @@ class MEDLoaderDataForTest:
         mfd.setMeshes(ms)
         #
         return mfd
-    
-    build1DMesh_1=classmethod(build1DMesh_1)
-    build2DCurveMesh_1=classmethod(build2DCurveMesh_1)
-    build2DMesh_1=classmethod(build2DMesh_1)
-    build2DMesh_2=classmethod(build2DMesh_2)
-    build2DMesh_3=classmethod(build2DMesh_3)
-    build3DMesh_1=classmethod(build3DMesh_1)
-    build3DSurfMesh_1=classmethod(build3DSurfMesh_1)
-    build3DMesh_2=classmethod(build3DMesh_2)
-    buildMLMeshUnPolyze=classmethod(buildMLMeshUnPolyze)
-    buildMultiLevelMesh_1=classmethod(buildMultiLevelMesh_1)
-    buildVecFieldOnCells_1=classmethod(buildVecFieldOnCells_1)
-    buildVecFieldOnNodes_1=classmethod(buildVecFieldOnNodes_1)
-    buildVecFieldOnGauss_1=classmethod(buildVecFieldOnGauss_1)
-    buildVecFieldOnGauss_2=classmethod(buildVecFieldOnGauss_2)
-    buildVecFieldOnGauss_2_Simpler=classmethod(buildVecFieldOnGauss_2_Simpler)
-    buildVecFieldOnGaussNE_1=classmethod(buildVecFieldOnGaussNE_1)
-    buildACompleteMEDDataStructureWithFieldsOnCells_1=classmethod(buildACompleteMEDDataStructureWithFieldsOnCells_1)
-    buildAMEDFileDataWithGroupOnOneFamilyForSauv=classmethod(buildAMEDFileDataWithGroupOnOneFamilyForSauv)
+
+    pass
+
+def TestWriteUMeshesRW1(tester):
+    fileName="Pyfile18.med";
+    m3d=MEDLoaderDataForTest.build3DMesh_2();
+    pt=[0.,0.,-0.3]
+    vec=[0.,0.,1.]
+    nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
+    m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
+    renumber=[1,2,0,4,3]
+    m2d.renumberCells(renumber,False);
+    m2d.setName("ExampleOfMultiDimW");
+    meshes=[m2d,m3d]
+    WriteUMeshes(fileName,meshes,False);
+    m3d_bis=ReadUMeshFromFile(fileName,m2d.getName(),0);
+    tester.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
+    m3d_bis.setName(m3d.getName());
+    tester.assertTrue(m3d_bis.isEqual(m3d,1e-12));
+    m2d_bis=ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
+    tester.assertTrue(m2d_bis.isEqual(m2d,1e-12));
+    # Creation of a field on faces.
+    f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
+    f1.setName("FieldOnFacesShuffle");
+    f1.setMesh(m2d);
+    array=DataArrayDouble.New();
+    arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
+    array.setValues(arr1,m2d.getNumberOfCells(),2);
+    array.setInfoOnComponent(0,"plkj [mm]");
+    array.setInfoOnComponent(1,"pqqqss [mm]");
+    f1.setArray(array);
+    tmp=array.setValues(arr1,m2d.getNumberOfCells(),2);
+    f1.setTime(3.14,2,7);
+    f1.checkConsistencyLight();
+    WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+    f2=ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
+    tester.assertTrue(f2.isEqual(f1,1e-12,1e-12));
+    pass
+
+def TestMultiFieldShuffleRW1(tester):
+    fileName="Pyfile17.med";
+    m=MEDLoaderDataForTest.build3DMesh_2();
+    tester.assertEqual(20,m.getNumberOfCells());
+    tester.assertEqual(45,m.getNumberOfNodes());
+    polys=[1,4,6]
+    m.convertToPolyTypes(polys);
+    renum=[1,3,2,8,9,12,13,16,19,0,4,7,5,15,14,17,10,18,6,11]
+    m.renumberCells(renum,False);
+    m.orientCorrectlyPolyhedrons();
+    # Writing
+    WriteUMeshDep(fileName,m,False);
+    f1Tmp=m.getMeasureField(False);
+    f1=f1Tmp.buildNewTimeReprFromThis(ONE_TIME,False);
+    f1.setTime(0.,1,2);
+    f_1=f1.cloneWithMesh(True);
+    WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+    f1.applyFunc("2*x");
+    f1.setTime(0.01,3,4);
+    f_2=f1.cloneWithMesh(True);
+    WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+    f1.applyFunc("2*x/3");
+    f1.setTime(0.02,5,6);
+    f_3=f1.cloneWithMesh(True);
+    WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+    # Reading
+    its=[(1,2),(3,4),(5,6)];
+    fs=ReadFieldsOnSameMesh(ON_CELLS,fileName,f_1.getMesh().getName(),0,f_1.getName(),its);
+    tester.assertEqual(3,len(fs));
+    tester.assertTrue(fs[0].isEqual(f_1,1e-12,1e-12));
+    tester.assertTrue(fs[1].isEqual(f_2,1e-12,1e-12));
+    tester.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
+
+def GeneratePyfile13(tester):
+    fileName="Pyfile13.med";
+    f1=MEDLoaderDataForTest.buildVecFieldOnGauss_1();
+    WriteField(fileName,f1,True);
+    f2=ReadField(ON_GAUSS_PT,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
+    tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
     pass
+
+def GeneratePyfile14(tester):
+    fileName="Pyfile14.med";
+    f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
+    WriteField(fileName,f1,True);
+    tester.assertEqual([ON_GAUSS_NE],GetTypesOfField(fileName,'2DMesh_2','MyFieldOnGaussNE')) #Bug 22/5/2014
+    f2=ReadField(ON_GAUSS_NE,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
+    tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+
+
+def GeneratePyfile18(tester):
+    fileName="Pyfile18.med";
+    m3d=MEDLoaderDataForTest.build3DMesh_2();
+    pt=[0.,0.,-0.3]
+    vec=[0.,0.,1.]
+    nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
+    m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
+    renumber=[1,2,0,4,3]
+    m2d.renumberCells(renumber,False);
+    m2d.setName("ExampleOfMultiDimW");
+    meshes=[m2d,m3d]
+    WriteUMeshes(fileName,meshes,True);
+    m3d_bis=ReadUMeshFromFile(fileName,m2d.getName(),0);
+    tester.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
+    m3d_bis.setName(m3d.getName());
+    tester.assertTrue(m3d_bis.isEqual(m3d,1e-12));
+    m2d_bis=ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
+    tester.assertTrue(m2d_bis.isEqual(m2d,1e-12));
+    # Creation of a field on faces.
+    f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
+    f1.setName("FieldOnFacesShuffle");
+    f1.setMesh(m2d);
+    array=DataArrayDouble.New();
+    arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
+    array.setValues(arr1,m2d.getNumberOfCells(),2);
+    array.setInfoOnComponent(0,"plkj [mm]");
+    array.setInfoOnComponent(1,"pqqqss [mm]");
+    f1.setArray(array);
+    tmp=array.setValues(arr1,m2d.getNumberOfCells(),2);
+    f1.setTime(3.14,2,7);
+    f1.checkConsistencyLight();
+    WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+    f2=ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
+    tester.assertTrue(f2.isEqual(f1,1e-12,1e-12));
+
+def GeneratePyfile19(tester):
+    fileName="Pyfile19.med";
+    fileName2="Pyfile20.med";
+    m=MEDLoaderDataForTest.build2DMesh_1();
+    nbOfNodes=m.getNumberOfNodes();
+    WriteUMesh(fileName,m,True);
+    f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME);
+    f1.setName("VFieldOnNodes");
+    f1.setMesh(m);
+    array=DataArrayDouble.New();
+    arr1=[1.,101.,2.,102.,3.,103.,4.,104.,5.,105.,6.,106.,7.,107.,8.,108.,9.,109.,10.,110.,11.,111.,12.,112.]
+    array.setValues(arr1,nbOfNodes,2);
+    f1.setArray(array);
+    array.setInfoOnComponent(0,"tyty [mm]");
+    array.setInfoOnComponent(1,"uiop [MW]");
+    f1.setTime(3.14,2,7);
+    f1.checkConsistencyLight();
+    arr2=[1,4]
+    f2=f1.buildSubPart(arr2);
+    f2.getMesh().setName(f1.getMesh().getName());
+    WriteField(fileName,f2,False);#<- False important for the test
+    #
+    f3=ReadFieldNode(fileName,f2.getMesh().getName(),0,f2.getName(),2,7);
+    f3.checkConsistencyLight();
+    tester.assertTrue(f3.isEqual(f2,1e-12,1e-12));
+    #
+    arr3=[1,3,0,5,2,4]
+    f2.renumberNodes(arr3);
+    WriteUMesh(fileName2,m,True);
+    WriteField(fileName2,f2,False);#<- False important for the test
+    f3=ReadFieldNode(fileName2,f2.getMesh().getName(),0,f2.getName(),2,7);
+    f3.checkConsistencyLight();
+    tester.assertTrue(f3.isEqual(f2,1e-12,1e-12));
+    #
+    pass
+
+def GeneratePyfile7(tester):
+    f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
+    WriteField("Pyfile6.med",f1,True);
+    f2=ReadFieldCell("Pyfile6.med",f1.getMesh().getName(),0,f1.getName(),0,1);
+    tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+    #
+    f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
+    WriteField("Pyfile7.med",f1,True);
+    f2=ReadFieldNode("Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
+    tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+    tester.assertRaises(Exception,ReadFieldCell,"Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
+    pass
+
+def GeneratePyfile12(tester):
+    fileName="Pyfile12.med";
+    mesh1=MEDLoaderDataForTest.build3DMesh_1();
+    da,b,newNbOfNodes=mesh1.mergeNodes(1e-12);
+    WriteUMesh(fileName,mesh1,True);
+    part1=[1,2,4,13,15]
+    mesh2=mesh1.buildPartOfMySelf(part1,True);
+    mesh2.setName(mesh1.getName());#<- important for the test
+    #
+    nbOfCells=mesh2.getNumberOfCells();
+    tester.assertEqual(5,nbOfCells);
+    f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
+    f1.setName("VectorFieldOnCells");
+    f1.setMesh(mesh2);
+    array=DataArrayDouble.New();
+    array.alloc(nbOfCells,2);
+    f1.setArray(array);
+    arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
+    array.setValues(arr1,nbOfCells,2);
+    f1.setTime(3.14,2,7);
+    f1.checkConsistencyLight();
+    #
+    WriteField(fileName,f1,False);#<- False important for the test
+    #
+    f2=ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
+    tt=GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
+    tester.assertEqual(tt,[ON_CELLS]);
+    f2.checkConsistencyLight();
+    tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+
+def GeneratePyfile10(tester):
+    fileName="Pyfile10.med";
+    mesh1=MEDLoaderDataForTest.build3DMesh_1();
+    part1=[1,2,4,13,15]
+    mesh2=mesh1.buildPartOfMySelf(part1,True);
+    mesh2.setName("mesh2");
+    part2=[3,4,13,14]
+    mesh3=mesh1.buildPartOfMySelf(part2,True);
+    mesh3.setName("mesh3");
+    mesh4=MEDCouplingUMesh.New();
+    mesh4.setName("mesh4");
+    mesh4.setMeshDimension(3);
+    mesh4.allocateCells(1);
+    conn=[0,11,1,3]
+    mesh4.insertNextCell(NORM_TETRA4,4,conn[0:4])
+    mesh4.finishInsertingCells();
+    mesh4.setCoords(mesh1.getCoords());
+    meshes=[mesh1,mesh2,mesh3,mesh4]
+    mnane="3DToto";
+    WriteUMeshesPartition(fileName,mnane,meshes,True);
+    #
+    mesh5=ReadUMeshFromFile(fileName,mnane);
+    mesh1.setName(mnane);
+    part3=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
+    mesh6=mesh5.buildPartOfMySelf(part3,True);
+    mesh6.setName(mnane);
+    tester.assertTrue(mesh6.isEqual(mesh1,1e-12));
+    grps=GetMeshGroupsNames(fileName,mnane);
+    tester.assertEqual(4,len(grps));
+    grps.index("mesh2");
+    grps.index("mesh3");
+    grps.index("mesh4");
+    grps.index("3DMesh_1");
+    #
+    vec=("mesh2",);
+    mesh2_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
+    tester.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
+    vec=["mesh3"];
+    mesh3_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
+    tester.assertTrue(mesh3_2.isEqual(mesh3,1e-12));
+    vec=["mesh4"];
+    mesh4_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
+    tester.assertTrue(mesh4_2.isEqual(mesh4,1e-12));
+    vec="3DMesh_1";
+    mesh1_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
+    mesh1.setName("3DMesh_1");
+    tester.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
+    #
+    vec=["Family_-3","Family_-5"];
+    mesh2_2=ReadUMeshFromFamilies(fileName,mnane,0,vec);
+    mesh2_2.setName("mesh2");
+    tester.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
+    #
+    ret=GetMeshFamiliesNamesOnGroup(fileName,"3DToto","3DMesh_1");
+    tester.assertEqual(4,len(ret));
+    ref=['Family_-3','Family_-4','Family_-2','Family_-5']
+    tester.assertIn(ref[0],ret);
+    tester.assertIn(ref[1],ret);
+    tester.assertIn(ref[2],ret);
+    tester.assertIn(ref[3],ret);
+    #
+    ret1=GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_-3");
+    tester.assertEqual(2,len(ret1));
+    tester.assertEqual(ret1[0],"3DMesh_1");
+    tester.assertEqual(ret1[1],"mesh2");