def test_edge_surfaces_six_sides(self): # create the unit cube vol = Volume() vol.raise_order(2,2,2) vol.refine(3) edges = vol.faces() # edge_surface should give back the same unit cube vol2 = VolumeFactory.edge_surfaces(edges) # check discretization self.assertEqual(vol2.order(0), 4) self.assertEqual(vol2.order(1), 4) self.assertEqual(vol2.order(2), 4) self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1] self.assertEqual(len(vol2.knots(1)), 5) self.assertEqual(len(vol2.knots(2)), 5) # check a 5x5x5 evaluation grid u = np.linspace(0,1,5) v = np.linspace(0,1,5) w = np.linspace(0,1,5) pt = vol( u,v,w) pt2 = vol2(u,v,w) self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
def test_edge_surfaces_six_sides(self): # create the unit cube vol = Volume() vol.raise_order(2,2,2) vol.refine(3) edges = vol.faces() # edge_surface should give back the same unit cube vol2 = vf.edge_surfaces(edges) # check discretization self.assertEqual(vol2.order(0), 4) self.assertEqual(vol2.order(1), 4) self.assertEqual(vol2.order(2), 4) self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1] self.assertEqual(len(vol2.knots(1)), 5) self.assertEqual(len(vol2.knots(2)), 5) # check a 5x5x5 evaluation grid u = np.linspace(0,1,5) v = np.linspace(0,1,5) w = np.linspace(0,1,5) pt = vol( u,v,w) pt2 = vol2(u,v,w) self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
def test_edge_surfaces_six_sides_issue_141(self): # create the unit cube vol = Volume() # modify slightly one edge: umin(w=0) is now a parabola instead of a line vol.raise_order(0,1,0) vol.controlpoints[-1, 1, 0, 0] += 1 faces = vol.faces() # edge_surface should give back the same modified unit cube vol2 = vf.edge_surfaces(faces) # check discretization self.assertEqual(vol2.order(0),2) self.assertEqual(vol2.order(1),3) self.assertEqual(vol2.order(2),2) self.assertEqual(len(vol2.knots(0)),2) # [0, 1] self.assertEqual(len(vol2.knots(1)),2) self.assertEqual(len(vol2.knots(2)),2) # check a 5x5x5 evaluation grid u = np.linspace(0,1,5) v = np.linspace(0,1,5) w = np.linspace(0,1,5) pt = vol( u,v,w) pt2 = vol2(u,v,w) self.assertTrue(np.allclose(pt, pt2))
def test_faces(self): vol1 = Volume() faces = vol1.faces() self.assertEqual(len(faces), 6) # check that it all comes out in the order umin, umax, vmin, vmax, wmin, wmax self.assertTrue(np.allclose(faces[0][0, 0], (0, 0, 0))) self.assertTrue(np.allclose(faces[0][1, 1], (0, 1, 1))) self.assertTrue(np.allclose(faces[1][0, 0], (1, 0, 0))) self.assertTrue(np.allclose(faces[1][1, 1], (1, 1, 1))) self.assertTrue(np.allclose(faces[2][0, 0], (0, 0, 0))) self.assertTrue(np.allclose(faces[2][1, 1], (1, 0, 1))) self.assertTrue(np.allclose(faces[3][0, 0], (0, 1, 0))) self.assertTrue(np.allclose(faces[3][1, 1], (1, 1, 1))) self.assertTrue(np.allclose(faces[4][0, 0], (0, 0, 0))) self.assertTrue(np.allclose(faces[4][1, 1], (1, 1, 0))) self.assertTrue(np.allclose(faces[5][0, 0], (0, 0, 1))) self.assertTrue(np.allclose(faces[5][1, 1], (1, 1, 1))) # one parametric direction is periodic, these indices should return None vol2 = vf.cylinder() faces = vol2.faces() self.assertEqual(len(faces), 6) self.assertIsNotNone(faces[0]) self.assertIsNotNone(faces[1]) self.assertIsNone(faces[2]) self.assertIsNone(faces[3]) self.assertIsNotNone(faces[4]) self.assertIsNotNone(faces[5]) # two parametric directions are periodic vol3 = vf.torus() faces = vol3.faces() self.assertEqual(len(faces), 6) self.assertIsNotNone(faces[0]) self.assertIsNotNone(faces[1]) self.assertIsNone(faces[2]) self.assertIsNone(faces[3]) self.assertIsNone(faces[4]) self.assertIsNone(faces[5])