/[escript]/trunk/finley/test/python/run_inputOutput.py
ViewVC logotype

Contents of /trunk/finley/test/python/run_inputOutput.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1866 - (show annotations)
Thu Oct 9 04:01:06 2008 UTC (10 years, 11 months ago) by ksteube
File MIME type: text/x-python
File size: 6130 byte(s)
Repair to saveVTK similar to revision 1677 (there we got the number of offsets correct
and in this revision we got the number of types correct).
In case of MPI > 1 do not run saveDX tests since saveDX is not MPI parallel.

1
2 ########################################################
3 #
4 # Copyright (c) 2003-2008 by University of Queensland
5 # Earth Systems Science Computational Center (ESSCC)
6 # http://www.uq.edu.au/esscc
7 #
8 # Primary Business: Queensland, Australia
9 # Licensed under the Open Software License version 3.0
10 # http://www.opensource.org/licenses/osl-3.0.php
11 #
12 ########################################################
13
14 __copyright__="""Copyright (c) 2003-2008 by University of Queensland
15 Earth Systems Science Computational Center (ESSCC)
16 http://www.uq.edu.au/esscc
17 Primary Business: Queensland, Australia"""
18 __license__="""Licensed under the Open Software License version 3.0
19 http://www.opensource.org/licenses/osl-3.0.php"""
20 __url__="http://www.uq.edu.au/esscc/escript-finley"
21
22 """
23 Test suite for input and output of meshes and data objects
24
25 @remark:
26
27 @var __author__: name of author
28 @var __licence__: licence agreement
29 @var __url__: url entry point on documentation
30 @var __version__: version
31 @var __date__: date of the version
32 """
33
34 import unittest, sys
35
36 from esys.escript import *
37 from esys.finley import Rectangle, Brick, LoadMesh, ReadMesh
38
39 try:
40 FINLEY_TEST_DATA=os.environ['FINLEY_TEST_DATA']
41 except KeyError:
42 FINLEY_TEST_DATA='.'
43
44 FINLEY_TEST_MESH_PATH=FINLEY_TEST_DATA+"/data_meshes/"
45
46 REL_TOL=1.e-6
47
48 # Number of elements scales up with number of MPI processes
49 NE0 = 7 * getMPISizeWorld()
50 NE1 = 11
51 NE2 = 5
52
53 class InputOutput(unittest.TestCase):
54
55 # Check that two domains are equal using Fourier integrals
56 # We cannot compare the X coordinates since they are on different domains
57 def domainsEqual(self, m1, m2, nft=100):
58 self.failUnless(m1.getDim() == m2.getDim(), "Dimensions differ")
59 self.failUnless(m1.getNumDataPointsGlobal() == m2.getNumDataPointsGlobal(), "Num data points differ")
60 for tagName in m1.showTagNames().split(", "):
61 self.failUnless(m2.isValidTagName(tagName), "m1 has a tag '%s' not present in m2" % tagName)
62 for tagName in m2.showTagNames().split(", "):
63 self.failUnless(m1.isValidTagName(tagName), "m2 has a tag '%s' not present in m1" % tagName)
64 self.failUnless(m1.getTag(tagName) == m2.getTag(tagName), "values of tag '%s' differ" % tagName)
65 for fs in ["Solution", "ReducedSolution", "Function", "ReducedFunction", "ContinuousFunction", "ReducedContinuousFunction"]:
66 fs1 = eval("%s(m1)" % fs)
67 fs2 = eval("%s(m2)" % fs)
68 x1 = fs1.getX()
69 x2 = fs2.getX()
70 for n in range(1, nft+1):
71 integ1 = integrate(sin(n*x1))
72 integ2 = integrate(sin(n*x2))
73 self.failUnless(Lsup(abs(integ1-integ2)) <= REL_TOL, "integrals for n=%d differ" % n)
74 return True
75
76 # Does optimize=True change Rectangle for order=1?
77 def test_Rectangle_optimize_order1(self):
78 mydomain1 = Rectangle(n0=NE0, n1=NE1, order=1, l0=1., l1=1., optimize=False)
79 mydomain2 = Rectangle(n0=NE0, n1=NE1, order=1, l0=1., l1=1., optimize=True)
80 self.domainsEqual(mydomain1, mydomain2)
81
82 # Does optimize=True change Rectangle for order=2?
83 def test_Rectangle_optimize_order2(self):
84 mydomain1 = Rectangle(n0=NE0, n1=NE1, order=2, l0=1., l1=1., optimize=False)
85 mydomain2 = Rectangle(n0=NE0, n1=NE1, order=2, l0=1., l1=1., optimize=True)
86 self.domainsEqual(mydomain1, mydomain2)
87
88 # Does optimize=True change Brick for order=1?
89 def test_Brick_optimize_order1(self):
90 mydomain1 = Brick(n0=NE0, n1=NE1, n2=NE2, order=1, l0=1., l1=1., l2=1., optimize=False)
91 mydomain2 = Brick(n0=NE0, n1=NE1, n2=NE2, order=1, l0=1., l1=1., l2=1., optimize=True)
92 self.domainsEqual(mydomain1, mydomain2)
93
94 # Does optimize=True change Brick for order=2?
95 def test_Brick_optimize_order2(self):
96 mydomain1 = Brick(n0=NE0, n1=NE1, n2=NE2, order=2, l0=1., l1=1., l2=1., optimize=False)
97 mydomain2 = Brick(n0=NE0, n1=NE1, n2=NE2, order=2, l0=1., l1=1., l2=1., optimize=True)
98 self.domainsEqual(mydomain1, mydomain2)
99
100 def test_data_dump_to_NetCDF_rectangle(self):
101 if loadIsConfigured():
102 mydomain1 = Rectangle(n0=NE0, n1=NE1, order=1, l0=1., l1=1., optimize=False)
103 d1=Data(mydomain1.getMPIRank(), Function(mydomain1))
104 d1.expand()
105 d1.dump("tempfile.dump.nc")
106 d2=load("tempfile.dump.nc", mydomain1)
107 self.failUnless(Lsup(abs(d1-d2)) <= REL_TOL, "data objects differ")
108
109 def test_data_dump_to_NetCDF_brick(self):
110 if loadIsConfigured():
111 mydomain1 = Brick(n0=NE0, n1=NE1, n2=NE2, order=2, l0=1., l1=1., l2=1., optimize=False)
112 d1=Data(mydomain1.getMPIRank(), Function(mydomain1))
113 d1.expand()
114 d1.dump("tempfile.dump.nc")
115 d2=load("tempfile.dump.nc", mydomain1)
116 self.failUnless(Lsup(abs(d1-d2)) <= REL_TOL, "data objects differ")
117
118 def test_mesh_dump_to_NetCDF_rectangle(self):
119 if loadIsConfigured():
120 mydomain1 = Rectangle(n0=NE0, n1=NE1, order=1, l0=1., l1=1., optimize=False)
121 mydomain1.dump("tempfile.mesh.nc")
122 mydomain2=LoadMesh("tempfile.mesh.nc")
123 self.domainsEqual(mydomain1, mydomain2)
124
125 def test_mesh_dump_to_NetCDF_brick(self):
126 if loadIsConfigured():
127 mydomain1 = Brick(n0=NE0, n1=NE1, n2=NE2, order=2, l0=1., l1=1., l2=1., optimize=False)
128 mydomain1.dump("tempfile.mesh.nc")
129 mydomain2=LoadMesh("tempfile.mesh.nc")
130 self.domainsEqual(mydomain1, mydomain2)
131
132 def test_mesh_read_rectangle_from_finley_file(self):
133 if getMPISizeWorld() < 16:
134 mydomain1 = Rectangle(n0=8, n1=10, order=1, l0=1., l1=1., optimize=False)
135 mydomain2 = ReadMesh(FINLEY_TEST_MESH_PATH+"rectangle_8x10.fly")
136 self.domainsEqual(mydomain1, mydomain2)
137
138 def test_mesh_read_brick_from_finley_file(self):
139 if getMPISizeWorld() < 16:
140 mydomain1 = Brick(n0=8, n1=10, n2=12, order=1, l0=1., l1=1., l2=1., optimize=False)
141 mydomain2 = ReadMesh(FINLEY_TEST_MESH_PATH+"brick_8x10x12.fly")
142 self.domainsEqual(mydomain1, mydomain2)
143
144 if __name__ == '__main__':
145 suite = unittest.TestSuite()
146 suite.addTest(unittest.makeSuite(InputOutput))
147 s=unittest.TextTestRunner(verbosity=2).run(suite)
148 if not s.wasSuccessful(): sys.exit(1)
149

  ViewVC Help
Powered by ViewVC 1.1.26