1 |
# $Id$ |
2 |
|
3 |
|
4 |
""" |
5 |
checks the mesh generators against the reference meshes in test_meshes |
6 |
""" |
7 |
|
8 |
__copyright__=""" Copyright (c) 2006 by ACcESS MNRF |
9 |
http://www.access.edu.au |
10 |
Primary Business: Queensland, Australia""" |
11 |
__license__="""Licensed under the Open Software License version 3.0 |
12 |
http://www.opensource.org/licenses/osl-3.0.php""" |
13 |
|
14 |
import sys |
15 |
import os |
16 |
import unittest |
17 |
from esys.escript import * |
18 |
from esys.finley import Interval,Rectangle,Brick,JoinFaces, ReadGmsh |
19 |
|
20 |
try: |
21 |
FINLEY_TEST_DATA=os.environ['FINLEY_TEST_DATA'] |
22 |
except KeyError: |
23 |
FINLEY_TEST_DATA='.' |
24 |
|
25 |
try: |
26 |
FINLEY_WORKDIR=os.environ['FINLEY_WORKDIR'] |
27 |
except KeyError: |
28 |
FINLEY_WORKDIR='.' |
29 |
|
30 |
FINLEY_TEST_MESH_PATH=FINLEY_TEST_DATA+"/data_meshes/" |
31 |
if os.name == "nt": |
32 |
FINLEY_TEST_MESH_PATH = FINLEY_TEST_MESH_PATH+"win32/" |
33 |
FINLEY_WORKDIR_PATH=FINLEY_WORKDIR+"/" |
34 |
|
35 |
TEST_FILE_EXT=".test" |
36 |
class Test_Generators(unittest.TestCase): |
37 |
|
38 |
def checker(self,dom,reference): |
39 |
dom_file=FINLEY_WORKDIR_PATH+TEST_FILE_EXT |
40 |
dom.write(dom_file) |
41 |
# Uncomment this section to dump the files for regression testing |
42 |
# if True: |
43 |
# dom.write(FINLEY_TEST_MESH_PATH+reference) |
44 |
dom_string=open(dom_file).read().splitlines() |
45 |
ref_string=open(FINLEY_TEST_MESH_PATH+reference).read().splitlines() |
46 |
self.failUnlessEqual(len(dom_string),len(ref_string),"number of lines in mesh files does not match reference") |
47 |
for l in range(1,len(ref_string)): |
48 |
self.failUnlessEqual(dom_string[l].strip(),ref_string[l].strip(),"line %d (%s) in mesh files does not match reference (%s)"%(l,ref_string[l].strip(),dom_string[l].strip())) |
49 |
|
50 |
def test_hex_1D_order1(self): |
51 |
file="hex_1D_order1.msh" |
52 |
my_dom=Interval(1,1) |
53 |
self.checker(my_dom,file) |
54 |
|
55 |
def test_hex_1D_order1_onFace(self): |
56 |
file="hex_1D_order1_onFace.msh" |
57 |
my_dom=Interval(1,1,useElementsOnFace=1) |
58 |
self.checker(my_dom,file) |
59 |
|
60 |
def test_hex_1D_order2(self): |
61 |
file="hex_1D_order2.msh" |
62 |
my_dom=Interval(1,2) |
63 |
self.checker(my_dom,file) |
64 |
|
65 |
def test_hex_1D_order2_onFace(self): |
66 |
file="hex_1D_order2_onFace.msh" |
67 |
my_dom=Interval(1,2,useElementsOnFace=1) |
68 |
self.checker(my_dom,file) |
69 |
|
70 |
def test_hex_2D_order1(self): |
71 |
file="hex_2D_order1.msh" |
72 |
my_dom=Rectangle(1,1,1) |
73 |
self.checker(my_dom,file) |
74 |
|
75 |
def test_hex_2D_order1_onFace(self): |
76 |
file="hex_2D_order1_onFace.msh" |
77 |
my_dom=Rectangle(1,1,1,useElementsOnFace=1) |
78 |
self.checker(my_dom,file) |
79 |
|
80 |
def test_hex_2D_order2(self): |
81 |
file="hex_2D_order2.msh" |
82 |
my_dom=Rectangle(1,1,2) |
83 |
self.checker(my_dom,file) |
84 |
|
85 |
def test_hex_2D_order2_onFace(self): |
86 |
file="hex_2D_order2_onFace.msh" |
87 |
my_dom=Rectangle(1,1,2,useElementsOnFace=1) |
88 |
self.checker(my_dom,file) |
89 |
|
90 |
def test_hex_3D_order1(self): |
91 |
file="hex_3D_order1.msh" |
92 |
my_dom=Brick(1,1,1,1) |
93 |
self.checker(my_dom,file) |
94 |
|
95 |
def test_hex_3D_order1_onFace(self): |
96 |
file="hex_3D_order1_onFace.msh" |
97 |
my_dom=Brick(1,1,1,1,useElementsOnFace=1) |
98 |
self.checker(my_dom,file) |
99 |
|
100 |
def test_hex_3D_order2(self): |
101 |
file="hex_3D_order2.msh" |
102 |
my_dom=Brick(1,1,1,2) |
103 |
self.checker(my_dom,file) |
104 |
|
105 |
def test_hex_3D_order2_onFace(self): |
106 |
file="hex_3D_order2_onFace.msh" |
107 |
my_dom=Brick(1,1,1,2,useElementsOnFace=1) |
108 |
self.checker(my_dom,file) |
109 |
|
110 |
def test_hex_contact_2D_order1(self): |
111 |
file="hex_contact_2D_order1.msh" |
112 |
ms1=Rectangle(1,1,1,l1=0.5,useElementsOnFace=False) |
113 |
ms2=Rectangle(1,1,1,l1=0.5,useElementsOnFace=False) |
114 |
ms2.setX(ms2.getX()+[0,0.5]) |
115 |
my_dom=JoinFaces([ms1,ms2]) |
116 |
self.checker(my_dom,file) |
117 |
|
118 |
def test_hex_contact_2D_order1_onFace(self): |
119 |
file="hex_contact_2D_order1_onFace.msh" |
120 |
ms1=Rectangle(1,1,1,l1=0.5,useElementsOnFace=True) |
121 |
ms2=Rectangle(1,1,1,l1=0.5,useElementsOnFace=True) |
122 |
ms2.setX(ms2.getX()+[0,0.5]) |
123 |
my_dom=JoinFaces([ms1,ms2]) |
124 |
self.checker(my_dom,file) |
125 |
|
126 |
def test_hex_contact_2D_order2(self): |
127 |
file="hex_contact_2D_order2.msh" |
128 |
ms1=Rectangle(1,1,2,l1=0.5,useElementsOnFace=False) |
129 |
ms2=Rectangle(1,1,2,l1=0.5,useElementsOnFace=False) |
130 |
ms2.setX(ms2.getX()+[0,0.5]) |
131 |
my_dom=JoinFaces([ms1,ms2]) |
132 |
self.checker(my_dom,file) |
133 |
|
134 |
def test_hex_contact_2D_order2_onFace(self): |
135 |
file="hex_contact_2D_order2_onFace.msh" |
136 |
ms1=Rectangle(1,1,2,l1=0.5,useElementsOnFace=True) |
137 |
ms2=Rectangle(1,1,2,l1=0.5,useElementsOnFace=True) |
138 |
ms2.setX(ms2.getX()+[0,0.5]) |
139 |
my_dom=JoinFaces([ms1,ms2]) |
140 |
self.checker(my_dom,file) |
141 |
|
142 |
def test_hex_contact_3D_order1(self): |
143 |
file="hex_contact_3D_order1.msh" |
144 |
ms1=Brick(1,1,1,1,l2=0.5,useElementsOnFace=False) |
145 |
ms2=Brick(1,1,1,1,l2=0.5,useElementsOnFace=False) |
146 |
ms2.setX(ms2.getX()+[0,0,0.5]) |
147 |
my_dom=JoinFaces([ms1,ms2]) |
148 |
self.checker(my_dom,file) |
149 |
|
150 |
def test_hex_contact_3D_order1_onFace(self): |
151 |
file="hex_contact_3D_order1_onFace.msh" |
152 |
ms1=Brick(1,1,1,1,l2=0.5,useElementsOnFace=True) |
153 |
ms2=Brick(1,1,1,1,l2=0.5,useElementsOnFace=True) |
154 |
ms2.setX(ms2.getX()+[0,0,0.5]) |
155 |
my_dom=JoinFaces([ms1,ms2]) |
156 |
self.checker(my_dom,file) |
157 |
|
158 |
def test_hex_contact_3D_order2(self): |
159 |
file="hex_contact_3D_order2.msh" |
160 |
ms1=Brick(1,1,1,2,l2=0.5,useElementsOnFace=False) |
161 |
ms2=Brick(1,1,1,2,l2=0.5,useElementsOnFace=False) |
162 |
ms2.setX(ms2.getX()+[0,0,0.5]) |
163 |
my_dom=JoinFaces([ms1,ms2]) |
164 |
self.checker(my_dom,file) |
165 |
|
166 |
def test_hex_contact_3D_order2_onFace(self): |
167 |
file="hex_contact_3D_order2_onFace.msh" |
168 |
ms1=Brick(1,1,1,2,l2=0.5,useElementsOnFace=True) |
169 |
ms2=Brick(1,1,1,2,l2=0.5,useElementsOnFace=True) |
170 |
ms2.setX(ms2.getX()+[0,0,0.5]) |
171 |
my_dom=JoinFaces([ms1,ms2]) |
172 |
self.checker(my_dom,file) |
173 |
|
174 |
class Test_GMSHReader(unittest.TestCase): |
175 |
def compare(self, test_file, reference_file): |
176 |
dom_string=open(test_file).read().splitlines() |
177 |
ref_string=open(reference_file).read().splitlines() |
178 |
self.failUnlessEqual(len(dom_string),len(ref_string),"number of lines in mesh files does not match reference") |
179 |
for l in range(1,len(ref_string)): |
180 |
self.failUnlessEqual(dom_string[l].strip(),ref_string[l].strip(),"line %d (%s) in mesh files does not match reference (%s)"%(l,ref_string[l].strip(),dom_string[l].strip())) |
181 |
|
182 |
def test_Tri3(self): |
183 |
file="tri3_gmsh.msh" |
184 |
ref ="tri3.fly" |
185 |
test = FINLEY_WORKDIR+os.sep+"tri3_test.fly" |
186 |
dom = ReadGmsh(FINLEY_TEST_MESH_PATH+os.sep+file,2) |
187 |
dom.write(test) |
188 |
self.compare(test, FINLEY_TEST_MESH_PATH+os.sep+ref) |
189 |
|
190 |
def test_Tri6(self): |
191 |
file="tri6_gmsh.msh" |
192 |
ref="tri6.fly" |
193 |
test = FINLEY_WORKDIR+os.sep+"tri8_test.fly" |
194 |
dom = ReadGmsh(FINLEY_TEST_MESH_PATH+os.sep+file,2) |
195 |
dom.write(test) |
196 |
self.compare(test, FINLEY_TEST_MESH_PATH+os.sep+ref) |
197 |
|
198 |
def test_Tet4(self): |
199 |
file="tet4_gmsh.msh" |
200 |
ref="tet4.fly" |
201 |
test = FINLEY_WORKDIR+os.sep+"tet4_test.fly" |
202 |
dom = ReadGmsh(FINLEY_TEST_MESH_PATH+os.sep+file,3) |
203 |
dom.write(test) |
204 |
self.compare(test, FINLEY_TEST_MESH_PATH+os.sep+ref) |
205 |
|
206 |
def test_Tet(self): |
207 |
file="tet10_gmsh.msh" |
208 |
ref="tet10.fly" |
209 |
test = FINLEY_WORKDIR+os.sep+"tet10_test.fly" |
210 |
dom = ReadGmsh(FINLEY_TEST_MESH_PATH+os.sep+file,3) |
211 |
dom.write(test) |
212 |
self.compare(test, FINLEY_TEST_MESH_PATH+os.sep+ref) |
213 |
|
214 |
if __name__ == '__main__': |
215 |
suite = unittest.TestSuite() |
216 |
suite.addTest(unittest.makeSuite(Test_Generators)) |
217 |
suite.addTest(unittest.makeSuite(Test_GMSHReader)) |
218 |
s=unittest.TextTestRunner(verbosity=2).run(suite) |
219 |
if s.wasSuccessful(): |
220 |
sys.exit(0) |
221 |
else: |
222 |
sys.exit(1) |