Salome HOME
updated copyright message
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderDataForTest.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2023  CEA/DEN, EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (EDF R&D)
21
22 from MEDLoader import *
23 from math import pi,e,sqrt
24 import sys
25
26 def WriteInTmpDir(func):
27     def decaratedFunc(*args,**kwargs):
28         import tempfile,os
29         ret = None
30         with tempfile.TemporaryDirectory() as tmpdirname:
31             os.chdir(tmpdirname)
32             ret = func(*args,**kwargs)
33             os.chdir(os.path.dirname(tmpdirname))
34             pass
35         return ret
36     return decaratedFunc
37
38 class MEDLoaderDataForTest:
39     @classmethod
40     def build1DMesh_1(cls):
41         coords=[ 0.0, 0.3, 0.75, 1.0, 1.4, 1.3 ]
42         conn=[ 0,1, 1,2, 2,3 , 3,4,5]
43         mesh=MEDCouplingUMesh.New();
44         mesh.setName("1DMesh_1");
45         mesh.setMeshDimension(1);
46         mesh.allocateCells(4);
47         mesh.insertNextCell(NORM_SEG2,2,conn[0:2])
48         mesh.insertNextCell(NORM_SEG2,2,conn[2:4])
49         mesh.insertNextCell(NORM_SEG2,2,conn[4:6])
50         mesh.insertNextCell(NORM_SEG3,3,conn[6:9])
51         mesh.finishInsertingCells();
52         myCoords=DataArrayDouble.New();
53         myCoords.setValues(coords,6,1);
54         myCoords.setInfoOnComponent(0,"tototototototot [m*m*m*m*m*m*m*m]");
55         mesh.setCoords(myCoords);
56         return mesh;
57
58     @classmethod
59     def build2DCurveMesh_1(cls):
60         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 ]
61         conn=[ 0,1, 1,2, 2,3 , 3,4,5]
62         mesh=MEDCouplingUMesh.New();
63         mesh.setName("2DCurveMesh_1");
64         mesh.setMeshDimension(1);
65         mesh.allocateCells(4);
66         mesh.insertNextCell(NORM_SEG2,2,conn[0:2])
67         mesh.insertNextCell(NORM_SEG2,2,conn[2:4])
68         mesh.insertNextCell(NORM_SEG2,2,conn[4:6])
69         mesh.insertNextCell(NORM_SEG3,3,conn[6:9])
70         mesh.finishInsertingCells();
71         myCoords=DataArrayDouble.New();
72         myCoords.setValues(coords,6,2);
73         mesh.setCoords(myCoords);
74         return mesh;
75
76     @classmethod
77     def build2DMesh_1(cls):
78         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,
79                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
80         targetConn=[1,4,2, 4,5,2, 6,10,8,9,11,7, 0,3,4,1, 6,7,4,3, 7,8,5,4]
81         targetMesh=MEDCouplingUMesh.New();
82         targetMesh.setMeshDimension(2);
83         targetMesh.allocateCells(6);
84         targetMesh.setName("2DMesh_1");
85         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
86         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
87         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
88         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[12:16])
89         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[16:20])
90         targetMesh.insertNextCell(NORM_POLYGON,4,targetConn[20:24])
91         targetMesh.finishInsertingCells();
92         myCoords=DataArrayDouble.New();
93         myCoords.setValues(targetCoords,12,2);
94         myCoords.setInfoOnComponent(0,"tototototototot [m]");
95         myCoords.setInfoOnComponent(1,"energie [kW]");
96         targetMesh.setCoords(myCoords)
97         return targetMesh;
98
99     @classmethod
100     def build2DMesh_2(cls):
101         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,
102                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
103         targetConn=[1,4,2, 4,5,2, 6,10,8,9,11,7, 0,3,4,1, 6,7,4,3, 7,8,5,4]
104         targetMesh=MEDCouplingUMesh.New();
105         targetMesh.setMeshDimension(2);
106         targetMesh.allocateCells(5);
107         targetMesh.setName("2DMesh_2");
108         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
109         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
110         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[12:16])
111         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[16:20])
112         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
113         targetMesh.finishInsertingCells();
114         myCoords=DataArrayDouble.New();
115         myCoords.setValues(targetCoords,12,2);
116         myCoords.setInfoOnComponent(0,"toto [m]");
117         myCoords.setInfoOnComponent(1,"energie [kW]");
118         targetMesh.setCoords(myCoords);
119         return targetMesh;
120
121     #this mesh has several cells duplicated ! it is not beautiful but efficient to test file WR.
122     @classmethod
123     def build2DMesh_3(cls):
124         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,
125                       -0.05,0.95, 0.2,1.2, 0.45,0.95]
126         targetConn=[1,4,2, 4,5,2, 6,10,8,9,11,7, 0,3,4,1, 6,7,4,3, 7,8,5,4]
127         targetMesh=MEDCouplingUMesh.New();
128         targetMesh.setMeshDimension(2);
129         targetMesh.allocateCells(13);
130         targetMesh.setName("2DMesh_3");
131         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
132         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
133         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
134         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
135         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
136         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
137         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[12:16])
138         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[16:20])
139         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[12:16])
140         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[16:20])
141         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
142         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
143         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
144         targetMesh.finishInsertingCells();
145         myCoords=DataArrayDouble.New();
146         myCoords.setValues(targetCoords,12,2);
147         myCoords.setInfoOnComponent(0,"toto [m]");
148         myCoords.setInfoOnComponent(1,"energie [kW]");
149         targetMesh.setCoords(myCoords);
150         return targetMesh;
151
152     @classmethod
153     def build3DMesh_1(cls):
154         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.,
155                 3.,2.,0., 0.,1.,0., 1.,3.,0., 2.,2.,0., 2.,3.,0.,
156                 0.,0.,1., 1.,1.,1., 1.,1.25,1., 0.,1.,1., 1.,1.5,1., 2.,0.,1., 2.,1.,1., 1.,2.,1., 0.,2.,1., 3.,1.,1.,
157                 3.,2.,1., 0.,1.,1., 1.,3.,1., 2.,2.,1., 2.,3.,1.,
158                 0.,0.,2., 1.,1.,2., 1.,1.25,2., 0.,1.,2., 1.,1.5,2., 2.,0.,2., 2.,1.,2., 1.,2.,2., 0.,2.,2., 3.,1.,2.,
159         3.,2.,2., 0.,1.,2., 1.,3.,2., 2.,2.,2., 2.,3.,2.,
160                 0.,0.,3., 1.,1.,3., 1.,1.25,3., 0.,1.,3., 1.,1.5,3., 2.,0.,3., 2.,1.,3., 1.,2.,3., 0.,2.,3., 3.,1.,3.,
161                 3.,2.,3., 0.,1.,3., 1.,3.,3., 2.,2.,3., 2.,3.,3.]
162         conn=[
163             # 0
164             0,11,1,3,15,26,16,18,   1,2,4,7,13,6,-1,1,16,21,6,-1,6,21,28,13,-1,13,7,22,28,-1,7,4,19,22,-1,4,2,17,19,-1,2,1,16,17,-1,16,21,28,22,19,17,
165             1,6,5,3,16,21,20,18,   13,10,9,6,28,25,24,21,
166             11,8,7,4,2,1,-1,11,26,16,1,-1,1,16,17,2,-1,2,17,19,4,-1,4,19,22,7,-1,7,8,23,22,-1,8,11,26,23,-1,26,16,17,19,22,23,
167             7,12,14,13,22,27,29,28,
168             # 1
169             15,26,16,18,30,41,31,33,   16,17,19,22,28,21,-1,16,31,36,21,-1,21,36,43,28,-1,28,22,37,43,-1,22,19,34,37,-1,19,17,32,34,-1,17,16,31,32,-1,31,36,43,37,34,32,
170             16,21,20,18,31,36,35,33,   28,25,24,21,43,40,39,36,
171             26,23,22,19,17,16,-1,26,41,31,16,-1,16,31,32,17,-1,17,32,34,19,-1,19,34,37,22,-1,22,23,38,37,-1,23,26,41,38,-1,41,31,32,34,37,38,
172             22,27,29,28,37,42,44,43,
173             # 2
174             30,41,31,33,45,56,46,48,  31,32,34,37,43,36,-1,31,46,51,36,-1,36,51,58,43,-1,43,37,52,58,-1,37,34,49,52,-1,34,32,47,49,-1,32,31,46,47,-1,46,51,58,52,49,47,
175             31,36,35,33,46,51,50,48,  43,40,39,36,58,55,54,51,
176             41,38,37,34,32,31,-1,41,56,46,31,-1,31,46,47,32,-1,32,47,49,34,-1,34,49,52,37,-1,37,38,53,52,-1,38,41,56,53,-1,56,46,47,49,52,53,
177             37,42,44,43,52,57,59,58]
178         #
179         ret=MEDCouplingUMesh.New();
180         ret.setName("3DMesh_1");
181         ret.setMeshDimension(3);
182         ret.allocateCells(18);
183         #
184         ret.insertNextCell(NORM_HEXA8,8,conn[0:8])
185         ret.insertNextCell(NORM_HEXA8,8,conn[51:59])
186         ret.insertNextCell(NORM_HEXA8,8,conn[59:67])
187         ret.insertNextCell(NORM_HEXA8,8,conn[110:118])
188         #
189         ret.insertNextCell(NORM_HEXA8,8,conn[118:126])
190         ret.insertNextCell(NORM_HEXA8,8,conn[169:177])
191         ret.insertNextCell(NORM_HEXA8,8,conn[177:185])
192         ret.insertNextCell(NORM_HEXA8,8,conn[228:236])
193         #
194         ret.insertNextCell(NORM_HEXA8,8,conn[236:244])
195         ret.insertNextCell(NORM_HEXA8,8,conn[287:295])
196         ret.insertNextCell(NORM_HEXA8,8,conn[295:303])
197         ret.insertNextCell(NORM_HEXA8,8,conn[346:354])
198         #
199         ret.insertNextCell(NORM_POLYHED,43,conn[8:51])
200         ret.insertNextCell(NORM_POLYHED,43,conn[67:110])
201         ret.insertNextCell(NORM_POLYHED,43,conn[126:169])
202         ret.insertNextCell(NORM_POLYHED,43,conn[185:228])
203         ret.insertNextCell(NORM_POLYHED,43,conn[244:287])
204         ret.insertNextCell(NORM_POLYHED,43,conn[303:346])
205         #
206         ret.finishInsertingCells();
207         myCoords=DataArrayDouble.New();
208         myCoords.setValues(coords,60,3);
209         myCoords.setInfoOnComponent(0,"titi [m]");
210         myCoords.setInfoOnComponent(1,"density power [MW/m^3]");
211         myCoords.setInfoOnComponent(2,"t [kW]");
212         ret.setCoords(myCoords);
213         return ret;
214
215     @classmethod
216     def build3DSurfMesh_1(cls):
217         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
218                       ,-0.05,0.95,-0.3, 0.2,1.2,-0.3, 0.45,0.95,-0.3]
219         targetConn=[1,4,2, 4,5,2, 6,10,8,9,11,7, 0,3,4,1, 6,7,4,3, 7,8,5,4]
220         targetMesh=MEDCouplingUMesh.New();
221         targetMesh.setMeshDimension(2);
222         targetMesh.allocateCells(6);
223         targetMesh.setName("3DSurfMesh_1");
224         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[0:3])
225         targetMesh.insertNextCell(NORM_TRI3,3,targetConn[3:6])
226         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[12:16])
227         targetMesh.insertNextCell(NORM_QUAD4,4,targetConn[16:20])
228         targetMesh.insertNextCell(NORM_TRI6,6,targetConn[6:12])
229         targetMesh.insertNextCell(NORM_POLYGON,4,targetConn[20:24])
230         targetMesh.finishInsertingCells();
231         myCoords=DataArrayDouble.New();
232         myCoords.setValues(targetCoords,12,3);
233         myCoords.setInfoOnComponent(0,"toto [m]");
234         myCoords.setInfoOnComponent(2,"ff [km]");#component 1 is not set for test
235         targetMesh.setCoords(myCoords);
236         return targetMesh;
237
238     @classmethod
239     def build3DMesh_2(cls):
240         m3dsurfBase=MEDLoaderDataForTest.build3DSurfMesh_1();
241         numbers=[0,1,2,3,5]
242         m3dsurf=m3dsurfBase.buildPartOfMySelf(numbers,False);
243         m1dBase=MEDLoaderDataForTest.build1DMesh_1();
244         numbers2=[0,1,2,3]
245         m1d=m1dBase.buildPartOfMySelf(numbers2,False);
246         m1d.changeSpaceDimension(3);
247         vec=[0.,1.,0.]
248         pt=[0.,0.,0.]
249         m1d.rotate(pt,vec,-pi/2.);
250         ret=m3dsurf.buildExtrudedMesh(m1d,0);
251         return ret;
252
253     @classmethod
254     def buildMultiLevelMesh_1(cls):
255         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]
256         coo2=DataArrayDouble.New()
257         coo2.setValues(coo,135,2)
258         coo2=coo2.changeNbOfComponents(3,0.)
259         coo2.setInfoOnComponent(0,"X [INCONNUE]")
260         coo2.setInfoOnComponent(1,"Y [INCONNUE]")
261         coo2.setInfoOnComponent(2,"Z [INCONNUE]")
262         c2tri=[0,1,6,0,6,5,1,2,6,2,7,6,2,3,8,2,8,7,3,4,8,4,9,8,5,6,11,5,11,10,6,7,11,7,12,11,7,8,13,7,13,12,8,9,13,9,14,13,10,11,16,10,16,15,11,12,16,12,17,16,12,13,18,12,18,17,13,14,18,14,19,18,15,16,21,15,21,20,16,17,21,17,22,21,17,18,23,17,23,22,18,19,23,19,24,23,20,21,26,20,26,25,21,22,26,22,27,26,22,23,28,22,28,27,23,24,28,24,29,28,25,26,31,25,31,30,26,27,31,27,32,31,27,28,33,27,33,32,28,29,33,29,34,33,30,31,36,30,36,35,31,32,36,32,37,36,32,33,38,32,38,37,33,34,38,34,39,38,35,36,40,35,40,44,36,37,40,37,41,40,37,38,42,37,42,41,38,39,42,39,43,42]
263         c2quad4=[46,101,114,100,101,102,115,114,102,103,116,115,103,48,104,116,100,114,117,99,114,115,118,117,115,116,119,118,116,104,105,119,99,117,120,98,117,118,121,120,118,119,122,121,119,105,106,122,98,120,123,97,120,121,124,123,121,122,125,124,122,106,107,125,97,123,126,96,123,124,127,126,124,125,128,127,125,107,108,128,96,126,129,95,126,127,130,129,127,128,131,130,128,108,109,131,95,129,132,94,129,130,133,132,130,131,134,133,131,109,110,134,94,132,113,50,132,133,112,113,133,134,111,112,134,110,51,111,49,60,73,59,60,61,74,73,61,62,75,74,62,52,63,75,59,73,76,58,73,74,77,76,74,75,78,77,75,63,64,78,58,76,79,57,76,77,80,79,77,78,81,80,78,64,65,81,57,79,82,56,79,80,83,82,80,81,84,83,81,65,66,84,56,82,85,55,82,83,86,85,83,84,87,86,84,66,67,87,55,85,88,54,85,86,89,88,86,87,90,89,87,67,68,90,54,88,91,53,88,89,92,91,89,90,93,92,90,68,69,93,53,91,72,45,91,92,71,72,92,93,70,71,93,69,47,70]
264         m2=MEDCouplingUMesh.New("ma",2)
265         m2.setCoords(coo2)
266         m2.allocateCells(128)
267         nbTri = len(c2tri) // 3
268         for i in range(nbTri):
269             m2.insertNextCell(NORM_TRI3,3,c2tri[3*i:3*i+3])
270             pass
271         nbQua = len(c2quad4) // 4
272         for i in range(nbQua):
273             m2.insertNextCell(NORM_QUAD4,4,c2quad4[4*i:4*i+4])
274             pass
275         m2.finishInsertingCells()
276         m2.setDescription("CREE PAR CODE_ASTER")
277         m1=MEDCouplingUMesh.New("ma",1)
278         m1.setCoords(coo2)
279         c1seg=[0,1,1,2,2,3,3,4,4,9,9,14,14,19,19,24,24,29,29,34,34,39,39,43,43,42,42,41,41,40,40,44,44,35,35,30,30,25,25,20,20,15,15,10,10,5,5,0,43,39,39,34,34,29,29,24,24,19,19,14,14,9,9,4,45,53,53,54,54,55,55,56,56,57,57,58,58,59,59,49,49,60,60,61,61,62,62,52,52,63,63,64,64,65,65,66,66,67,67,68,68,69,69,47,47,70,70,71,71,72,72,45,50,94,94,95,95,96,96,97,97,98,98,99,99,100,100,46,46,101,101,102,102,103,103,48,48,104,104,105,105,106,106,107,107,108,108,109,109,110,110,51,51,111,111,112,112,113,113,50]
280         m1.allocateCells(80)
281         for i in range(80):
282             m1.insertNextCell(NORM_SEG2,2,c1seg[2*i:2*i+2])
283             pass
284         m1.finishInsertingCells()
285         m1.setDescription("CREE PAR CODE_ASTER")
286         m0=MEDCouplingUMesh.New("ma",0)
287         m0.setCoords(coo2)
288         c0pt=[44,0,47,48]
289         m0.allocateCells(4)
290         for i in range(4):
291             m0.insertNextCell(NORM_POINT1,1,[c0pt[i]])
292             pass
293         m0.finishInsertingCells()
294         f2=DataArrayInt.New()
295         f2.alloc(128,1)
296         f2[:64]=-1
297         f2[64:96]=-2
298         f2[96:]=-3
299         f1=DataArrayInt.New()
300         f1.alloc(80,1)
301         f1[:4]=-8
302         f1[4:12]=-9
303         f1[12:16]=-10
304         f1[16:24]=-11
305         f1[24:28]=-12
306         f1[28:32]=-13
307         f1[32:40]=-14
308         f1[40:44]=-15
309         f1[44:52]=-16
310         f1[52:56]=-17
311         f1[56:64]=-18
312         f1[64:68]=-19
313         f1[68:76]=-20
314         f1[76:]=-21
315         f0=DataArrayInt.New()
316         f0.setValues([-4,-5,-6,-7],4,1)
317         p=DataArrayInt.New()
318         p.alloc(135,1)
319         p.fillWithZero()
320         p1=DataArrayInt.New()
321         p1.alloc(13,1)
322         p1.iota(1)
323         p[[0,4,24,43,44,45,46,47,48,49,50,51,52]]=p1
324         n2=DataArrayInt.New()
325         n2.alloc(128,1)
326         n2.iota(1)
327         n1=DataArrayInt.New()
328         n1.alloc(80,1)
329         n1.iota(133)
330         n0=DataArrayInt.New()
331         n0.alloc(4,1)
332         n0.iota(129)
333         fns=['A1A2____________________________', 'A1______________________________', 'A2A4____________________________', 'A2______________________________', 'A3A1____________________________', 'A3C5____________________________', 'A3______________________________', 'A4A3____________________________', 'A4______________________________', 'B1C1____________________________', 'B1______________________________', 'B2B4____________________________', 'B2______________________________', 'B3B1____________________________', 'B3______________________________', 'B4C3____________________________', 'B4______________________________', 'C1C4____________________________', 'C1______________________________', 'C2B2____________________________', 'C2______________________________', 'C3C2____________________________', 'C3______________________________', 'C4B3____________________________', 'C4______________________________', 'C5A4____________________________', 'C5______PMMA____________________', 'FAMILLE_ZERO', 'MESH____APPS____AP1_____________', 'MESH____APPS____AP2_____________', 'MESH____APPS____AP3_____________', 'MESH____APPS____AP4_____________', 'MESH____DALQ1___DALLE___________', 'MESH____DALQ2___DALLE___________', 'MESH____DALT3___DALLE___________']
334         fids=[-11, 5, -8, 1, -10, -12, 4, -9, 2, -14, 6, -19, 7, -17, 8, -20, 9, -15, 10, -18, 11, -21, 12, -16, 13, -13, 3, 0, -4, -5, -6, -7, -3, -2, -1]
335         grpns=['A1', 'A1A2', 'A2', 'A2A4', 'A3', 'A3A1', 'A3C5', 'A4', 'A4A3', 'AP1', 'AP2', 'AP3', 'AP4', 'APPS', 'B1', 'B1C1', 'B2', 'B2B4', 'B3', 'B3B1', 'B4', 'B4C3', 'C1', 'C1C4', 'C2', 'C2B2', 'C3', 'C3C2', 'C4', 'C4B3', 'C5', 'C5A4', 'DALLE', 'DALQ1', 'DALQ2', 'DALT3', 'MESH', 'PMMA']
336         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]]
337         return m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp
338
339     @classmethod
340     def buildMLMeshUnPolyze(cls,tester):
341         """Level 0 (meshDim=3) - 2 TETRA4 + 3 PENTA6 + 2 POLYH
342         # POLYH #0 becomes 1 TETRA4
343         # POLYH #1 becomes HEXA8
344         # Level -1 (meshDim=2) - 2 TRI3 + 3 QUAD4 + 4 POLYG
345         # POLYG #2 becomes TRI3"""
346         meshName="NightmareMesh"
347         #
348         coords=DataArrayDouble.New(38,3) ; coords.rearrange(1) ; coords.iota(1000.) ; coords.rearrange(3) ; coords.setInfoOnComponents(["X [m]","Y [m]","Z [m]"])
349         mesh0=MEDCouplingUMesh(meshName,3)
350         type0=[NORM_TETRA4,NORM_TETRA4, NORM_PENTA6,NORM_PENTA6,NORM_PENTA6, NORM_POLYHED,NORM_POLYHED]
351         conn0=[[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,-1,26,29,27,-1,27,29,28,-1,28,29,26],[30,31,32,33,-1,34,37,36,35,-1,30,34,35,31,-1,31,35,36,32,-1,32,36,37,33,-1,33,37,34,30]]
352         mesh0.allocateCells(len(type0))
353         for typ,nodalConn in zip(type0,conn0):
354             mesh0.insertNextCell(typ,nodalConn);
355             pass
356         mesh0.finishInsertingCells()
357         mesh0.setCoords(coords)
358
359         meshM1=MEDCouplingUMesh(meshName,2)
360         typeM1=[NORM_TRI3,NORM_TRI3, NORM_QUAD4,NORM_QUAD4,NORM_QUAD4, NORM_POLYGON,NORM_POLYGON,NORM_POLYGON,NORM_POLYGON]
361         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]]
362         meshM1.allocateCells(len(typeM1))
363         for typ,nodalConn in zip(typeM1,connM1):
364             meshM1.insertNextCell(typ,nodalConn);
365             pass
366         meshM1.finishInsertingCells()
367         meshM1.setCoords(coords)
368         #
369         mm=MEDFileUMesh.New()
370         mm.setMeshAtLevel(0,mesh0)
371         mm.setMeshAtLevel(-1,meshM1)
372         grp0_L0=DataArrayInt.New([0,1,5,7]) ; grp0_L0.setName("grp0_L0")
373         grp1_L0=DataArrayInt.New([1,2,3,4,6]) ; grp1_L0.setName("grp1_L0")
374         tester.assertRaises(InterpKernelException,mm.setGroupsAtLevel,0,[grp0_L0,grp1_L0])# presence of 7 in grp0_L0 (only 7 cells at level 0) -> throw
375         grp0_L0=DataArrayInt.New([0,1,5,6]) ; grp0_L0.setName("grp0_L0")
376         mm.setGroupsAtLevel(0,[grp0_L0,grp1_L0])
377         grp0_LM1=DataArrayInt.New([1,2,3,4,7]) ; grp0_LM1.setName("grp0_LM1")
378         grp1_LM1=DataArrayInt.New([2,3,4,5]) ; grp1_LM1.setName("grp1_LM1")
379         grp2_LM1=DataArrayInt.New([5,6,7,8]) ; grp2_LM1.setName("grp2_LM1")
380         mm.setGroupsAtLevel(-1,[grp0_LM1,grp1_LM1,grp2_LM1])
381         grp0_Node=DataArrayInt.New([0,11,15,16]) ; grp0_Node.setName("grp0_Node")
382         grp1_Node=DataArrayInt.New([1,2,13,14,16]) ; grp1_Node.setName("grp1_Node")
383         mm.setGroupsAtLevel(1,[grp0_Node,grp1_Node])
384         #
385         tester.assertRaises(InterpKernelException,mm.setRenumFieldArr,0,DataArrayInt.New([0,8,9,4,5,6,7,10]))# to big array
386         mm.setRenumFieldArr(0,DataArrayInt.New([0,8,9,4,5,6,7]))
387         da=DataArrayInt.New([0,8,9,4,5,6,7,11,12])
388         mm.setRenumFieldArr(-1,da)
389         mm.setRenumFieldArr(-1,None)
390         mm.setRenumFieldArr(-1,da)
391         da=DataArrayInt.New(mm.getNumberOfNodes()+1) ; da.iota(8) ; tester.assertRaises(InterpKernelException,mm.setRenumFieldArr,1,da) # to big array more than number of nodes
392         da=DataArrayInt.New(mm.getNumberOfNodes()) ; da.iota(8) ; mm.setRenumFieldArr(1,da)
393         return mm
394
395     @classmethod
396     def buildVecFieldOnCells_1(cls):
397         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
398         nbOfCells=mesh.getNumberOfCells();
399         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
400         f1.setName("VectorFieldOnCells");
401         f1.setMesh(mesh);
402         array=DataArrayDouble.New();
403         arr1=[0.,10.,20.,1.,11.,21.,2.,12.,22.,3.,13.,23.,4.,14.,24.,5.,15.,25.]
404         array.setValues(arr1,nbOfCells,3);
405         array.setInfoOnComponent(0,"power [MW/m^3]");
406         array.setInfoOnComponent(1,"density [g/cm^3]");
407         array.setInfoOnComponent(2,"temperature [K]");
408         f1.setArray(array);
409         f1.setTime(2.,0,1);
410         f1.checkConsistencyLight();
411         return f1;
412
413     @classmethod
414     def buildIntVecFieldOnCells_1(cls):
415         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
416         nbOfCells=mesh.getNumberOfCells();
417         f1=MEDCouplingFieldInt.New(ON_CELLS,ONE_TIME);
418         f1.setName("IntVectorFieldOnCells");
419         f1.setMesh(mesh);
420         array=DataArrayInt32([0,10,20,1,11,21,2,12,22,3,13,23,4,14,24,5,15,25],nbOfCells ,3)
421         array.setInfoOnComponent(0,"va1 [MW/m^3]");
422         array.setInfoOnComponent(1,"va2 [g/cm^3]");
423         array.setInfoOnComponent(2,"val3 [K]");
424         f1.setArray(array);
425         f1.setTime(2.,0,1);
426         f1.checkConsistencyLight();
427         return f1;
428
429     @classmethod
430     def buildFloatVecFieldOnCells_1(cls):
431         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
432         nbOfCells=mesh.getNumberOfCells();
433         f1=MEDCouplingFieldFloat.New(ON_CELLS,ONE_TIME);
434         f1.setName("FloatVectorFieldOnCells");
435         f1.setMesh(mesh);
436         array=DataArrayFloat([0.,10.,20.,1.,11.,21.,2.,12.,22.,3.,13.,23.,4.,14.,24.,5.,15.,25.], nbOfCells, 3);
437         array.setInfoOnComponent(0,"power [MW/m^3]");
438         array.setInfoOnComponent(1,"density [g/cm^3]");
439         array.setInfoOnComponent(2,"temperature [K]");
440         f1.setArray(array);
441         f1.setTime(2.,0,1);
442         f1.checkConsistencyLight();
443         return f1;
444
445     @classmethod
446     def buildVecFieldOnNodes_1(cls):
447         mesh=MEDLoaderDataForTest.build3DSurfMesh_1();
448         nbOfNodes=mesh.getNumberOfNodes();
449         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME);
450         f1.setName("VectorFieldOnNodes");
451         f1.setMesh(mesh);
452         array=DataArrayDouble.New();
453         f1.setArray(array);
454         arr1=[70.,80.,90.,71.,81.,91.,72.,82.,92.,73.,83.,93.,74.,84.,94.,75.,85.,95.,
455         1000.,10010.,10020.,1001.,10011.,10021.,1002.,10012.,10022.,1003.,10013.,10023.,1004.,10014.,10024.,1005.,10015.,10025.]
456         array.setValues(arr1,nbOfNodes,3);
457         array.setInfoOnComponent(0,"power [MW/m^3]");
458         array.setInfoOnComponent(1,"density [g/cm^3]");
459         array.setInfoOnComponent(2,"temperature [K]");
460         f1.setTime(2.12,2,3);
461         f1.checkConsistencyLight();
462         return f1;
463
464     @classmethod
465     def buildVecFieldOnGauss_1(cls):
466         _a=0.446948490915965;
467         _b=0.091576213509771;
468         _p1=0.11169079483905;
469         _p2=0.0549758718227661;
470         refCoo1=[ 0.,0., 1.,0., 0.,1. ]
471         gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
472                  2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ];
473         wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
474         _refCoo1=refCoo1;
475         _gsCoo1=gsCoo1;
476         _wg1=wg1;
477         m=MEDLoaderDataForTest.build2DMesh_2();
478         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
479         f.setTime(3.14,1,5);
480         f.setMesh(m);
481         f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1);
482         refCoo2=[-1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 ]
483         _refCoo2=refCoo2;
484         _gsCoo1=_gsCoo1[0:6];
485         _gsCoo2=_gsCoo1
486         _wg1=_wg1[0:3];
487         _wg2=_wg1
488         refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
489         _refCoo3=refCoo3;
490         _gsCoo1=_gsCoo1[0:4];
491         _wg1=_wg1[0:2];
492         f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo3,_gsCoo1,_wg1);
493         f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
494         array=DataArrayDouble.New();
495         array.alloc(19,2);
496         ptr=array.getPointer();
497         for i in range(19 * 2):
498             array.setIJ(0,i,float(i+7));
499             pass
500         f.setArray(array);
501         f.setName("MyFirstFieldOnGaussPoint");
502         array.setInfoOnComponent(0,"power [MW/m^3]");
503         array.setInfoOnComponent(1,"density");
504         f.checkConsistencyLight();
505         return f;
506
507     @classmethod
508     def buildVecFieldOnGauss_2(cls):
509         _a=0.446948490915965;
510         _b=0.091576213509771;
511         _p1=0.11169079483905;
512         _p2=0.0549758718227661;
513         refCoo1=[ 0.,0., 1.,0., 0.,1. ]
514         gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
515                  2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ];
516         wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
517         _refCoo1=refCoo1;
518         _gsCoo1=gsCoo1;
519         _wg1=wg1;
520         m=MEDLoaderDataForTest.build2DMesh_3();
521         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
522         f.setTime(3.14,1,5);
523         f.setMesh(m);
524         di=DataArrayInt.New(); di.setValues([0,2,3],3,1)
525         f.setGaussLocalizationOnCells(di,_refCoo1,_gsCoo1,_wg1)
526         _wg1[-1]*=2
527         f.setGaussLocalizationOnCells([1,5],_refCoo1,_gsCoo1,_wg1);
528         _wg1[-1]*=2
529         f.setGaussLocalizationOnCells([4],_refCoo1,_gsCoo1,_wg1);
530         refCoo2=[-1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 ]
531         _refCoo2=refCoo2;
532         _gsCoo1=_gsCoo1[0:6];
533         _gsCoo2=_gsCoo1
534         _wg1=_wg1[0:3];
535         _wg2=_wg1
536         refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
537         _refCoo3=refCoo3;
538         _gsCoo1=_gsCoo1[0:4];
539         _wg1=_wg1[0:2];
540         f.setGaussLocalizationOnCells([6,7,8],_refCoo3,_gsCoo1,_wg1);
541         _wg1[-1]*=2
542         f.setGaussLocalizationOnCells([9],_refCoo3,_gsCoo1,_wg1);
543         f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
544         array=DataArrayDouble.New();
545         array.alloc(53,2);
546         ptr=array.getPointer();
547         for i in range(53 * 2):
548             array.setIJ(0,i,float(i+7));
549             pass
550         f.setArray(array);
551         f.setName("MyFirstFieldOnGaussPoint");
552         array.setInfoOnComponent(0,"power [MW/m^3]");
553         array.setInfoOnComponent(1,"density");
554         f.checkConsistencyLight();
555         return f;
556
557     # idem buildVecFieldOnGauss_2 except that different discretizations are sorted inside one type
558     @classmethod
559     def buildVecFieldOnGauss_2_Simpler(cls):
560         _a=0.446948490915965;
561         _b=0.091576213509771;
562         _p1=0.11169079483905;
563         _p2=0.0549758718227661;
564         refCoo1=[ 0.,0., 1.,0., 0.,1. ]
565         gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
566                  2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ];
567         wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
568         _refCoo1=refCoo1;
569         _gsCoo1=gsCoo1;
570         _wg1=wg1;
571         m=MEDLoaderDataForTest.build2DMesh_3();
572         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
573         f.setTime(3.14,1,5);
574         f.setMesh(m);
575         di=DataArrayInt.New(); di.setValues([0,1,2],3,1)
576         f.setGaussLocalizationOnCells(di,_refCoo1,_gsCoo1,_wg1)
577         _wg1[-1]*=2
578         f.setGaussLocalizationOnCells([3,4],_refCoo1,_gsCoo1,_wg1);
579         _wg1[-1]*=2
580         f.setGaussLocalizationOnCells([5],_refCoo1,_gsCoo1,_wg1);
581         refCoo2=[-1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 ]
582         _refCoo2=refCoo2;
583         _gsCoo1=_gsCoo1[0:6];
584         _gsCoo2=_gsCoo1
585         _wg1=_wg1[0:3];
586         _wg2=_wg1
587         refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
588         _refCoo3=refCoo3;
589         _gsCoo1=_gsCoo1[0:4];
590         _wg1=_wg1[0:2];
591         f.setGaussLocalizationOnCells([6,7,8],_refCoo3,_gsCoo1,_wg1);
592         _wg1[-1]*=2
593         f.setGaussLocalizationOnCells([9],_refCoo3,_gsCoo1,_wg1);
594         f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
595         array=DataArrayDouble.New();
596         array.alloc(53,2);
597         ptr=array.getPointer();
598         for i in range(53 * 2):
599             array.setIJ(0,i,float(i+7));
600             pass
601         f.setArray(array);
602         f.setName("MyFirstFieldOnGaussPoint");
603         array.setInfoOnComponent(0,"power [MW/m^3]");
604         array.setInfoOnComponent(1,"density");
605         f.checkConsistencyLight();
606         return f;
607
608     @classmethod
609     def buildVecFieldOnGaussNE_1(cls):
610         m=MEDLoaderDataForTest.build2DMesh_2();
611         f=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME);
612         f.setTime(3.14,1,5);
613         f.setMesh(m);
614         array=DataArrayDouble.New();
615         array.alloc(20,2);
616         for i in range(2 * 20):
617             array.setIJ(0,i,float(i+8));
618         f.setArray(array);
619         array.setInfoOnComponent(0,"power [W]");
620         array.setInfoOnComponent(1,"temperature");
621         f.setName("MyFieldOnGaussNE");
622         f.checkConsistencyLight();
623         return f;
624
625     @classmethod
626     def buildACompleteMEDDataStructureWithFieldsOnCells_1(cls):
627         coo=DataArrayDouble([0,0,1,0,2,0,0,1,1,1,2,1,0,2,1,2,2,2],9,2)
628         m0=MEDCouplingUMesh("mesh",2)
629         m0.setCoords(coo)
630         m0.allocateCells()
631         m0.insertNextCell(NORM_TRI3,[1,4,2])
632         m0.insertNextCell(NORM_TRI3,[4,5,2])
633         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
634         m0.insertNextCell(NORM_QUAD4,[6,7,4,3])
635         m0.insertNextCell(NORM_QUAD4,[7,8,5,4])
636         m1=m0.computeSkin()
637         mm=MEDFileUMesh()
638         #2 levels
639         mm.setMeshAtLevel(0,m0) ; mm.setMeshAtLevel(-1,m1)
640         #some grps/families on the 2 levels
641         grp0=DataArrayInt([0,2,4]); grp0.setName("gr0_0_2_4")
642         grp1=DataArrayInt([1,2,3,4]); grp1.setName("gr0_1_2_3_4")
643         grp2=DataArrayInt([0,4]); grp2.setName("gr0_0_4")
644         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
645         grp3=DataArrayInt([0,1]); grp3.setName("grM1_SegOnTri3")
646         grp4=DataArrayInt([2,3,4,5,6,7]); grp4.setName("grM1_SegOnQuad4")
647         grp5=DataArrayInt([0,3]); grp5.setName("grM1_bottom")
648         mm.setGroupsAtLevel(-1,[grp3,grp4,grp5])
649         ms=MEDFileMeshes()
650         ms.pushMesh(mm)
651         # 3 fields
652         fs=MEDFileFields()
653         # 1st Field - fNoProfile - no profile on levels 0
654         f1Name="fNoProfile"
655         timeStepsF1=[(0,-1,0.01),(1,-1,0.02)]
656         f1=MEDFileFieldMultiTS()
657         for i,(it,order,tim) in enumerate(timeStepsF1):
658             f11Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
659             f11Tmp.setTime(tim,it,order)
660             f11Tmp.setMesh(m0)
661             arr=DataArrayDouble(m0.getNumberOfCells(),1) ; arr.iota() ; arr+=1+i ; arr*=0.1
662             f11Tmp.setArray(arr)
663             f11Tmp.checkConsistencyLight()
664             f11Tmp.setName(f1Name)
665             f1.appendFieldNoProfileSBT(f11Tmp)
666             pass
667         fs.pushField(f1)
668         # 2nd Field - fNoProfileMultiLevs - no profile on levels 0 and -1
669         f2Name="fNoProfileMultiLevs"
670         timeStepsF2=[(0,-1,0.),(1,-1,0.1),(2,-1,0.2)]
671         f2=MEDFileFieldMultiTS()
672         for i,(it,order,tim) in enumerate(timeStepsF2):
673             f21Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
674             f21Tmp.setTime(tim,it,order)
675             f21Tmp.setMesh(m0)
676             arr=DataArrayDouble(m0.getNumberOfCells(),1) ; arr.iota() ; arr+=1+i
677             f21Tmp.setArray(arr)
678             f21Tmp.checkConsistencyLight()
679             f21Tmp.setName(f2Name)
680             f2.appendFieldNoProfileSBT(f21Tmp)
681             f22Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
682             f22Tmp.setTime(tim,it,order)
683             f22Tmp.setMesh(m1)
684             arr=DataArrayDouble(m1.getNumberOfCells(),1) ; arr.iota() ; arr+=100+1+i
685             f22Tmp.setArray(arr)
686             f22Tmp.checkConsistencyLight()
687             f22Tmp.setName(f2Name)
688             f2[it,order].setFieldNoProfileSBT(f22Tmp)
689             pass
690         fs.pushField(f2)
691         # 3rd field - fProfileMultiLevs - The most complex one
692         f3Name="fProfileMultiLevs"
693         timeStepsF3=[(0,-1,0.),(1,-1,10.),(2,-1,20.),(3,-1,30.),]
694         f3=MEDFileFieldMultiTS()
695         for i,(it,order,tim) in enumerate(timeStepsF3):
696             pfl1=DataArrayInt([0,1,3,4]) ; pfl1.setName("pfl1")
697             m0Part=m0[pfl1]
698             f31Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
699             f31Tmp.setTime(tim,it,order)
700             f31Tmp.setMesh(m0Part)
701             arr=DataArrayDouble(m0Part.getNumberOfCells(),1) ; arr.iota() ; arr+=1000+i+1
702             f31Tmp.setArray(arr)
703             f31Tmp.checkConsistencyLight()
704             f31Tmp.setName(f3Name)
705             f3.appendFieldProfile(f31Tmp,mm,0,pfl1)
706             pfl2=DataArrayInt([0,3]) ; pfl2.setName("pfl2Bottom")
707             m1Part=m1[pfl2]
708             f32Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
709             f32Tmp.setTime(tim,it,order)
710             f32Tmp.setMesh(m1Part)
711             arr=DataArrayDouble(m1Part.getNumberOfCells(),1) ; arr.iota() ; arr+=2000+1+i
712             f32Tmp.setArray(arr)
713             f32Tmp.checkConsistencyLight()
714             f32Tmp.setName(f3Name)
715             f3[it,order].setFieldProfile(f32Tmp,mm,-1,pfl2)
716             pass
717         fs.pushField(f3)
718         #
719         data=MEDFileData() ; data.setMeshes(ms) ; data.setFields(fs)
720         return data
721
722     @classmethod
723     def buildAMEDFileDataWithGroupOnOneFamilyForSauv(self):
724         # Coordinates
725         coords = [0.,0., 0.,1., 1.,1., 1.,0.]
726         # lvl 0 connectivity
727         conn2D   = [1,2,3,4]
728         # lvl -1 connectivity
729         conn1D   = [0,1, 1,2, 2,3, 4,1]
730         # lvl 0 mesh
731         mesh2D=MEDCouplingUMesh.New()
732         mesh2D.setMeshDimension(2)
733         mesh2D.allocateCells(1)
734         mesh2D.insertNextCell(NORM_QUAD4,4,conn2D)
735         mesh2D.finishInsertingCells()
736         # lvl -1 mesh
737         mesh1D=MEDCouplingUMesh.New()
738         mesh1D.setMeshDimension(1)
739         mesh1D.allocateCells(4)
740         mesh1D.insertNextCell(NORM_SEG2,2,conn1D[0:2])
741         mesh1D.insertNextCell(NORM_SEG2,2,conn1D[2:4])
742         mesh1D.insertNextCell(NORM_SEG2,2,conn1D[4:6])
743         mesh1D.insertNextCell(NORM_SEG2,2,conn1D[6:8])
744         mesh1D.finishInsertingCells()
745         # assigning coordinates
746         meshCoords=DataArrayDouble.New()
747         meshCoords.setValues(coords, 4, 2)
748         mesh2D.setCoords(meshCoords)
749         mesh1D.setCoords(meshCoords)
750         # Creating a multi level mesh
751         mm = MEDFileUMesh.New()
752         mm.setMeshAtLevel(0, mesh2D)
753         mm.setMeshAtLevel(-1, mesh1D)
754         mm.setName("carre")
755         # Creating groups
756         # Creating a group with an element on level -1
757         grp0_LM1 = DataArrayInt.New([0])
758         grp0_LM1.setName("grp0_LM1")
759         # Creating a group with all elements on level -1
760         grp1_LM1 = DataArrayInt.New([0,1,2,3])
761         grp1_LM1.setName("grp1_LM1")
762         #
763         mm.setGroupsAtLevel(-1,[grp0_LM1,grp1_LM1])
764         #
765         ms=MEDFileMeshes.New()
766         ms.setMeshAtPos(0,mm)
767         mfd=MEDFileData.New()
768         mfd.setMeshes(ms)
769         #
770         return mfd
771
772     pass
773
774 def TestWriteUMeshesRW1(tester):
775     fileName="Pyfile18.med";
776     m3d=MEDLoaderDataForTest.build3DMesh_2();
777     pt=[0.,0.,-0.3]
778     vec=[0.,0.,1.]
779     nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
780     m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
781     renumber=[1,2,0,4,3]
782     m2d.renumberCells(renumber,False);
783     m2d.setName("ExampleOfMultiDimW");
784     meshes=[m2d,m3d]
785     WriteUMeshes(fileName,meshes,False);
786     m3d_bis=ReadUMeshFromFile(fileName,m2d.getName(),0);
787     tester.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
788     m3d_bis.setName(m3d.getName());
789     tester.assertTrue(m3d_bis.isEqual(m3d,1e-12));
790     m2d_bis=ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
791     tester.assertTrue(m2d_bis.isEqual(m2d,1e-12));
792     # Creation of a field on faces.
793     f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
794     f1.setName("FieldOnFacesShuffle");
795     f1.setMesh(m2d);
796     array=DataArrayDouble.New();
797     arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
798     array.setValues(arr1,m2d.getNumberOfCells(),2);
799     array.setInfoOnComponent(0,"plkj [mm]");
800     array.setInfoOnComponent(1,"pqqqss [mm]");
801     f1.setArray(array);
802     tmp=array.setValues(arr1,m2d.getNumberOfCells(),2);
803     f1.setTime(3.14,2,7);
804     f1.checkConsistencyLight();
805     WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
806     f2=ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
807     tester.assertTrue(f2.isEqual(f1,1e-12,1e-12));
808     pass
809
810 def TestMultiFieldShuffleRW1(tester):
811     fileName="Pyfile17.med";
812     m=MEDLoaderDataForTest.build3DMesh_2();
813     tester.assertEqual(20,m.getNumberOfCells());
814     tester.assertEqual(45,m.getNumberOfNodes());
815     polys=[1,4,6]
816     m.convertToPolyTypes(polys);
817     renum=[1,3,2,8,9,12,13,16,19,0,4,7,5,15,14,17,10,18,6,11]
818     m.renumberCells(renum,False);
819     m.orientCorrectlyPolyhedrons();
820     # Writing
821     WriteUMeshDep(fileName,m,False);
822     f1Tmp=m.getMeasureField(False);
823     f1=f1Tmp.buildNewTimeReprFromThis(ONE_TIME,False);
824     f1.setTime(0.,1,2);
825     f_1=f1.cloneWithMesh(True);
826     WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
827     f1.applyFunc("2*x");
828     f1.setTime(0.01,3,4);
829     f_2=f1.cloneWithMesh(True);
830     WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
831     f1.applyFunc("2*x/3");
832     f1.setTime(0.02,5,6);
833     f_3=f1.cloneWithMesh(True);
834     WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
835     # Reading
836     its=[(1,2),(3,4),(5,6)];
837     fs=ReadFieldsOnSameMesh(ON_CELLS,fileName,f_1.getMesh().getName(),0,f_1.getName(),its);
838     tester.assertEqual(3,len(fs));
839     tester.assertTrue(fs[0].isEqual(f_1,1e-12,1e-12));
840     tester.assertTrue(fs[1].isEqual(f_2,1e-12,1e-12));
841     tester.assertTrue(fs[2].isEqual(f_3,1e-12,1e-12));
842
843 def GeneratePyfile13(tester):
844     fileName="Pyfile13.med";
845     f1=MEDLoaderDataForTest.buildVecFieldOnGauss_1();
846     WriteField(fileName,f1,True);
847     f2=ReadField(ON_GAUSS_PT,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
848     tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
849     pass
850
851 def GeneratePyfile14(tester):
852     fileName="Pyfile14.med";
853     f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
854     WriteField(fileName,f1,True);
855     tester.assertEqual([ON_GAUSS_NE],GetTypesOfField(fileName,'2DMesh_2','MyFieldOnGaussNE')) #Bug 22/5/2014
856     f2=ReadField(ON_GAUSS_NE,fileName,f1.getMesh().getName(),0,f1.getName(),1,5);
857     tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
858
859
860 def GeneratePyfile18(tester):
861     fileName="Pyfile18.med";
862     m3d=MEDLoaderDataForTest.build3DMesh_2();
863     pt=[0.,0.,-0.3]
864     vec=[0.,0.,1.]
865     nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
866     m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
867     renumber=[1,2,0,4,3]
868     m2d.renumberCells(renumber,False);
869     m2d.setName("ExampleOfMultiDimW");
870     meshes=[m2d,m3d]
871     WriteUMeshes(fileName,meshes,True);
872     m3d_bis=ReadUMeshFromFile(fileName,m2d.getName(),0);
873     tester.assertTrue(not m3d_bis.isEqual(m3d,1e-12));
874     m3d_bis.setName(m3d.getName());
875     tester.assertTrue(m3d_bis.isEqual(m3d,1e-12));
876     m2d_bis=ReadUMeshFromFile(fileName,m2d.getName(),-1);#-1 for faces
877     tester.assertTrue(m2d_bis.isEqual(m2d,1e-12));
878     # Creation of a field on faces.
879     f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
880     f1.setName("FieldOnFacesShuffle");
881     f1.setMesh(m2d);
882     array=DataArrayDouble.New();
883     arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
884     array.setValues(arr1,m2d.getNumberOfCells(),2);
885     array.setInfoOnComponent(0,"plkj [mm]");
886     array.setInfoOnComponent(1,"pqqqss [mm]");
887     f1.setArray(array);
888     tmp=array.setValues(arr1,m2d.getNumberOfCells(),2);
889     f1.setTime(3.14,2,7);
890     f1.checkConsistencyLight();
891     WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
892     f2=ReadFieldCell(fileName,f1.getMesh().getName(),-1,f1.getName(),2,7);
893     tester.assertTrue(f2.isEqual(f1,1e-12,1e-12));
894
895 def GeneratePyfile19(tester):
896     fileName="Pyfile19.med";
897     fileName2="Pyfile20.med";
898     m=MEDLoaderDataForTest.build2DMesh_1();
899     nbOfNodes=m.getNumberOfNodes();
900     WriteUMesh(fileName,m,True);
901     f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME);
902     f1.setName("VFieldOnNodes");
903     f1.setMesh(m);
904     array=DataArrayDouble.New();
905     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.]
906     array.setValues(arr1,nbOfNodes,2);
907     f1.setArray(array);
908     array.setInfoOnComponent(0,"tyty [mm]");
909     array.setInfoOnComponent(1,"uiop [MW]");
910     f1.setTime(3.14,2,7);
911     f1.checkConsistencyLight();
912     arr2=[1,4]
913     f2=f1.buildSubPart(arr2);
914     f2.getMesh().setName(f1.getMesh().getName());
915     WriteField(fileName,f2,False);#<- False important for the test
916     #
917     f3=ReadFieldNode(fileName,f2.getMesh().getName(),0,f2.getName(),2,7);
918     f3.checkConsistencyLight();
919     tester.assertTrue(f3.isEqual(f2,1e-12,1e-12));
920     #
921     arr3=[1,3,0,5,2,4]
922     f2.renumberNodes(arr3);
923     WriteUMesh(fileName2,m,True);
924     WriteField(fileName2,f2,False);#<- False important for the test
925     f3=ReadFieldNode(fileName2,f2.getMesh().getName(),0,f2.getName(),2,7);
926     f3.checkConsistencyLight();
927     tester.assertTrue(f3.isEqual(f2,1e-12,1e-12));
928     #
929     pass
930
931 def GeneratePyfile7(tester):
932     f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
933     WriteField("Pyfile6.med",f1,True);
934     f2=ReadFieldCell("Pyfile6.med",f1.getMesh().getName(),0,f1.getName(),0,1);
935     tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
936     #
937     f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
938     WriteField("Pyfile7.med",f1,True);
939     f2=ReadFieldNode("Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
940     tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
941     tester.assertRaises(Exception,ReadFieldCell,"Pyfile7.med",f1.getMesh().getName(),0,f1.getName(),2,3);
942     pass
943
944 def GeneratePyfile12(tester):
945     fileName="Pyfile12.med";
946     mesh1=MEDLoaderDataForTest.build3DMesh_1();
947     da,b,newNbOfNodes=mesh1.mergeNodes(1e-12);
948     WriteUMesh(fileName,mesh1,True);
949     part1=[1,2,4,13,15]
950     mesh2=mesh1.buildPartOfMySelf(part1,True);
951     mesh2.setName(mesh1.getName());#<- important for the test
952     #
953     nbOfCells=mesh2.getNumberOfCells();
954     tester.assertEqual(5,nbOfCells);
955     f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
956     f1.setName("VectorFieldOnCells");
957     f1.setMesh(mesh2);
958     array=DataArrayDouble.New();
959     array.alloc(nbOfCells,2);
960     f1.setArray(array);
961     arr1=[71.,171.,10.,110.,20.,120.,30.,130.,40.,140.]
962     array.setValues(arr1,nbOfCells,2);
963     f1.setTime(3.14,2,7);
964     f1.checkConsistencyLight();
965     #
966     WriteField(fileName,f1,False);#<- False important for the test
967     #
968     f2=ReadFieldCell(fileName,f1.getMesh().getName(),0,f1.getName(),2,7);
969     tt=GetTypesOfField(fileName,f1.getMesh().getName(),f1.getName());
970     tester.assertEqual(tt,[ON_CELLS]);
971     f2.checkConsistencyLight();
972     tester.assertTrue(f1.isEqual(f2,1e-12,1e-12));
973
974 def GeneratePyfile10(tester):
975     fileName="Pyfile10.med";
976     mesh1=MEDLoaderDataForTest.build3DMesh_1();
977     part1=[1,2,4,13,15]
978     mesh2=mesh1.buildPartOfMySelf(part1,True);
979     mesh2.setName("mesh2");
980     part2=[3,4,13,14]
981     mesh3=mesh1.buildPartOfMySelf(part2,True);
982     mesh3.setName("mesh3");
983     mesh4=MEDCouplingUMesh.New();
984     mesh4.setName("mesh4");
985     mesh4.setMeshDimension(3);
986     mesh4.allocateCells(1);
987     conn=[0,11,1,3]
988     mesh4.insertNextCell(NORM_TETRA4,4,conn[0:4])
989     mesh4.finishInsertingCells();
990     mesh4.setCoords(mesh1.getCoords());
991     meshes=[mesh1,mesh2,mesh3,mesh4]
992     mnane="3DToto";
993     WriteUMeshesPartition(fileName,mnane,meshes,True);
994     #
995     mesh5=ReadUMeshFromFile(fileName,mnane);
996     mesh1.setName(mnane);
997     part3=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
998     mesh6=mesh5.buildPartOfMySelf(part3,True);
999     mesh6.setName(mnane);
1000     tester.assertTrue(mesh6.isEqual(mesh1,1e-12));
1001     grps=GetMeshGroupsNames(fileName,mnane);
1002     tester.assertEqual(4,len(grps));
1003     grps.index("mesh2");
1004     grps.index("mesh3");
1005     grps.index("mesh4");
1006     grps.index("3DMesh_1");
1007     #
1008     vec=("mesh2",);
1009     mesh2_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1010     tester.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
1011     vec=["mesh3"];
1012     mesh3_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1013     tester.assertTrue(mesh3_2.isEqual(mesh3,1e-12));
1014     vec=["mesh4"];
1015     mesh4_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1016     tester.assertTrue(mesh4_2.isEqual(mesh4,1e-12));
1017     vec="3DMesh_1";
1018     mesh1_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1019     mesh1.setName("3DMesh_1");
1020     tester.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
1021     #
1022     vec=["Family_-3","Family_-5"];
1023     mesh2_2=ReadUMeshFromFamilies(fileName,mnane,0,vec);
1024     mesh2_2.setName("mesh2");
1025     tester.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
1026     #
1027     ret=GetMeshFamiliesNamesOnGroup(fileName,"3DToto","3DMesh_1");
1028     tester.assertEqual(4,len(ret));
1029     ref=['Family_-3','Family_-4','Family_-2','Family_-5']
1030     tester.assertIn(ref[0],ret);
1031     tester.assertIn(ref[1],ret);
1032     tester.assertIn(ref[2],ret);
1033     tester.assertIn(ref[3],ret);
1034     #
1035     ret1=GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_-3");
1036     tester.assertEqual(2,len(ret1));
1037     tester.assertEqual(ret1[0],"3DMesh_1");
1038     tester.assertEqual(ret1[1],"mesh2");