Example #1
0
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
Example #2
0
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
Example #3
0
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()
Example #4
0
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()
Example #5
0
def test_radau_event(dsargs):
    """
        Test Radau_ODEsystem with events involving external inputs.

        Robert Clewley, September 2006.
    """

    _run_checks(Radau_ODEsystem(dsargs))
Example #6
0
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)
Example #7
0
def ode():
    dsargs, _ = vanDerPol()
    dsargs['nobuild'] = True
    return Radau_ODEsystem(dsargs)