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

Annotation of /trunk/test.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1255 - (hide annotations) (download) (as text)
Sat Jan 27 10:56:58 2007 UTC (12 years, 4 months ago) by johnpye
File MIME type: text/x-python
File size: 33097 byte(s)
Small error with the chemakzo test case.
1 johnpye 1008 #!/usr/bin/env python
2 johnpye 1102 # ASCEND modelling environment
3     # Copyright (C) 2006 Carnegie Mellon University
4     #
5     # This program is free software; you can redistribute it and/or modify
6     # it under the terms of the GNU General Public License as published by
7     # the Free Software Foundation; either version 2, or (at your option)
8     # any later version.
9     #
10     # This program is distributed in the hope that it will be useful,
11     # but WITHOUT ANY WARRANTY; without even the implied warranty of
12     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     # GNU General Public License for more details.
14     #
15     # You should have received a copy of the GNU General Public License
16     # along with this program; if not, write to the Free Software
17     # Foundation, Inc., 59 Temple Place - Suite 330,
18     # Boston, MA 02111-1307, USA.
19    
20     # This script gives a test suite for the high-level interface of ASCEND via
21     # Python. It is also planned to be a wrapper for the CUnit test suite, although
22     # this is still experimental.
23    
24 johnpye 669 import unittest
25 johnpye 1104 import os, sys
26 johnpye 1098 import math
27     import atexit
28 johnpye 1091
29     import platform
30 johnpye 1028 if platform.system() != "Windows":
31     import dl
32     sys.setdlopenflags(dl.RTLD_GLOBAL|dl.RTLD_NOW)
33    
34 johnpye 956 class Ascend(unittest.TestCase):
35 johnpye 669
36 johnpye 933 def setUp(self):
37     import ascpy
38 johnpye 1118 self.L = ascpy.Library()
39 johnpye 933
40     def tearDown(self):
41     self.L.clear()
42     del self.L
43    
44 johnpye 1024 class AscendSelfTester(Ascend):
45    
46     def _run(self,modelname,solvername="QRSlv",filename=None):
47     if filename==None:
48     filename = 'johnpye/%s.a4c' % modelname
49     self.L.load(filename)
50     T = self.L.findType(modelname)
51     M = T.getSimulation('sim')
52     M.build()
53     M.solve(ascpy.Solver(solvername),ascpy.SolverReporter())
54     M.run(T.getMethod('self_test'))
55     return M
56    
57 johnpye 966 class TestCompiler(Ascend):
58    
59 johnpye 1213 def _run(self,filen,modeln=""):
60     self.L.load('test/compiler/%s.a4c' % filen)
61     T = self.L.findType('%s%s' % (filen,modeln))
62     M = T.getSimulation('sim')
63     M.build()
64    
65     def _runfail(self,filen,n,msg="failed"):
66     try:
67     self._run(filen,'fail%d' % n)
68     except Exception,e:
69     print "(EXPECTED) ERROR: %s" % e
70     return
71     self.fail(msg)
72    
73    
74 johnpye 941 def testloading(self):
75 johnpye 1213 """library startup"""
76 johnpye 941 pass
77    
78     def testsystema4l(self):
79 johnpye 1213 """loading system.a4l?"""
80 johnpye 941 self.L.load('system.a4l')
81    
82     def testatomsa4l(self):
83 johnpye 1213 """loading atoms.a4l?"""
84 johnpye 941 self.L.load('atoms.a4l')
85    
86 johnpye 1213 def testmissingreq(self):
87     """flagging a missing REQUIRE"""
88     self._runfail('missingreq',1)
89    
90     def testmissingsubreq(self):
91     """flagging a subsidiary missing REQUIRE"""
92     self._runfail('missingreq',1)
93    
94 johnpye 1024 class TestSolver(AscendSelfTester):
95 johnpye 966
96     def testlog10(self):
97     self._run('testlog10')
98    
99 johnpye 1156 def testrootsofpoly(self):
100     self._run('roots_of_poly',filename="roots_of_poly.a4c")
101    
102 johnpye 1152 def testcollapsingcan(self):
103     self._run('collapsingcan',filename="collapsingcan.a4c")
104    
105 johnpye 1165 def testdistancecalc(self):
106     self._run('distance_calc',filename="distance_calc.a4c")
107    
108 johnpye 966 def testconopt(self):
109     self._run('testconopt',"CONOPT")
110    
111     def testcmslv2(self):
112 johnpye 974 self._run('testcmslv2',"CMSlv")
113 johnpye 966
114     def testsunpos1(self):
115     self._run('example_1_6_1',"QRSlv","johnpye/sunpos.a4c")
116    
117     def testsunpos2(self):
118     self._run('example_1_6_2',"QRSlv","johnpye/sunpos.a4c")
119    
120     def testsunpos3(self):
121     self._run('example_1_7_1',"QRSlv","johnpye/sunpos.a4c")
122    
123     def testsunpos4(self):
124     self._run('example_1_7_2',"QRSlv","johnpye/sunpos.a4c")
125    
126     def testsunpos5(self):
127     self._run('example_1_7_3',"QRSlv","johnpye/sunpos.a4c")
128    
129     def testsunpos6(self):
130     self._run('example_1_8_1',"QRSlv","johnpye/sunpos.a4c")
131    
132 johnpye 1073 def testinstanceas(self):
133     M = self._run('example_1_6_1',"QRSlv","johnpye/sunpos.a4c")
134     self.assertAlmostEqual( float(M.t_solar), M.t_solar.as("s"))
135     self.assertAlmostEqual( float(M.t_solar)/3600, M.t_solar.as("h"))
136    
137 johnpye 1126 class TestMatrix(AscendSelfTester):
138     def testlog10(self):
139     M = self._run('testlog10')
140     print M.getMatrix().write(sys.stderr,"mmio")
141    
142    
143 johnpye 966 class TestIntegrator(Ascend):
144    
145 johnpye 941 def testListIntegrators(self):
146     I = ascpy.Integrator.getEngines()
147     s1 = sorted([str(i) for i in I.values()])
148 johnpye 972 s2 = sorted(['IDA','LSODE','AWW'])
149 johnpye 941 assert s1==s2
150    
151 johnpye 942 # this routine is reused by both testIDA and testLSODE
152 johnpye 941 def _testIntegrator(self,integratorname):
153 johnpye 940 self.L.load('johnpye/shm.a4c')
154     M = self.L.findType('shm').getSimulation('sim')
155 johnpye 972 M.setSolver(ascpy.Solver('QRSlv'))
156 johnpye 1133 P = M.getParameters()
157     M.setParameter('feastol',1e-12)
158 johnpye 979 print M.getChildren()
159     assert float(M.x) == 10.0
160     assert float(M.v) == 0.0
161 johnpye 941 t_end = math.pi
162 johnpye 940
163     I = ascpy.Integrator(M)
164     I.setReporter(ascpy.IntegratorReporterNull(I))
165 johnpye 941 I.setEngine(integratorname);
166 johnpye 940 I.setLinearTimesteps(ascpy.Units("s"), 0.0, t_end, 100);
167 johnpye 1133 I.setMinSubStep(0.0001); # these limits are required by IDA at present (numeric diff)
168     I.setMaxSubStep(0.1);
169 johnpye 941 I.setInitialSubStep(0.001);
170     I.setMaxSubSteps(200);
171 johnpye 944 if(integratorname=='IDA'):
172     I.setParameter('autodiff',False)
173 johnpye 1133 for p in M.getParameters():
174     print p.getName(),"=",p.getValue()
175 johnpye 940 I.analyse();
176     I.solve();
177 johnpye 941 print "At end of simulation,"
178 johnpye 979 print "x = %f" % M.x
179     print "v = %f" % M.v
180     assert abs(float(M.x) + 10) < 1e-2
181     assert abs(float(M.v)) < 1e-2
182 johnpye 940 assert I.getNumObservedVars() == 3
183    
184 johnpye 941 def testInvalidIntegrator(self):
185 johnpye 966 self.L.load('johnpye/shm.a4c')
186 johnpye 941 M = self.L.findType('shm').getSimulation('sim')
187 johnpye 972 M.setSolver(ascpy.Solver('QRSlv'))
188 johnpye 941 I = ascpy.Integrator(M)
189     try:
190     I.setEngine('___NONEXISTENT____')
191 johnpye 972 except RuntimeError:
192 johnpye 941 return
193     self.fail("setEngine did not raise error!")
194    
195     def testLSODE(self):
196     self._testIntegrator('LSODE')
197    
198 johnpye 972 def testIDA(self):
199     self._testIntegrator('IDA')
200    
201 johnpye 1016 def testparameters(self):
202     self.L.load('johnpye/shm.a4c')
203     M = self.L.findType('shm').getSimulation('sim')
204     M.build()
205     I = ascpy.Integrator(M)
206     I.setEngine('IDA')
207     P = I.getParameters()
208     for p in P:
209     print p.getName(),"=",p.getValue()
210     assert len(P)==11
211     assert P[0].isStr()
212     assert P[0].getName()=="linsolver"
213     assert P[0].getValue()=='SPGMR'
214     assert P[2].getName()=="autodiff"
215     assert P[2].getValue()==True
216     assert P[7].getName()=="atolvect"
217     assert P[7].getBoolValue() == True
218     P[2].setBoolValue(False)
219     assert P[2].getBoolValue()==False
220     I.setParameters(P)
221     assert I.getParameterValue('autodiff')==False
222     I.setParameter('autodiff',True)
223     try:
224     v = I.getParameterValue('nonexist')
225     except KeyError:
226     pass
227     else:
228     self.fail('Failed to trip invalid Integrator parameter')
229    
230 johnpye 972 class TestLSODE(Ascend):
231    
232 johnpye 964 def testzill(self):
233     self.L.load('johnpye/zill.a4c')
234     T = self.L.findType('zill')
235     M = T.getSimulation('sim')
236 johnpye 972 M.setSolver(ascpy.Solver('QRSlv'))
237 johnpye 964 I = ascpy.Integrator(M)
238 johnpye 966 I.setEngine('LSODE')
239     I.setMinSubStep(1e-7)
240     I.setMaxSubStep(0.001)
241     I.setMaxSubSteps(10000)
242 johnpye 964 I.setReporter(ascpy.IntegratorReporterConsole(I))
243 johnpye 1017 I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5)
244 johnpye 964 I.analyse()
245     I.solve()
246     M.run(T.getMethod('self_test'))
247    
248 johnpye 962 def testnewton(self):
249 johnpye 973 sys.stderr.write("STARTING TESTNEWTON\n")
250 johnpye 962 self.L.load('johnpye/newton.a4c')
251     T = self.L.findType('newton')
252     M = T.getSimulation('sim')
253     M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
254     I = ascpy.Integrator(M)
255     I.setEngine('LSODE')
256 johnpye 963 I.setParameter('rtolvect',False)
257     I.setParameter('rtol',1e-7)
258     I.setParameter('atolvect',False)
259     I.setParameter('atol',1e-7)
260     I.setMinSubStep(1e-7)
261     I.setMaxSubStep(0.001)
262     I.setMaxSubSteps(10000)
263    
264 johnpye 962 I.setReporter(ascpy.IntegratorReporterConsole(I))
265 johnpye 1017 I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.v)/float(M.g), 2)
266 johnpye 962 I.analyse()
267     I.solve()
268     print "At end of simulation,"
269 johnpye 979 print "x = %f" % M.x
270     print "v = %f" % M.v
271 johnpye 962 M.run(T.getMethod('self_test'))
272    
273 johnpye 961 def testlotka(self):
274     self.L.load('johnpye/lotka.a4c')
275     M = self.L.findType('lotka').getSimulation('sim')
276 johnpye 980 M.setSolver(ascpy.Solver("QRSlv"))
277 johnpye 961 I = ascpy.Integrator(M)
278     I.setEngine('LSODE')
279     I.setReporter(ascpy.IntegratorReporterConsole(I))
280 johnpye 1017 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5)
281 johnpye 961 I.analyse()
282 johnpye 979 print "Number of vars = %d" % I.getNumVars()
283     assert I.getNumVars()==2
284 johnpye 961 I.solve()
285     assert I.getNumObservedVars() == 3;
286 johnpye 979 assert abs(M.R - 832) < 1.0
287     assert abs(M.F - 21.36) < 0.1
288 johnpye 1017
289     #-------------------------------------------------------------------------------
290 johnpye 1032 # Testing of a external blackbox functions
291 johnpye 1021
292 johnpye 1032 class TestBlackBox(AscendSelfTester):
293     def testparsefail0(self):
294     try:
295     self.L.load('test/blackbox/parsefail0.a4c')
296     self.fail("parsefail0 should not have loaded without errors")
297     except:
298     pass
299    
300     def testparsefail1(self):
301     try:
302     self.L.load('test/blackbox/parsefail1.a4c')
303     self.fail("parsefail1 should not have loaded without errors")
304     except:
305     pass
306    
307     def testparsefail2(self):
308     try:
309     self.L.load('test/blackbox/parsefail2.a4c')
310     self.fail("parsefail2 should not have loaded without errors")
311     except:
312     pass
313    
314     def testparsefail3(self):
315     try:
316     self.L.load('test/blackbox/parsefail3.a4c')
317     self.fail("parsefail3 should not have loaded without errors")
318     except:
319     pass
320    
321     def testparsefail4(self):
322     try:
323     self.L.load('test/blackbox/parsefail4.a4c')
324     self.fail("parsefail4 should not have loaded")
325     except:
326     pass
327    
328     def testfail1(self):
329     """Mismatched arg counts check-- tests bbox, not ascend."""
330     self.L.load('test/blackbox/fail1.a4c')
331 johnpye 1034 try:
332 johnpye 1035 M = self.L.findType('fail1').getSimulation('sim')
333 johnpye 1034 self.fail("expected exception was not raised")
334     except RuntimeError,e:
335     print "Caught exception '%s', assumed ok" % e
336 johnpye 1032
337     def testfail2(self):
338     """Incorrect data arg check -- tests bbox, not ascend"""
339     self.L.load('test/blackbox/fail2.a4c')
340 johnpye 1035 try:
341     M = self.L.findType('fail2').getSimulation('sim')
342     self.fail("expected exception was not raised")
343     except RuntimeError,e:
344     print "Caught exception '%s', assumed ok (should mention errors during instantiation)" % e
345 johnpye 1032
346     def testpass1(self):
347     """simple single bbox forward solve"""
348     M = self._run('pass1',filename='test/blackbox/pass.a4c')
349    
350     def testpass2(self):
351     """simple single bbox reverse solve"""
352     M = self._run('pass2',filename='test/blackbox/pass.a4c')
353    
354     def testpass3(self):
355     """simple double bbox solve"""
356     M = self._run('pass3',filename='test/blackbox/pass3.a4c')
357    
358     def testpass4(self):
359     """simple double bbox reverse solve"""
360     M = self._run('pass4',filename='test/blackbox/pass3.a4c')
361    
362     def testpass5(self):
363     M = self._run('pass5',filename='test/blackbox/pass5.a4c')
364    
365     def testpass6(self):
366     M = self._run('pass6',filename='test/blackbox/pass5.a4c')
367    
368     def testpass7(self):
369     M = self._run('pass7',filename='test/blackbox/passmerge.a4c')
370    
371     def testpass8(self):
372     M = self._run('pass8',filename='test/blackbox/passmerge.a4c')
373    
374     def testpass9(self):
375     M = self._run('pass9',filename='test/blackbox/passmerge.a4c')
376    
377     def testpass10(self):
378     M = self._run('pass10',filename='test/blackbox/passmerge.a4c')
379    
380     def testpass11(self):
381     M = self._run('pass11',filename='test/blackbox/passmerge.a4c')
382    
383     def testpass12(self):
384     M = self._run('pass12',filename='test/blackbox/passmerge.a4c')
385    
386 johnpye 1037 # this test doesn't work: 'system is inconsistent' -- and structurally singular
387     # def testpass13(self):
388     # """cross-merged input/output solve"""
389     # M = self._run('pass13',filename='test/blackbox/passmerge.a4c')
390 johnpye 1032
391     def testpass14(self):
392     """cross-merged input/output reverse solve"""
393     M = self._run('pass14',filename='test/blackbox/passmerge.a4c')
394    
395     def testpass20(self):
396     M = self._run('pass20',filename='test/blackbox/passarray.a4c')
397    
398     def testparsefail21(self):
399     """dense array of black boxes wrong syntax"""
400     try:
401     self.L.load('test/blackbox/parsefail21.a4c')
402     self.fail("parsefail21 should not have loaded without errors")
403     except:
404     pass
405    
406     def testpass22(self):
407     M = self._run('pass22',filename='test/blackbox/passarray.a4c')
408    
409     def testpass23(self):
410     M = self._run('pass23',filename='test/blackbox/passarray.a4c')
411    
412     def testpass61(self):
413     M = self._run('pass61',filename='test/blackbox/reinstantiate.a4c')
414    
415     def testpass62(self):
416     M = self._run('pass62',filename='test/blackbox/reinstantiate.a4c')
417    
418     def testpass64(self):
419     M = self._run('pass64',filename='test/blackbox/reinstantiate.a4c')
420    
421     def testpass65(self):
422     M = self._run('pass65',filename='test/blackbox/reinstantiate.a4c')
423    
424     def testpass66(self):
425     M = self._run('pass66',filename='test/blackbox/reinstantiate.a4c')
426    
427     def testpass67(self):
428     M = self._run('pass67',filename='test/blackbox/reinstantiate.a4c')
429    
430 johnpye 1024 class TestExtFn(AscendSelfTester):
431 johnpye 1021 def testextfntest(self):
432 johnpye 1024 M = self._run('extfntest',filename='johnpye/extfn/extfntest.a4c')
433     self.assertAlmostEqual(M.y, 2);
434     self.assertAlmostEqual(M.x, 1);
435 johnpye 1021 self.assertAlmostEqual(M.y, M.x + 1);
436    
437 johnpye 1039 def testextrelfor(self):
438     M = self._run('extrelfor',filename='johnpye/extfn/extrelfor.a4c')
439 johnpye 1024
440 johnpye 1056 ## @TODO fix bug with badly-named bbox rel in a loop (Ben, maybe)
441     # def testextrelforbadnaming(self):
442     # self.L.load('johnpye/extfn/extrelforbadnaming.a4c')
443     # T = self.L.findType('extrelfor')
444     # M = T.getSimulation('sim')
445     # M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
446     # print "x[1] = %f" % M.x[1]
447     # print "x[2] = %f" % M.x[2]
448     # print "x[3] = %f" % M.x[3]
449     # print "x[4] = %f" % M.x[4]
450     # print "x[5] = %f" % M.x[5]
451     # M.run(T.getMethod('self_test'))
452 johnpye 1039
453 johnpye 1024 def testextrelrepeat(self):
454     M = self._run('extrelrepeat',filename='johnpye/extfn/extrelrepeat.a4c')
455    
456 johnpye 1021 #-------------------------------------------------------------------------------
457 johnpye 1162 # Testing of Sensitivity module
458    
459     class TestSensitivity(AscendSelfTester):
460     def test1(self):
461     self.L.load('sensitivity_test.a4c')
462     T = self.L.findType('sensitivity_test')
463     M = T.getSimulation('sim',False)
464     M.run(T.getMethod('on_load'))
465     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
466     M.run(T.getMethod('analyse'))
467 johnpye 1163 M.run(T.getMethod('self_test'))
468 johnpye 1167
469 johnpye 1168 # def testall(self):
470     # self.L.load('sensitivity_test.a4c')
471     # T = self.L.findType('sensitivity_test_all')
472     # M = T.getSimulation('sim',False)
473     # M.run(T.getMethod('on_load'))
474     # M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
475     # M.run(T.getMethod('analyse'))
476     # M.run(T.getMethod('self_test'))
477     # CAUSES CRASH
478 johnpye 1162
479     #-------------------------------------------------------------------------------
480 johnpye 1024 # Testing of a ExtPy - external python methods
481    
482     class TestExtPy(AscendSelfTester):
483 johnpye 1055 def test1(self):
484     self.L.load('johnpye/extpy/extpytest.a4c')
485     T = self.L.findType('extpytest')
486     M = T.getSimulation('sim')
487     M.run(T.getMethod('self_test'))
488    
489     def test2(self):
490     self.L.load('johnpye/extpy/extpytest.a4c')
491     T = self.L.findType('extpytest')
492     M = T.getSimulation('sim')
493     M.run(T.getMethod('pythonthing'))
494     M.run(T.getMethod('pythonthing'))
495     M.run(T.getMethod('pythonthing'))
496     M.run(T.getMethod('pythonthing'))
497 johnpye 1205 M.run(T.getMethod('pythonthing'))
498     M.run(T.getMethod('pythonthing'))
499     M.run(T.getMethod('pythonthing'))
500 johnpye 1055 # causes crash!
501 johnpye 1024
502     #-------------------------------------------------------------------------------
503 johnpye 1042 # Testing of saturated steam properties library (iapwssatprops.a4c)
504    
505     class TestSteam(AscendSelfTester):
506 johnpye 1161
507 johnpye 1042 def testiapwssatprops1(self):
508     M = self._run('testiapwssatprops1',filename='steam/iapwssatprops.a4c')
509     def testiapwssatprops2(self):
510     M = self._run('testiapwssatprops2',filename='steam/iapwssatprops.a4c')
511     def testiapwssatprops3(self):
512     M = self._run('testiapwssatprops3',filename='steam/iapwssatprops.a4c')
513    
514 johnpye 1161 # test the stream model basically works
515 johnpye 1043 def testsatsteamstream(self):
516     M = self._run('satsteamstream',filename='steam/satsteamstream.a4c')
517 johnpye 1042
518 johnpye 1161 # test that we can solve in terms of various (rho,u)
519     def testsatuv(self):
520     self.L.load('steam/iapwssat.a4c')
521     T = self.L.findType('testiapwssatuv')
522     M = T.getSimulation('sim',False)
523     M.run(T.getMethod('on_load'))
524     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
525     print "p = %f bar" % M.p.as('bar');
526     print "T = %f C" % (M.T.as('K') - 273.15);
527     print "x = %f" % M.x;
528     M.run(T.getMethod('self_test'))
529     M.run(T.getMethod('values2'))
530     # M.v.setRealValueWithUnits(1.0/450,"m^3/kg");
531     # M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
532     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
533     print "p = %f bar" % M.p.as('bar');
534     print "T = %f C" % (M.T.as('K') - 273.15);
535     print "x = %f" % M.x;
536     M.run(T.getMethod('self_test2'))
537    
538    
539 johnpye 1056 ## @TODO fix error capture from bounds checking during initialisation
540     # def testiapwssat1(self):
541     # M = self._run('testiapwssat1',filename='steam/iapwssat.a4c')
542 johnpye 1042
543 johnpye 1100 def testdsgsat(self):
544 johnpye 1196 self.L.load('steam/dsgsat3.a4c')
545     T = self.L.findType('dsgsat3')
546 johnpye 1100 M = T.getSimulation('sim',False)
547 johnpye 1127 M.run(T.getMethod('on_load'))
548 johnpye 1100 M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
549 johnpye 1152 self.assertAlmostEqual(M.dTw_dt[2],0.0);
550 johnpye 1127 M.run(T.getMethod('configure_dynamic'))
551     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
552 johnpye 1132 return M
553    
554     def testintegLSODE(self):
555     M = self.testdsgsat()
556     M.qdot_s.setRealValueWithUnits(1000,"W/m")
557     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
558 johnpye 1144 #M.setParameter('
559 johnpye 1132 I = ascpy.Integrator(M)
560     I.setEngine('LSODE')
561 johnpye 1142 I.setParameter('meth','AM')
562     I.setParameter('maxord',12)
563 johnpye 1132 I.setReporter(ascpy.IntegratorReporterConsole(I))
564     I.setLinearTimesteps(ascpy.Units("s"), 0, 5, 1)
565     I.analyse()
566     I.solve()
567    
568     def testintegIDA(self):
569 johnpye 1137 M = self.testdsgsat()
570 johnpye 1152 self.assertAlmostEqual(M.dTw_dt[2],0.0)
571     Tw1 = float(M.T_w[2])
572 johnpye 1196 T = self.L.findType('dsgsat3')
573 johnpye 1137 M.run(T.getMethod('free_states'))
574 johnpye 1100 I = ascpy.Integrator(M)
575 johnpye 1132 I.setEngine('IDA')
576     I.setParameter('linsolver','DENSE')
577     I.setParameter('safeeval',True)
578     I.setParameter('rtol',1e-8)
579     I.setInitialSubStep(0.01)
580     I.setMaxSubSteps(100)
581 johnpye 1100 I.setReporter(ascpy.IntegratorReporterConsole(I))
582 johnpye 1132 I.setLinearTimesteps(ascpy.Units("s"), 0, 3600, 100)
583 johnpye 1205 try:
584     I.analyse()
585     except Exception,e:
586     print "ERROR: %s" % e
587     I.writeDebug(sys.stdout)
588    
589 johnpye 1100 I.solve()
590 johnpye 1152 self.assertAlmostEqual(float(M.T_w[2]),Tw1)
591 johnpye 1127 M.qdot_s.setRealValueWithUnits(1000,"W/m")
592     self.assertAlmostEqual(M.qdot_s.as("W/m"),1000)
593     M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
594 johnpye 1152 self.assertNotAlmostEqual(M.dTw_dt[2],0.0)
595 johnpye 1127 # I = ascpy.Integrator(M)
596     # I.setEngine('LSODE')
597     # I.setReporter(ascpy.IntegratorReporterConsole(I))
598     # I.setReporter(ascpy.IntegratorReporterConsole(I))
599     # I.setLinearTimesteps(ascpy.Units("s"), 0, 5, 100)
600     # I.setMinSubStep(0.0001)
601     # I.setMaxSubStep(100)
602     # I.setInitialSubStep(0.1)
603     # I.analyse()
604     # I.solve()
605 johnpye 1046
606 johnpye 1042 #-------------------------------------------------------------------------------
607 johnpye 1017 # Testing of freesteam external steam properties functions
608    
609 johnpye 1032 with_freesteam = True
610 johnpye 1017 try:
611 johnpye 1039 # we assume that if the freesteam python module is installed, the ASCEND
612     # external library will also be.
613 johnpye 1017 import freesteam
614     have_freesteam = True
615 johnpye 1018 except ImportError,e:
616 johnpye 1017 have_freesteam = False
617    
618 johnpye 1024 if with_freesteam and have_freesteam:
619 johnpye 1039 class TestFreesteam(AscendSelfTester):
620 johnpye 1119 # def testfreesteamtest(self):
621     # """run the self-test cases bundled with freesteam"""
622     # self._run('testfreesteam',filename='testfreesteam.a4c')
623 johnpye 1039
624 johnpye 1021 def testload(self):
625 johnpye 1039 """check that we can load 'thermalequilibrium2' (IMPORT "freesteam", etc)"""
626 johnpye 1017 self.L.load('johnpye/thermalequilibrium2.a4c')
627 johnpye 1018
628 johnpye 1021 def testinstantiate(self):
629 johnpye 1039 """load an instantiate 'thermalequilibrium2'"""
630 johnpye 1021 self.testload()
631 johnpye 1018 M = self.L.findType('thermalequilibrium2').getSimulation('sim')
632 johnpye 1039 return M
633 johnpye 1021
634 johnpye 1039 def testintegrate(self):
635     """integrate transfer of heat from one mass of water/steam to another
636     according to Newton's law of cooling"""
637     M = self.testinstantiate()
638 johnpye 1018 M.setSolver(ascpy.Solver("QRSlv"))
639 johnpye 1039 I = ascpy.Integrator(M)
640     I.setEngine('LSODE')
641     I.setReporter(ascpy.IntegratorReporterConsole(I))
642     I.setLinearTimesteps(ascpy.Units("s"), 0, 3000, 30)
643 johnpye 1055 I.setMinSubStep(0.01)
644     I.setInitialSubStep(1)
645 johnpye 1039 I.analyse()
646     print "Number of vars = %d" % I.getNumVars()
647     assert I.getNumVars()==2
648     I.solve()
649     assert I.getNumObservedVars() == 3;
650     print "S[1].T = %f K" % M.S[1].T
651     print "S[2].T = %f K" % M.S[2].T
652     print "Q = %f W" % M.Q
653 johnpye 1119 self.assertAlmostEqual(float(M.S[1].T),506.77225109,4);
654 johnpye 1056 self.assertAlmostEqual(float(M.S[2].T),511.605173967,5);
655     self.assertAlmostEqual(float(M.Q),-48.32922877329,3);
656 johnpye 1039 self.assertAlmostEqual(float(M.t),3000);
657     print "Note that the above values have not been verified analytically"
658 johnpye 1017
659 johnpye 1170 def testcollapsingcan2(self):
660     """ solve the collapsing can model using IAPWS-IF97 steam props """
661     M = self._run("collapsingcan2",filename="collapsingcan2.a4c");
662 johnpye 1121
663 johnpye 1017 #-------------------------------------------------------------------------------
664 johnpye 1199 # Testing of IDA's analysis module
665    
666     class TestIDA(Ascend):
667 johnpye 1200 def _run(self,filen,modeln=""):
668     self.L.load('test/ida/%s.a4c' % filen)
669     T = self.L.findType('%s%s' % (filen,modeln))
670 johnpye 1199 M = T.getSimulation('sim')
671     M.build()
672     I = ascpy.Integrator(M)
673     I.setEngine('IDA')
674     I.analyse()
675 johnpye 1246 return M;
676 johnpye 1199
677 johnpye 1200 def _runfail(self,filen,n,msg="failed"):
678     try:
679     self._run(filen,'fail%d' % n)
680     except Exception,e:
681     print "(EXPECTED) ERROR: %s" % e
682     return
683     self.fail(msg)
684    
685 johnpye 1199 def testsinglederiv(self):
686 johnpye 1200 self._run('singlederiv')
687 johnpye 1199
688     def testsinglederivfail1(self):
689 johnpye 1200 self._runfail('singlederiv',1
690     ,"t.ode_id=-1 did not trigger error")
691    
692 johnpye 1199 def testsinglederivfail2(self):
693 johnpye 1200 self._runfail('singlederiv',2
694     ,"dy_dt.ode_id=2 did not trigger error")
695 johnpye 1199
696     def testsinglederivfail3(self):
697 johnpye 1200 self._runfail('singlederiv',3
698     ,"dy_dt.ode_type=3 did not trigger error")
699 johnpye 1199
700     def testsinglederivfail4(self):
701 johnpye 1200 self._runfail('singlederiv',4
702     ,"duplicate ode_type=1 did not trigger error")
703 johnpye 1199
704     def testsinglederivfail5(self):
705 johnpye 1200 self._runfail('singlederiv',5
706     ,"duplicate ode_type=1 did not trigger error")
707 johnpye 1199
708     def testsinglederivfail6(self):
709 johnpye 1200 self._runfail('singlederiv',6
710     ,"duplicate ode_type=1 did not trigger error")
711 johnpye 1199
712 johnpye 1200 def testtwoderiv(self):
713     self._run('twoderiv')
714    
715     def testtwoderivfail1(self):
716     self._runfail('twoderiv',1)
717    
718     def testtwoderivfail2(self):
719     self._runfail('twoderiv',2)
720    
721     def testtwoderivfail3(self):
722     self._runfail('twoderiv',3)
723     def testtwoderivfail4(self):
724     self._runfail('twoderiv',4)
725     def testtwoderivfail5(self):
726     self._runfail('twoderiv',5)
727    
728 johnpye 1201 def testnoderivs(self):
729     self._runfail('noderivs',1)
730    
731     def testnoindeps(self):
732     self._runfail('indeps',1)
733    
734     def testtwoindeps(self):
735     self._runfail('indeps',2)
736    
737     def testfixedvars(self):
738     self._run('fixedvars')
739    
740     def testfixedvars1(self):
741     self._run('fixedvars',1)
742    
743 johnpye 1246 def testfixedvars2(self):
744     self._run('fixedvars',2)
745 johnpye 1201
746 johnpye 1246 def testfixedvars3(self):
747     self._run('fixedvars',3)
748 johnpye 1201
749 johnpye 1213 def testincidence(self):
750     self._run('incidence')
751 johnpye 1201
752 johnpye 1214 def testincidence1(self):
753     self._run('incidence',1)
754     def testincidence2(self):
755     self._run('incidence',2)
756     def testincidence3(self):
757 johnpye 1246 M = self._run('incidence',3)
758    
759 johnpye 1214 def testincidence4(self):
760     self._run('incidence',4)
761     def testincidencefail5(self):
762     self._runfail('incidence',5)
763    
764     # doesn't work yet:
765     # def testincidence5(self):
766     # self._run('incidence',5)
767    
768    
769 johnpye 1199 #-------------------------------------------------------------------------------
770 johnpye 1017 # Testing of IDA models using DENSE linear solver
771    
772 johnpye 1016 class TestIDADENSE(Ascend):
773 johnpye 1017 """IDA DAE integrator, DENSE linear solver"""
774 johnpye 961
775 johnpye 1042 def testlotka(self):
776 johnpye 991 self.L.load('johnpye/lotka.a4c')
777     M = self.L.findType('lotka').getSimulation('sim')
778     M.setSolver(ascpy.Solver("QRSlv"))
779     I = ascpy.Integrator(M)
780     I.setEngine('IDA')
781     I.setReporter(ascpy.IntegratorReporterConsole(I))
782     I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5);
783     I.setParameter('linsolver','DENSE')
784     I.setParameter('rtol',1e-8);
785     I.analyse()
786     assert I.getNumVars()==2
787     assert abs(M.R - 1000) < 1e-300
788     I.solve()
789 johnpye 1017 assert I.getNumObservedVars() == 3
790 johnpye 991 assert abs(M.R - 832) < 1.0
791     assert abs(M.F - 21.36) < 0.1
792 johnpye 972
793 johnpye 975 def testdenx(self):
794 johnpye 1026 print "-----------------------------====="
795 johnpye 942 self.L.load('johnpye/idadenx.a4c')
796     M = self.L.findType('idadenx').getSimulation('sim')
797 johnpye 1017 M.setSolver(ascpy.Solver("QRSlv"))
798 johnpye 942 I = ascpy.Integrator(M)
799     I.setEngine('IDA')
800 johnpye 1228 I.setParameter('calcic','YA_YDP')
801 johnpye 972 I.setParameter('linsolver','DENSE')
802 johnpye 1237 I.setParameter('safeeval',True)
803 johnpye 944 I.setReporter(ascpy.IntegratorReporterConsole(I))
804 johnpye 1017 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
805 johnpye 950 I.setMaxSubStep(0);
806 johnpye 1017 I.setInitialSubStep(0)
807 johnpye 1228 I.setMaxSubSteps(0)
808 johnpye 944 I.setParameter('autodiff',True)
809     I.analyse()
810     I.solve()
811 johnpye 1022 assert abs(float(M.y1) - 5.1091e-08) < 2e-9
812     assert abs(float(M.y2) - 2.0437e-13) < 2e-14
813 johnpye 1017 assert abs(float(M.y3) - 1.0) < 1e-5
814 johnpye 942
815 johnpye 1247 def testhires(self):
816     self.L.load('test/hires.a4c')
817     T = self.L.findType('hires')
818     M = T.getSimulation('sim')
819     M.setSolver(ascpy.Solver('QRSlv'))
820     I = ascpy.Integrator(M)
821     I.setEngine('IDA')
822     I.setParameter('linsolver','DENSE')
823 johnpye 1251 I.setParameter('rtol',1.1e-15)
824 johnpye 1247 I.setParameter('atolvect',0)
825 johnpye 1251 I.setParameter('atol',1.1e-15)
826 johnpye 1247 I.setReporter(ascpy.IntegratorReporterConsole(I))
827     I.setLogTimesteps(ascpy.Units(""), 1, 321.8122, 5)
828 johnpye 1251 I.setInitialSubStep(1e-5)
829     I.setMaxSubSteps(10000)
830 johnpye 1247 I.analyse()
831     I.solve()
832 johnpye 1251 for i in range(8):
833     print "y[%d] = %.20g" % (i+1, M.y[i+1])
834 johnpye 1247 M.run(T.getMethod('self_test'))
835    
836 johnpye 1253 def testchemakzo(self):
837     self.L.load('test/chemakzo.a4c')
838     T = self.L.findType('chemakzo')
839 johnpye 1252 M = T.getSimulation('sim')
840     M.setSolver(ascpy.Solver('QRSlv'))
841     I = ascpy.Integrator(M)
842     I.setEngine('IDA')
843     I.setParameter('linsolver','DENSE')
844 johnpye 1253 I.setParameter('rtol',1e-15)
845 johnpye 1252 I.setParameter('atolvect',0)
846 johnpye 1253 I.setParameter('atol',1e-15)
847 johnpye 1252 I.setReporter(ascpy.IntegratorReporterConsole(I))
848 johnpye 1253 I.setLinearTimesteps(ascpy.Units("s"), 1, 180, 5)
849     I.setInitialSubStep(1e-13)
850 johnpye 1252 I.setMaxSubSteps(10000)
851     I.analyse()
852     I.solve()
853 johnpye 1255 for i in range(6):
854 johnpye 1254 print "y[%d] = %.20g" % (i+1, M.y[i+1])
855     M.run(T.getMethod('self_test'))
856    
857     def testtransamp(self):
858     self.L.load('test/transamp.a4c')
859     T = self.L.findType('transamp')
860     M = T.getSimulation('sim')
861     M.setSolver(ascpy.Solver('QRSlv'))
862     I = ascpy.Integrator(M)
863     I.setEngine('IDA')
864     I.setParameter('linsolver','DENSE')
865     I.setParameter('rtol',1e-7)
866     I.setParameter('atolvect',0)
867     I.setParameter('atol',1e-7)
868     I.setReporter(ascpy.IntegratorReporterConsole(I))
869     I.setLinearTimesteps(ascpy.Units("s"), 0.05, 0.2, 20)
870     I.setInitialSubStep(0.00001)
871     I.setMaxSubSteps(10000)
872     I.analyse()
873     I.solve()
874 johnpye 1253 for i in range(6):
875 johnpye 1252 print "y[%d] = %.20g" % (i+1, M.y[i+1])
876     M.run(T.getMethod('self_test'))
877    
878 johnpye 1253 # MODEL FAILS ANALYSIS: we need to add support for non-incident differential vars
879     # def testpollution(self):
880     # self.L.load('test/pollution.a4c')
881     # T = self.L.findType('pollution')
882     # M = T.getSimulation('sim')
883     # M.setSolver(ascpy.Solver('QRSlv'))
884     # I = ascpy.Integrator(M)
885     # I.setEngine('IDA')
886     # I.setParameter('linsolver','DENSE')
887     # I.setParameter('rtol',1.1e-15)
888     # I.setParameter('atolvect',0)
889     # I.setParameter('atol',1.1e-15)
890     # I.setReporter(ascpy.IntegratorReporterConsole(I))
891     # I.setLogTimesteps(ascpy.Units("s"), 1, 60, 5)
892     # I.setInitialSubStep(1e-5)
893     # I.setMaxSubSteps(10000)
894     # I.analyse()
895     # I.solve()
896     # for i in range(20):
897     # print "y[%d] = %.20g" % (i+1, M.y[i+1])
898     # M.run(T.getMethod('self_test'))
899    
900 johnpye 1058 ## @TODO fails during IDACalcIC (model too big?)
901     # def testkryx(self):
902     # self.L.load('johnpye/idakryx.a4c')
903     # ascpy.getCompiler().setUseRelationSharing(False)
904     # M = self.L.findType('idakryx').getSimulation('sim')
905     # M.setSolver(ascpy.Solver('QRSlv'))
906     # M.build()
907     # I = ascpy.Integrator(M)
908     # I.setEngine('IDA')
909     # I.setReporter(ascpy.IntegratorReporterConsole(I))
910     # I.setParameter('linsolver','DENSE')
911     # I.setParameter('maxl',8)
912     # I.setParameter('gsmodified',False)
913     # I.setParameter('autodiff',True)
914     # I.setParameter('rtol',0)
915     # I.setParameter('atol',1e-3);
916     # I.setParameter('atolvect',False)
917     # I.setParameter('calcic','YA_YDP')
918     # I.analyse()
919     # I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 11)
920     # I.solve()
921     # assert abs(M.u[2][2].getValue()) < 1e-5
922 johnpye 1017
923     #-------------------------------------------------------------------------------
924     # Testing of IDA models using SPGMR linear solver (Krylov)
925    
926 johnpye 1016 # these tests are disabled until SPGMR preconditioning has been implemented
927     class TestIDASPGMR:#(Ascend):
928     def testlotka(self):
929     self.L.load('johnpye/lotka.a4c')
930     M = self.L.findType('lotka').getSimulation('sim')
931     M.setSolver(ascpy.Solver("QRSlv"))
932 johnpye 951 I = ascpy.Integrator(M)
933     I.setEngine('IDA')
934     I.setReporter(ascpy.IntegratorReporterConsole(I))
935 johnpye 1017 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5)
936     I.setParameter('rtol',1e-8)
937 johnpye 951 I.analyse()
938 johnpye 1016 assert I.getNumVars()==2
939     assert abs(M.R - 1000) < 1e-300
940 johnpye 951 I.solve()
941 johnpye 1017 assert I.getNumObservedVars() == 3
942 johnpye 1016 assert abs(M.R - 832) < 1.0
943     assert abs(M.F - 21.36) < 0.1
944 johnpye 951
945 johnpye 1016
946 johnpye 991 def testkryx(self):
947 johnpye 951 self.L.load('johnpye/idakryx.a4c')
948     M = self.L.findType('idakryx').getSimulation('sim')
949 johnpye 952 M.build()
950 johnpye 951 I = ascpy.Integrator(M)
951     I.setEngine('IDA')
952     I.setReporter(ascpy.IntegratorReporterConsole(I))
953 johnpye 992 I.setParameter('linsolver','SPGMR')
954 johnpye 993 I.setParameter('prec','JACOBI')
955 johnpye 970 I.setParameter('maxl',8)
956 johnpye 952 I.setParameter('gsmodified',False)
957     I.setParameter('autodiff',True)
958 johnpye 993 I.setParameter('gsmodified',True)
959 johnpye 952 I.setParameter('rtol',0)
960     I.setParameter('atol',1e-3);
961     I.setParameter('atolvect',False)
962 johnpye 993 I.setParameter('calcic','Y')
963 johnpye 952 I.analyse()
964     I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 10);
965 johnpye 1017 print M.udot[1][3]
966 johnpye 952 I.solve()
967     assert 0
968 johnpye 967
969 johnpye 1016 def testzill(self):
970     self.L.load('johnpye/zill.a4c')
971     T = self.L.findType('zill')
972     M = T.getSimulation('sim')
973     M.setSolver(ascpy.Solver('QRSlv'))
974     I = ascpy.Integrator(M)
975     I.setEngine('IDA')
976     I.setParameter('safeeval',False)
977     I.setMinSubStep(1e-7)
978     I.setMaxSubStep(0.001)
979     I.setMaxSubSteps(10000)
980     I.setReporter(ascpy.IntegratorReporterConsole(I))
981 johnpye 1017 I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5)
982 johnpye 1016 I.analyse()
983     I.solve()
984     M.run(T.getMethod('self_test'))
985    
986     def testdenxSPGMR(self):
987     self.L.load('johnpye/idadenx.a4c')
988     M = self.L.findType('idadenx').getSimulation('sim')
989     M.setSolver(ascpy.Solver('QRSlv'))
990     I = ascpy.Integrator(M)
991     I.setEngine('IDA')
992     I.setReporter(ascpy.IntegratorReporterConsole(I))
993 johnpye 1017 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
994 johnpye 1016 I.setMaxSubStep(0);
995     I.setInitialSubStep(0);
996     I.setMaxSubSteps(0);
997     I.setParameter('autodiff',True)
998     I.setParameter('linsolver','SPGMR')
999     I.setParameter('gsmodified',False)
1000     I.setParameter('maxncf',10)
1001     I.analyse()
1002     I.solve()
1003 johnpye 1017 assert abs(float(M.y1) - 5.1091e-08) < 1e-10
1004     assert abs(float(M.y2) - 2.0437e-13) < 1e-15
1005     assert abs(float(M.y3) - 1.0) < 1e-5
1006 johnpye 1016
1007 johnpye 943 # move code above down here if you want to temporarily avoid testing it
1008 johnpye 932 class NotToBeTested:
1009     def nothing(self):
1010     pass
1011 johnpye 1016
1012 johnpye 1251 def testnewton(self):
1013     sys.stderr.write("STARTING TESTNEWTON\n")
1014     self.L.load('johnpye/newton.a4c')
1015     T = self.L.findType('newton')
1016     M = T.getSimulation('sim')
1017     M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
1018     I = ascpy.Integrator(M)
1019     I.setEngine('IDA')
1020     I.setParameter('linsolver','DENSE')
1021     I.setParameter('safeeval',True)
1022     I.setParameter('rtol',1e-8)
1023     I.setMaxSubStep(0.001)
1024     I.setMaxSubSteps(10000)
1025    
1026     I.setReporter(ascpy.IntegratorReporterConsole(I))
1027     I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.v)/float(M.g), 2)
1028     I.analyse()
1029     I.solve()
1030     print "At end of simulation,"
1031     print "x = %f" % M.x
1032     print "v = %f" % M.v
1033     M.run(T.getMethod('self_test'))
1034    
1035 johnpye 669 if __name__=='__main__':
1036 johnpye 1118 # a whole bag of tricks to make sure we get the necessary dirs in our ascend, python and ld path vars
1037 johnpye 1098 restart = 0
1038    
1039     if platform.system()=="Windows":
1040 johnpye 1120 LD_LIBRARY_PATH="PATH"
1041 johnpye 1098 SEP = ";"
1042     else:
1043     LD_LIBRARY_PATH="LD_LIBRARY_PATH"
1044     SEP = ":"
1045    
1046 johnpye 1119 freesteamdir = os.path.expanduser("~/freesteam/ascend")
1047     modeldirs = [os.path.abspath(os.path.join(sys.path[0],"models")),os.path.abspath(freesteamdir)]
1048 johnpye 1118 if not os.environ.get('ASCENDLIBRARY'):
1049 johnpye 1119 os.environ['ASCENDLIBRARY'] = SEP.join(modeldirs)
1050 johnpye 1118 restart = 1
1051     else:
1052     envmodelsdir = [os.path.abspath(i) for i in os.environ['ASCENDLIBRARY'].split(SEP)]
1053 johnpye 1119 for l in modeldirs:
1054     if l in envmodelsdir[len(modeldirs):]:
1055     envmodelsdir.remove(l)
1056     restart = 1
1057     for l in modeldirs:
1058     if l not in envmodelsdir:
1059     envmodelsdir.insert(0,l)
1060     restart = 1
1061     os.environ['ASCENDLIBRARY'] = SEP.join(envmodelsdir)
1062 johnpye 1118
1063 johnpye 1102 libdirs = ["pygtk","."]
1064 johnpye 1098 libdirs = [os.path.normpath(os.path.join(sys.path[0],l)) for l in libdirs]
1065     if not os.environ.get(LD_LIBRARY_PATH):
1066 johnpye 1105 os.environ[LD_LIBRARY_PATH]=SEP.join(libdirs)
1067 johnpye 1106 restart = 1
1068 johnpye 1098 else:
1069     envlibdirs = [os.path.normpath(i) for i in os.environ[LD_LIBRARY_PATH].split(SEP)]
1070     for l in libdirs:
1071 johnpye 1106 if l in envlibdirs[len(libdirs):]:
1072     envlibdirs.remove(l)
1073     restart = 1
1074     for l in libdirs:
1075 johnpye 1098 if l not in envlibdirs:
1076     envlibdirs.insert(0,l)
1077 johnpye 1106 restart = 1
1078 johnpye 1098 os.environ[LD_LIBRARY_PATH] = SEP.join(envlibdirs)
1079    
1080 johnpye 1102 pypath = os.path.normpath(os.path.join(sys.path[0],"pygtk"))
1081     if not os.environ.get('PYTHONPATH'):
1082     os.environ['PYTHONPATH']=pypath
1083     else:
1084     envpypath = os.environ['PYTHONPATH'].split(SEP)
1085     if pypath not in envpypath:
1086     envpypath.insert(0,pypath)
1087 johnpye 1137 os.environ['PYTHONPATH']=SEP.join(envpypath)
1088 johnpye 1102 restart = 1
1089    
1090 johnpye 1098 if restart:
1091 johnpye 1167 script = os.path.join(sys.path[0],"test.py")
1092 johnpye 1119 print "Restarting with..."
1093 johnpye 1194 print " export LD_LIBRARY_PATH=%s" % os.environ.get(LD_LIBRARY_PATH)
1094     print " export PYTHONPATH=%s" % os.environ.get('PYTHONPATH')
1095     print " export ASCENDLIBRARY=%s" % os.environ.get('ASCENDLIBRARY')
1096 johnpye 1098
1097 johnpye 1215 os.execvp("python",[script] + sys.argv)
1098 johnpye 1167
1099 johnpye 1098 import ascpy
1100    
1101     try:
1102     import cunit
1103     except:
1104     pass
1105    
1106 johnpye 966 atexit.register(ascpy.shutdown)
1107 johnpye 1008 #suite = unittest.TestSuite()
1108 johnpye 1003 #suite = unittest.defaultTestLoader.loadTestsFromName('__main__')
1109 johnpye 1008 #unittest.TextTestRunner(verbosity=2).run(suite)
1110     unittest.main()

Properties

Name Value
svn:executable *

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