Exemple #1
0
	def teststeadyida(self):	
		M = self.testdsgsat()
		self.assertAlmostEqual(M.dTw_dt[2],0.0)
		Tw1 = float(M.T_w[2])
		T = self.L.findType('dsgsat3')
		M.run(T.getMethod('free_states'))
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('linsolver','DENSE')
		I.setParameter('safeeval',True)
		I.setParameter('rtol',1e-4)
		I.setParameter('atolvect',False)
		I.setParameter('atol',1e-4)
		I.setParameter('maxord',3)		
		I.setInitialSubStep(0.001)
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0, 3600, 10)
		I.analyse()
		I.solve()
		self.assertAlmostEqual(float(M.T_w[2]),Tw1)
		M.qdot_s.setRealValueWithUnits(1000,"W/m")
		self.assertAlmostEqual(M.qdot_s.to("W/m"),1000)
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		print "dTw/dt = %f" % M.dTw_dt[2]
		self.assertNotAlmostEqual(M.dTw_dt[2],0.0)
		F=file('dsgsat.dot','w')
		M.write(F,'dot')
Exemple #2
0
	def testpeturbida(self):	
		M = self.testdsgsat()
		self.assertAlmostEqual(M.dTw_dt[2],0.0)
		T = self.L.findType('dsgsat3')
		M.run(T.getMethod('free_states'))
		# here is the peturbation...
		qdot_s = float(M.qdot_s)
		print "OLD QDOT_S = %f" % qdot_s
		M.qdot_s.setRealValueWithUnits(6000,"W/m")
		# IDA has its own initial conditions solver, so no need to call QRSlv here
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('linsolver','DENSE')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		#I.setLinearTimesteps(ascpy.Units("s"), 0,300,300)
		I.setLogTimesteps(ascpy.Units("s"), 0.009, 1200, 150)
		I.analyse()
		F = file('ga.mm','w')
		I.writeMatrix(F,'dg/dz')
		F = file('gd.mm','w')
		I.writeMatrix(F,'dg/dx')
		F = file('fa.mm','w')
		I.writeMatrix(F,'df/dz')
		F = file('fd.mm','w')
		I.writeMatrix(F,'df/dx')
		F = file('fdp.mm','w')
		I.writeMatrix(F,"df/dx'")
		I.solve()
Exemple #3
0
	def teststeadylsode(self):
		"test that steady conditions are stable with LSODE"
		M = self.testdsgsat()
		#M.qdot_s.setRealValueWithUnits(1000,"W/m")
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		#M.setParameter('
	 	I = ascpy.Integrator(M)
		I.setEngine('LSODE')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0, 3600, 10)
		I.analyse()	
		I.solve()
Exemple #4
0
	def testlotka(self):
		self.L.load('test/dopri5/dopri5test.a4c')
		M = self.L.findType('dopri5test').getSimulation('sim')
		M.setSolver(ascpy.Solver("QRSlv"))
		M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())	
		I = ascpy.Integrator(M)
		I.setEngine('DOPRI5')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 20)
		I.setParameter('rtol',1e-8)
		I.analyse()
		assert I.getNumVars()==1
		I.solve()
Exemple #5
0
	def testlotka(self):
		self.L.load('johnpye/lotka.a4c')
		M = self.L.findType('lotka').getSimulation('sim',1)
		M.setSolver(ascpy.Solver("QRSlv"))
		I = ascpy.Integrator(M)
		I.setEngine('LSODE')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0, 200, 5)
		I.analyse()
		print "Number of vars = %d" % I.getNumVars()
		assert I.getNumVars()==2
		I.solve()
		assert I.getNumObservedVars() == 3;
		assert abs(M.R - 832) < 1.0
		assert abs(M.F - 21.36) < 0.1
Exemple #6
0
	def testzill(self):
		self.L.load('johnpye/zill.a4c')
		T = self.L.findType('zill')
		M = T.getSimulation('sim',1)
		M.setSolver(ascpy.Solver('QRSlv'))
		I = ascpy.Integrator(M)
		I.setEngine('LSODE')
		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'))
Exemple #7
0
	def testboundaries(self):
		self.L.load('test/ida/boundaries.a4c')
		T = self.L.findType('boundaries')
		M = T.getSimulation('sim')
		M.build()
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.analyse()
		I.setLogTimesteps(ascpy.Units("s"), 0.1, 20, 20)
		I.setParameter('linsolver','DENSE')
		I.setParameter('calcic','Y')
		I.setParameter('linsolver','DENSE')
		I.setParameter('safeeval',False)
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.solve()
Exemple #8
0
	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
Exemple #9
0
	def testdenxSPGMR(self):
		self.L.load('johnpye/idadenx.a4c')
		M = self.L.findType('idadenx').getSimulation('sim')
		M.setSolver(ascpy.Solver('QRSlv'))
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
		I.setMaxSubStep(0);
		I.setInitialSubStep(0);
		I.setMaxSubSteps(0);
		I.setParameter('autodiff',True)
		I.setParameter('linsolver','SPGMR')
		I.setParameter('gsmodified',False)
		I.setParameter('maxncf',10)
		I.analyse()
		I.solve()
		assert abs(float(M.y1) - 5.1091e-08) < 1e-10
		assert abs(float(M.y2) - 2.0437e-13) < 1e-15
		assert abs(float(M.y3) - 1.0) < 1e-5
Exemple #10
0
	def testtransamp(self):
		self.L.load('test/transamp.a4c')
		T = self.L.findType('transamp')
		M = T.getSimulation('sim')
		M.setSolver(ascpy.Solver('QRSlv'))
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('linsolver','DENSE')
		I.setParameter('rtol',1e-7)
		I.setParameter('atolvect',0)
		I.setParameter('atol',1e-7)
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0.05, 0.2, 20)
		I.setInitialSubStep(0.00001)
		I.setMaxSubSteps(10000)
		I.analyse()
		I.solve()
		for i in range(6):
			print "y[%d] = %.20g" % (i+1, M.y[i+1])
		M.run(T.getMethod('self_test'))
Exemple #11
0
	def testhires(self):
		self.L.load('test/hires.a4c')
		T = self.L.findType('hires')
		M = T.getSimulation('sim')
		M.setSolver(ascpy.Solver('QRSlv'))
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('linsolver','DENSE')
		I.setParameter('rtol',1.1e-15)
		I.setParameter('atolvect',0)
		I.setParameter('atol',1.1e-15)
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLogTimesteps(ascpy.Units(""), 1, 321.8122, 5)
		I.setInitialSubStep(1e-5)
		I.setMaxSubSteps(10000)
		I.analyse()
		I.solve()
		for i in range(8):
			print "y[%d] = %.20g" % (i+1, M.y[i+1])
		M.run(T.getMethod('self_test'))
Exemple #12
0
	def testdenx(self):
		print "-----------------------------====="
		self.L.load('johnpye/idadenx.a4c')
		M = self.L.findType('idadenx').getSimulation('sim')
		M.setSolver(ascpy.Solver("QRSlv"))
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('calcic','YA_YDP')
		I.setParameter('linsolver','DENSE')
		I.setParameter('safeeval',True)
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLogTimesteps(ascpy.Units("s"), 0.4, 4e10, 11)
		I.setMaxSubStep(0);
		I.setInitialSubStep(0)
		I.setMaxSubSteps(0)
		I.setParameter('autodiff',True)
		I.analyse()
		I.solve()
		assert abs(float(M.y1) - 5.1091e-08) < 2e-9
		assert abs(float(M.y2) - 2.0437e-13) < 2e-14
		assert abs(float(M.y3) - 1.0) < 1e-5
Exemple #13
0
	def testaren(self):
		self.L.load('test/dopri5/aren.a4c')
		M = self.L.findType('aren').getSimulation('sim')
		M.setSolver(ascpy.Solver("QRSlv"))
		M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
		I = ascpy.Integrator(M)
		I.setEngine('DOPRI5')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		#xend = 17.0652165601579625588917206249
		I.setLinearTimesteps(ascpy.Units("s"), 0, 17.0652165601579625588917206249, 10)
		I.setParameter('rtol',1e-7)
		I.setParameter('atol',1e-7)
		I.setParameter('tolvect',False)
		I.setMinSubStep(0);
		I.setMaxSubStep(0);
		I.setInitialSubStep(0);
		I.analyse()
		I.solve()
		print "y[0] = %f" % float(M.y[0])
		assert abs(float(M.y[0]) - 0.994) < 1e-5
		assert abs(float(M.y[1]) - 0.0) < 1e-5
Exemple #14
0
	def testkryx(self):
		self.L.load('johnpye/idakryx.a4c')
		M = self.L.findType('idakryx').getSimulation('sim')
		M.build()
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setParameter('linsolver','SPGMR')
		I.setParameter('prec','JACOBI')
		I.setParameter('maxl',8)
		I.setParameter('gsmodified',False)
		I.setParameter('autodiff',True)
		I.setParameter('gsmodified',True)
		I.setParameter('rtol',0)
		I.setParameter('atol',1e-3);
		I.setParameter('atolvect',False)
		I.setParameter('calcic','Y')
		I.analyse()
		I.setLogTimesteps(ascpy.Units("s"), 0.01, 10.24, 10);
		print M.udot[1][3]
		I.solve()
		assert 0
Exemple #15
0
	def testnewton(self):
		sys.stderr.write("STARTING TESTNEWTON\n")
		self.L.load('johnpye/newton.a4c')
		T = self.L.findType('newton')
		M = T.getSimulation('sim')
		M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())	
		I = ascpy.Integrator(M)
		I.setEngine('IDA')
		I.setParameter('linsolver','DENSE')
		I.setParameter('safeeval',True)
		I.setParameter('rtol',1e-8)
		I.setMaxSubStep(0.001)
		I.setMaxSubSteps(10000)
		
		I.setReporter(ascpy.IntegratorReporterConsole(I))
		I.setLinearTimesteps(ascpy.Units("s"), 0, 2*float(M.v)/float(M.g), 2)
		I.analyse()
		I.solve()
		print "At end of simulation,"
		print "x = %f" % M.x
		print "v = %f" % M.v
		M.run(T.getMethod('self_test'))
Exemple #16
0
		def testintegrate(self):
			"""integrate transfer of heat from one mass of water/steam to another
			according to Newton's law of cooling"""
			M = self.testinstantiate()
			M.setSolver(ascpy.Solver("QRSlv"))
			I = ascpy.Integrator(M)
			I.setEngine('LSODE')
			I.setReporter(ascpy.IntegratorReporterConsole(I))
			I.setLinearTimesteps(ascpy.Units("s"), 0, 3000, 30)
			I.setMinSubStep(0.01)
			I.setInitialSubStep(1)
			I.analyse()
			print "Number of vars = %d" % I.getNumVars()
			assert I.getNumVars()==2
			I.solve()
			assert I.getNumObservedVars() == 3;
			print "S[1].T = %f K" % M.S[1].T
			print "S[2].T = %f K" % M.S[2].T
			print "Q = %f W" % M.Q		
			self.assertAlmostEqual(float(M.S[1].T),506.77225109,4);
			self.assertAlmostEqual(float(M.S[2].T),511.605173967,5);
			self.assertAlmostEqual(float(M.Q),-48.32922877329,3);
			self.assertAlmostEqual(float(M.t),3000);
			print "Note that the above values have not been verified analytically"
Exemple #17
0
M.run(T.getMethod('free_states'))
# here is the peturbation...
print "CREATING PETURBATION..."
M.qdot_s.setRealValueWithUnits(6000, "W/m")
# IDA has its own initial conditions solver, so no need to call QRSlv here
I = ascpy.Integrator(M)
I.setEngine('IDA')
I.setParameter('linsolver', 'DENSE')
I.setParameter('safeeval', True)
I.setParameter('rtol', 1e-4)
I.setParameter('atolvect', False)
I.setParameter('atol', 1e-4)
I.setParameter('maxord', 2)
I.setParameter('calcic', 'YA_YDP')
I.setInitialSubStep(0.001)
I.setReporter(ascpy.IntegratorReporterConsole(I))
I.setLogTimesteps(ascpy.Units("s"), 0.001, 0.002, 10)
I.analyse()
F = file('gz.mm', 'w')
I.writeMatrix(F, 'dg/dz')
F = file('gx.mm', 'w')
I.writeMatrix(F, 'dg/dx')
F = file('fz.mm', 'w')
I.writeMatrix(F, 'df/dz')
F = file('fx.mm', 'w')
I.writeMatrix(F, 'df/dx')
F = file('fxp.mm', 'w')
I.writeMatrix(F, "df/dx'")
#I.solve()

from scipy import io