source: trunk/anuga_core/anuga/pymetis/tests/test_metis.py @ 9679

Last change on this file since 9679 was 9544, checked in by steve, 10 years ago

Updated pymetis test to succeed on windows

File size: 5.0 KB
Line 
1#!/usr/bin/env python
2from os import sep
3from sys import path
4import sys
5
6from numpy import array, allclose
7
8import unittest
9
10# path.append('..' + sep + 'pymetis')
11
12import anuga.pymetis.metis_ext as metis
13
14class TestMetis(unittest.TestCase):
15    def setUp(self):
16        pass
17
18    def test_Hexmesh(self):
19        # Hexagonal mesh
20        #
21        #   1---2 
22        #  / \ / \
23        # 6---0---3
24        #  \ / \ /
25        #   5---4
26        #
27        # Divided 3 ways
28        # Calling order is: elements, verticies, edge list
29        # element type, number parts
30        edgecut, epart, npart = metis.partMeshNodal(6, 7,\
31                                                    [0, 1, 2,\
32                                                     0, 2, 3,\
33                                                     0, 3, 4,\
34                                                     0, 4, 5,\
35                                                     0, 5, 6,\
36                                                     0, 6, 1],\
37                                                    1,\
38                                                    3,)
39        #print edgecut
40        #print epart
41        #print npart
42        if sys.platform == 'win32':
43            epart_expected = array([2, 2, 1, 1, 1, 1], 'i')
44            npart_expected = array([1, 2, 2, 2, 1, 1, 1], 'i')
45            self.assert_(edgecut == 5)
46            assert allclose(epart, epart_expected)
47            assert allclose(npart, npart_expected) 
48        else:
49            epart_expected = array([2, 2, 0, 0, 0, 0], 'i')
50            npart_expected = array([0, 2, 2, 2, 0, 0, 0], 'i')
51            self.assert_(edgecut == 5)
52            assert allclose(epart, epart_expected)
53            assert allclose(npart, npart_expected)       
54
55
56    def test_Hexmesh2(self):
57        # Hexagonal mesh
58        #
59        #   1---2 
60        #  / \ / \
61        # 6---0---3
62        #  \ / \ /
63        #   5---4
64        #
65        # Divided 2 ways
66        # Calling order is: elements, verticies, edge list
67        # element type, number parts
68        edgecut, epart, npart = metis.partMeshNodal(6, 7,\
69                                                    [0, 2, 1,\
70                                                     0, 3, 2,\
71                                                     0, 4, 3,\
72                                                     0, 5, 4,\
73                                                     0, 6, 5,\
74                                                     0, 1, 6],\
75                                                    1,\
76                                                    2,)
77        #print edgecut
78        #print epart
79        #print npart
80        if sys.platform == 'win32':
81            epart_expected = array([1, 1, 1, 1, 1, 1], 'i')
82            npart_expected = array([1, 1, 1, 1, 1, 1, 1], 'i')
83            self.assert_(edgecut == 0)
84            assert allclose(epart, epart_expected)
85            assert allclose(npart, npart_expected) 
86        else: 
87            epart_expected = array([1, 0, 0, 0, 1, 1], 'i')
88            npart_expected = array([0, 1, 1, 0, 0, 0, 1], 'i')
89            self.assert_(edgecut == 5)
90            assert allclose(epart, epart_expected)
91            assert allclose(npart, npart_expected)
92     
93
94    def test_Hexmesh3(self):
95        # Hexagonal mesh
96        #
97        #   1---2---7
98        #  /5\0/1\6/7\
99        # 6---0---3---8
100        #  \4/3\2/9\8/
101        #   5---4---9
102        #
103        # Divided 2 ways
104        # Calling order is: elements, verticies, edge list
105        # element type, number parts
106        edgecut, epart, npart = metis.partMeshNodal(10, 10,\
107                                                    [0, 2, 1,\
108                                                     0, 3, 2,\
109                                                     0, 4, 3,\
110                                                     0, 5, 4,\
111                                                     0, 6, 5,\
112                                                     0, 1, 6,\
113                                                                                                         3, 2, 7,\
114                                                                                                         3, 7, 8,\
115                                                                                                         3, 8, 9,\
116                                                                                                         3, 9, 4],\
117                                                    1,\
118                                                    3,)
119        #print edgecut
120        #print epart
121        #print npart
122        if sys.platform == 'win32':
123            epart_expected = array([2, 0, 2, 2, 1, 1, 0, 0, 0, 0], 'i')
124            npart_expected = array([2, 1, 0, 0, 2, 1, 1, 0, 2, 0], 'i')
125            self.assert_(edgecut == 12)
126            assert allclose(epart, epart_expected)
127            assert allclose(npart, npart_expected) 
128        else: 
129            epart_expected = array([0, 0, 0, 1, 2, 2, 2, 2, 1, 1], 'i')
130            npart_expected = array([0, 2, 0, 2, 1, 1, 2, 2, 0, 1], 'i')
131            self.assert_(edgecut == 14)
132            assert allclose(epart, epart_expected)
133            assert allclose(npart, npart_expected)
134               
135
136if __name__ == "__main__":
137    suite = unittest.makeSuite(TestMetis,'test_')
138    runner = unittest.TextTestRunner()
139    runner.run(suite)
140
141
Note: See TracBrowser for help on using the repository browser.