def test_dof(): nodes = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 1], [1, 0, 0]]) faces = np.array([[0, 1, 2, 3]]) body = FloatingBody(Mesh(nodes, faces), name="one_face") assert body.dofs == {} body.add_translation_dof(direction=(1.0, 0.0, 0.0), name="1") assert np.allclose(body.dofs["1"], np.array([1.0, 0.0, 0.0])) body.add_translation_dof(direction=(0.0, 1.0, 0.0), name="2") assert np.allclose(body.dofs["2"], np.array([0.0, 1.0, 0.0])) body.add_rotation_dof(Axis(vector=(0.0, 0.0, 1.0)), name="3") body.add_rotation_dof(Axis(point=(0.5, 0, 0), vector=(0.0, 0.0, 1.0)), name="4")
def test_clipping_of_dofs(z_center, collection_of_meshes): """Check that clipping a body with a dof is the same as clipping the body ant then adding the dof.""" full_sphere = Sphere(center=(0, 0, z_center), name="sphere", clever=collection_of_meshes, clip_free_surface=False) axis = Axis(point=(1, 0, 0), vector=(1, 0, 0)) full_sphere.add_rotation_dof(axis, name="test_dof") clipped_sphere = full_sphere.keep_immersed_part(free_surface=0.0, sea_bottom=-np.infty, inplace=False) other_clipped_sphere = FloatingBody(mesh=clipped_sphere.mesh, name="other_sphere") other_clipped_sphere.add_rotation_dof(axis, name="test_dof") if clipped_sphere.mesh.nb_faces > 0: assert np.allclose(clipped_sphere.dofs['test_dof'], other_clipped_sphere.dofs['test_dof']) else: assert len(clipped_sphere.dofs['test_dof']) == 0