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