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_two_distant_spheres_in_finite_depth(): radius = 0.5 resolution = 4 perimeter = 2 * np.pi * radius buoy = Sphere(radius=radius, center=(0.0, 0.0, 0.0), ntheta=int(perimeter * resolution / 2), nphi=int(perimeter * resolution), clip_free_surface=True, clever=False, name="buoy") other_buoy = buoy.translated_x(20, name="other_buoy") both_buoys = buoy.join_bodies(other_buoy) both_buoys.add_translation_dof(name="Surge") problem = RadiationProblem(body=both_buoys, radiating_dof="Surge", sea_bottom=-10, omega=7.0) result = solver.solve(problem) total_volume = 2 * 4 / 3 * np.pi * radius**3 assert np.isclose(result.added_masses['Surge'], 124.0, atol=1e-3 * total_volume * problem.rho) assert np.isclose(result.radiation_dampings['Surge'], 913.3, atol=1e-3 * total_volume * problem.rho)