def test_potential(): sphere = cpt.Sphere(radius=1.0, ntheta=3, nphi=12, clip_free_surface=True) sphere.add_translation_dof(name="Heave") solver = cpt.BEMSolver() result = solver.solve(cpt.RadiationProblem(body=sphere, omega=1.0), keep_details=True) free_surface = cpt.FreeSurface(x_range=(-100, 100), nx=5, y_range=(-100, 100), ny=5) eta = solver.get_potential_on_mesh(result, free_surface.mesh, chunk_size=3)
# Set up and solve problem solver = cpt.BEMSolver() diffraction_problem = cpt.DiffractionProblem(body=sphere, wave_direction=0.0, omega=2.0) diffraction_result = solver.solve(diffraction_problem) radiation_problem = cpt.RadiationProblem(body=sphere, radiating_dof="Heave", omega=2.0) radiation_result = solver.solve(radiation_problem) # Define a mesh of the free surface and compute the free surface elevation free_surface = cpt.FreeSurface(x_range=(-50, 50), y_range=(-50, 50), nx=150, ny=150) diffraction_elevation_at_faces = solver.get_free_surface_elevation( diffraction_result, free_surface) radiation_elevation_at_faces = solver.get_free_surface_elevation( radiation_result, free_surface) # Add incoming waves diffraction_elevation_at_faces = diffraction_elevation_at_faces + free_surface.incoming_waves( diffraction_result) # Run the animations # animation = Animation(loop_duration=diffraction_result.period) # animation.add_body(full_sphere, faces_motion=None) # animation.add_free_surface(free_surface, faces_elevation=0.5*diffraction_elevation_at_faces) # animation.run(camera_position=(-30, -30, 30)) # The camera is oriented towards (0, 0, 0) by default.
# SET UP ANIMATION animation = Animation(loop_duration=2 * pi / omega) animation.add_body(body.full_body, faces_motion=wave_amplitude * rao_faces_motion) animation.add_free_surface( fs, wave_amplitude * (incoming_waves_elevation + diffraction_elevation + rao_radiation_elevation)) return animation if __name__ == '__main__': body = generate_boat() fs = cpt.FreeSurface(x_range=(-100, 100), y_range=(-100, 100), nx=100, ny=100) wave_direction = 0.0 omega = 1.5 anim = setup_animation(body, fs, omega=omega, wave_amplitude=0.5, wave_direction=wave_direction) anim.run(camera_position=(-60, -60, 90), resolution=(800, 600)) filename = f"{body.name}__omega_{omega:.2f}__beta_{wave_direction:.2f}.ogv" filepath = Path.cwd() / filename # anim.save(str(filepath), camera_position=(60, 60, 90), resolution=(800, 600))