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