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)
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)
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()