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

Diff of /branches/fprops2/test.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1009 by johnpye, Tue Jan 2 12:10:53 2007 UTC revision 1016 by johnpye, Wed Jan 3 05:56:12 2007 UTC
# Line 120  class TestIntegrator(Ascend): Line 120  class TestIntegrator(Ascend):
120      def testIDA(self):      def testIDA(self):
121          self._testIntegrator('IDA')          self._testIntegrator('IDA')
122    
123        def testparameters(self):
124            self.L.load('johnpye/shm.a4c')
125            M = self.L.findType('shm').getSimulation('sim')
126            M.build()
127            I = ascpy.Integrator(M)
128            I.setEngine('IDA')
129            P = I.getParameters()
130            for p in P:
131                print p.getName(),"=",p.getValue()
132            assert len(P)==11
133            assert P[0].isStr()
134            assert P[0].getName()=="linsolver"
135            assert P[0].getValue()=='SPGMR'
136            assert P[2].getName()=="autodiff"
137            assert P[2].getValue()==True
138            assert P[7].getName()=="atolvect"
139            assert P[7].getBoolValue() == True
140            P[2].setBoolValue(False)
141            assert P[2].getBoolValue()==False
142            I.setParameters(P)
143            assert I.getParameterValue('autodiff')==False
144            I.setParameter('autodiff',True)
145            try:
146                v = I.getParameterValue('nonexist')
147            except KeyError:
148                pass
149            else:
150                self.fail('Failed to trip invalid Integrator parameter')
151    
152  class TestLSODE(Ascend):  class TestLSODE(Ascend):
153    
154      def testzill(self):      def testzill(self):
# Line 179  class TestLSODE(Ascend): Line 208  class TestLSODE(Ascend):
208          assert abs(M.R - 832) < 1.0          assert abs(M.R - 832) < 1.0
209          assert abs(M.F - 21.36) < 0.1          assert abs(M.F - 21.36) < 0.1
210                    
211  class TestIDA(Ascend):  class TestIDADENSE(Ascend):
   
     def testparameters(self):  
         self.L.load('johnpye/shm.a4c')  
         M = self.L.findType('shm').getSimulation('sim')  
         M.build()  
         I = ascpy.Integrator(M)  
         I.setEngine('IDA')  
         P = I.getParameters()  
         for p in P:  
             print p.getName(),"=",p.getValue()  
         assert len(P)==9  
         assert P[0].isStr()  
         assert P[0].getName()=="linsolver"  
         assert P[0].getValue()=='SPGMR'  
         assert P[2].getName()=="autodiff"  
         assert P[2].getValue()==True  
         assert P[7].getName()=="atolvect"  
         assert P[7].getBoolValue() == True  
         P[2].setBoolValue(False)  
         assert P[2].getBoolValue()==False  
         I.setParameters(P)  
         for p in I.getParameters():  
             print p.getName(),"=",p.getValue()  
         assert I.getParameterValue('autodiff')==False  
         I.setParameter('autodiff',True)  
         try:  
             v = I.getParameterValue('nonexist')  
         except KeyError:  
             pass  
         else:  
             self.fail('Failed to trip invalid Integrator parameter')  
212    
213      def testnewton(self):      def testnewton(self):
214          sys.stderr.write("STARTING TESTNEWTON\n")          sys.stderr.write("STARTING TESTNEWTON\n")
# Line 220  class TestIDA(Ascend): Line 218  class TestIDA(Ascend):
218          M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())            M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())  
219          I = ascpy.Integrator(M)          I = ascpy.Integrator(M)
220          I.setEngine('IDA')          I.setEngine('IDA')
221            I.setParameter('linsolver','DENSE')
222          I.setParameter('safeeval',True)          I.setParameter('safeeval',True)
223          I.setParameter('rtol',1e-8)          I.setParameter('rtol',1e-8)
224          I.setMaxSubStep(0.001)          I.setMaxSubStep(0.001)
# Line 234  class TestIDA(Ascend): Line 233  class TestIDA(Ascend):
233          print "v = %f" % M.v          print "v = %f" % M.v
234          M.run(T.getMethod('self_test'))          M.run(T.getMethod('self_test'))
235    
     def testlotka(self):  
         self.L.load('johnpye/lotka.a4c')  
         M = self.L.findType('lotka').getSimulation('sim')  
         M.setSolver(ascpy.Solver("QRSlv"))  
         I = ascpy.Integrator(M)  
         I.setEngine('IDA')  
         I.setReporter(ascpy.IntegratorReporterConsole(I))  
         I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5);  
         I.setParameter('rtol',1e-8);  
         I.analyse()  
         assert I.getNumVars()==2  
         assert abs(M.R - 1000) < 1e-300  
         I.solve()  
         assert I.getNumObservedVars() == 3;  
         assert abs(M.R - 832) < 1.0  
         assert abs(M.F - 21.36) < 0.1  
   
236      def testlotkaDENSE(self):      def testlotkaDENSE(self):
237          self.L.load('johnpye/lotka.a4c')          self.L.load('johnpye/lotka.a4c')
238          M = self.L.findType('lotka').getSimulation('sim')          M = self.L.findType('lotka').getSimulation('sim')
# Line 268  class TestIDA(Ascend): Line 250  class TestIDA(Ascend):
250          assert I.getNumObservedVars() == 3;          assert I.getNumObservedVars() == 3;
251          assert abs(M.R - 832) < 1.0          assert abs(M.R - 832) < 1.0
252          assert abs(M.F - 21.36) < 0.1          assert abs(M.F - 21.36) < 0.1
   
     def testzill(self):  
         self.L.load('johnpye/zill.a4c')  
         T = self.L.findType('zill')  
         M = T.getSimulation('sim')  
         M.setSolver(ascpy.Solver('QRSlv'))  
         I = ascpy.Integrator(M)  
         I.setEngine('IDA')  
         I.setParameter('safeeval',False)  
         I.setMinSubStep(1e-7)  
         I.setMaxSubStep(0.001)  
         I.setMaxSubSteps(10000)  
         I.setReporter(ascpy.IntegratorReporterConsole(I))  
         I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5);  
         I.analyse()  
         I.solve()  
         M.run(T.getMethod('self_test'))  
253                    
254      def testdenx(self):      def testdenx(self):
255          self.L.load('johnpye/idadenx.a4c')          self.L.load('johnpye/idadenx.a4c')
# Line 321  class TestIDA(Ascend): Line 286  class TestIDA(Ascend):
286          I.setParameter('rtol',0)          I.setParameter('rtol',0)
287          I.setParameter('atol',1e-3);          I.setParameter('atol',1e-3);
288          I.setParameter('atolvect',False)          I.setParameter('atolvect',False)
289          I.setParameter('calcic',True)          I.setParameter('calcic','YA_YDP')
290          I.analyse()          I.analyse()
291          I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 11);          I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 11);
292          I.solve()          I.solve()
293          assert abs(M.u[2][2].getValue()) < 1e-5          assert abs(M.u[2][2].getValue()) < 1e-5
294            
295      def testdenxSPGMR(self):  # these tests are disabled until SPGMR preconditioning has been implemented
296          self.L.load('johnpye/idadenx.a4c')  class TestIDASPGMR:#(Ascend):
297          M = self.L.findType('idadenx').getSimulation('sim')      def testlotka(self):
298          M.setSolver(ascpy.Solver('QRSlv'))          self.L.load('johnpye/lotka.a4c')
299            M = self.L.findType('lotka').getSimulation('sim')
300            M.setSolver(ascpy.Solver("QRSlv"))
301          I = ascpy.Integrator(M)          I = ascpy.Integrator(M)
302          I.setEngine('IDA')          I.setEngine('IDA')
303          I.setReporter(ascpy.IntegratorReporterConsole(I))          I.setReporter(ascpy.IntegratorReporterConsole(I))
304          I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11);          I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5);
305          I.setMaxSubStep(0);          I.setParameter('rtol',1e-8);
         I.setInitialSubStep(0);  
         I.setMaxSubSteps(0);  
         I.setParameter('autodiff',True)  
         I.setParameter('linsolver','SPGMR')  
         I.setParameter('gsmodified',False)  
         I.setParameter('maxncf',10)  
306          I.analyse()          I.analyse()
307            assert I.getNumVars()==2
308            assert abs(M.R - 1000) < 1e-300
309          I.solve()          I.solve()
310          assert abs(float(M.y1) - 5.1091e-08) < 1e-10;          assert I.getNumObservedVars() == 3;
311          assert abs(float(M.y2) - 2.0437e-13) < 1e-15;          assert abs(M.R - 832) < 1.0
312          assert abs(float(M.y3) - 1.0) < 1e-5;          assert abs(M.F - 21.36) < 0.1
313    
314    
315      def testkryx(self):      def testkryx(self):
316          self.L.load('johnpye/idakryx.a4c')          self.L.load('johnpye/idakryx.a4c')
# Line 371  class TestIDA(Ascend): Line 335  class TestIDA(Ascend):
335          I.solve()          I.solve()
336          assert 0          assert 0
337    
338        def testzill(self):
339            self.L.load('johnpye/zill.a4c')
340            T = self.L.findType('zill')
341            M = T.getSimulation('sim')
342            M.setSolver(ascpy.Solver('QRSlv'))
343            I = ascpy.Integrator(M)
344            I.setEngine('IDA')
345            I.setParameter('safeeval',False)
346            I.setMinSubStep(1e-7)
347            I.setMaxSubStep(0.001)
348            I.setMaxSubSteps(10000)
349            I.setReporter(ascpy.IntegratorReporterConsole(I))
350            I.setLinearTimesteps(ascpy.Units(), 1.0, 1.5, 5);
351            I.analyse()
352            I.solve()
353            M.run(T.getMethod('self_test'))
354    
355        def testdenxSPGMR(self):
356            self.L.load('johnpye/idadenx.a4c')
357            M = self.L.findType('idadenx').getSimulation('sim')
358            M.setSolver(ascpy.Solver('QRSlv'))
359            I = ascpy.Integrator(M)
360            I.setEngine('IDA')
361            I.setReporter(ascpy.IntegratorReporterConsole(I))
362            I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11);
363            I.setMaxSubStep(0);
364            I.setInitialSubStep(0);
365            I.setMaxSubSteps(0);
366            I.setParameter('autodiff',True)
367            I.setParameter('linsolver','SPGMR')
368            I.setParameter('gsmodified',False)
369            I.setParameter('maxncf',10)
370            I.analyse()
371            I.solve()
372            assert abs(float(M.y1) - 5.1091e-08) < 1e-10;
373            assert abs(float(M.y2) - 2.0437e-13) < 1e-15;
374            assert abs(float(M.y3) - 1.0) < 1e-5;
375    
376  # move code above down here if you want to temporarily avoid testing it  # move code above down here if you want to temporarily avoid testing it
377  class NotToBeTested:  class NotToBeTested:
378      def nothing(self):      def nothing(self):
379          pass          pass
380            
381  if __name__=='__main__':  if __name__=='__main__':
382      atexit.register(ascpy.shutdown)      atexit.register(ascpy.shutdown)
383      #suite = unittest.TestSuite()      #suite = unittest.TestSuite()

Legend:
Removed from v.1009  
changed lines
  Added in v.1016

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