def test_bodies(): body = Sphere(name="sphere", clever=False) assert str(body) == "sphere" repr(body) assert np.allclose(body.geometric_center, (0, 0, 0)) body.add_translation_dof(name="Surge") body.add_translation_dof(name="Heave") # Extract faces body.extract_faces(np.where(body.mesh.faces_centers[:, 2] < 0)[0]) # Clipping body.keep_immersed_part(inplace=False) # Mirror of the dofs mirrored = body.mirrored(Plane(point=(1, 0, 0), normal=(1, 0, 0))) assert np.allclose(mirrored.geometric_center, np.array([2, 0, 0])) assert np.allclose(body.dofs['Surge'], -mirrored.dofs['Surge']) # Rotation of the dofs sideways = body.rotated(Axis(point=(0, 0, 0), vector=(0, 1, 0)), np.pi/2) assert np.allclose(sideways.dofs['Heave'][0], np.array([1, 0, 0])) upside_down = body.rotated(Axis(point=(0, 0, 0), vector=(0, 1, 0)), np.pi) assert np.allclose(body.dofs['Heave'], -upside_down.dofs['Heave']) # Copy of the body copy_of_body = body.copy(name="copy_of_sphere") copy_of_body.translate_x(10.0) copy_of_body.add_translation_dof(name="Heave") # Join bodies both = body.join_bodies(copy_of_body) assert set(both.dofs) == {'sphere__Surge', 'copy_of_sphere__Surge', 'sphere__Heave', 'copy_of_sphere__Heave'}
def test_wave_direction_radians_warning(caplog): sphere = Sphere(radius=1.0, ntheta=20, nphi=40) sphere.keep_immersed_part() sphere.add_all_rigid_body_dofs() with caplog.at_level(logging.WARNING): DiffractionProblem(body=sphere, omega=1.0, wave_direction=180) assert 'in radians and not in degrees' in caplog.text
def fb_array(): sphere = Sphere( radius=r, # Dimension center=(0, 0, 0), # Position nphi=4, ntheta=10, # Fineness of the mesh ) my_axis = Axis((0, 1, 0), point=(0,0,0)) sphere.add_rotation_dof(axis=my_axis) sphere.keep_immersed_part() return sphere.assemble_arbitrary_array(locations)
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