Example #1
0
def test_fenics_vector():
    mesh = UnitSquare(3, 3)
    fs1 = FunctionSpace(mesh, "CG", 2)
    fs2 = FunctionSpace(mesh, "DG", 1)
    ex1 = Expression("1.+x[0]*x[1]")
    ex2 = Expression("2.*x[0] - x[1]")
    ex3 = Expression("1. + 2.*x[0] - x[1] + x[0]*x[1]")
    f1 = interpolate(ex1, fs1)
    f2 = interpolate(ex2, fs1)
    f3 = interpolate(ex1, fs2)
    f4 = interpolate(ex1, fs1)
    f5 = interpolate(ex3, fs1)
    vec1 = FEniCSVector(f1)
    vec2 = FEniCSVector(f2)
    vec3 = FEniCSVector(f3)
    vec4 = FEniCSVector(f4)
    vec5 = FEniCSVector(f5)

    assert_true(vec1 == vec1)
    assert_false(vec1 == vec2)
    assert_false(vec1 == vec3)
    assert_true(vec1 == vec4)
    assert_false(vec1 != vec1)
    assert_true(vec1 != vec2)
    assert_true(vec1 != vec3)
    assert_false(vec1 != vec4)

    vec12 = vec1 + vec2
    vec12b = vec1 + vec2
    vec1m = -vec1
    vec1m3 = 3 * vec1
    vec21 = vec2 + vec1
    vec14 = vec1 - vec4

    assert_equal(vec12, vec21)
    assert_almost_equal(vec12.array(), vec5.array())
    assert_almost_equal(vec12.array(), vec12b.array())
    assert_equal(vec14.array(), np.zeros(vec12.coeffs.size()))
    assert_equal(vec1m.array(), -vec1.array())
    assert_equal(vec1m3.array(), 3 * vec1.array())

    assert_almost_equal(vec1.eval([0.8, 0.4]), 1.32)