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

Contents of /trunk/pygtk/test.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1056 - (show annotations) (download) (as text)
Sat Jan 6 15:04:40 2007 UTC (13 years, 4 months ago) by johnpye
File MIME type: text/x-python
File size: 20531 byte(s)
Fixing up setpoint in satsteamstream test.
Commenting out failing tests (with @TODO comments)
1 #!/usr/bin/env python
2 import unittest
3
4 import platform, sys
5 if platform.system() != "Windows":
6 import dl
7 sys.setdlopenflags(dl.RTLD_GLOBAL|dl.RTLD_NOW)
8
9 import ascpy
10 import math
11 import os, subprocess
12 import atexit
13 import cunit
14
15 class Ascend(unittest.TestCase):
16
17 def setUp(self):
18 import ascpy
19 self.L = ascpy.Library()
20
21 def tearDown(self):
22 self.L.clear()
23 del self.L
24
25 class AscendSelfTester(Ascend):
26
27 def _run(self,modelname,solvername="QRSlv",filename=None):
28 if filename==None:
29 filename = 'johnpye/%s.a4c' % modelname
30 self.L.load(filename)
31 T = self.L.findType(modelname)
32 M = T.getSimulation('sim')
33 M.build()
34 M.solve(ascpy.Solver(solvername),ascpy.SolverReporter())
35 M.run(T.getMethod('self_test'))
36 return M
37
38 class TestCompiler(Ascend):
39
40 def testloading(self):
41 pass
42
43 def testsystema4l(self):
44 self.L.load('system.a4l')
45
46 def testatomsa4l(self):
47 self.L.load('atoms.a4l')
48
49 class TestSolver(AscendSelfTester):
50
51 def testlog10(self):
52 self._run('testlog10')
53
54 def testconopt(self):
55 self._run('testconopt',"CONOPT")
56
57 def testcmslv2(self):
58 self._run('testcmslv2',"CMSlv")
59
60 def testsunpos1(self):
61 self._run('example_1_6_1',"QRSlv","johnpye/sunpos.a4c")
62
63 def testsunpos2(self):
64 self._run('example_1_6_2',"QRSlv","johnpye/sunpos.a4c")
65
66 def testsunpos3(self):
67 self._run('example_1_7_1',"QRSlv","johnpye/sunpos.a4c")
68
69 def testsunpos4(self):
70 self._run('example_1_7_2',"QRSlv","johnpye/sunpos.a4c")
71
72 def testsunpos5(self):
73 self._run('example_1_7_3',"QRSlv","johnpye/sunpos.a4c")
74
75 def testsunpos6(self):
76 self._run('example_1_8_1',"QRSlv","johnpye/sunpos.a4c")
77
78 class TestIntegrator(Ascend):
79
80 def testListIntegrators(self):
81 I = ascpy.Integrator.getEngines()
82 s1 = sorted([str(i) for i in I.values()])
83 s2 = sorted(['IDA','LSODE','AWW'])
84 assert s1==s2
85
86 # this routine is reused by both testIDA and testLSODE
87 def _testIntegrator(self,integratorname):
88 self.L.load('johnpye/shm.a4c')
89 M = self.L.findType('shm').getSimulation('sim')
90 M.setSolver(ascpy.Solver('QRSlv'))
91 print M.getChildren()
92 assert float(M.x) == 10.0
93 assert float(M.v) == 0.0
94 t_end = math.pi
95
96 I = ascpy.Integrator(M)
97 I.setReporter(ascpy.IntegratorReporterNull(I))
98 I.setEngine(integratorname);
99 I.setLinearTimesteps(ascpy.Units("s"), 0.0, t_end, 100);
100 I.setMinSubStep(0.0005); # these limits are required by IDA at present (numeric diff)
101 I.setMaxSubStep(0.02);
102 I.setInitialSubStep(0.001);
103 I.setMaxSubSteps(200);
104 if(integratorname=='IDA'):
105 I.setParameter('autodiff',False)
106 I.analyse();
107 I.solve();
108 print "At end of simulation,"
109 print "x = %f" % M.x
110 print "v = %f" % M.v
111 assert abs(float(M.x) + 10) < 1e-2
112 assert abs(float(M.v)) < 1e-2
113 assert I.getNumObservedVars() == 3
114
115 def testInvalidIntegrator(self):
116 self.L.load('johnpye/shm.a4c')
117 M = self.L.findType('shm').getSimulation('sim')
118 M.setSolver(ascpy.Solver('QRSlv'))
119 I = ascpy.Integrator(M)
120 try:
121 I.setEngine('___NONEXISTENT____')
122 except RuntimeError:
123 return
124 self.fail("setEngine did not raise error!")
125
126 def testLSODE(self):
127 self._testIntegrator('LSODE')
128
129 def testIDA(self):
130 self._testIntegrator('IDA')
131
132 def testparameters(self):
133 self.L.load('johnpye/shm.a4c')
134 M = self.L.findType('shm').getSimulation('sim')
135 M.build()
136 I = ascpy.Integrator(M)
137 I.setEngine('IDA')
138 P = I.getParameters()
139 for p in P:
140 print p.getName(),"=",p.getValue()
141 assert len(P)==11
142 assert P[0].isStr()
143 assert P[0].getName()=="linsolver"
144 assert P[0].getValue()=='SPGMR'
145 assert P[2].getName()=="autodiff"
146 assert P[2].getValue()==True
147 assert P[7].getName()=="atolvect"
148 assert P[7].getBoolValue() == True
149 P[2].setBoolValue(False)
150 assert P[2].getBoolValue()==False
151 I.setParameters(P)
152 assert I.getParameterValue('autodiff')==False
153 I.setParameter('autodiff',True)
154 try:
155 v = I.getParameterValue('nonexist')
156 except KeyError:
157 pass
158 else:
159 self.fail('Failed to trip invalid Integrator parameter')
160
161 class TestLSODE(Ascend):
162
163 def testzill(self):
164 self.L.load('johnpye/zill.a4c')
165 T = self.L.findType('zill')
166 M = T.getSimulation('sim')
167 M.setSolver(ascpy.Solver('QRSlv'))
168 I = ascpy.Integrator(M)
169 I.setEngine('LSODE')
170 I.setMinSubStep(1e-7)
171 I.setMaxSubStep(0.001)
172 I.setMaxSubSteps(10000)
173 I.setReporter(ascpy.IntegratorReporterConsole(I))
174 I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5)
175 I.analyse()
176 I.solve()
177 M.run(T.getMethod('self_test'))
178
179 def testnewton(self):
180 sys.stderr.write("STARTING TESTNEWTON\n")
181 self.L.load('johnpye/newton.a4c')
182 T = self.L.findType('newton')
183 M = T.getSimulation('sim')
184 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
185 I = ascpy.Integrator(M)
186 I.setEngine('LSODE')
187 I.setParameter('rtolvect',False)
188 I.setParameter('rtol',1e-7)
189 I.setParameter('atolvect',False)
190 I.setParameter('atol',1e-7)
191 I.setMinSubStep(1e-7)
192 I.setMaxSubStep(0.001)
193 I.setMaxSubSteps(10000)
194
195 I.setReporter(ascpy.IntegratorReporterConsole(I))
196 I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.v)/float(M.g), 2)
197 I.analyse()
198 I.solve()
199 print "At end of simulation,"
200 print "x = %f" % M.x
201 print "v = %f" % M.v
202 M.run(T.getMethod('self_test'))
203
204 def testlotka(self):
205 self.L.load('johnpye/lotka.a4c')
206 M = self.L.findType('lotka').getSimulation('sim')
207 M.setSolver(ascpy.Solver("QRSlv"))
208 I = ascpy.Integrator(M)
209 I.setEngine('LSODE')
210 I.setReporter(ascpy.IntegratorReporterConsole(I))
211 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5)
212 I.analyse()
213 print "Number of vars = %d" % I.getNumVars()
214 assert I.getNumVars()==2
215 I.solve()
216 assert I.getNumObservedVars() == 3;
217 assert abs(M.R - 832) < 1.0
218 assert abs(M.F - 21.36) < 0.1
219
220 #-------------------------------------------------------------------------------
221 # Testing of a external blackbox functions
222
223 class TestBlackBox(AscendSelfTester):
224 def testparsefail0(self):
225 try:
226 self.L.load('test/blackbox/parsefail0.a4c')
227 self.fail("parsefail0 should not have loaded without errors")
228 except:
229 pass
230
231 def testparsefail1(self):
232 try:
233 self.L.load('test/blackbox/parsefail1.a4c')
234 self.fail("parsefail1 should not have loaded without errors")
235 except:
236 pass
237
238 def testparsefail2(self):
239 try:
240 self.L.load('test/blackbox/parsefail2.a4c')
241 self.fail("parsefail2 should not have loaded without errors")
242 except:
243 pass
244
245 def testparsefail3(self):
246 try:
247 self.L.load('test/blackbox/parsefail3.a4c')
248 self.fail("parsefail3 should not have loaded without errors")
249 except:
250 pass
251
252 def testparsefail4(self):
253 try:
254 self.L.load('test/blackbox/parsefail4.a4c')
255 self.fail("parsefail4 should not have loaded")
256 except:
257 pass
258
259 def testfail1(self):
260 """Mismatched arg counts check-- tests bbox, not ascend."""
261 self.L.load('test/blackbox/fail1.a4c')
262 try:
263 M = self.L.findType('fail1').getSimulation('sim')
264 self.fail("expected exception was not raised")
265 except RuntimeError,e:
266 print "Caught exception '%s', assumed ok" % e
267
268 def testfail2(self):
269 """Incorrect data arg check -- tests bbox, not ascend"""
270 self.L.load('test/blackbox/fail2.a4c')
271 try:
272 M = self.L.findType('fail2').getSimulation('sim')
273 self.fail("expected exception was not raised")
274 except RuntimeError,e:
275 print "Caught exception '%s', assumed ok (should mention errors during instantiation)" % e
276
277 def testpass1(self):
278 """simple single bbox forward solve"""
279 M = self._run('pass1',filename='test/blackbox/pass.a4c')
280
281 def testpass2(self):
282 """simple single bbox reverse solve"""
283 M = self._run('pass2',filename='test/blackbox/pass.a4c')
284
285 def testpass3(self):
286 """simple double bbox solve"""
287 M = self._run('pass3',filename='test/blackbox/pass3.a4c')
288
289 def testpass4(self):
290 """simple double bbox reverse solve"""
291 M = self._run('pass4',filename='test/blackbox/pass3.a4c')
292
293 def testpass5(self):
294 M = self._run('pass5',filename='test/blackbox/pass5.a4c')
295
296 def testpass6(self):
297 M = self._run('pass6',filename='test/blackbox/pass5.a4c')
298
299 def testpass7(self):
300 M = self._run('pass7',filename='test/blackbox/passmerge.a4c')
301
302 def testpass8(self):
303 M = self._run('pass8',filename='test/blackbox/passmerge.a4c')
304
305 def testpass9(self):
306 M = self._run('pass9',filename='test/blackbox/passmerge.a4c')
307
308 def testpass10(self):
309 M = self._run('pass10',filename='test/blackbox/passmerge.a4c')
310
311 def testpass11(self):
312 M = self._run('pass11',filename='test/blackbox/passmerge.a4c')
313
314 def testpass12(self):
315 M = self._run('pass12',filename='test/blackbox/passmerge.a4c')
316
317 # this test doesn't work: 'system is inconsistent' -- and structurally singular
318 # def testpass13(self):
319 # """cross-merged input/output solve"""
320 # M = self._run('pass13',filename='test/blackbox/passmerge.a4c')
321
322 def testpass14(self):
323 """cross-merged input/output reverse solve"""
324 M = self._run('pass14',filename='test/blackbox/passmerge.a4c')
325
326 def testpass20(self):
327 M = self._run('pass20',filename='test/blackbox/passarray.a4c')
328
329 def testparsefail21(self):
330 """dense array of black boxes wrong syntax"""
331 try:
332 self.L.load('test/blackbox/parsefail21.a4c')
333 self.fail("parsefail21 should not have loaded without errors")
334 except:
335 pass
336
337 def testpass22(self):
338 M = self._run('pass22',filename='test/blackbox/passarray.a4c')
339
340 def testpass23(self):
341 M = self._run('pass23',filename='test/blackbox/passarray.a4c')
342
343 def testpass61(self):
344 M = self._run('pass61',filename='test/blackbox/reinstantiate.a4c')
345
346 def testpass62(self):
347 M = self._run('pass62',filename='test/blackbox/reinstantiate.a4c')
348
349 def testpass64(self):
350 M = self._run('pass64',filename='test/blackbox/reinstantiate.a4c')
351
352 def testpass65(self):
353 M = self._run('pass65',filename='test/blackbox/reinstantiate.a4c')
354
355 def testpass66(self):
356 M = self._run('pass66',filename='test/blackbox/reinstantiate.a4c')
357
358 def testpass67(self):
359 M = self._run('pass67',filename='test/blackbox/reinstantiate.a4c')
360
361 class TestExtFn(AscendSelfTester):
362 def testextfntest(self):
363 M = self._run('extfntest',filename='johnpye/extfn/extfntest.a4c')
364 self.assertAlmostEqual(M.y, 2);
365 self.assertAlmostEqual(M.x, 1);
366 self.assertAlmostEqual(M.y, M.x + 1);
367
368 def testextrelfor(self):
369 M = self._run('extrelfor',filename='johnpye/extfn/extrelfor.a4c')
370
371 ## @TODO fix bug with badly-named bbox rel in a loop (Ben, maybe)
372 # def testextrelforbadnaming(self):
373 # self.L.load('johnpye/extfn/extrelforbadnaming.a4c')
374 # T = self.L.findType('extrelfor')
375 # M = T.getSimulation('sim')
376 # M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
377 # print "x[1] = %f" % M.x[1]
378 # print "x[2] = %f" % M.x[2]
379 # print "x[3] = %f" % M.x[3]
380 # print "x[4] = %f" % M.x[4]
381 # print "x[5] = %f" % M.x[5]
382 # M.run(T.getMethod('self_test'))
383
384 def testextrelrepeat(self):
385 M = self._run('extrelrepeat',filename='johnpye/extfn/extrelrepeat.a4c')
386
387 #-------------------------------------------------------------------------------
388 # Testing of a ExtPy - external python methods
389
390 class TestExtPy(AscendSelfTester):
391 def test1(self):
392 self.L.load('johnpye/extpy/extpytest.a4c')
393 T = self.L.findType('extpytest')
394 M = T.getSimulation('sim')
395 M.run(T.getMethod('self_test'))
396
397 def test2(self):
398 self.L.load('johnpye/extpy/extpytest.a4c')
399 T = self.L.findType('extpytest')
400 M = T.getSimulation('sim')
401 M.run(T.getMethod('pythonthing'))
402 M.run(T.getMethod('pythonthing'))
403 M.run(T.getMethod('pythonthing'))
404 M.run(T.getMethod('pythonthing'))
405 # causes crash!
406
407 #-------------------------------------------------------------------------------
408 # Testing of saturated steam properties library (iapwssatprops.a4c)
409
410 class TestSteam(AscendSelfTester):
411 def testiapwssatprops1(self):
412 M = self._run('testiapwssatprops1',filename='steam/iapwssatprops.a4c')
413 def testiapwssatprops2(self):
414 M = self._run('testiapwssatprops2',filename='steam/iapwssatprops.a4c')
415 def testiapwssatprops3(self):
416 M = self._run('testiapwssatprops3',filename='steam/iapwssatprops.a4c')
417 def testsatsteamstream(self):
418 M = self._run('satsteamstream',filename='steam/satsteamstream.a4c')
419
420 def testsatsteamstream(self):
421 M = self._run('satsteamstream',filename='steam/satsteamstream.a4c')
422
423 ## @TODO fix error capture from bounds checking during initialisation
424 # def testiapwssat1(self):
425 # M = self._run('testiapwssat1',filename='steam/iapwssat.a4c')
426
427 ## @TODO fix bug with unpivoted node[i].hg_expr eqns.
428 # def testdsgsat(self):
429 # self.L.load('steam/dsgsat2.a4c')
430 # T = self.L.findType('dsgsat2')
431 # M = T.getSimulation('sim')
432 # M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
433 # M.run(T.getMethod('fixed_states'))
434 # I = ascpy.Integrator(M)
435 # I.setEngine('LSODE')
436 # I.setReporter(ascpy.IntegratorReporterConsole(I))
437 # I.setReporter(ascpy.IntegratorReporterConsole(I))
438 # I.setLinearTimesteps(ascpy.Units("s"), 0, 5, 100)
439 # I.setMinSubStep(0.01)
440 # I.setMaxSubStep(0.02)
441 # I.setInitialSubStep(0.1)
442 # I.analyse()
443 # I.solve()
444 # #M.checkStructuralSingularity() causes crash!
445
446 #-------------------------------------------------------------------------------
447 # Testing of freesteam external steam properties functions
448
449 with_freesteam = True
450 try:
451 # we assume that if the freesteam python module is installed, the ASCEND
452 # external library will also be.
453 import freesteam
454 have_freesteam = True
455 except ImportError,e:
456 have_freesteam = False
457
458 if with_freesteam and have_freesteam:
459 class TestFreesteam(AscendSelfTester):
460 def testfreesteamtest(self):
461 """run the self-test cases bundled with freesteam"""
462 self._run('testfreesteam',filename='testfreesteam.a4c')
463
464 def testload(self):
465 """check that we can load 'thermalequilibrium2' (IMPORT "freesteam", etc)"""
466 self.L.load('johnpye/thermalequilibrium2.a4c')
467
468 def testinstantiate(self):
469 """load an instantiate 'thermalequilibrium2'"""
470 self.testload()
471 M = self.L.findType('thermalequilibrium2').getSimulation('sim')
472 return M
473
474 def testintegrate(self):
475 """integrate transfer of heat from one mass of water/steam to another
476 according to Newton's law of cooling"""
477 M = self.testinstantiate()
478 M.setSolver(ascpy.Solver("QRSlv"))
479 I = ascpy.Integrator(M)
480 I.setEngine('LSODE')
481 I.setReporter(ascpy.IntegratorReporterConsole(I))
482 I.setLinearTimesteps(ascpy.Units("s"), 0, 3000, 30)
483 I.setMinSubStep(0.01)
484 I.setInitialSubStep(1)
485 I.analyse()
486 print "Number of vars = %d" % I.getNumVars()
487 assert I.getNumVars()==2
488 I.solve()
489 assert I.getNumObservedVars() == 3;
490 print "S[1].T = %f K" % M.S[1].T
491 print "S[2].T = %f K" % M.S[2].T
492 print "Q = %f W" % M.Q
493 self.assertAlmostEqual(float(M.S[1].T),506.77225109,5);
494 self.assertAlmostEqual(float(M.S[2].T),511.605173967,5);
495 self.assertAlmostEqual(float(M.Q),-48.32922877329,3);
496 self.assertAlmostEqual(float(M.t),3000);
497 print "Note that the above values have not been verified analytically"
498
499 #-------------------------------------------------------------------------------
500 # Testing of IDA models using DENSE linear solver
501
502 class TestIDADENSE(Ascend):
503 """IDA DAE integrator, DENSE linear solver"""
504
505 def testnewton(self):
506 sys.stderr.write("STARTING TESTNEWTON\n")
507 self.L.load('johnpye/newton.a4c')
508 T = self.L.findType('newton')
509 M = T.getSimulation('sim')
510 M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
511 I = ascpy.Integrator(M)
512 I.setEngine('IDA')
513 I.setParameter('linsolver','DENSE')
514 I.setParameter('safeeval',True)
515 I.setParameter('rtol',1e-8)
516 I.setMaxSubStep(0.001)
517 I.setMaxSubSteps(10000)
518
519 I.setReporter(ascpy.IntegratorReporterConsole(I))
520 I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.v)/float(M.g), 2)
521 I.analyse()
522 I.solve()
523 print "At end of simulation,"
524 print "x = %f" % M.x
525 print "v = %f" % M.v
526 M.run(T.getMethod('self_test'))
527
528 def testlotka(self):
529 self.L.load('johnpye/lotka.a4c')
530 M = self.L.findType('lotka').getSimulation('sim')
531 M.setSolver(ascpy.Solver("QRSlv"))
532 I = ascpy.Integrator(M)
533 I.setEngine('IDA')
534 I.setReporter(ascpy.IntegratorReporterConsole(I))
535 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5);
536 I.setParameter('linsolver','DENSE')
537 I.setParameter('rtol',1e-8);
538 I.analyse()
539 assert I.getNumVars()==2
540 assert abs(M.R - 1000) < 1e-300
541 I.solve()
542 assert I.getNumObservedVars() == 3
543 assert abs(M.R - 832) < 1.0
544 assert abs(M.F - 21.36) < 0.1
545
546 def testdenx(self):
547 print "-----------------------------====="
548 self.L.load('johnpye/idadenx.a4c')
549 M = self.L.findType('idadenx').getSimulation('sim')
550 M.setSolver(ascpy.Solver("QRSlv"))
551 I = ascpy.Integrator(M)
552 I.setEngine('IDA')
553 I.setParameter('calcic','YA_YPD')
554 I.setParameter('linsolver','DENSE')
555 I.setReporter(ascpy.IntegratorReporterConsole(I))
556 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
557 I.setMaxSubStep(0);
558 I.setInitialSubStep(0)
559 I.setMaxSubSteps(0);
560 I.setParameter('autodiff',True)
561 I.analyse()
562 I.solve()
563 assert abs(float(M.y1) - 5.1091e-08) < 2e-9
564 assert abs(float(M.y2) - 2.0437e-13) < 2e-14
565 assert abs(float(M.y3) - 1.0) < 1e-5
566
567 def testkryx(self):
568 self.L.load('johnpye/idakryx.a4c')
569 ascpy.getCompiler().setUseRelationSharing(False)
570 M = self.L.findType('idakryx').getSimulation('sim')
571 M.setSolver(ascpy.Solver('QRSlv'))
572 M.build()
573 I = ascpy.Integrator(M)
574 I.setEngine('IDA')
575 I.setReporter(ascpy.IntegratorReporterConsole(I))
576 I.setParameter('linsolver','DENSE')
577 I.setParameter('maxl',8)
578 I.setParameter('gsmodified',False)
579 I.setParameter('autodiff',True)
580 I.setParameter('rtol',0)
581 I.setParameter('atol',1e-3);
582 I.setParameter('atolvect',False)
583 I.setParameter('calcic','YA_YDP')
584 I.analyse()
585 I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 11)
586 I.solve()
587 assert abs(M.u[2][2].getValue()) < 1e-5
588
589 #-------------------------------------------------------------------------------
590 # Testing of IDA models using SPGMR linear solver (Krylov)
591
592 # these tests are disabled until SPGMR preconditioning has been implemented
593 class TestIDASPGMR:#(Ascend):
594 def testlotka(self):
595 self.L.load('johnpye/lotka.a4c')
596 M = self.L.findType('lotka').getSimulation('sim')
597 M.setSolver(ascpy.Solver("QRSlv"))
598 I = ascpy.Integrator(M)
599 I.setEngine('IDA')
600 I.setReporter(ascpy.IntegratorReporterConsole(I))
601 I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5)
602 I.setParameter('rtol',1e-8)
603 I.analyse()
604 assert I.getNumVars()==2
605 assert abs(M.R - 1000) < 1e-300
606 I.solve()
607 assert I.getNumObservedVars() == 3
608 assert abs(M.R - 832) < 1.0
609 assert abs(M.F - 21.36) < 0.1
610
611
612 def testkryx(self):
613 self.L.load('johnpye/idakryx.a4c')
614 M = self.L.findType('idakryx').getSimulation('sim')
615 M.build()
616 I = ascpy.Integrator(M)
617 I.setEngine('IDA')
618 I.setReporter(ascpy.IntegratorReporterConsole(I))
619 I.setParameter('linsolver','SPGMR')
620 I.setParameter('prec','JACOBI')
621 I.setParameter('maxl',8)
622 I.setParameter('gsmodified',False)
623 I.setParameter('autodiff',True)
624 I.setParameter('gsmodified',True)
625 I.setParameter('rtol',0)
626 I.setParameter('atol',1e-3);
627 I.setParameter('atolvect',False)
628 I.setParameter('calcic','Y')
629 I.analyse()
630 I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 10);
631 print M.udot[1][3]
632 I.solve()
633 assert 0
634
635 def testzill(self):
636 self.L.load('johnpye/zill.a4c')
637 T = self.L.findType('zill')
638 M = T.getSimulation('sim')
639 M.setSolver(ascpy.Solver('QRSlv'))
640 I = ascpy.Integrator(M)
641 I.setEngine('IDA')
642 I.setParameter('safeeval',False)
643 I.setMinSubStep(1e-7)
644 I.setMaxSubStep(0.001)
645 I.setMaxSubSteps(10000)
646 I.setReporter(ascpy.IntegratorReporterConsole(I))
647 I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5)
648 I.analyse()
649 I.solve()
650 M.run(T.getMethod('self_test'))
651
652 def testdenxSPGMR(self):
653 self.L.load('johnpye/idadenx.a4c')
654 M = self.L.findType('idadenx').getSimulation('sim')
655 M.setSolver(ascpy.Solver('QRSlv'))
656 I = ascpy.Integrator(M)
657 I.setEngine('IDA')
658 I.setReporter(ascpy.IntegratorReporterConsole(I))
659 I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
660 I.setMaxSubStep(0);
661 I.setInitialSubStep(0);
662 I.setMaxSubSteps(0);
663 I.setParameter('autodiff',True)
664 I.setParameter('linsolver','SPGMR')
665 I.setParameter('gsmodified',False)
666 I.setParameter('maxncf',10)
667 I.analyse()
668 I.solve()
669 assert abs(float(M.y1) - 5.1091e-08) < 1e-10
670 assert abs(float(M.y2) - 2.0437e-13) < 1e-15
671 assert abs(float(M.y3) - 1.0) < 1e-5
672
673 # move code above down here if you want to temporarily avoid testing it
674 class NotToBeTested:
675 def nothing(self):
676 pass
677
678 if __name__=='__main__':
679 atexit.register(ascpy.shutdown)
680 #suite = unittest.TestSuite()
681 #suite = unittest.defaultTestLoader.loadTestsFromName('__main__')
682 #unittest.TextTestRunner(verbosity=2).run(suite)
683 unittest.main()

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