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