/[ascend]/trunk/pygtk/test.py
ViewVC logotype

Contents of /trunk/pygtk/test.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 964 - (show annotations) (download) (as text)
Tue Dec 12 14:34:18 2006 UTC (16 years, 5 months ago) by johnpye
File MIME type: text/x-python
File size: 6702 byte(s)
Added a test method to run a integration with one variable (a numerical example from the text by Zill)
1 import unittest
2 import ascpy
3 import math
4 import os, subprocess
5
6 class CUnit(unittest.TestCase):
7 def setUp(self):
8 self.cunitexe = "../base/generic/test/test"
9
10 def testcunittests(self):
11 res = os.system(self.cunitexe)
12 if res:
13 raise RuntimeError("CUnit tests failed (returned %d -- run %s for details)" % (res,self.cunitexe))
14 else:
15 print "CUnit returned %s" % res
16
17 class Ascend(unittest.TestCase):
18
19 def setUp(self):
20 import ascpy
21 self.L = ascpy.Library()
22
23 def tearDown(self):
24 self.L.clear()
25 del self.L
26
27 def testloading(self):
28 pass
29
30 def testsystema4l(self):
31 self.L.load('system.a4l')
32
33 def testatomsa4l(self):
34 self.L.load('atoms.a4l')
35
36 def testlog10(self):
37 self.L.load('johnpye/testlog10.a4c')
38 T = self.L.findType('testlog10')
39 M = T.getSimulation('sim')
40 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
41 M.run(T.getMethod('self_test'))
42
43 def testListIntegrators(self):
44 I = ascpy.Integrator.getEngines()
45 s1 = sorted([str(i) for i in I.values()])
46 s2 = sorted(['IDA','LSODE'])
47 assert s1==s2
48
49 # this routine is reused by both testIDA and testLSODE
50 def _testIntegrator(self,integratorname):
51 self.L.load('johnpye/shm.a4c')
52 M = self.L.findType('shm').getSimulation('sim')
53 print M.sim.getChildren()
54 assert float(M.sim.x) == 10.0
55 assert float(M.sim.v) == 0.0
56 t_end = math.pi
57
58 I = ascpy.Integrator(M)
59 I.setReporter(ascpy.IntegratorReporterNull(I))
60 I.setEngine(integratorname);
61 I.setLinearTimesteps(ascpy.Units("s"), 0.0, t_end, 100);
62 I.setMinSubStep(0.0005); # these limits are required by IDA at present (numeric diff)
63 I.setMaxSubStep(0.02);
64 I.setInitialSubStep(0.001);
65 I.setMaxSubSteps(200);
66 if(integratorname=='IDA'):
67 I.setParameter('autodiff',False)
68 I.analyse();
69 I.solve();
70 print "At end of simulation,"
71 print "x = %f" % M.sim.x
72 print "v = %f" % M.sim.v
73 assert abs(float(M.sim.x) + 10) < 1e-2
74 assert abs(float(M.sim.v)) < 1e-2
75 assert I.getNumObservedVars() == 3
76
77 def testInvalidIntegrator(self):
78 self.L.load('johnpye/shm.a4c')
79 M = self.L.findType('shm').getSimulation('sim')
80 I = ascpy.Integrator(M)
81 try:
82 I.setEngine('___NONEXISTENT____')
83 except IndexError:
84 return
85 self.fail("setEngine did not raise error!")
86
87 def testLSODE(self):
88 self._testIntegrator('LSODE')
89
90 def testzill(self):
91 self.L.load('johnpye/zill.a4c')
92 T = self.L.findType('zill')
93 M = T.getSimulation('sim')
94 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
95 I = ascpy.Integrator(M)
96 I.setEngine('LSODE')
97 I.setReporter(ascpy.IntegratorReporterConsole(I))
98 I.setLinearTimesteps(ascpy.Units(), 0, 1.5, 2);
99 I.analyse()
100 I.solve()
101 M.run(T.getMethod('self_test'))
102
103
104 def testnewton(self):
105 self.L.load('johnpye/newton.a4c')
106 T = self.L.findType('newton')
107 M = T.getSimulation('sim')
108 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
109 I = ascpy.Integrator(M)
110 I.setEngine('LSODE')
111 I.setParameter('rtolvect',False)
112 I.setParameter('rtol',1e-7)
113 I.setParameter('atolvect',False)
114 I.setParameter('atol',1e-7)
115 I.setMinSubStep(1e-7)
116 I.setMaxSubStep(0.001)
117 I.setMaxSubSteps(10000)
118
119 I.setReporter(ascpy.IntegratorReporterConsole(I))
120 I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.sim.v)/float(M.sim.g), 2);
121 I.analyse()
122 I.solve()
123 print "At end of simulation,"
124 print "x = %f" % M.sim.x
125 print "v = %f" % M.sim.v
126 M.run(T.getMethod('self_test'))
127
128 def testlotka(self):
129 self.L.load('johnpye/lotka.a4c')
130 M = self.L.findType('lotka').getSimulation('sim')
131 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
132 I = ascpy.Integrator(M)
133 I.setEngine('LSODE')
134 I.setReporter(ascpy.IntegratorReporterConsole(I))
135 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5);
136 I.analyse()
137 I.solve()
138 assert I.getNumObservedVars() == 3;
139 assert abs(float(M.sim.R) - 832) < 1.0
140 assert abs(float(M.sim.F) - 21.36) < 0.1
141
142
143 def testIDA(self):
144 self._testIntegrator('IDA')
145
146
147 def testIDAparameters(self):
148 self.L.load('johnpye/shm.a4c')
149 M = self.L.findType('shm').getSimulation('sim')
150 I = ascpy.Integrator(M)
151 I.setEngine('IDA')
152 P = I.getParameters()
153 for p in P:
154 print p.getName(),"=",p.getValue()
155 assert len(P)==7
156 assert P[0].isStr()
157 assert P[0].getName()=="linsolver"
158 assert P[0].getValue()=='SPGMR'
159 assert P[1].getName()=="autodiff"
160 assert P[1].getValue()==True
161 assert P[5].getName()=="atolvect"
162 assert P[5].getBoolValue() == True
163 P[1].setBoolValue(False)
164 assert P[1].getBoolValue()==False
165 I.setParameters(P)
166 for p in I.getParameters():
167 print p.getName(),"=",p.getValue()
168 assert I.getParameterValue('autodiff')==False
169 I.setParameter('autodiff',True)
170 try:
171 v = I.getParameterValue('nonexist')
172 except KeyError:
173 pass
174 else:
175 self.fail('Failed to trip invalid Integrator parameter')
176
177 def testIDAdenx(self):
178 self.L.load('johnpye/idadenx.a4c')
179 M = self.L.findType('idadenx').getSimulation('sim')
180 I = ascpy.Integrator(M)
181 I.setEngine('IDA')
182 I.setReporter(ascpy.IntegratorReporterConsole(I))
183 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11);
184 I.setMaxSubStep(0);
185 I.setInitialSubStep(0);
186 I.setMaxSubSteps(0);
187 I.setParameter('autodiff',True)
188 I.setParameter('linsolver','DENSE')
189 I.analyse()
190 I.solve()
191 assert abs(float(M.sim.y1) - 5.1091e-08) < 1e-10;
192 assert abs(float(M.sim.y2) - 2.0437e-13) < 1e-15;
193 assert abs(float(M.sim.y3) - 1.0) < 1e-5;
194
195 def testIDAdenxSPGMR(self):
196 self.L.load('johnpye/idadenx.a4c')
197 M = self.L.findType('idadenx').getSimulation('sim')
198 I = ascpy.Integrator(M)
199 I.setEngine('IDA')
200 I.setReporter(ascpy.IntegratorReporterConsole(I))
201 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11);
202 I.setMaxSubStep(0);
203 I.setInitialSubStep(0);
204 I.setMaxSubSteps(0);
205 I.setParameter('autodiff',True)
206 I.setParameter('linsolver','SPGMR')
207 I.setParameter('gsmodified',False)
208 I.analyse()
209 I.solve()
210 assert abs(float(M.sim.y1) - 5.1091e-08) < 1e-10;
211 assert abs(float(M.sim.y2) - 2.0437e-13) < 1e-15;
212 assert abs(float(M.sim.y3) - 1.0) < 1e-5;
213
214 def testIDAkryx(self):
215 self.L.load('johnpye/idakryx.a4c')
216 M = self.L.findType('idakryx').getSimulation('sim')
217 M.build()
218 I = ascpy.Integrator(M)
219 I.setEngine('IDA')
220 I.setReporter(ascpy.IntegratorReporterConsole(I))
221 I.setParameter('linsolver','SPGMR')
222 I.setParameter('gsmodified',False)
223 I.setParameter('autodiff',True)
224 I.setParameter('rtol',0)
225 I.setParameter('atol',1e-3);
226 I.setParameter('atolvect',False)
227 I.analyse()
228 I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 10);
229 print M.sim.udot[1][3];
230 I.solve()
231 assert 0
232
233 # move code above down here if you want to temporarily avoid testing it
234 class NotToBeTested:
235 def nothing(self):
236 pass
237
238 if __name__=='__main__':
239 unittest.main()

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22