Example #1
0
def test_combine_meshes_vertex_loc_type():
    m1 = simple_line_mesh(1)
    m2 = simple_line_mesh(1, (-2.0, 1.0), (0.0, 1.0))
    m3 = combine_meshes(m1, m2)
    assert(type(m1.vertices[0].loc) == np.ndarray)
    assert(type(m2.vertices[0].loc) == np.ndarray)
    assert(type(m3.vertices[0].loc) == np.ndarray)
Example #2
0
def test_equivalent_pairs():
    m1 = simple_line_mesh(1, (-1.0, 0.0), (0.0, 1.0))
    m2 = simple_line_mesh(1, (0.0, 1.0), (1.0, 0.0))
    m = combine_meshes(m1, m2)
    equivalent_pairs = m._find_equivalent_pairs(1e-6)
    assert(equivalent_pairs[0][0] == m.vertices[1])
    assert(equivalent_pairs[0][1] == m.vertices[2])
Example #3
0
def test_combine_meshes():
    m = simple_line_mesh(1)
    m2 = simple_line_mesh(1, (-2.0, 1.0), (0.0, 1.0))
    m3 = combine_meshes(m, m2)
    assert((m3.vertices[0].loc == (-1.0, 0.0)).all())
    assert((m3.vertices[1].loc == (1.0, 0.0)).all())
    assert((m3.vertices[2].loc == (-2.0, 1.0)).all())
    assert((m3.vertices[3].loc == (0.0, 1.0)).all())
    assert(m3.elements[1].vertex1 == m3.vertices[2])
    assert(m3.elements[1].vertex2 == m3.vertices[3])
Example #4
0
def test_multisegment_mesh():
    m1 = simple_line_mesh(1, (-1.0, 0.0), (0.0, 1.0))
    m2 = simple_line_mesh(1, (0.0, 1.0), (1.0, 0.0))
    m = combine_meshes(m1, m2, ensure_continuity = True)
    assert(m.elements[0].vertex1 == m.vertices[0])
    assert(m.elements[0].vertex2 == m.vertices[1])
    assert(m.elements[1].vertex1 == m.vertices[1])
    assert(m.elements[1].vertex2 == m.vertices[2])
    assert(m.is_neighbor(0, 1, 'right'))
    assert(m.is_neighbor(1, 0, 'left'))
Example #5
0
def test_iterate_mesh():
    m = simple_line_mesh(2, (-1.0, 0.0), (1.0, 0.0))
    count = 0
    for cell in m:
        assert(type(cell) == Element)
        count += 1
    assert(count == 2)
Example #6
0
def test_connectivity():
    m = simple_line_mesh(4)
    assert(m.get_neighbors(0, 'left') == [])
    assert(m.get_neighbors(3, 'right') == [])

    assert(m.is_neighbor(2, 1, 'left'))
    assert(m.is_neighbor(2, 3, 'right'))
Example #7
0
def test_angular_simple_line_mesh():
    m = simple_line_mesh(2, (-1.0, 1.0), (1.0, -1.0))
    assert(m.vertices[0].loc[0] == -1.0)
    assert(m.vertices[0].loc[1] == 1.0)
    assert(m.vertices[1].loc[0] == 0.0)
    assert(m.vertices[1].loc[1] == 0.0)
    assert(m.vertices[2].loc[0] == 1.0)
    assert(m.vertices[2].loc[1] == -1.0)
Example #8
0
def test_simple_line_mesh():
    m = simple_line_mesh(2)
    correct_vertices = np.array([[-1.0, 0.0], [0.0, 0.0], [1.0, 0.0]])
    correct_etov = np.array([[0, 1], [1, 2]])
    for i in range(correct_vertices.shape[0]):
        assert((m.vertices[i].loc == correct_vertices[i, :]).all())
        assert(m.elements.vertex1 == m.vertices[correct_etov[i, 0]])
        assert(m.elements.vertex2 == m.vertices[correct_etov[i, 1]])
Example #9
0
def test_basis_from_func():
    msh = simple_line_mesh(1)
    bf = basis_from_degree(1)
    soln = basis_from_func(bf, lambda x, n: x, msh.elements[0])

    value = soln.evaluate(0, 0.0)
    np.testing.assert_almost_equal(value, [-1.0, 0.0])

    value = soln.evaluate(1, 1.0)
    np.testing.assert_almost_equal(value, [1.0, 0.0])
Example #10
0
def test_solution():
    msh = simple_line_mesh(1)
    bf = basis_from_degree(1)
    soln = CoeffBasis(bf, np.array([[0.0, 1.0], [1.0, 0.0]]))

    value = soln.evaluate(0, 0.0)
    np.testing.assert_almost_equal(value, [0.0, 1.0])

    value = soln.evaluate(1, 1.0)
    np.testing.assert_almost_equal(value, [1.0, 0.0])
Example #11
0
def test_apply_solution():
    msh = simple_line_mesh(2)
    solution_coeffs = np.array([0.0, 1.0, 2.0, 3.0])
    bf = basis_from_degree(0)
    apply_to_elements(msh, "basis", bf, non_gen = True)
    apply_to_elements(msh, "continuous", False, non_gen = True)
    init_dofs(msh)
    apply_coeffs(msh, solution_coeffs, "soln")

    np.testing.assert_almost_equal(
            msh.elements[1].soln.evaluate(0, 1.), [1.0, 3.0])
Example #12
0
def test_complicated_mesh_problem():
    main_surface_left = (-1.0, 0.0)
    main_surface_right = (1.0, 0.0)
    mesh1 = simple_line_mesh(1, main_surface_left, main_surface_right)
    ray_lengths = [1.0]
    ray_left_dir = (-1.0, 0.0)
    mesh2 = ray_mesh(main_surface_left, ray_left_dir,
                     ray_lengths, flip = True)
    ray_right_dir = (1.0, 0.0)
    mesh3 = ray_mesh(main_surface_right, ray_right_dir,
                     ray_lengths, flip = True)
    # It was a problem with the mesh orientation flipping at the joint between
    # the sections
    with raises(MisorientationException):
        mesh = combine_meshes(mesh2, combine_meshes(mesh1, mesh3),
                              ensure_continuity = True)
        mesh.check_misorientation()
Example #13
0
def test_is_neighbor():
    m = simple_line_mesh(4)
    assert(m.is_neighbor(2, 3, 'right') == True)
    assert(m.is_neighbor(2, 3, 'left') == False)
    assert(m.is_neighbor(1, 0, 'left') == True)
Example #14
0
def test_get_neighbors():
    m = simple_line_mesh(2, (-1.0, 0.0), (1.0, 0.0))
    assert(m.get_neighbors(0, 'right') == m.elements[0].neighbors_right)
Example #15
0
def test_simple_line_mesh():
    m = simple_line_mesh(2, (3.0, 0.0), (4.0, 0.0))
    correct_vertices = np.array([[3.0, 0.0], [3.5, 0.0], [4.0, 0.0]])
    for i in range(correct_vertices.shape[0]):
        assert((m.vertices[i].loc == correct_vertices[i, :]).all())