Exemple #1
0
def test_latex_2d_3():
    DIM = 2

    domain = Domain('Omega', dim=DIM)

    B1 = Boundary(r'\Gamma_1', domain)
    B2 = Boundary(r'\Gamma_2', domain)
    B3 = Boundary(r'\Gamma_3', domain)

    V = ScalarFunctionSpace('V', domain)

    x = V.coordinates

    v = element_of(V, name='v')
    u = element_of(V, name='u')

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    # ...
    expr = dot(grad(v), grad(u))
    a_0 = BilinearForm((v, u), int_0(expr))

    expr = v * u
    a_bnd = BilinearForm((v, u), int_1(expr))

    expr = a_0(v, u) + a_bnd(v, u)
    a = BilinearForm((v, u), expr)
    print(latex(a_0))
    print(latex(a_bnd))
    print(latex(a))
    #    print(a)
    print('')
Exemple #2
0
def test_boundary_2d_2():
    Omega_1 = InteriorDomain('Omega_1', dim=2)

    B1 = Boundary('B1', Omega_1)
    B2 = Boundary('B2', Omega_1)
    B3 = Boundary('B3', Omega_1)

    domain = Domain('Omega', interiors=[Omega_1], boundaries=[B1, B2, B3])

    V = FunctionSpace('V', domain)
    v = TestFunction(V, name='v')
    u = TestFunction(V, name='u')

    x, y = V.coordinates

    alpha = Constant('alpha')

    # ...
    print('==== l0 ====')
    l0 = LinearForm(v, x * y * v, name='l0')

    print(evaluate(l0, verbose=VERBOSE))
    print('')
    # ...

    # ...
    print('==== l1 ====')
    g = Tuple(x**2, y**2)
    l1 = LinearForm(v, v * trace_1(g, domain.boundary))

    print(evaluate(l1, verbose=VERBOSE))
    print('')
    # ...

    # ...
    print('==== l2 ====')
    B_neumann = Union(B1, B2)
    g = Tuple(x**2, y**2)
    l2 = LinearForm(v, v * trace_1(g, B_neumann), name='l2')

    print(evaluate(l2, verbose=VERBOSE))
    print('')
    # ...

    # ...
    print('==== l3 ====')
    l3 = LinearForm(v, l2(v))

    assert (l3(v).__str__ == l2(v).__str__)

    print(evaluate(l3, verbose=VERBOSE))
    print('')
    # ...

    # ...
    print('==== l4 ====')
    l4 = LinearForm(v, l0(v) + l2(v))

    print(evaluate(l4, verbose=VERBOSE))
    print('')
def test_boundary_3():
    Omega_1 = InteriorDomain('Omega_1', dim=2)

    Gamma_1 = Boundary(r'\Gamma_1', Omega_1, axis=0, ext=-1)
    Gamma_4 = Boundary(r'\Gamma_4', Omega_1, axis=1, ext=1)

    Omega = Domain('Omega',
                   interiors=[Omega_1],
                   boundaries=[Gamma_1, Gamma_4])

    assert(Omega.get_boundary(axis=0, ext=-1) == Gamma_1)
    assert(Omega.get_boundary(axis=1, ext=1) == Gamma_4)
def test_boundary_1():
    Omega_1 = InteriorDomain('Omega_1', dim=2)

    Gamma_1 = Boundary('Gamma_1', Omega_1)
    Gamma_2 = Boundary('Gamma_2', Omega_1)

    Omega = Domain('Omega',
                   interiors=[Omega_1],
                   boundaries=[Gamma_1, Gamma_2])

    assert(Omega.boundary == Union(Gamma_1, Gamma_2))
    assert(Omega.boundary.complement(Gamma_1) == Gamma_2)
    assert(Omega.boundary - Gamma_1 == Gamma_2)
Exemple #5
0
    def two_patches():

        from sympde.topology import InteriorDomain
        from sympde.topology import Connectivity, Interface

        A = Square('A')
        B = Square('B')

        A = A.interior
        B = B.interior

        connectivity = Connectivity()

        bnd_A_1 = Boundary(r'\Gamma_1', A, axis=0, ext=-1)
        bnd_A_2 = Boundary(r'\Gamma_2', A, axis=0, ext=1)
        bnd_A_3 = Boundary(r'\Gamma_3', A, axis=1, ext=-1)
        bnd_A_4 = Boundary(r'\Gamma_4', A, axis=1, ext=1)

        bnd_B_1 = Boundary(r'\Gamma_1', B, axis=0, ext=-1)
        bnd_B_2 = Boundary(r'\Gamma_2', B, axis=0, ext=1)
        bnd_B_3 = Boundary(r'\Gamma_3', B, axis=1, ext=-1)
        bnd_B_4 = Boundary(r'\Gamma_4', B, axis=1, ext=1)

        connectivity['I'] = Interface('I', bnd_A_2, bnd_B_1)

        Omega = Domain('Omega',
                       interiors=[A, B],
                       boundaries=[
                           bnd_A_1, bnd_A_2, bnd_A_3, bnd_A_4, bnd_B_1,
                           bnd_B_2, bnd_B_3, bnd_B_4
                       ],
                       connectivity=connectivity)

        return Omega
def test_domain_1():
    Omega_1 = InteriorDomain('Omega_1', dim=2)
    Omega_2 = InteriorDomain('Omega_2', dim=2)

    Gamma_1 = Boundary('Gamma_1', Omega_1)
    Gamma_2 = Boundary('Gamma_2', Omega_2)
    Gamma_3 = Boundary('Gamma_3', Omega_2)

    Omega = Domain('Omega',
                   interiors=[Omega_1, Omega_2],
                   boundaries=[Gamma_1, Gamma_2, Gamma_3])

    assert( Omega.dim == 2 )
    assert( len(Omega.interior) == 2 )
    assert( len(Omega.boundary) == 3 )
Exemple #7
0
def test_bilinear_form_2d_4():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = VectorFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)
    # ...
    a = BilinearForm((u, v), int_0(dot(u, v)))
    assert (a.is_symmetric)
    # ...

    # ...
    a = BilinearForm((u, v), int_0(inner(grad(u), grad(v))))
    assert (a.is_symmetric)
Exemple #8
0
def test_linearize_form_2d_4():
    domain = Domain('Omega', dim=2)
    Gamma_N = Boundary(r'\Gamma_N', domain)

    x, y = domain.coordinates

    V = ScalarFunctionSpace('V', domain)

    v = element_of(V, name='v')
    u = element_of(V, name='u')
    du = element_of(V, name='du')

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(Gamma_N, expr)

    #    g = Matrix((cos(pi*x)*sin(pi*y),
    #              sin(pi*x)*cos(pi*y)))

    expr = dot(grad(v), grad(u)) - 4. * exp(-u) * v  # + v*trace_1(g, Gamma_N)

    l = LinearForm(v, int_0(expr))

    # linearising l around u, using du
    a = linearize(l, u, trials=du)

    assert a(du, v) == int_0(dot(grad(v), grad(du)) + 4. * exp(-u) * du * v)
Exemple #9
0
def test_newton_2d_1():

    # ... abstract model
    B1 = Boundary(r'\Gamma_1', domain)

    V = ScalarFunctionSpace('V', domain)

    x, y = domain.coordinates

    Un = element_of(V, name='Un')
    v = element_of(V, name='v')

    int_0 = lambda expr: integral(domain, expr)

    f = -4. * exp(-Un)
    l = LinearForm(v, int_0(dot(grad(v), grad(Un)) - f * v))

    u = element_of(V, name='u')
    eq = NewtonIteration(l, Un, trials=u)
    # ...

    # ...
    expected = int_0(-4.0 * u * v * exp(-Un) + dot(grad(u), grad(v)))

    assert (eq.lhs.expr == expected)
    # ...

    # ...
    bc = EssentialBC(u, 0, B1)
    eq = NewtonIteration(l, Un, bc=bc, trials=u)
def test_tensorize_2d_1_mapping():

    DIM = 2

    M = Mapping('Map', DIM)

    domain = Domain('Omega', dim=DIM)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = ScalarFunctionSpace('V', domain)
    u, v = elements_of(V, names='u, v')

    int_0 = lambda expr: integral(domain, expr)
    # ...
    #    a = BilinearForm((u,v), u*v)
    #    a = BilinearForm((u,v), mu*u*v + dot(grad(u),grad(v)))
    a = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    #    a = BilinearForm((u,v), dx(u)*v)
    #    a = BilinearForm((u,v), laplace(u)*laplace(v))

    expr = TensorExpr(a, mapping=M)
    print(expr)
Exemple #11
0
def test_terminal_expr_linear_2d_2():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = VectorFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    g = Matrix((x, y))
    l = LinearForm(v, int_0(dot(g, v)))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    g = Matrix((x, y))
    l = LinearForm(v, int_0(dot(g, v) + div(v)))
    print(TerminalExpr(l))
    print('')
Exemple #12
0
def test_equation_2d_4():

    V = VectorFunctionSpace('V', domain)

    v = element_of(V, name='v')
    u = element_of(V, name='u')
    x, y = domain.coordinates

    B1 = Boundary(r'\Gamma_1', domain)

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    # ... bilinear/linear forms
    a1 = BilinearForm((v, u), int_0(inner(grad(v), grad(u))))

    f = Tuple(x * y, sin(pi * x) * sin(pi * y))
    l1 = LinearForm(v, int_0(dot(f, v)))
    # ...

    # ...
    bc = EssentialBC(u, 0, B1)
    eq = Equation(a1, l1, tests=v, trials=u, bc=bc)
    # ...

    # ...
    bc = EssentialBC(u[0], 0, B1)
    eq = Equation(a1, l1, tests=v, trials=u, bc=bc)
    # ...

    # ...
    nn = NormalVector('nn')
    bc = EssentialBC(dot(u, nn), 0, B1)
    eq = Equation(a1, l1, tests=v, trials=u, bc=bc)
Exemple #13
0
def test_terminal_expr_bilinear_2d_2():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    nn = NormalVector('nn')

    V = VectorFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    a = BilinearForm((u, v), int_0(dot(u, v)))
    print(TerminalExpr(a))
    print('')

    # ...
    a = BilinearForm((u, v), int_0(inner(grad(u), grad(v))))
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a = BilinearForm((u, v), int_0(dot(u, v) + inner(grad(u), grad(v))))
    print(TerminalExpr(a))
    print('')
Exemple #14
0
def test_equation_2d_3():

    V = ScalarFunctionSpace('V', domain)

    v = element_of(V, name='v')
    u = element_of(V, name='u')

    x, y = domain.coordinates

    B1 = Boundary(r'\Gamma_1', domain)

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    # ... bilinear/linear forms
    a1 = BilinearForm((v, u), int_0(dot(grad(v), grad(u))))
    a2 = BilinearForm((v, u), int_0(v * u))

    l1 = LinearForm(v, int_0(x * y * v))
    l2 = LinearForm(v, int_0(cos(x + y) * v))
    # ...

    # ...
    bc = EssentialBC(u, 0, B1)
    eq = Equation(a1, l1, tests=v, trials=u, bc=bc)
    # ...

    # ...
    nn = NormalVector('nn')
    bc = EssentialBC(dot(grad(u), nn), 0, B1)
    eq = Equation(a1, l1, tests=v, trials=u, bc=bc)
Exemple #15
0
def test_evaluation_2d_1():
    domain = Domain('Omega', dim=2)
    B_neumann = Boundary(r'\Gamma_1', domain)

    V = FunctionSpace('V', domain)
    W = VectorFunctionSpace('W', domain)

    p, q = [TestFunction(V, name=i) for i in ['p', 'q']]
    u, v = [VectorTestFunction(W, name=i) for i in ['u', 'v']]

    alpha = Constant('alpha')

    x, y = V.coordinates
    F = Field('F', space=V)

    a1 = BilinearForm((p, q), dot(grad(p), grad(q)))
    m = BilinearForm((p, q), p * q)
    a2 = BilinearForm((p, q), a1(p, q) + alpha * m(p, q))
    a3 = BilinearForm((u, v), rot(u) * rot(v) + alpha * div(u) * div(v))

    a11 = BilinearForm((v, u), inner(grad(v), grad(u)))
    a12 = BilinearForm((v, p), div(v) * p)
    a4 = BilinearForm(((v, q), (u, p)), a11(v, u) - a12(v, p) + a12(u, q))

    l0 = LinearForm(p, F * p)
    l_neu = LinearForm(p, p * trace_1(grad(F), B_neumann))
    l = LinearForm(p, l0(p) + l_neu(p))

    # ...
    print(a1)
    print(evaluate(a1))
    print('')
    # ...

    # ...
    print(a2)
    print(evaluate(a2))
    print('')
    # ...

    # ...
    print(a3)
    print(evaluate(a3))
    print('')
    # ...

    # ...
    print(a4)
    print(evaluate(a4))
    print('')
    # ...

    # ...
    print(l)
    print(evaluate(l))
    print('')
Exemple #16
0
def test_essential_bc_1():
    domain = Domain('Omega', dim=2)

    V = ScalarFunctionSpace('V', domain)
    W = VectorFunctionSpace('W', domain)

    v = element_of(V, name='v')
    w = element_of(W, name='w')

    B1 = Boundary(r'\Gamma_1', domain)
    nn = NormalVector('nn')

    # ... scalar case
    bc = EssentialBC(v, 0, B1)

    assert (bc.variable == v)
    assert (bc.order == 0)
    assert (bc.normal_component == False)
    assert (bc.index_component == None)
    # ...

    # ... scalar case
    bc = EssentialBC(dot(grad(v), nn), 0, B1)

    assert (bc.variable == v)
    assert (bc.order == 1)
    assert (bc.normal_component == False)
    assert (bc.index_component == None)
    # ...

    # ... vector case
    bc = EssentialBC(w, 0, B1)
    assert (bc.variable == w)
    assert (bc.order == 0)
    assert (bc.normal_component == False)
    assert (bc.index_component == [0, 1])
    # ...

    # ... vector case
    bc = EssentialBC(dot(w, nn), 0, B1)

    assert (bc.variable == w)
    assert (bc.order == 0)
    assert (bc.normal_component == True)
    assert (bc.index_component == None)
    # ...

    # ... vector case
    bc = EssentialBC(w[0], 0, B1)
    assert (bc.variable == w)
    assert (bc.order == 0)
    assert (bc.normal_component == False)
    assert (bc.index_component == [0])
def test_topology_1():
    # ... create a domain with 2 subdomains A and B
    A = InteriorDomain('A', dim=2)
    B = InteriorDomain('B', dim=2)

    connectivity = Connectivity()

    bnd_A_1 = Boundary('Gamma_1', A)
    bnd_A_2 = Boundary('Gamma_2', A)
    bnd_A_3 = Boundary('Gamma_3', A)

    bnd_B_1 = Boundary('Gamma_1', B)
    bnd_B_2 = Boundary('Gamma_2', B)
    bnd_B_3 = Boundary('Gamma_3', B)

    connectivity['I'] = (bnd_A_1, bnd_B_2)

    Omega = Domain('Omega',
                   interiors=[A, B],
                   boundaries=[bnd_A_2, bnd_A_3, bnd_B_1, bnd_B_3],
                   connectivity=connectivity)

    interfaces = Omega.interfaces
    assert(isinstance(interfaces, Interface))

    # export
    Omega.export('omega.h5')
    # ...

    # read it again and check that it has the same description as Omega
    D = Domain.from_file('omega.h5')
    assert( D.todict() == Omega.todict() )
Exemple #18
0
def test_bilinear_form_2d_2():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = VectorFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    a = BilinearForm((u, v), int_0(dot(u, v)))

    assert (a.domain == domain.interior)
    assert (a(u1, v1) == int_0(dot(u1, v1)))
    # ...

    # ...
    a = BilinearForm((u, v), int_0(dot(u, v) + inner(grad(u), grad(v))))

    assert (a.domain == domain.interior)
    assert (a(u1, v1) == int_0(dot(u1, v1)) + int_0(inner(grad(u1), grad(v1))))
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(dot(u1, v1)))
    a = BilinearForm((u, v), a1(u, v))

    assert (a.domain == domain.interior)
    assert (a(u2, v2) == int_0(dot(u2, v2)))
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(dot(u1, v1)))
    a2 = BilinearForm((u2, v2), int_0(inner(grad(u2), grad(v2))))
    a = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v))

    assert (a.domain == domain.interior)
    assert (a(u,
              v) == int_0(dot(u, v)) + int_0(kappa * inner(grad(u), grad(v))))
Exemple #19
0
def test_bilinear_form_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    eps = Constant('eps', real=True)

    V = FunctionSpace('V', domain)

    u, u1, u2 = [TestFunction(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [TestFunction(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    d_forms = {}

    d_forms['a1'] = BilinearForm((u, v), u * v)
    d_forms['a2'] = BilinearForm((u, v), u * v + dot(grad(u), grad(v)))
    d_forms['a3'] = BilinearForm((u, v), v * trace_1(grad(u), B1))

    # Poisson with Nitsch method
    a0 = BilinearForm((u, v), dot(grad(u), grad(v)))
    a_B1 = BilinearForm(
        (u, v), -kappa * u * trace_1(grad(v), B1) - v * trace_1(grad(u), B1) +
        trace_0(u, B1) * trace_0(v, B1) / eps)
    a = BilinearForm((u, v), a0(u, v) + a_B1(u, v))

    d_forms['a4'] = a
    # ...

    # ... calls
    d_calls = {}
    for name, a in d_forms.items():
        d_calls[name] = a(u1, v1)
    # ...

    # ... export forms
    for name, expr in d_forms.items():
        export(expr, 'biform_2d_{}.png'.format(name))
    # ...

    # ... export calls
    for name, expr in d_calls.items():
        export(expr, 'biform_2d_call_{}.png'.format(name))
Exemple #20
0
def test_linear_form_2d_2():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = VectorFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    g = Matrix((x, y))
    l = LinearForm(v, int_0(dot(g, v)))

    assert (l.domain == domain.interior)
    assert (l(v1) == int_0(dot(g, v1)))
    # ...

    # ...
    g = Matrix((x, y))
    l1 = LinearForm(v1, int_0(dot(g, v1)))
    l = LinearForm(v, l1(v))

    assert (l.domain == domain.interior)
    assert (l(u1) == int_0(dot(g, u1)))
    # ...

    # ...
    g1 = Matrix((x, 0))
    g2 = Matrix((0, y))
    l1 = LinearForm(v1, int_0(dot(v1, g1)))
    l2 = LinearForm(v2, int_0(dot(v2, g2)))

    l = LinearForm(v, l1(v) + l2(v))

    assert (l.domain == domain.interior)
    assert (l(u) == int_0(dot(u, g1)) + int_0(dot(u, g2)))
def test_tensorize_2d_2():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)

    V = VectorFunctionSpace('V', domain)
    u, v = elements_of(V, names='u, v')

    int_0 = lambda expr: integral(domain, expr)
    # ...
    #    a = BilinearForm((u,v), dot(u,v))
    a = BilinearForm((u, v), int_0(curl(u) * curl(v) + div(u) * div(v)))

    expr = TensorExpr(a)
    print(expr)
Exemple #22
0
def test_linear_form_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    eps = Constant('eps', real=True)

    V = FunctionSpace('V', domain)

    u, u1, u2 = [TestFunction(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [TestFunction(V, name=i) for i in ['v', 'v1', 'v2']]

    g = Tuple(x**2, y**2)

    # ...
    d_forms = {}

    d_forms['l1'] = LinearForm(v, x * y * v)
    d_forms['l2'] = LinearForm(v, v * trace_1(g, B1))
    d_forms['l3'] = LinearForm(v, v * trace_1(g, B1) + x * y * v)

    # nitsche
    f = Function('f')
    g = Function('g')

    l0 = LinearForm(v, f(x, y) * v)
    l_B1 = LinearForm(
        v,
        g(x, y) * trace_0(v, B1) / eps -
        kappa * g(x, y) * trace_1(grad(v), B1))

    d_forms['l4'] = LinearForm(v, l0(v) + l_B1(v))
    # ...

    # ...
    for name, expr in d_forms.items():
        export(expr, 'linform_2d_{}.png'.format(name))
Exemple #23
0
def test_linear_form_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)
    W = VectorFunctionSpace('W', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]
    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    l = LinearForm(v, int_0(x * y * v))

    assert (l.domain == domain.interior)
    assert (l(v1) == int_0(x * y * v1))
    # ...

    # ...
    g = Tuple(x**2, y**2)
    l = LinearForm(v, int_1(v * dot(g, nn)))
    print(l)

    assert (l.domain == B1)
    assert (l(v1) == int_1(v1 * trace_1(g, B1)))
    # ...

    # ...
    g = Tuple(x**2, y**2)
    l = LinearForm(v, int_1(v * dot(g, nn)) + int_0(x * y * v))

    assert (len(l.domain.args) == 2)
    for i in l.domain.args:
        assert (i in [domain.interior, B1])

    assert (l(v1) == int_1(v1 * trace_1(g, B1)) + int_0(x * y * v1))
    # ...

    # ...
    l1 = LinearForm(v1, int_0(x * y * v1))
    l = LinearForm(v, l1(v))

    assert (l.domain == domain.interior)
    assert (l(u1) == int_0(x * y * u1))
    # ...

    # ...
    g = Tuple(x, y)
    l1 = LinearForm(u1, int_0(x * y * u1))
    l2 = LinearForm(u2, int_0(dot(grad(u2), g)))

    l = LinearForm(v, l1(v) + l2(v))

    assert (l.domain == domain.interior)
    assert (l(v1) == int_0(x * y * v1) + int_0(dot(grad(v1), g)))
    # ...

    # ...
    pn, wn = [element_of(V, name=i) for i in ['pn', 'wn']]

    tau = element_of(V, name='tau')
    sigma = element_of(V, name='sigma')

    Re = Constant('Re', real=True)
    dt = Constant('dt', real=True)
    alpha = Constant('alpha', real=True)

    l1 = LinearForm(
        tau, int_0(bracket(pn, wn) * tau - 1. / Re * dot(grad(tau), grad(wn))))

    l = LinearForm((tau, sigma), dt * l1(tau))

    assert (l.domain == domain.interior)
    assert (l(u1,
              u2).expand() == int_0(-1.0 * dt * dot(grad(u1), grad(wn)) / Re) +
            int_0(dt * u1 * bracket(pn, wn)))
Exemple #24
0
def test_linearity_linear_form_2d_1():

    from sympde.expr.errors import UnconsistentLinearExpressionError

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)
    W = VectorFunctionSpace('W', domain)

    v, v1, v2 = elements_of(V, names='v, v1, v2')
    w = element_of(W, name='w')

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    # The following integral expressions are linear, hence it must be possible
    # to create LinearForm objects from them

    _ = LinearForm(v, int_0(x * y * v))
    _ = LinearForm(v, int_0(x * y * v + v))

    g = Matrix((x**2, y**2))
    _ = LinearForm(v, int_0(v * dot(g, nn)))

    g = Matrix((x**2, y**2))
    _ = LinearForm(v, int_1(v * dot(g, nn)) + int_0(x * y * v))

    l1 = LinearForm(v1, int_0(x * y * v1))
    _ = LinearForm(v, l1(v))

    g = Matrix((x, y))
    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v2, int_0(dot(grad(v2), g)))
    _ = LinearForm(v, l1(v) + l2(v))

    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v1, int_0(v1))
    _ = LinearForm(v, l1(v) + kappa * l2(v))

    g = Matrix((x**2, y**2))
    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v1, int_0(v1))
    l3 = LinearForm(v, int_1(v * dot(g, nn)))
    _ = LinearForm(v, l1(v) + kappa * l2(v) + mu * l3(v))

    l1 = LinearForm(w, int_0(5 * w * x))
    l2 = LinearForm(w, int_1(w * y))
    _ = LinearForm(w, l1(w) + kappa * l2(w))

    l0 = LinearForm(v, int_0(x * y * v))
    l1 = LinearForm(w, int_0(w[0] * y))
    l2 = LinearForm(w, int_1(w[1] * x))
    l3 = LinearForm(w, kappa * l1(w) + mu * l2(w))
    _ = LinearForm((v, w), l0(v) + l3(w))

    # The following integral expressions are not linear, hence LinearForm must
    # raise an exception

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm(v, int_0(x * y * v + 1))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm(v, int_0(x * v**2))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm(v, int_0(x * y * v) + int_1(v * exp(v)))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm(w, int_0(w * w))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm(w, int_0(w[0] * w[1]))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = LinearForm((v, w), int_0(x * w[0]) + int_1(v * w[1]))
Exemple #25
0
def test_terminal_expr_linear_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    l = LinearForm(v, int_0(x * y * v))

    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    l = LinearForm(v, int_0(x * y * v + v))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    g = Matrix((x**2, y**2))
    l = LinearForm(v, int_1(v * dot(g, nn)))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    g = Matrix((x**2, y**2))
    l = LinearForm(v, int_1(v * dot(g, nn)) + int_0(x * y * v))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    l1 = LinearForm(v1, int_0(x * y * v1))
    l = LinearForm(v, l1(v))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    g = Matrix((x, y))
    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v2, int_0(dot(grad(v2), g)))

    l = LinearForm(v, l1(v) + l2(v))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v1, int_0(v1))
    l = LinearForm(v, l1(v) + kappa * l2(v))
    print(TerminalExpr(l))
    print('')
    # ...

    # ...
    g = Matrix((x**2, y**2))
    l1 = LinearForm(v1, int_0(x * y * v1))
    l2 = LinearForm(v1, int_0(v1))
    l3 = LinearForm(v, int_1(v * dot(g, nn)))
    l = LinearForm(v, l1(v) + kappa * l2(v) + mu * l3(v))
    print(TerminalExpr(l))
    print('')
Exemple #26
0
def test_linearity_bilinear_form_2d_1():

    from sympde.expr.errors import UnconsistentLinearExpressionError

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    eps = Constant('eps', real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)

    u, u1, u2 = elements_of(V, names='u, u1, u2')
    v, v1, v2 = elements_of(V, names='v, v1, v2')

    # ...

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    # The following integral expressions are bilinear, hence it must be possible
    # to create BilinearForm objects from them

    _ = BilinearForm((u, v), int_0(u * v))
    _ = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    _ = BilinearForm((u, v), int_0(u * v + dot(grad(u), grad(v))))
    _ = BilinearForm(
        (u, v),
        int_0(u * v + dot(grad(u), grad(v))) + int_1(v * dot(grad(u), nn)))
    _ = BilinearForm(((u1, u2), (v1, v2)), int_0(u1 * v1 + u2 * v2))

    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    _ = BilinearForm((u, v), a1(u, v))

    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    _ = BilinearForm((u, v), a1(u, v) + a2(u, v))

    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    _ = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v))

    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    a3 = BilinearForm((u, v), int_1(v * dot(grad(u), nn)))
    _ = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v) + mu * a3(u, v))

    # ... Poisson with Nitsch method
    a0 = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    a_B1 = BilinearForm((u, v),
                        int_1(-kappa * u * dot(grad(v), nn) -
                              v * dot(grad(u), nn) + u * v / eps))
    _ = BilinearForm((u, v), a0(u, v) + a_B1(u, v))
    # ...

    # The following integral expressions are not bilinear, hence BilinearForm must
    # raise an exception

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = BilinearForm((u, v), int_0(x * y * dot(grad(u), grad(v)) + 1))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = BilinearForm((u, v), int_0(x * dot(grad(u), grad(v**2))))

    with pytest.raises(UnconsistentLinearExpressionError):
        _ = BilinearForm((u, v), int_0(u * v) + int_1(v * exp(u)))
Exemple #27
0
def test_equation_2d_1():

    V = ScalarFunctionSpace('V', domain)
    U = ScalarFunctionSpace('U', domain)

    v = element_of(V, name='v')
    u = element_of(U, name='u')

    x, y = domain.coordinates

    alpha = Constant('alpha')
    kappa = Constant('kappa', real=True)
    eps = Constant('eps', real=True)
    nn = NormalVector('nn')

    B1 = Boundary(r'\Gamma_1', domain)
    B2 = Boundary(r'\Gamma_2', domain)
    B3 = Boundary(r'\Gamma_3', domain)

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)
    int_2 = lambda expr: integral(B2, expr)

    # ... bilinear/linear forms
    expr = dot(grad(v), grad(u))
    a1 = BilinearForm((v, u), int_0(expr))

    expr = v * u
    a2 = BilinearForm((v, u), int_0(expr))

    expr = v * u
    a_B1 = BilinearForm((v, u), int_1(expr))

    expr = x * y * v
    l1 = LinearForm(v, int_0(expr))

    expr = cos(x + y) * v
    l2 = LinearForm(v, int_0(expr))

    expr = x * y * v
    l_B2 = LinearForm(v, int_2(expr))
    # ...

    #    # ...
    #    with pytest.raises(UnconsistentLhsError):
    #        equation = Equation(a1, l1(v))
    #
    #    with pytest.raises(UnconsistentLhsError):
    #        equation = Equation(l1(v), l1(v))
    #
    #    with pytest.raises(UnconsistentLhsError):
    #        equation = Equation(a1(v,u) + alpha*a2(v,u), l1(v))
    #    # ...
    #
    #    # ...
    #    with pytest.raises(UnconsistentRhsError):
    #        equation = Equation(a1(v,u), l1)
    #
    #    with pytest.raises(UnconsistentRhsError):
    #        equation = Equation(a1(v,u), a1(v,u))
    #
    #    with pytest.raises(UnconsistentRhsError):
    #        equation = Equation(a1(v,u), l1(v) + l2(v))
    #    # ...

    # ...
    equation = Equation(a1, l1, tests=v, trials=u)
    # ...

    # ...
    a = BilinearForm((v, u), a1(v, u) + alpha * a2(v, u))
    equation = Equation(a, l1, tests=v, trials=u)
    # ...

    # ...
    a = BilinearForm((v, u), a1(v, u) + a_B1(v, u))
    equation = Equation(a, l1, tests=v, trials=u)
    # ...

    # ...
    a = BilinearForm((v, u), a1(v, u) + a_B1(v, u))
    l = LinearForm(v, l1(v) + l2(v))
    equation = Equation(a, l, tests=v, trials=u)
    # ...

    # ...
    a = BilinearForm((v, u), a1(v, u) + a_B1(v, u))
    l = LinearForm(v, l1(v) + alpha * l_B2(v))
    equation = Equation(a, l, tests=v, trials=u)
    # ...

    # ... using bc
    equation = Equation(a1, l1, tests=v, trials=u, bc=EssentialBC(u, 0, B1))
    # ...

    # ... Poisson with Nitsch method
    g = cos(pi * x) * cos(pi * y)
    a0 = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    a_B1 = BilinearForm((u, v), -int_1(kappa * u * dot(grad(v), nn) -
                                       v * dot(grad(u), nn) + u * v / eps))

    a = BilinearForm((u, v), a0(u, v) + a_B1(u, v))
    l = LinearForm(v, int_0(g * v / eps) - int_1(kappa * v * g))
    equation = Equation(a, l, tests=v, trials=u)
Exemple #28
0
def test_bilinear_form_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...
    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    a = BilinearForm((u, v), int_0(u * v))

    assert (a.domain == domain.interior)
    assert (a(u1, v1) == int_0(u1 * v1))
    # ...

    # ...
    a = BilinearForm((u, v), int_0(u * v + dot(grad(u), grad(v))))

    assert (a.domain == domain.interior)
    assert (a(u1, v1) == int_0(u1 * v1) + int_0(dot(grad(u1), grad(v1))))
    # ...

    # ...
    a = BilinearForm((u, v), int_1(v * dot(grad(u), nn)))

    assert (a.domain == B1)
    assert (a(u1, v1) == int_1(v1 * trace_1(grad(u1), B1)))
    # ...

    # ...
    a = BilinearForm((u, v), int_0(u * v) + int_1(v * dot(grad(u), nn)))

    # TODO a.domain are not ordered
    assert (len(a.domain.args) == 2)
    for i in a.domain.args:
        assert (i in [domain.interior, B1])

    assert (a(u1, v1) == int_0(u1 * v1) + int_1(v1 * trace_1(grad(u1), B1)))
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a = BilinearForm((u, v), a1(u, v))

    assert (a.domain == domain.interior)
    assert (a(u2, v2) == int_0(u2 * v2))
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    a = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v))

    assert (a.domain == domain.interior)
    assert (a(u, v) == int_0(u * v) + int_0(kappa * dot(grad(u), grad(v))))
Exemple #29
0
def test_terminal_expr_bilinear_2d_1():

    domain = Domain('Omega', dim=2)
    B1 = Boundary(r'\Gamma_1', domain)

    x, y = domain.coordinates

    kappa = Constant('kappa', is_real=True)
    mu = Constant('mu', is_real=True)
    eps = Constant('eps', real=True)
    nn = NormalVector('nn')

    V = ScalarFunctionSpace('V', domain)

    u, u1, u2 = [element_of(V, name=i) for i in ['u', 'u1', 'u2']]
    v, v1, v2 = [element_of(V, name=i) for i in ['v', 'v1', 'v2']]

    # ...

    int_0 = lambda expr: integral(domain, expr)
    int_1 = lambda expr: integral(B1, expr)

    a = BilinearForm((u, v), int_0(u * v))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a = BilinearForm((u, v), int_0(u * v + dot(grad(u), grad(v))))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a = BilinearForm(
        (u, v),
        int_0(u * v + dot(grad(u), grad(v))) + int_1(v * dot(grad(u), nn)))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a = BilinearForm(((u1, u2), (v1, v2)), int_0(u1 * v1 + u2 * v2))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a = BilinearForm((u, v), a1(u, v))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    a = BilinearForm((u, v), a1(u, v) + a2(u, v))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    a = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ...
    a1 = BilinearForm((u1, v1), int_0(u1 * v1))
    a2 = BilinearForm((u2, v2), int_0(dot(grad(u2), grad(v2))))
    a3 = BilinearForm((u, v), int_1(v * dot(grad(u), nn)))
    a = BilinearForm((u, v), a1(u, v) + kappa * a2(u, v) + mu * a3(u, v))
    print(a)
    print(TerminalExpr(a))
    print('')
    # ...

    # ... Poisson with Nitsch method
    a0 = BilinearForm((u, v), int_0(dot(grad(u), grad(v))))
    a_B1 = BilinearForm((u, v),
                        int_1(-kappa * u * dot(grad(v), nn) -
                              v * dot(grad(u), nn) + u * v / eps))
    a = BilinearForm((u, v), a0(u, v) + a_B1(u, v))
    print(a)
    print(TerminalExpr(a))
    print('')
Exemple #30
0
def test_find_2d_1():

    V = ScalarFunctionSpace('V', domain)
    U = ScalarFunctionSpace('U', domain)

    v = element_of(V, name='v')
    u = element_of(U, name='u')

    x,y = domain.coordinates

    alpha = Constant('alpha')
    kappa = Constant('kappa', real=True)
    eps   = Constant('eps', real=True)

    B1 = Boundary(r'\Gamma_1', domain)
    B2 = Boundary(r'\Gamma_2', domain)
    B3 = Boundary(r'\Gamma_3', domain)
    
    int_0 = lambda expr: integral(domain , expr)
    int_1 = lambda expr: integral(B1, expr)
    int_2 = lambda expr: integral(B2, expr)
    # ... bilinear/linear forms
    expr = dot(grad(v), grad(u))
    a1 = BilinearForm((v,u), int_0(expr))

    expr = v*u
    a2 = BilinearForm((v,u), int_0(expr))

    expr = v*u
    a_B1 = BilinearForm((v, u), int_1(expr))

    expr = x*y*v
    l1 = LinearForm(v, int_0(expr))

    expr = cos(x+y)*v
    l2 = LinearForm(v, int_0(expr))

    expr = x*y*v
    l_B2 = LinearForm(v, int_1(expr))
    # ...

    # ...
    equation = find(u, forall=v, lhs=a1(u,v), rhs=l1(v))
    # ...

    # ...
    a = BilinearForm((v,u), a1(v,u) + alpha*a2(v,u))
    equation = find(u, forall=v, lhs=a(u,v), rhs=l1(v))
    # ...

    # ...
    a = BilinearForm((v,u), a1(v,u) + a_B1(v,u))
    equation = find(u, forall=v, lhs=a(u,v), rhs=l1(v))
    # ...

    # ...
    a = BilinearForm((v,u), a1(v,u) + a_B1(v,u))
    l = LinearForm(v, l1(v) + l2(v))
    equation = find(u, forall=v, lhs=a(u,v), rhs=l(v))
    # ...

    # ...
    a = BilinearForm((v,u), a1(v,u) + a_B1(v,u))
    l = LinearForm(v, l1(v) + alpha*l_B2(v))
    equation = find(u, forall=v, lhs=a(u,v), rhs=l(v))
    # ...

    # ... using bc
    equation = find(u, forall=v, lhs=a(u,v), rhs=l(v), bc=EssentialBC(u, 0, B1))