def _check_continued_integration(generator):

    dsargs, _ = vanDerPol()
    dsargs['name'] += '_continued'
    ode = generator(dsargs)

    # two step integration
    ode.set(tdomain=[0, 200])
    ode.set(tdata=[0, 100])
    left = ode.compute('first_half_traj')
    ode.set(tdata=[100, 200])
    right = ode.compute('second_half_traj', 'c')

    assert left(100.0) == right(100.0)

    # one step integration
    ode.set(tdata=[0, 200])
    full = ode.compute('full_traj')

    t = [0.0, 25.0, 50.0, 75.0, 100.0]
    assert_array_almost_equal(left(t, 'x').toarray(), full(t, 'x').toarray(), 4)
    assert_array_almost_equal(left(t, 'y').toarray(), full(t, 'y').toarray(), 4)

    t = [100.0, 125.0, 150.0, 175.0, 200.0]
    assert_array_almost_equal(right(t, 'x').toarray(), full(t, 'x').toarray(), 4)
    assert_array_almost_equal(right(t, 'y').toarray(), full(t, 'y').toarray(), 4)
예제 #2
0
def _check_continued_integration(generator):

    dsargs, _ = vanDerPol()
    dsargs['name'] += '_continued'
    ode = generator(dsargs)

    # two step integration
    ode.set(tdomain=[0, 200])
    ode.set(tdata=[0, 100])
    left = ode.compute('first_half_traj')
    ode.set(tdata=[100, 200])
    right = ode.compute('second_half_traj', 'c')

    assert left(100.0) == right(100.0)

    # one step integration
    ode.set(tdata=[0, 200])
    full = ode.compute('full_traj')

    t = [0.0, 25.0, 50.0, 75.0, 100.0]
    assert_array_almost_equal(
        left(t, 'x').toarray(),
        full(t, 'x').toarray(), 4)
    assert_array_almost_equal(
        left(t, 'y').toarray(),
        full(t, 'y').toarray(), 4)

    t = [100.0, 125.0, 150.0, 175.0, 200.0]
    assert_array_almost_equal(
        right(t, 'x').toarray(),
        full(t, 'x').toarray(), 4)
    assert_array_almost_equal(
        right(t, 'y').toarray(),
        full(t, 'y').toarray(), 4)
def _cross_check_forward_integration(generator, other):

    dsargs, _ = vanDerPol()
    dsargs['name'] += '_forward'
    if Euler_ODEsystem in [generator, other]:
        dsargs['algparams']['init_step'] = 1e-3
        decimal = 2
    else:
        decimal = 4

    t = linspace(0.0, 20.0)
    dsargs['tdata'] = [t[0], t[-1]]

    left = generator(dsargs).compute(str(generator) + '_traj')
    right = other(dsargs).compute(str(other) + '_traj')
    print(str(generator))

    assert_array_almost_equal(left(t, 'x').toarray(), right(t, 'x').toarray(), decimal)
    assert_array_almost_equal(left(t, 'y').toarray(), right(t, 'y').toarray(), decimal)
def _check_backward_integration(generator):

    dsargs, _ = vanDerPol()
    dsargs["name"] += "_backward"
    ode = generator(dsargs)

    # forward integration
    ode.set(tdomain=[0, 20])
    ode.set(tdata=[0, 20])
    forward = ode.compute("fwd")

    # backward integration
    ode.set(tdata=[0, 20], ics=forward(20.0).todict())
    backward = ode.compute("bwd", "b")

    t = [0.0, 5.0, 10.0, 15.0, 20.0]
    for v in ode.variables:
        assert_allclose(
            forward(t, v).toarray(),
            backward(t, v).toarray(),
            rtol=1e-7,
            atol=0 if generator != Radau_ODEsystem else 1e-2,
        )
def _check_backward_integration(generator):

    dsargs, _ = vanDerPol()
    dsargs['name'] += '_backward'
    ode = generator(dsargs)

    # forward integration
    ode.set(tdomain=[0, 20])
    ode.set(tdata=[0, 20])
    forward = ode.compute('fwd')

    # backward integration
    ode.set(tdata=[0, 20], ics=forward(20.0).todict())
    backward = ode.compute('bwd', 'b')

    t = [0.0, 5.0, 10.0, 15.0, 20.0]
    for v in ode.variables:
        assert_allclose(
            forward(t, v).toarray(),
            backward(t, v).toarray(),
            rtol=1e-7,
            atol=0 if generator != Radau_ODEsystem else 1e-2
        )
예제 #6
0
def _cross_check_forward_integration(generator, other):

    dsargs, _ = vanDerPol()
    dsargs['name'] += '_forward'
    if Euler_ODEsystem in [generator, other]:
        dsargs['algparams']['init_step'] = 1e-3
        decimal = 2
    else:
        decimal = 4

    t = linspace(0.0, 20.0)
    dsargs['tdata'] = [t[0], t[-1]]

    left = generator(dsargs).compute(str(generator) + '_traj')
    right = other(dsargs).compute(str(other) + '_traj')
    print(str(generator))

    assert_array_almost_equal(
        left(t, 'x').toarray(),
        right(t, 'x').toarray(), decimal)
    assert_array_almost_equal(
        left(t, 'y').toarray(),
        right(t, 'y').toarray(), decimal)