/[ascend]/branches/fprops2/test.py
ViewVC logotype

Annotation of /branches/fprops2/test.py

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *

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