def test_events_code_generating(tmpfile): dsargs, _ = vanDerPol() dsargs['nobuild'] = True ev_args = { 'name': 'monitor', 'eventtol': 1e-4, 'eventdelay': 1e-5, 'starttime': 0, 'active': True, 'term': False, 'precise': True } ev = Events.makeZeroCrossEvent('y', 0, ev_args, ['y'], targetlang='c') dsargs['events'] = [ev] ode = Radau_ODEsystem(dsargs) ode.makeLibSource(fname=tmpfile) with open(tmpfile) as g: code = g.read() assert 'double monitor(unsigned n_, double t, double *Y_, double *p_, unsigned wkn_, double *wk_, unsigned xvn_, double *xv_);' in code assert 'int N_EVENTS = 1;' in code assert 'void assignEvents(EvFunType *events){\n events[0] = &monitor;\n\n}' in code assert '\n'.join([ 'double monitor(unsigned n_, double t, double *Y_, double *p_, unsigned wkn_, double *wk_, unsigned xvn_, double *xv_) {', 'return y; ', '}']) in code
def test_events_code_generating(tmpfile): dsargs, _ = vanDerPol() dsargs['nobuild'] = True ev_args = { 'name': 'monitor', 'eventtol': 1e-4, 'eventdelay': 1e-5, 'starttime': 0, 'active': True, 'term': False, 'precise': True } ev = Events.makeZeroCrossEvent('y', 0, ev_args, ['y'], targetlang='c') dsargs['events'] = [ev] ode = Radau_ODEsystem(dsargs) ode.makeLibSource(fname=tmpfile) with open(tmpfile) as g: code = g.read() assert 'double monitor(unsigned n_, double t, double *Y_, double *p_, unsigned wkn_, double *wk_, unsigned xvn_, double *xv_);' in code assert 'int N_EVENTS = 1;' in code assert 'void assignEvents(EvFunType *events){\n events[0] = &monitor;\n\n}' in code assert '\n'.join([ 'double monitor(unsigned n_, double t, double *Y_, double *p_, unsigned wkn_, double *wk_, unsigned xvn_, double *xv_) {', 'return y; ', '}' ]) in code
def test_radau_support_mass_matrix(tmpfile): dsargs = dae() dsargs['nobuild'] = True ode = Radau_ODEsystem(dsargs) ode.makeLibSource(fname=tmpfile) mm_src = '\n'.join( ['f_[0][0] = 0;', 'f_[0][1] = 0;', 'f_[1][0] = 0;', 'f_[1][1] = 1;']) with open(tmpfile) as g: assert mm_src in g.read()
def test_radau_support_mass_matrix(tmpfile): dsargs = dae() dsargs['nobuild'] = True ode = Radau_ODEsystem(dsargs) ode.makeLibSource(fname=tmpfile) mm_src = '\n'.join([ 'f_[0][0] = 0;', 'f_[0][1] = 0;', 'f_[1][0] = 0;', 'f_[1][1] = 1;' ]) with open(tmpfile) as g: assert mm_src in g.read()
def test_radau_event(dsargs): """ Test Radau_ODEsystem with events involving external inputs. Robert Clewley, September 2006. """ _run_checks(Radau_ODEsystem(dsargs))
def ode(): """Dummy system with all functions set""" DSargs = args( name='test_interfaces', fnspecs={ 'Jacobian': (['t', 'y0', 'y1', 'y2'], """[[-0.04, 1e4*y2 , 1e4*y1 ], [ 0.04, -1e4*y2-6e7*y1, -1e4*y1 ], [ 0.0 , 6e7*y1 , 0.0 ]]"""), 'Jacobian_pars': (['t', 'p1', 'p2', 'p3'], "[[1, 0, p1], [-1, 0, p2], [0, 0, p3]]"), 'ydot0': (['y0', 'y1', 'y2'], "-0.04*y0 + 1e4*y1*y2"), 'ydot2': (['y0', 'y1', 'y2'], "3e7*y1*y1"), 'massMatrix': (['t', 'y0', 'y1', 'y2'], """[[-0.04, 1e4*y2 , 1e4*y1 ], [ 0.04, -1e4*y2-6e7*y1, -1e4*y1 ], [ 0.0 , 6e7*y1 , 0.0 ]]"""), }, varspecs={ "y0": "ydot0(y0,y1,y2)", "y2": "ydot2(y0,y1,y2)", "y1": "-ydot0(y0,y1,y2)-ydot2(y0,y1,y2)", 'aux0': 'y0 + 2 * y1 - t', 'aux1': 'y2 - y1 - 2 * y0', }, auxvars=['aux0', 'aux1'], pars={ 'p1': 0.01, 'p2': 0.02, 'p3': 0.03 }, tdomain=[0., 1e20], ics={ 'y0': 1.0, 'y1': 0., 'y2': 0. }, algparams={ 'init_step': 0.4, 'rtol': 1e-4, 'atol': [1e-8, 1e-14, 1e-6] }, checklevel=2, ) return Radau_ODEsystem(DSargs)
def ode(): dsargs, _ = vanDerPol() dsargs['nobuild'] = True return Radau_ODEsystem(dsargs)