1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 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
25 def WriteInTmpDir(func):
26 def decaratedFunc(*args,**kwargs):
29 with tempfile.TemporaryDirectory() as tmpdirname:
31 ret = func(*args,**kwargs)
36 class MEDLoaderDataForTest:
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);
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);
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)
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);
119 #this mesh has several cells duplicated ! it is not beautiful but efficient to test file WR.
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);
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.]
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,
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,
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]
177 ret=MEDCouplingUMesh.New();
178 ret.setName("3DMesh_1");
179 ret.setMeshDimension(3);
180 ret.allocateCells(18);
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])
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])
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])
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])
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);
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);
237 def build3DMesh_2(cls):
238 m3dsurfBase=MEDLoaderDataForTest.build3DSurfMesh_1();
240 m3dsurf=m3dsurfBase.buildPartOfMySelf(numbers,False);
241 m1dBase=MEDLoaderDataForTest.build1DMesh_1();
243 m1d=m1dBase.buildPartOfMySelf(numbers2,False);
244 m1d.changeSpaceDimension(3);
247 m1d.rotate(pt,vec,-pi/2.);
248 ret=m3dsurf.buildExtrudedMesh(m1d,0);
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)
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])
269 nbQua = len(c2quad4) // 4
270 for i in range(nbQua):
271 m2.insertNextCell(NORM_QUAD4,4,c2quad4[4*i:4*i+4])
273 m2.finishInsertingCells()
274 m2.setDescription("CREE PAR CODE_ASTER")
275 m1=MEDCouplingUMesh.New("ma",1)
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]
280 m1.insertNextCell(NORM_SEG2,2,c1seg[2*i:2*i+2])
282 m1.finishInsertingCells()
283 m1.setDescription("CREE PAR CODE_ASTER")
284 m0=MEDCouplingUMesh.New("ma",0)
289 m0.insertNextCell(NORM_POINT1,1,[c0pt[i]])
291 m0.finishInsertingCells()
292 f2=DataArrayInt.New()
297 f1=DataArrayInt.New()
313 f0=DataArrayInt.New()
314 f0.setValues([-4,-5,-6,-7],4,1)
318 p1=DataArrayInt.New()
321 p[[0,4,24,43,44,45,46,47,48,49,50,51,52]]=p1
322 n2=DataArrayInt.New()
325 n1=DataArrayInt.New()
328 n0=DataArrayInt.New()
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
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"
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);
354 mesh0.finishInsertingCells()
355 mesh0.setCoords(coords)
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);
364 meshM1.finishInsertingCells()
365 meshM1.setCoords(coords)
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])
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)
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");
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]");
408 f1.checkConsistencyLight();
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");
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]");
424 f1.checkConsistencyLight();
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");
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]");
440 f1.checkConsistencyLight();
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");
450 array=DataArrayDouble.New();
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();
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 ]
475 m=MEDLoaderDataForTest.build2DMesh_2();
476 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
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 ]
482 _gsCoo1=_gsCoo1[0:6];
486 refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
488 _gsCoo1=_gsCoo1[0:4];
490 f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo3,_gsCoo1,_wg1);
491 f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
492 array=DataArrayDouble.New();
494 ptr=array.getPointer();
495 for i in range(19 * 2):
496 array.setIJ(0,i,float(i+7));
499 f.setName("MyFirstFieldOnGaussPoint");
500 array.setInfoOnComponent(0,"power [MW/m^3]");
501 array.setInfoOnComponent(1,"density");
502 f.checkConsistencyLight();
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 ]
518 m=MEDLoaderDataForTest.build2DMesh_3();
519 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
522 di=DataArrayInt.New(); di.setValues([0,2,3],3,1)
523 f.setGaussLocalizationOnCells(di,_refCoo1,_gsCoo1,_wg1)
525 f.setGaussLocalizationOnCells([1,5],_refCoo1,_gsCoo1,_wg1);
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 ]
530 _gsCoo1=_gsCoo1[0:6];
534 refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
536 _gsCoo1=_gsCoo1[0:4];
538 f.setGaussLocalizationOnCells([6,7,8],_refCoo3,_gsCoo1,_wg1);
540 f.setGaussLocalizationOnCells([9],_refCoo3,_gsCoo1,_wg1);
541 f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
542 array=DataArrayDouble.New();
544 ptr=array.getPointer();
545 for i in range(53 * 2):
546 array.setIJ(0,i,float(i+7));
549 f.setName("MyFirstFieldOnGaussPoint");
550 array.setInfoOnComponent(0,"power [MW/m^3]");
551 array.setInfoOnComponent(1,"density");
552 f.checkConsistencyLight();
555 # idem buildVecFieldOnGauss_2 except that different discretizations are sorted inside one type
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 ]
569 m=MEDLoaderDataForTest.build2DMesh_3();
570 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME);
573 di=DataArrayInt.New(); di.setValues([0,1,2],3,1)
574 f.setGaussLocalizationOnCells(di,_refCoo1,_gsCoo1,_wg1)
576 f.setGaussLocalizationOnCells([3,4],_refCoo1,_gsCoo1,_wg1);
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 ]
581 _gsCoo1=_gsCoo1[0:6];
585 refCoo3=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
587 _gsCoo1=_gsCoo1[0:4];
589 f.setGaussLocalizationOnCells([6,7,8],_refCoo3,_gsCoo1,_wg1);
591 f.setGaussLocalizationOnCells([9],_refCoo3,_gsCoo1,_wg1);
592 f.setGaussLocalizationOnType(NORM_TRI6,_refCoo2,_gsCoo2,_wg2);
593 array=DataArrayDouble.New();
595 ptr=array.getPointer();
596 for i in range(53 * 2):
597 array.setIJ(0,i,float(i+7));
600 f.setName("MyFirstFieldOnGaussPoint");
601 array.setInfoOnComponent(0,"power [MW/m^3]");
602 array.setInfoOnComponent(1,"density");
603 f.checkConsistencyLight();
607 def buildVecFieldOnGaussNE_1(cls):
608 m=MEDLoaderDataForTest.build2DMesh_2();
609 f=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME);
612 array=DataArrayDouble.New();
614 for i in range(2 * 20):
615 array.setIJ(0,i,float(i+8));
617 array.setInfoOnComponent(0,"power [W]");
618 array.setInfoOnComponent(1,"temperature");
619 f.setName("MyFieldOnGaussNE");
620 f.checkConsistencyLight();
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)
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])
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])
651 # 1st Field - fNoProfile - no profile on levels 0
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)
659 arr=DataArrayDouble(m0.getNumberOfCells(),1) ; arr.iota() ; arr+=1+i ; arr*=0.1
661 f11Tmp.checkConsistencyLight()
662 f11Tmp.setName(f1Name)
663 f1.appendFieldNoProfileSBT(f11Tmp)
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)
674 arr=DataArrayDouble(m0.getNumberOfCells(),1) ; arr.iota() ; arr+=1+i
676 f21Tmp.checkConsistencyLight()
677 f21Tmp.setName(f2Name)
678 f2.appendFieldNoProfileSBT(f21Tmp)
679 f22Tmp=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
680 f22Tmp.setTime(tim,it,order)
682 arr=DataArrayDouble(m1.getNumberOfCells(),1) ; arr.iota() ; arr+=100+1+i
684 f22Tmp.checkConsistencyLight()
685 f22Tmp.setName(f2Name)
686 f2[it,order].setFieldNoProfileSBT(f22Tmp)
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")
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
701 f31Tmp.checkConsistencyLight()
702 f31Tmp.setName(f3Name)
703 f3.appendFieldProfile(f31Tmp,mm,0,pfl1)
704 pfl2=DataArrayInt([0,3]) ; pfl2.setName("pfl2Bottom")
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
711 f32Tmp.checkConsistencyLight()
712 f32Tmp.setName(f3Name)
713 f3[it,order].setFieldProfile(f32Tmp,mm,-1,pfl2)
717 data=MEDFileData() ; data.setMeshes(ms) ; data.setFields(fs)
721 def buildAMEDFileDataWithGroupOnOneFamilyForSauv(self):
723 coords = [0.,0., 0.,1., 1.,1., 1.,0.]
726 # lvl -1 connectivity
727 conn1D = [0,1, 1,2, 2,3, 4,1]
729 mesh2D=MEDCouplingUMesh.New()
730 mesh2D.setMeshDimension(2)
731 mesh2D.allocateCells(1)
732 mesh2D.insertNextCell(NORM_QUAD4,4,conn2D)
733 mesh2D.finishInsertingCells()
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)
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")
761 mm.setGroupsAtLevel(-1,[grp0_LM1,grp1_LM1])
763 ms=MEDFileMeshes.New()
764 ms.setMeshAtPos(0,mm)
765 mfd=MEDFileData.New()
772 def TestWriteUMeshesRW1(tester):
773 fileName="Pyfile18.med";
774 m3d=MEDLoaderDataForTest.build3DMesh_2();
777 nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
778 m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
780 m2d.renumberCells(renumber,False);
781 m2d.setName("ExampleOfMultiDimW");
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");
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]");
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));
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());
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();
819 WriteUMeshDep(fileName,m,False);
820 f1Tmp=m.getMeasureField(False);
821 f1=f1Tmp.buildNewTimeReprFromThis(ONE_TIME,False);
823 f_1=f1.cloneWithMesh(True);
824 WriteFieldUsingAlreadyWrittenMesh(fileName,f1);
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);
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));
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));
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));
858 def GeneratePyfile18(tester):
859 fileName="Pyfile18.med";
860 m3d=MEDLoaderDataForTest.build3DMesh_2();
863 nodes=m3d.findNodesOnPlane(pt,vec,1e-12);
864 m2d=m3d.buildFacePartOfMySelfNode(nodes,True);
866 m2d.renumberCells(renumber,False);
867 m2d.setName("ExampleOfMultiDimW");
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");
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]");
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));
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");
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);
906 array.setInfoOnComponent(0,"tyty [mm]");
907 array.setInfoOnComponent(1,"uiop [MW]");
908 f1.setTime(3.14,2,7);
909 f1.checkConsistencyLight();
911 f2=f1.buildSubPart(arr2);
912 f2.getMesh().setName(f1.getMesh().getName());
913 WriteField(fileName,f2,False);#<- False important for the test
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));
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));
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));
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);
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);
948 mesh2=mesh1.buildPartOfMySelf(part1,True);
949 mesh2.setName(mesh1.getName());#<- important for the test
951 nbOfCells=mesh2.getNumberOfCells();
952 tester.assertEqual(5,nbOfCells);
953 f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
954 f1.setName("VectorFieldOnCells");
956 array=DataArrayDouble.New();
957 array.alloc(nbOfCells,2);
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();
964 WriteField(fileName,f1,False);#<- False important for the test
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));
972 def GeneratePyfile10(tester):
973 fileName="Pyfile10.med";
974 mesh1=MEDLoaderDataForTest.build3DMesh_1();
976 mesh2=mesh1.buildPartOfMySelf(part1,True);
977 mesh2.setName("mesh2");
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);
986 mesh4.insertNextCell(NORM_TETRA4,4,conn[0:4])
987 mesh4.finishInsertingCells();
988 mesh4.setCoords(mesh1.getCoords());
989 meshes=[mesh1,mesh2,mesh3,mesh4]
991 WriteUMeshesPartition(fileName,mnane,meshes,True);
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");
1007 mesh2_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1008 tester.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
1010 mesh3_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1011 tester.assertTrue(mesh3_2.isEqual(mesh3,1e-12));
1013 mesh4_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1014 tester.assertTrue(mesh4_2.isEqual(mesh4,1e-12));
1016 mesh1_2=ReadUMeshFromGroups(fileName,mnane,0,vec);
1017 mesh1.setName("3DMesh_1");
1018 tester.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
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));
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);
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");