コード例 #1
0
ファイル: ifem.py プロジェクト: Tao2012/fem-with-python
def test_solve_system():
    from numerix import areclose, allclose
    sys.stdout.write('testing solve_system... ')
    sys.stdout.flush()

    n = 1000
    offset = 0
    xa, xb = 0., 1.
    nodes, vertices, elements, connect = simplemesh(xa, xb, n)

    A, E, P = 1., 100., 10.
    k = np.zeros(n)
    for (el, econn) in enumerate(connect):
        i, j = nodes.index(econn[0]), nodes.index(econn[1])
        k[el] = A * E / (vertices[j] - vertices[i])

    delta = .05
    bcs = [(nodes[0],'x', delta)]
    cfs = [(nodes[-1], 'x', P)]
    u, r = solve_system(nodes, vertices, elements, connect, k, bcs, cfs)

    # check the error
    K = A * E / (xb - xa)
    d = P / K + delta
    assert areclose(d, u[-1])
    assert areclose(P, -r[0])
    assert allclose(r[1:], 0.)
    sys.stdout.write('success\n')
コード例 #2
0
def test_funspace_2():
    '''Test of FunctionSpace.int_phi_phi made up of linear elements, basic
    integration

    '''
    ox, dx, nx = 0., 1., 1
    mesh = Mesh(type='uniform', lx=dx, nx=nx, block='B1')
    V = FunctionSpace(mesh, {'B1': Element(type='link2')})

    # basic properties
    assert V.num_dof == (nx + 1)
    assert V.size == nx
    X = np.linspace(ox, dx, nx+1)
    assert allclose(V.X, X)

    # Integrate[N(x) N(x) {x, 0, 1}]
    fun = lambda x: x
    f = lambda i, j: integrate(fun(x) * N[i] * N[j], (x, ox, dx))
    ans = V.int_phi_phi(fun=fun, derivative=(False, False))
    exact = Matrix(2, 2, lambda i, j: f(i,j))
    assert areclose(exact, ans)

    # Trivial check with coefficient
    fun = lambda x: 1.
    a1 = V.int_phi_phi()
    a2 = V.int_phi_phi(fun=fun)
    assert areclose(a1, a2)
コード例 #3
0
ファイル: ifem.py プロジェクト: nrua/books
def test_solve_system():
    from numerix import areclose, allclose
    sys.stdout.write('testing solve_system... ')
    sys.stdout.flush()

    n = 1000
    offset = 0
    xa, xb = 0., 1.
    nodes, vertices, elements, connect = simplemesh(xa, xb, n)

    A, E, P = 1., 100., 10.
    k = np.zeros(n)
    for (el, econn) in enumerate(connect):
        i, j = nodes.index(econn[0]), nodes.index(econn[1])
        k[el] = A * E / (vertices[j] - vertices[i])

    delta = .05
    bcs = [(nodes[0], 'x', delta)]
    cfs = [(nodes[-1], 'x', P)]
    u, r = solve_system(nodes, vertices, elements, connect, k, bcs, cfs)

    # check the error
    K = A * E / (xb - xa)
    d = P / K + delta
    assert areclose(d, u[-1])
    assert areclose(P, -r[0])
    assert allclose(r[1:], 0.)
    sys.stdout.write('success\n')
コード例 #4
0
def test_funspace_1():
    '''Test of FunctionSpace.int_phi made up of linear elements'''
    ox, dx, nx = 0., 10., 5
    mesh = Mesh(type='uniform', lx=dx, nx=nx, block='B1')
    V = FunctionSpace(mesh, {'B1': Element(type='link2')})

    # basic properties
    assert V.num_dof == (nx + 1)
    assert V.size == nx
    X = np.linspace(ox, dx, nx+1)
    assert allclose(V.X, X)

    # Integrate[1, {x, ox, lx}]
    f = lambda x: 1
    ans = np.sum(V.int_phi(f))
    exact = V.X[-1]
    assert areclose(ans, exact)

    # Integrate[x, {x, ox, lx}]
    f = lambda x: x
    ans = np.sum(V.int_phi(f))
    exact = V.X[-1] ** 2 / 2.
    assert areclose(ans, exact)

    # Integrate[x**2, {x, ox, lx}]
    f = lambda x: x * x
    ans = np.sum(V.int_phi(f))
    exact = V.X[-1] ** 3 / 3.
    assert areclose(ans, exact)

    # Integrate[x**3, {x, ox, lx}]
    f = lambda x: x * x * x
    ans = np.sum(V.int_phi(f))
    exact = V.X[-1] ** 4 / 4.
    assert areclose(ans, exact)

    # Integrate[x**4, {x, ox, lx}]
    f = lambda x: x * x * x * x
    ans = np.sum(V.int_phi(f))
    exact = V.X[-1] ** 5 / 5.
    assert areclose(ans, exact, tol=1.5)
コード例 #5
0
def test_solve_system():
    '''Test simple ifem solver'''
    n = 1000
    offset = 0
    xa, xb = 0., 1.
    nodes, vertices, elements, connect = simplemesh(xa, xb, n)

    A, E, P = 1., 100., 10.
    k = np.zeros(n)
    for (el, econn) in enumerate(connect):
        i, j = nodes.index(econn[0]), nodes.index(econn[1])
        k[el] = A * E / (vertices[j] - vertices[i])

    delta = .05
    bcs = [(nodes[0],'x', delta)]
    cfs = [(nodes[-1], 'x', P)]
    u, r = solve_system(nodes, vertices, elements, connect, k, bcs, cfs)

    # check the error
    K = A * E / (xb - xa)
    d = P / K + delta
    assert areclose(d, u[-1])
    assert areclose(P, -r[0])
    assert allclose(r[1:], 0.)