Salome HOME
Copyright update 2022
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest1.py
index a0ed45ca7be62f13329183df01dc1f7852a49c21..0f5a8ee12782200c27b69d40bc1d1ecd0598973f 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2015  CEA/DEN, EDF R&D
+# Copyright (C) 2007-2022  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
 import MEDLoader
 import unittest
 from math import pi,e,sqrt
-from MEDLoaderDataForTest import MEDLoaderDataForTest
+from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
+from MEDLoaderDataForTest import GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
 
 class MEDLoaderTest1(unittest.TestCase):
+    @WriteInTmpDir
     def testMesh1DRW(self):
         mesh=MEDLoaderDataForTest.build1DMesh_1();
         mesh.checkConsistencyLight();
@@ -33,6 +35,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testMesh2DCurveRW(self):
         mesh=MEDLoaderDataForTest.build2DCurveMesh_1();
         mesh.checkConsistencyLight();
@@ -41,6 +44,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testMesh2DRW(self):
         mesh=MEDLoaderDataForTest.build2DMesh_1();
         mesh.checkConsistencyLight();
@@ -49,6 +53,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testMesh3DSurfRW(self):
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
         mesh.checkConsistencyLight();
@@ -57,6 +62,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testMesh3DRW(self):
         mesh=MEDLoaderDataForTest.build3DMesh_1();
         mesh.checkConsistencyLight();
@@ -65,31 +71,31 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testFieldRW1(self):
-        f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
-        MEDLoader.WriteField("Pyfile6.med",f1,True);
-        f2=MEDLoader.ReadFieldCell("Pyfile6.med",f1.getMesh().getName(),0,f1.getName(),0,1);
-        self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
-        #
-        f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
-        MEDLoader.WriteField("Pyfile7.med",f1,True);
-        f2=MEDLoader.ReadFieldNode("Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
-        self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
-        self.assertRaises(Exception,MEDLoader.ReadFieldCell,"Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
+        GeneratePyfile7(self)
         pass
 
+    @WriteInTmpDir
     def testFieldRW2(self):
         fileName="Pyfile8.med";
         VAL1=12345.67890314;
         VAL2=-1111111111111.;
         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
+        f1_int=MEDLoaderDataForTest.buildIntVecFieldOnCells_1();
+        f1_fl=MEDLoaderDataForTest.buildFloatVecFieldOnCells_1();
         MEDLoader.WriteField(fileName,f1,True);
         f1.setTime(10.,8,9);
+        f1_int.setTime(10.,8,9);
+        f1_fl.setTime(10.,8,9);
         f1.getArray().setIJ(0,0,VAL1);
         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
         f1.setTime(10.14,18,19);
         f1.getArray().setIJ(0,0,VAL2);
         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
+        # Write int and float fields:
+        MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1_int);
+        MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1_fl);
         #retrieving time steps...
         f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),8,9);
         f1.setTime(10.,8,9);
@@ -104,6 +110,11 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
         #test of throw on invalid (dt,it)
         self.assertRaises(Exception,MEDLoader.ReadFieldCell,fileName,f1.getMesh().getName(),0,f1.getName(),28,19);
+        # Reading Int and Float fields:
+        f2_int=MEDLoader.ReadFieldCell(fileName,f1_int.getMesh().getName(),0,f1_int.getName(),8,9);
+        self.assertTrue(f1_int.isEqual(f2_int,1e-12,0));  # exact comparison here
+        f2_fl=MEDLoader.ReadFieldCell(fileName,f1_fl.getMesh().getName(),0,f1_fl.getName(),8,9);
+        self.assertTrue(f1_fl.isEqual(f2_fl,1e-12,1e-7)); # float comparison here 
         #ON NODES
         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
         fileName2="Pyfile9.med";
@@ -131,6 +142,7 @@ class MEDLoaderTest1(unittest.TestCase):
     #
     # Multi field in a same file, but this field has several
     #
+    @WriteInTmpDir
     def testFieldRW3(self):
         fileName="Pyfile11.med";
         VAL1=12345.67890314;
@@ -205,122 +217,28 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertAlmostEqual(VAL2,f1.getArray().getIJ(0,3),13);
         pass
 
+    @WriteInTmpDir
     def testMultiMeshRW1(self):
-        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=MEDLoader.MEDCouplingUMesh.New();
-        mesh4.setName("mesh4");
-        mesh4.setMeshDimension(3);
-        mesh4.allocateCells(1);
-        conn=[0,11,1,3]
-        mesh4.insertNextCell(MEDLoader.NORM_TETRA4,4,conn[0:4])
-        mesh4.finishInsertingCells();
-        mesh4.setCoords(mesh1.getCoords());
-        meshes=[mesh1,mesh2,mesh3,mesh4]
-        mnane="3DToto";
-        MEDLoader.WriteUMeshesPartition(fileName,mnane,meshes,True);
-        #
-        mesh5=MEDLoader.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);
-        self.assertTrue(mesh6.isEqual(mesh1,1e-12));
-        grps=MEDLoader.GetMeshGroupsNames(fileName,mnane);
-        self.assertEqual(4,len(grps));
-        grps.index("mesh2");
-        grps.index("mesh3");
-        grps.index("mesh4");
-        grps.index("3DMesh_1");
-        #
-        vec=("mesh2",);
-        mesh2_2=MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
-        self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
-        vec=["mesh3"];
-        mesh3_2=MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
-        self.assertTrue(mesh3_2.isEqual(mesh3,1e-12));
-        vec=["mesh4"];
-        mesh4_2=MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
-        self.assertTrue(mesh4_2.isEqual(mesh4,1e-12));
-        vec="3DMesh_1";
-        mesh1_2=MEDLoader.ReadUMeshFromGroups(fileName,mnane,0,vec);
-        mesh1.setName("3DMesh_1");
-        self.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
-        #
-        vec=["Family_-3","Family_-5"];
-        mesh2_2=MEDLoader.ReadUMeshFromFamilies(fileName,mnane,0,vec);
-        mesh2_2.setName("mesh2");
-        self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
-        #
-        ret=MEDLoader.GetMeshFamiliesNamesOnGroup(fileName,"3DToto","3DMesh_1");
-        self.assertEqual(4,len(ret));
-        ref=['Family_-3','Family_-4','Family_-2','Family_-5']
-        self.assertIn(ref[0],ret);
-        self.assertIn(ref[1],ret);
-        self.assertIn(ref[2],ret);
-        self.assertIn(ref[3],ret);
-        #
-        ret1=MEDLoader.GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_-3");
-        self.assertEqual(2,len(ret1));
-        self.assertEqual(ret1[0],"3DMesh_1");
-        self.assertEqual(ret1[1],"mesh2");
+        GeneratePyfile10(self)
         pass
 
+    @WriteInTmpDir
     def testFieldProfilRW1(self):
-        fileName="Pyfile12.med";
-        mesh1=MEDLoaderDataForTest.build3DMesh_1();
-        da,b,newNbOfNodes=mesh1.mergeNodes(1e-12);
-        MEDLoader.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();
-        self.assertEqual(5,nbOfCells);
-        f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
-        f1.setName("VectorFieldOnCells");
-        f1.setMesh(mesh2);
-        array=MEDLoader.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();
-        #
-        MEDLoader.WriteField(fileName,f1,False);#<- False important for the test
-        #
-        f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
-        tt=MEDLoader.GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
-        self.assertEqual(tt,[MEDLoader.ON_CELLS]);
-        f2.checkConsistencyLight();
-        self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+        GeneratePyfile12(self)
         #
         pass
 
+    @WriteInTmpDir
     def testFieldGaussRW1(self):
-        fileName="Pyfile13.med";
-        f1=MEDLoaderDataForTest.buildVecFieldOnGauss_1();
-        MEDLoader.WriteField(fileName,f1,True);
-        f2=MEDLoader.ReadField(MEDLoader.ON_GAUSS_PT,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
-        self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+        GeneratePyfile13(self)
         pass
 
+    @WriteInTmpDir
     def testFieldGaussNERW1(self):
-        fileName="Pyfile14.med";
-        f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
-        MEDLoader.WriteField(fileName,f1,True);
-        self.assertEqual([MEDLoader.ON_GAUSS_NE],MEDLoader.GetTypesOfField(fileName,'2DMesh_2','MyFieldOnGaussNE')) #Bug 22/5/2014
-        f2=MEDLoader.ReadField(MEDLoader.ON_GAUSS_NE,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
-        self.assertTrue(f1.isEqual(f2,1e-12,1e-12));
+        GeneratePyfile14(self)
         pass
 
+    @WriteInTmpDir
     def testMesh3DSurfShuffleRW(self):
         fileName="Pyfile15.med";
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
@@ -332,6 +250,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(mesh.isEqual(mesh_rw,1e-12));
         pass
 
+    @WriteInTmpDir
     def testMultiFieldShuffleRW1(self):
         fileName="Pyfile17.med";
         m=MEDLoaderDataForTest.build3DMesh_2();
@@ -366,78 +285,17 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
         pass
 
+    @WriteInTmpDir
     def testWriteUMeshesRW1(self):
-        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]
-        MEDLoader.WriteUMeshes(fileName,meshes,True);
-        m3d_bis=MEDLoader.ReadUMeshFromFile(fileName,m2d.getName(),0);
-        self.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
-        m3d_bis.setName(m3d.getName());
-        self.assertTrue(m3d_bis.isEqual(m3d,1e-12));
-        m2d_bis=MEDLoader.ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
-        self.assertTrue(m2d_bis.isEqual(m2d,1e-12));
-        # Creation of a field on faces.
-        f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_CELLS,MEDLoader.ONE_TIME);
-        f1.setName("FieldOnFacesShuffle");
-        f1.setMesh(m2d);
-        array=MEDLoader.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();
-        MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
-        f2=MEDLoader.ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
-        self.assertTrue(f2.isEqual(f1,1e-12,1e-12));
+        GeneratePyfile18(self)
         pass
 
+    @WriteInTmpDir
     def testFieldNodeProfilRW1(self):
-        fileName="Pyfile19.med";
-        fileName2="Pyfile20.med";
-        m=MEDLoaderDataForTest.build2DMesh_1();
-        nbOfNodes=m.getNumberOfNodes();
-        MEDLoader.WriteUMesh(fileName,m,True);
-        f1=MEDLoader.MEDCouplingFieldDouble.New(MEDLoader.ON_NODES,MEDLoader.ONE_TIME);
-        f1.setName("VFieldOnNodes");
-        f1.setMesh(m);
-        array=MEDLoader.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());
-        MEDLoader.WriteField(fileName,f2,False);#<- False important for the test
-        #
-        f3=MEDLoader.ReadFieldNode(fileName,f2.getMesh().getName(),0,f2.getName(),2,7);
-        f3.checkConsistencyLight();
-        self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
-        #
-        arr3=[1,3,0,5,2,4]
-        f2.renumberNodes(arr3);
-        MEDLoader.WriteUMesh(fileName2,m,True);
-        MEDLoader.WriteField(fileName2,f2,False);#<- False important for the test
-        f3=MEDLoader.ReadFieldNode(fileName2,f2.getMesh().getName(),0,f2.getName(),2,7);
-        f3.checkConsistencyLight();
-        self.assertTrue(f3.isEqual(f2,1e-12,1e-12));
-        #
+        GeneratePyfile19(self)
         pass
 
+    @WriteInTmpDir
     def testFieldNodeProfilRW2(self):
         fileName="Pyfile23.med";
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
@@ -465,6 +323,7 @@ class MEDLoaderTest1(unittest.TestCase):
         #
         pass
 
+    @WriteInTmpDir
     def testMixCellAndNodesFieldRW1(self):
         fileName="Pyfile21.med";
         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
@@ -517,6 +376,7 @@ class MEDLoaderTest1(unittest.TestCase):
         #
         pass
 
+    @WriteInTmpDir
     def testGetAllFieldNamesRW1(self):
         fileName="Pyfile22.med";
         mesh=MEDLoaderDataForTest.build2DMesh_2();
@@ -548,6 +408,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(fs[3]=="Field8");
         pass
 
+    @WriteInTmpDir
     def testBigNbOfCompoNonReg(self):
         fileName="Pyfile57.med"
         m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(MEDLoader.DataArrayDouble([0,1,2,3]),MEDLoader.DataArrayDouble([0,1]),MEDLoader.DataArrayDouble([0,1]))
@@ -556,7 +417,7 @@ class MEDLoaderTest1(unittest.TestCase):
         nbOfCompo=4100
         arr=MEDLoader.DataArrayDouble(nbOfCompo*3) ; arr.iota()
         arr.rearrange(nbOfCompo)
-        arr.setInfoOnComponents(["c%i"%(i) for i in xrange(nbOfCompo)])
+        arr.setInfoOnComponents(["c%i" % (i) for i in range(nbOfCompo)])
         f.setArray(arr)
         f.setName("FieldBigCompo")
         MEDLoader.WriteField(fileName,f,True)
@@ -564,13 +425,14 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
         pass
 
+    @WriteInTmpDir
     def testMultiMeshTypeWrite0(self):
         fname="Pyfile73.med"
         m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
         m.insertNextCell([0,2,1,3])
         m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
         #
-        ms=[m.deepCopy() for i in xrange(4)]
+        ms = [m.deepCopy() for i in range(4)]
         for i,elt in enumerate(ms):
             elt.translate([float(i)*1.5,0.])
             pass
@@ -612,14 +474,15 @@ class MEDLoaderTest1(unittest.TestCase):
         fRead=MEDLoader.ReadFieldCell(fname,"mesh",0,f.getName(),-1,-1)
         self.assertTrue(f.isEqual(fRead,1e-12,1e-12))
         pass
-    
+
+    @WriteInTmpDir
     def testMultiMeshTypeWrite1(self):
         fname="Pyfile74.med"
         m=MEDLoader.MEDCoupling1SGTUMesh("mesh",MEDLoader.NORM_QUAD4) ; m.allocateCells()
         m.insertNextCell([0,2,1,3])
         m.setCoords(MEDLoader.DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
         #
-        ms=[m.deepCopy() for i in xrange(4)]
+        ms = [m.deepCopy() for i in range(4)]
         for i,elt in enumerate(ms):
             elt.translate([float(i)*1.5,0.])
             pass
@@ -660,6 +523,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(m0.isEqual(mRead,1e-12))
         pass
 
+    @WriteInTmpDir
     def testChangeGroupName(self):
         """ This test is a non regression test on MEDFileUMesh.changeGroupName thanks to Alliance.
         """
@@ -669,6 +533,7 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue("xonall1" in mesh.getGroupsNames())
         pass
 
+    @WriteInTmpDir
     def testFieldWithTooLongName(self):
         """ This test is a non regression test, to check that in basic API the policies are taken into account.
         """
@@ -692,7 +557,7 @@ class MEDLoaderTest1(unittest.TestCase):
         d=MEDLoader.DataArrayDouble.New()
         d.alloc(1,1)
         d.iota(1.)
-        # seting a long name
+        # setting a long name
         d.setInfoOnComponent(0,"CONCENTRATION of I129")
         f.setArray(d)
         f.setName("field")
@@ -712,6 +577,7 @@ class MEDLoaderTest1(unittest.TestCase):
         MEDLoader.WriteField(fname,f,True)
         pass
 
+    @WriteInTmpDir
     def testUsingAlreadyWrittenMesh2(self):
         """ This test focuses on MEDLoader.WriteFieldUsingAlreadyWrittenMesh with mesh different from UMesh.
         """
@@ -751,6 +617,150 @@ class MEDLoaderTest1(unittest.TestCase):
         self.assertTrue(f11.isEqual(f3r,1e-12,1e-12))
         self.assertTrue(f3r.getArray().isEqual(MEDLoader.DataArrayDouble([0.,4.,8.,12.,16.,20.,24.,28.,32.,36.,40.,44.,48.,52.,56.,60.,64.,68.,72.,76.]),1e-12))
         pass
+
+    @WriteInTmpDir
+    def testEasyFieldRead1(self):
+        fname="Pyfile111.med"
+        arr=MEDLoader.DataArrayDouble(4) ; arr.iota()
+        m=MEDLoader.MEDCouplingCMesh() ; m.setCoords(arr,arr)
+        m=m.buildUnstructured()
+        m.setName("mesh")
+        f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
+        f.setName("field")
+        f.setTime(3.,1,2)
+        da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9,10])
+        f.setArray(da) ; f.setMesh(m)
+        MEDLoader.WriteField(fname,f,True)
+        #
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        #
+        f3=f.deepCopy()
+        f3.setArray(f.getArray()+30)
+        f3.setName("field2")
+        f3.setTime(5.,4,5)
+        MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f3)
+        #
+        self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
+        #
+        f2=f.deepCopy()
+        f2.setTime(4.,3,4)
+        f2.setArray(f2.getArray()+10)
+        MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fname,f2)
+        #
+        self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
+        self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
+        #
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
+        #
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
+        self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
+        self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
+        # Test on profile - restart from scratch
+        mm=MEDLoader.MEDFileUMesh()
+        mm[0]=m
+        mm.write(fname,2)
+        #
+        pfl = MEDLoader.DataArrayInt(list(range(8)))
+        pfl.setName("PFL")
+        #
+        f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
+        f.setName("field")
+        f.setTime(3.,1,2)
+        da=MEDLoader.DataArrayDouble([2,3,4,5,6,7,8,9])
+        f.setArray(da) ; f.setMesh(m[pfl])
+        f.checkConsistencyLight()
+        #
+        f1ts=MEDLoader.MEDFileField1TS()
+        f1ts.setFieldProfile(f,mm,0,pfl)
+        f1ts.write(fname,0)
+        #
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        #
+        f3=f.deepCopy()
+        f3.setArray(f.getArray()+30)
+        f3.setName("field2")
+        f3.setTime(5.,4,5)
+        f1ts=MEDLoader.MEDFileField1TS()
+        f1ts.setFieldProfile(f3,mm,0,pfl)
+        f1ts.write(fname,0)
+        #
+        self.assertRaises(Exception,MEDLoader.ReadField,fname) # because several fields in fname now
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field"),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
+        #
+        f2=f.deepCopy()
+        f2.setTime(4.,3,4)
+        f2.setArray(f2.getArray()+10)
+        f1ts=MEDLoader.MEDFileField1TS()
+        f1ts.setFieldProfile(f2,mm,0,pfl)
+        f1ts.write(fname,0)
+        #
+        self.assertRaises(Exception,MEDLoader.ReadField,fname) # because unique field "field" has more than one time step
+        self.assertRaises(Exception,MEDLoader.ReadField,fname,"field") # because unique field "field" has more than one time step
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
+        #
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(fname,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",1,2),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(fname,"field",3,4),1e-12,1e-12))
+        self.assertTrue(f2.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field",3,4),1e-12,1e-12))
+        #
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2"),1e-12,1e-12))
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(fname,"field2",4,5),1e-12,1e-12))
+        self.assertRaises(Exception,MEDLoader.ReadField,fname,"field2",5,5) # invalid time step
+        self.assertTrue(f3.isEqual(MEDLoader.ReadField(MEDLoader.ON_CELLS,fname,"mesh",0,"field2",4,5),1e-12,1e-12))
+        self.assertRaises(Exception,MEDLoader.ReadField,MEDLoader.ON_CELLS,fname,"mesh",0,"field2",5,5) # invalid time step
+        pass
+
+    @WriteInTmpDir
+    def testMultiWriteFieldOnMergeableNodesMeshes(self):
+        fname="Pyfile120.med"
+        arr=MEDLoader.DataArrayDouble([(0,0),(1,0),(0,1),(0,0),(1,0),(0,1)])
+        m=MEDLoader.MEDCouplingUMesh("mesh",2)
+        m.setCoords(arr)
+        m.allocateCells()
+        m.insertNextCell(MEDLoader.NORM_TRI3,[0,4,2])
+        m.insertNextCell(MEDLoader.NORM_TRI3,[3,1,5])
+        m.setName("mesh")
+        #
+        f=MEDLoader.MEDCouplingFieldDouble(MEDLoader.ON_CELLS)
+        f.setMesh(m)
+        f.setArray(MEDLoader.DataArrayDouble([5,6]))
+        f.setName("field")
+        #
+        f.setTime(0.,0,0)
+        MEDLoader.WriteField(fname,f,True)
+        f.setTime(1.,1,0)
+        MEDLoader.WriteField(fname,f,False)
+        pass
+
     pass
 
 if __name__ == "__main__":