Exemplo n.º 1
0
def test_explicitfngen():
    """Test of Explicit and Implicit Function generators, global time, and deletion"""

    ev_args = {'name': 'threshold',
               'eventtol': 1e-4,
               'eventdelay': 1e-5,
               'starttime': 0,
               'active': True,
               'term': True,
               'precise': True}
    thresh_ev = Events.makePythonStateZeroCrossEvent('t', 20, 1, ev_args)

    DSargs = {'tdomain': [-50, 50],
            'pars': {'speed': 1},
            'xdomain': {'s': [-1., 1.]},
            'name': 'sine',
            'globalt0': 0.4,
            'pdomain': {'speed': [0, 200]},
            'varspecs': {'s': "sin(globalindepvar(t)*speed)"},
            'events': thresh_ev}
    sin_gen = ExplicitFnGen(DSargs)
    sintraj1 = sin_gen.compute('sine1')
    assert sintraj1.globalt0 == 0.4
    assert sintraj1(0) == sin(0.4)

    sin_gen.set(pars={'speed': 2})
    sintraj2 = sin_gen.compute('sine2')

    # sintraj2 independent variable domain truncated at terminal event
    assert allclose(sin_gen.getEventTimes()['threshold'], 20+sintraj1.globalt0)
    assert sintraj2.indepdomain[0] == -50
    assert abs(sintraj2.indepdomain[1] - 20) < 1e-4
Exemplo n.º 2
0
def test_explicitfngen():
    """Test of Explicit and Implicit Function generators, global time, and deletion"""

    ev_args = {
        'name': 'threshold',
        'eventtol': 1e-4,
        'eventdelay': 1e-5,
        'starttime': 0,
        'active': True,
        'term': True,
        'precise': True
    }
    thresh_ev = Events.makePythonStateZeroCrossEvent('t', 20, 1, ev_args)

    DSargs = {
        'tdomain': [-50, 50],
        'pars': {
            'speed': 1
        },
        'xdomain': {
            's': [-1., 1.]
        },
        'name': 'sine',
        'globalt0': 0.4,
        'pdomain': {
            'speed': [0, 200]
        },
        'varspecs': {
            's': "sin(globalindepvar(t)*speed)"
        },
        'events': thresh_ev
    }
    sin_gen = ExplicitFnGen(DSargs)
    sintraj1 = sin_gen.compute('sine1')
    assert sintraj1.globalt0 == 0.4
    assert sintraj1(0) == sin(0.4)

    sin_gen.set(pars={'speed': 2})
    sintraj2 = sin_gen.compute('sine2')

    # sintraj2 independent variable domain truncated at terminal event
    assert allclose(sin_gen.getEventTimes()['threshold'],
                    20 + sintraj1.globalt0)
    assert sintraj2.indepdomain[0] == -50
    assert abs(sintraj2.indepdomain[1] - 20) < 1e-4