Ejemplo n.º 1
0
def test_discrete_problem2():
    n1 = Node(0)
    n2 = Node(1)
    n3 = Node(2)
    n4 = Node(3)
    e1 = Element(n1, n2, order=1)
    e2 = Element(n2, n3, order=1)
    e3 = Element(n3, n4, order=1)
    nodes = (n1, n2, n3, n4)
    elements = (e1, e2, e3)
    m1 = Mesh(nodes, elements)
    m1.set_bc(left=True, value=1)

    d = DiscreteProblem(meshes=[m1])
    def F(i, Y, t):
        if i == 0:
            return -Y[0]
        raise ValueError("Wrong i (i=%d)." % (i))
    def DFDY(i, j, Y, t):
        if i == 0 and j == 0:
            return -1
        raise ValueError("Wrong i, j (i=%d, j=%d)." % (i, j))
    d.define_ode(F, DFDY)
    d.assign_dofs()
    Y = zeros((d.ndofs,))
    J = d.assemble_J(Y)
    F = d.assemble_F()
    x = d.solve(J, F)
Ejemplo n.º 2
0
def _test_discrete_problem1():
    n1 = Node(0)
    n2 = Node(1)
    n3 = Node(2)
    n4 = Node(3)
    e1 = Element(n1, n2, order=1)
    e2 = Element(n2, n3, order=1)
    e3 = Element(n3, n4, order=1)
    nodes = (n1, n2, n3, n4)
    elements = (e1, e2, e3)
    m1 = Mesh(nodes, elements)
    m1.set_bc(left=True, value=0)
    e4 = Element(n1, n2, order=1)
    e5 = Element(n2, n3, order=1)
    e6 = Element(n3, n4, order=1)
    elements = (e4, e5, e6)
    m2 = Mesh(nodes, elements)
    m2.set_bc(left=True, value=1)

    d = DiscreteProblem(meshes=[m1, m2])
    def F(i, Y, t):
        if i == 0:
            return Y[1]
        elif i == 1:
            k = 2.0
            return -k**2 * Y[0]
        raise ValueError("Wrong i (i=%d)." % (i))
    def DFDY(i, j, Y, t):
        k = 2.0
        if i == 0 and j == 0:
            return 0.
        elif i == 0 and j == 1:
            return 1.
        elif i == 1 and j == 0:
            return -k**2
        elif i == 1 and j == 1:
            return 0.
        raise ValueError("Wrong i, j (i=%d, j=%d)." % (i, j))
    d.set_rhs(F, DFDY)
    d.assign_dofs()
    J = d.assemble_J()
    F = d.assemble_F()
    x = d.solve(J, F)
Ejemplo n.º 3
0
    elif i == 0 and j == 1:
        return 1
    elif i == 1 and j == 0:
        return 0
    elif i == 1 and j == 1:
        return 1
    raise ValueError("Wrong i, j (i=%d, j=%d)." % (i, j))
d.define_ode(F, DFDY)
d.assign_dofs()
Y = zeros(d.ndofs)
J = d.assemble_J(Y)
error = 1e10
i = 0
while error > 1e-10:
    F = d.assemble_F(Y)
    dY = d.solve(J, F)
    error = d.calculate_error_l2_norm(dY)
    print "it=%d, l2_norm=%e" % (i, error)
    Y += dY
    i += 1
x = Y

from pylab import plot, legend, show
sln1, sln2 = d.linearize(x, 5)
x1, y1 = sln1
x2, y2 = sln2
plot(x1, y1, label="$u_1$")
plot(x2, y2, label="$u_2$")
legend()
show()