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