Ejemplo n.º 1
0
	def ipopt_tester(self,testname,hessian_approx='limited-memory',linear_solver='mumps'):
		self.L.load('test/ipopt/%s.a4c' % testname)
		T = self.L.findType(testname)
		M = T.getSimulation('sim')
		M.setSolver(ascpy.Solver("IPOPT"))
		M.setParameter('linear_solver',linear_solver)
		M.setParameter('hessian_approximation',hessian_approx)
		M.solve(ascpy.Solver("IPOPT"),ascpy.SolverReporter())
		M.run(T.getMethod('self_test'))
Ejemplo n.º 2
0
	def testdsgsat(self):
		self.L.load('steam/dsgsat3.a4c')
		T = self.L.findType('dsgsat3')
		M = T.getSimulation('sim',False)
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		self.assertAlmostEqual(M.dTw_dt[2],0.0);
		M.run(T.getMethod('configure_dynamic'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		return M
Ejemplo n.º 3
0
	def testdsgsatrepeat(self):
		self.L.load('steam/dsgsat3.a4c')
		T = self.L.findType('dsgsat3')
		M = T.getSimulation('sim',False)
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
Ejemplo n.º 4
0
	def _run(self,modelname,solvername="QRSlv",filename=None,parameters={}):
		if filename==None:
			filename = 'johnpye/%s.a4c' % modelname
		self.L.load(filename)
		T = self.L.findType(modelname)
		M = T.getSimulation('sim',1)
		M.setSolver(ascpy.Solver(solvername))
		for k,v in parameters.iteritems():
			M.setParameter(k,v)
		M.solve(ascpy.Solver(solvername),ascpy.SolverReporter())	
		M.run(T.getMethod('self_test'))
		return M
Ejemplo n.º 5
0
	def testvary(self):
		self.L.load('steam/dsgsat3.a4c')
		T = self.L.findType('dsgsat3')
		M = T.getSimulation('sim',False)
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		print "----- setting qdot_s -----"
		M.qdot_s.setRealValueWithUnits(1000,"W/m")
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		print "----- setting qdot_s -----"
		M.qdot_s.setRealValueWithUnits(2000,"W/m")
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
Ejemplo n.º 6
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()
Ejemplo n.º 7
0
	def _testIntegrator(self,integratorname):
		self.L.load('johnpye/shm.a4c')
		M = self.L.findType('shm').getSimulation('sim',1)
		M.setSolver(ascpy.Solver('QRSlv'))
		P = M.getParameters()
		M.setParameter('feastol',1e-12)
		print M.getChildren()
		assert float(M.x) == 10.0
		assert float(M.v) == 0.0
		t_end = math.pi

		I = ascpy.Integrator(M)
		I.setReporter(ascpy.IntegratorReporterNull(I))
		I.setEngine(integratorname);
		I.setLinearTimesteps(ascpy.Units("s"), 0.0, t_end, 100);
		I.setMinSubStep(0.0001); # these limits are required by IDA at present (numeric diff)
		I.setMaxSubStep(0.1);
		I.setInitialSubStep(0.001);
		I.setMaxSubSteps(200);
		if(integratorname=='IDA'):
			I.setParameter('autodiff',False)
		for p in M.getParameters():
			print p.getName(),"=",p.getValue()
		I.analyse();
		I.solve();
		print "At end of simulation,"
		print "x = %f" % M.x
		print "v = %f" % M.v
		assert abs(float(M.x) + 10) < 1e-2
		assert abs(float(M.v)) < 1e-2
		assert I.getNumObservedVars() == 3
Ejemplo n.º 8
0
def moodyplot(self):
    """ repeatedly solve the colebrook equation to plot a Moody diagram """
    self = ascpy.Registry().getInstance('context')

    self.eps.setFixed(False)
    self.eps_on_D.setFixed(True)

    ioff()
    figure()
    hold(True)
    leg = []
    Re_vals = array([
        1000, 1500, 2000, 2100, 2300, 2400, 2500, 2600, 2700, 2900, 3000, 4000,
        5000, 10000, 20000, 50000, 100000, 200000, 500000, 1e6
    ])

    #browser.reporter.reportNote(str(len(Re_vals)))
    for eps_on_D in [
            1e-5, 2e-5, 5e-5, 1e-4, 2e-4, 5e-4, 1e-3, 5e-3, 0.01, 0.02
    ]:
        self.eps_on_D.setRealValue(eps_on_D)
        f_vals = zeros(size(Re_vals), 'f')
        for i in range(0, len(Re_vals)):
            self.Re.setRealValue(Re_vals[i])
            browser.sim.solve(ascpy.Solver("QRSlv"),
                              SimpleSolverReporter(browser))
            f_vals[i] = self.f.getRealValue()

        loglog(Re_vals, f_vals)
        leg += ["e/D = %f" % eps_on_D]

    legend(leg)
    ion()
    show()
Ejemplo n.º 9
0
	def test1(self):
		ascpy.getCompiler().setBinaryCompilation(True)
		self.L.load('johnpye/testlog10.a4c')
		T = self.L.findType('testlog10')
		M = T.getSimulation('sim',1)
		M.build()
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
Ejemplo n.º 10
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')
Ejemplo n.º 11
0
	def test1(self):
		self.L.load('sensitivity_test.a4c')
		T = self.L.findType('sensitivity_test')
		M = T.getSimulation('sim',0)
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		M.run(T.getMethod('analyse'))
		M.run(T.getMethod('self_test'))
Ejemplo n.º 12
0
	def testsatuv(self):
		self.L.load('steam/iapwssat.a4c')
		T = self.L.findType('testiapwssatuv')
		M = T.getSimulation('sim',False)
		M.run(T.getMethod('on_load'))
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		print "p = %f bar" % M.p.to('bar');
		print "T = %f C" % (M.T.to('K') - 273.15);
		print "x = %f" % M.x;
		M.run(T.getMethod('self_test'))
		M.run(T.getMethod('values2'))
#		M.v.setRealValueWithUnits(1.0/450,"m^3/kg");
#		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		print "p = %f bar" % M.p.to('bar');
		print "T = %f C" % (M.T.to('K') - 273.15);
		print "x = %f" % M.x;
		M.run(T.getMethod('self_test2'))
Ejemplo n.º 13
0
	def testInvalidIntegrator(self):
		self.L.load('johnpye/shm.a4c') 
		M = self.L.findType('shm').getSimulation('sim',1)
		M.setSolver(ascpy.Solver('QRSlv'))
		I = ascpy.Integrator(M)
		try:
			I.setEngine('___NONEXISTENT____')
		except IndexError:
			return
		self.fail("setEngine did not raise error!")
Ejemplo n.º 14
0
	def testsonic(self):
		M = self._run('sonic',"CMSlv","sonic.a4c")
		assert(M.sonic_flow.getBoolValue())

		# other side of boundary...
		M.D.setRealValueWithUnits(4.,"cm")	
		T = self.L.findType('sonic')
		M.solve(ascpy.Solver('CMSlv'),ascpy.SolverReporter())
		M.run(T.getMethod('self_test'))
		assert(not M.sonic_flow.getBoolValue())
Ejemplo n.º 15
0
	def testrelinclude(self):
		self.L.load('test/relinclude.a4c')
		T = self.L.findType('relinclude')
		M = T.getSimulation('sim',1)
		M.eq1.setIncluded(True)
		M.eq2.setIncluded(False)
		M.eq3.setIncluded(False)
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		self.assertAlmostEqual( float(M.z), 2.0)
		M.eq1.setIncluded(False)
		M.eq2.setIncluded(True)
		M.eq3.setIncluded(False)
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		self.assertAlmostEqual( float(M.z), 4.0)
		M.eq1.setIncluded(False)
		M.eq2.setIncluded(False)
		M.eq3.setIncluded(True)
		M.solve(ascpy.Solver('QRSlv'),ascpy.SolverReporter())
		self.assertAlmostEqual( float(M.z), 4.61043629206)
Ejemplo n.º 16
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()
Ejemplo n.º 17
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
Ejemplo n.º 18
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
Ejemplo n.º 19
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'))
Ejemplo n.º 20
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
Ejemplo n.º 21
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'))
Ejemplo n.º 22
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'))
Ejemplo n.º 23
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
Ejemplo n.º 24
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
Ejemplo n.º 25
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'))
Ejemplo n.º 26
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"
Ejemplo n.º 27
0
    def run(self):
        ascendlock.acquire()
        try:
            L = ascpy.Library()
            L.clear()
            L.load(self.filepath)
            t = L.findType(self.modelname)
            testmethod = None
            for m in t.getMethods():
                if m.getName() == TEST_METHOD_NAME:
                    testmethod = m
            if not testmethod:
                raise RuntimeError("No method '" + TEST_METHOD_NAME +
                                   "' found")

            s = t.getSimulation('testsim')
            #s.check()
            s.build()
            print "LAUNCHING SOLVER...\n\n"
            r = ascpy.SolverReporter()
            s.solve(ascpy.Solver('QRSlv'), r)
            s.run(testmethod)
        except RuntimeError, e:
            print e
Ejemplo n.º 28
0
#--------------------------------
print "\n\n\n\nINSTANTIATING TEST...\n\n\n"
t = L.findType("extfntest")
#t = L.findType("intfntest")
sim = t.getSimulation("S")

print "\n--------------------------\n"

#--------------------------------
print "\n\n\n\nLISTING EXTERNAL METHODS...\n\n\n"
print chr(27) + "[31;1mEXTERNAL METHODS (!):" + chr(27) + "[0m"
ff = L.getExtMethods()
for f in ff:
    fn = f.getName()

    fh = f.getHelp()
    if not fh:
        fh = '[no help]'
    else:
        mlre = re.compile("\\n")
        fh = re.sub(mlre, "\n    ", fh)

    print chr(27) + "[31;1m" + fn + chr(27) + "[31;2m: " + fh + chr(27) + "[0m"

#--------------------------------
print "\n\n\n\nBUILDING...\n\n\n"
sim.build()

sim.solve(ascpy.Solver('QRSlv'), ascpy.SolverReporter())
Ejemplo n.º 29
0
import ascpy
import TReport

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

## CODE BEGINS

lib = ascpy.Library()
lib.load('test/ida/leon/electron.a4c')

M = lib.findType('electron').getSimulation('sim')
M.setSolver(ascpy.Solver('QRSlv'))

P = M.getParameters()

I = ascpy.Integrator(M)

I.setEngine('IDA')
I.setLinearTimesteps(ascpy.Units("s"), 0.0, 40.0, 60)
I.setMinSubStep(0.0001)
I.setMaxSubStep(0.1)
I.setInitialSubStep(0.001)
I.setMaxSubSteps(200)

I.setParameter('autodiff', False)
I.analyse()
reporter = TReport.TestReporter(I)
I.setReporter(reporter)
Ejemplo n.º 30
0
	def test_compound2(self):
		self.L.load('johnpye/section.a4c')
		T = self.L.findType('compound_section_test2')
		M = T.getSimulation('sim')
		M.solve(ascpy.Solver("QRSlv"),ascpy.SolverReporter())
		M.run(T.getMethod('self_test'))