def test_shallow_water_gc():
    import ibvp.sym as sym

    dim = 2
    col_height = sym.Field("eta")

    # "mom"entum really is column height * velocity
    mom = sym.MultiVectorField("mom")

    d1 = sym.Derivative()
    d2 = sym.Derivative()
    d3 = sym.Derivative()
    eqns = sym.join(
            sym.d_dt(col_height)
            + (d1.nabla | d1(mom)),

            sym.d_dt(mom)
            + d2(mom * (mom | d2.nabla)/col_height)
            + 0.5*d3.nabla*d3(col_height**2)
            )

    print(sym.pretty(eqns))

    from ibvp.language import PDESystem
    system = PDESystem(
            ambient_dim=dim,
            pde_system=eqns,
            unknowns=[col_height, mom],
            )

    from ibvp.target.proteus import generate_proteus_problem_file
    generate_proteus_problem_file(system, "ShallowWater")
def test_very_nonlinear_burgers():
    ambient_dim = 2

    p = 1
    q = 2
    r = 2

    u = sym.Field("u")

    B = np.array([1.0, 2.0])

    Adiff = 0.001
    C = 0.0001

    eqns = sym.join(
            sym.d_dt(u**p)
            + sym.div(B * u**q)
            - sym.div(Adiff * sym.grad(u**r))
            + C * u
            )

    print(sym.pretty(eqns))

    print(generate_proteus_problem_file(
            PDESystem(
                ambient_dim=ambient_dim,
                pde_system=eqns,
                unknowns=[u],
                ),
            "Burgers"))
Exemple #3
0
 def dump_1d(title, thing):
     mystr = 'Nonzero %s terms\n-----------------------\n' % (title,)
     for i, m in enumerate(thing):
         if m:
             mystr += "%10d: %s\n" % (i, sym.pretty(m))
     mystr += '\n'
     return mystr
def test_advection():
    u = sym.Field("u")

    eqns = sym.join(sym.d_dt(u) + sym.d_dx(u))

    print(sym.pretty(eqns))

    print(generate_proteus_problem_file(
            PDESystem(
                ambient_dim=1,
                pde_system=eqns,
                unknowns=[u],
                ),
            "Advection"))
Exemple #5
0
    def __str__(self):
        import ibvp.sym as sym

        def dump_1d(title, thing):
            mystr = 'Nonzero %s terms\n-----------------------\n' % (title,)
            for i, m in enumerate(thing):
                if m:
                    mystr += "%10d: %s\n" % (i, sym.pretty(m))
            mystr += '\n'
            return mystr

        mystr = dump_1d("Mass", self.mass)
        mystr += 'Nonzero Advection terms\n-----------------------\n'
        for i, bi in enumerate(self.advection):
            for j, bij in enumerate(bi):
                if bij:
                    mystr += "%5d%5d: %s\n" % (i, j, sym.pretty(bij))
        mystr += '\n'

        mystr += 'Nonzero Diffusion coefficients\n-------------------------\n'
        for i, ai in enumerate(self.diffusion):
            for j, aij in enumerate(ai):
                for k, aijk in enumerate(aij):
                    for ell, aijkell in enumerate(aijk):
                        if aijkell:
                            mystr += ("%5d%5d%5d%5d: %s\n"
                                    % (i, j, k, ell, sym.pretty(aijkell)))

        mystr += '\n'

        mystr += dump_1d("Potential", self.potential)

        mystr += dump_1d("Reaction", self.reaction)
        mystr += dump_1d("Hamiltonian", self.hamiltonian)

        return mystr
def test_heat():
    ambient_dim = 2

    u = sym.Field("u")

    eqns = sym.join(
            sym.d_dt(u)
            - sym.div(sym.grad(u))
            )

    print(sym.pretty(eqns))

    generate_proteus_problem_file(
            PDESystem(
                ambient_dim=ambient_dim,
                pde_system=eqns,
                unknowns=[u],
                ),
            "Heat")
def test_parabolic_system():
    ambient_dim = 2

    u = sym.Field("u")
    v = sym.Field("v")

    eqns = sym.join(
            sym.d_dt(u) - sym.div(sym.grad(u-v)),
            sym.d_dt(v) - sym.div(sym.grad(u+v)),
            )

    print(sym.pretty(eqns))

    generate_proteus_problem_file(
            PDESystem(
                ambient_dim=ambient_dim,
                pde_system=eqns,
                unknowns=[u, v],
                ),
            "ParabolicSystem")
def test_burgers():
    ambient_dim = 2

    u = sym.Field("u")

    vec = np.array([1.0, 2.0])

    eqns = sym.join(
            sym.d_dt(u)
            + sym.div(vec * u**2)
            - sym.div(sym.grad(u))
            )

    print(sym.pretty(eqns))

    generate_proteus_problem_file(
            PDESystem(
                ambient_dim=ambient_dim,
                pde_system=eqns,
                unknowns=[u],
                ),
            "Burgers")
def test_wave():
    dim = 3
    u = sym.Field("u")
    f = sym.Field("f")
    c = sym.Parameter("c")
    v = sym.VectorField("v")

    eqns = sym.join(
            sym.d_dt(u)
            + c * sym.div(v) - f,

            sym.d_dt(v)
            + c * sym.grad(u)
            )

    print(sym.pretty(eqns))

    generate_proteus_problem_file(
            PDESystem(
                ambient_dim=dim,
                pde_system=eqns,
                unknowns=[u, v],
                ),
            "Wave")