Exemplo n.º 1
0
def test_namespacewriter_simple():
    f = Frame()
    f.addfield("Y", 1.)
    f.addgroup("A")
    f.A.addfield("B", 0.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 1.

    f.x.updater = dx
    f.x.snapshots = [1.]
    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_1_euler, f.Y)]
    f.writer = writers.namespacewriter()
    f.writer.dumping = True
    f.run()
    Y = f.writer.read.sequence("Y")
    assert np.all(Y == [1., 0.])
    x = f.writer.read.sequence("x")
    assert np.all(x == [0., 1.])
    data = f.writer.read.all()
    assert np.all(data.Y == [1., 0.])
    assert np.all(data.x == [0., 1.])
    f.writer.reset()
Exemplo n.º 2
0
def test_expl_5_dormand_prince_adptv():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested

    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(0.1)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.expl_5_dormand_prince_adptv,
                    f.Y,
                    controller={"eps": 1.e-2})
    ]

    f.run()
    assert np.allclose(f.Y, 1.8016162079480785e-06)
Exemplo n.º 3
0
def test_expl_3_gottlieb_shu_adptv():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested

    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(0.1)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.expl_3_gottlieb_shu_adptv,
                    f.Y,
                    controller={"eps": 1.e-4})
    ]

    f.run()
    assert np.allclose(f.Y, 4.5390485375346277e-05)
Exemplo n.º 4
0
def test_expl_2_heun_euler_adaptive():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested

    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(0.1)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.expl_2_heun_euler_adptv,
                    f.Y,
                    controller={"eps": 1.e-3})
    ]

    f.run()
    assert np.allclose(f.Y, 4.553150014598088e-05)
Exemplo n.º 5
0
def test_impl_1_euler_gmres_fail():
    f = Frame()
    f.addfield("Y", 1.)

    def jac(f, x):
        return np.array([-1.])

    f.Y.jacobinator = jac
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.impl_1_euler_gmres,
                    f.Y,
                    controller={
                        "gmres_opt": {
                            "atol": 0.,
                            "tol": 1.e-18,
                            "maxiter": 1
                        }
                    })
    ]

    with pytest.raises(StopIteration):
        f.run()
Exemplo n.º 6
0
def test_field_derivative():
    f = Frame()
    f.addfield("Y", 1.)
    f.addintegrationvariable("x", 0.)

    def diff(f, x, Y):
        return -Y

    f.Y.differentiator = diff
    with pytest.raises(RuntimeError):
        f.Y.derivative()
    f.integrator = Integrator(f.x)
    f.integrator._var = None
    with pytest.raises(RuntimeError):
        f.Y.derivative()
    f.integrator = Integrator(f.x)
    assert np.all(f.Y.derivative() == -f.Y)
    f.addfield("Y", [1., 0])
    assert np.all(f.Y.derivative() == 0.)

    def jac(f, x):
        return [[2., 0], [0., 2.]]

    f.Y.jacobinator = jac
    assert np.all(f.Y.derivative() == [2., 0.])
Exemplo n.º 7
0
def test_expl_5_cash_karp_adptv():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested

    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(0.1)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.expl_5_cash_karp_adptv,
                    f.Y,
                    controller={"eps": 1.e-3})
    ]

    f.run()
    assert np.allclose(f.Y, 4.57114092616805e-05)
Exemplo n.º 8
0
def test_group_updateorder():
    f = Frame()
    f.addfield("x", 1.)
    f.addfield("y", 2.)
    with pytest.raises(RuntimeError):
        f.updateorder = ["x", "y"]
    assert f.updateorder == None
    with pytest.raises(ValueError):
        f.updater = ["x", None]
    with pytest.raises(RuntimeError):
        f.updater = ["x", "z"]
    f.updater = ["y", "x"]
    assert f.updateorder == ["y", "x"]

    def upd_x(f):
        return f.x * f.y

    def upd_y(f):
        return f.x + f.y

    f.x.updater = upd_x
    f.y.updater = upd_y
    f.update()
    assert f.x == 3.
    assert f.y == 3.

    def upd(f):
        f.y.update()
        f.x.update()

    f.updater = Heartbeat(upd)
    f.update()
    assert f.x == 18.
    assert f.y == 6.
Exemplo n.º 9
0
def test_hdf5writer_skip():
    f = Frame()
    f.writer = writers.hdf5writer()
    f.addfield("x", 0., save=False)
    f.writeoutput(0)
    with pytest.raises(KeyError):
        x = f.writer.read.sequence("x")
    shutil.rmtree(f.writer.datadir)
Exemplo n.º 10
0
def test_namespacewriter_read_empty():
    f = Frame()
    f.addfield("Y", 1.)
    f.writer = writers.namespacewriter()
    with pytest.raises(RuntimeError):
        Y = f.writer.read.sequence("Y")
    with pytest.raises(RuntimeError):
        data = f.writer.read.all()
Exemplo n.º 11
0
def test_field_set():
    f = Frame()
    f.addfield("Y", 0.)
    f.Y._setvalue(1.)
    assert f.Y == 1.
    f.Y.constant = True
    with pytest.raises(RuntimeError):
        f.Y._setvalue(0.)
Exemplo n.º 12
0
def test_field_update():
    f = Frame()
    f.addfield("Y", 1.)

    def upd(f):
        return 0.

    f.Y.updater = upd
    f.Y.update()
    assert f.Y == 0.
Exemplo n.º 13
0
def test_namespacewriter_read_out_of_bounds():
    f = Frame()
    f.addfield("Y", 1.)
    f.writer = writers.namespacewriter()
    f.writer.verbosity = 0
    f.writer.dumping = False
    f.writer.write(f)
    with pytest.raises(RuntimeError):
        f.writer.read.output(1)
    data0000 = f.writer.read.output(0)
    assert data0000.Y == 1.
    f.writer.reset()
Exemplo n.º 14
0
def test_namespacewriter_read_sequence():
    f = Frame()
    f.addfield("Y", [1., 0])
    f.addfield("x", 0, save=False)
    f.writer = writers.namespacewriter()
    f.writer.write(f)
    with pytest.raises(TypeError):
        f.writer.read.sequence(1)
    with pytest.raises(RuntimeError):
        f.writer.read.sequence("x")
    Y = f.writer.read.sequence("Y")
    assert np.all(Y == [1., 0.])
    f.writer.reset()
Exemplo n.º 15
0
def test_simple_read_files():
    f = Frame()
    f.addgroup("A")
    f.A.addfield("B", [0., 0.])
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 1.

    f.x.updater = dx
    f.x.snapshots = [1.]
    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_1_euler, f.Y)]
    f.writer = writers.hdf5writer()
    f.run()
    x = f.writer.read.sequence("x")
    assert np.all(x == [0., 1.])
    Y = f.writer.read.sequence("Y")
    assert np.all(Y == [1., 0.])
    B = f.writer.read.sequence("A.B")
    assert np.all(B == [0., 0.])
    with pytest.raises(TypeError):
        f.writer.read.sequence(1)
    data = f.writer.read.all()
    assert np.all(data.x == [0., 1.])
    assert np.all(data.Y == [1., 0.])
    assert np.all(data.A.B == [0., 0.])
    data0000 = f.writer.read.output(0)
    assert np.all(data0000.x == 0.)
    assert np.all(data0000.Y == 1.)
    assert np.all(data0000.A.B == 0.)
    with pytest.raises(RuntimeError):
        f.writer.read.output(2)
    shutil.rmtree(f.writer.datadir)
    with pytest.raises(RuntimeError):
        f.writer.datadir = "temp"
        f.writer.read.all()
    with pytest.raises(RuntimeError):
        f.writer.read.sequence("x")
    f.writer.datadir = "data"
Exemplo n.º 16
0
def test_simple():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y
    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 1.
    f.x.updater = dx
    f.x.snapshots = [1.]
    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_1_euler, f.Y)]
    f.run()
    assert f.Y == 0.
    assert f.x.prevstepsize == 1.
Exemplo n.º 17
0
def test_heartbeat_order():
    f = Frame()
    f.addfield("x", 1.)
    f.addfield("y", 2.)
    f.addfield("z", 3.)

    def sys(f):
        f.x = f.y * f.z

    def upd(f):
        f.y = f.z * f.x

    def dia(f):
        f.z = f.x * f.y

    f.updater = Heartbeat(updater=upd, systole=sys, diastole=dia)
    f.update()
    assert f.x == 6.
    assert f.y == 18.
    assert f.z == 108.
Exemplo n.º 18
0
def test_group_repr_str():
    f = Frame()
    assert isinstance(repr(f), str)
    assert isinstance(str(f), str)
    f.addintegrationvariable("x", 0)
    f.addfield("Y", 1.)
    f.addfield("abcdefghijklm", 0.)
    f.addgroup("A")
    f.addgroup("BCDEFGHIJKLMN")
    f.C = None
    f.abcdef1234567 = None
    f.A.addfield("k", 0.)
    assert isinstance(repr(f), str)
    assert isinstance(str(f), str)
    assert isinstance(repr(f.A), str)
    assert isinstance(str(f.A), str)
    f.integrator = Integrator(f.x)
    f.writer = writers.namespacewriter()
    assert isinstance(repr(f), str)
    assert isinstance(str(f), str)
Exemplo n.º 19
0
def test_expl_2_heun():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_2_heun, f.Y)]

    f.run()
    assert np.allclose(f.Y, 4.6222977814657625e-05)
Exemplo n.º 20
0
def test_expl_1_euler():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_1_euler, f.Y)]

    f.run()
    assert np.allclose(f.Y, 2.656139888758694e-05)
Exemplo n.º 21
0
def test_field_jacobian():
    f = Frame()
    f.addfield("Y", 1.)
    f.addintegrationvariable("x", 0.)

    def jac(f, x):
        if x == None:
            return 0.
        else:
            return x

    f.Y.jacobinator = jac
    with pytest.raises(RuntimeError):
        f.Y.jacobian()
    f.integrator = Integrator(f.x)
    f.integrator._var = None
    with pytest.raises(RuntimeError):
        f.Y.jacobian()
    f.integrator = Integrator(f.x)
    assert f.Y.jacobian() == 0.
    assert f.Y.jacobian(x=1.) == 1.
Exemplo n.º 22
0
def test_adaptive_update():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y
    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested
    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(100.)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_5_cash_karp_adptv, f.Y),
                                 Instruction(schemes.update, f.Y)]

    f.run()
    assert f.Y == 5.34990702474703e-3
Exemplo n.º 23
0
def test_hdf5writer_strings():
    string = "test"
    # When read from HDF5 the string will be a byte literal
    string_cmpr = string.encode()
    f = Frame()
    f.addfield("s", string)
    f.t = string
    f.writer = writers.hdf5writer()
    f.writeoutput(0)
    f.writeoutput(1)
    data0000 = f.writer.read.output(0)
    assert data0000.s[0] == string_cmpr
    assert data0000.t == string_cmpr
    s = f.writer.read.sequence("s")
    assert np.all(s == [string_cmpr, string_cmpr])
    t = f.writer.read.sequence("t")
    assert np.all(t == [string_cmpr, string_cmpr])
    data = f.writer.read.all()
    assert np.all(data.s == [string_cmpr, string_cmpr])
    assert np.all(data.s == [string_cmpr, string_cmpr])
    shutil.rmtree(f.writer.datadir)
Exemplo n.º 24
0
def test_impl_1_euler_gmres():
    f = Frame()
    f.addfield("Y", 1.)

    def jac(f, x):
        return np.array([-1.])

    f.Y.jacobinator = jac
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.impl_1_euler_gmres, f.Y)]

    f.run()
    assert np.allclose(f.Y, 7.256571590148018e-05)
Exemplo n.º 25
0
def test_expl_4_runge_kutta():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y

    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(schemes.expl_4_runge_kutta, f.Y)]

    f.run()
    assert np.allclose(f.Y, 4.540034101629485e-05)
Exemplo n.º 26
0
def test_adaptive_fail():
    f = Frame()
    f.addfield("Y", 1.)

    def dYdx(f, x, Y):
        return -Y
    f.Y.differentiator = dYdx
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return f.x.suggested
    f.x.updater = dx
    f.x.snapshots = [10.]
    f.x.suggest(100.)

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [Instruction(
        schemes.expl_5_cash_karp_adptv, f.Y)]
    f.integrator.maxit = 1

    with pytest.raises(StopIteration):
        f.run()
Exemplo n.º 27
0
def test_impl_2_midpoint_direct():
    f = Frame()
    f.addfield("Y", 1.)

    def jac(f, x):
        return np.array([-1.])

    f.Y.jacobinator = jac
    f.addintegrationvariable("x", 0.)

    def dx(f):
        return 0.1

    f.x.updater = dx
    f.x.snapshots = [10.]

    f.integrator = Integrator(f.x)
    f.integrator.instructions = [
        Instruction(schemes.impl_2_midpoint_direct, f.Y)
    ]

    f.run()
    assert np.allclose(f.Y, 4.5022605238147066e-05)
Exemplo n.º 28
0
def test_group_toc():
    f = Frame()
    f.addgroup("A")
    f.addfield("x", 1.)
    f.toc
    f.toc = None
Exemplo n.º 29
0
def test_group_change_constant_field():
    f = Frame()
    f.addfield("Y", 0, constant=True)
    with pytest.raises(RuntimeError):
        f.Y = 1