Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for Software 22.04.
Download
98 views
ubuntu2204-dev
Kernel: Python 3 (system-wide)

Capytaine on CoCalc

https://capytaine.github.io/

import capytaine as cpt cpt.__version__
'2.0'
sphere = cpt.mesh_sphere(radius=1.0, center=(0, 0, -2), name="my sphere") sphere.vertices[:10]
array([[-1.00000000e+00, -2.80356482e-17, -2.00000000e+00], [-9.51056516e-01, -6.46742254e-17, -2.30901699e+00], [-9.51056516e-01, -4.34708523e-17, -1.69098301e+00], [-8.09016994e-01, -5.87785252e-01, -2.00000000e+00], [-8.09016994e-01, -3.75306493e-17, -2.58778525e+00], [-8.09016994e-01, -2.69289628e-17, -1.41221475e+00], [-8.09016994e-01, 5.87785252e-01, -2.00000000e+00], [-7.69420884e-01, -5.59016994e-01, -2.30901699e+00], [-7.69420884e-01, -5.59016994e-01, -1.69098301e+00], [-7.69420884e-01, 5.59016994e-01, -2.30901699e+00]])
body = cpt.FloatingBody(mesh=sphere, dofs=cpt.rigid_body_dofs(rotation_center=(0, 0, -2)), center_of_mass=(0, 0, -2))
import numpy as np body.dofs["x-shear"] = [(np.cos(np.pi * z / 2), 0, 0) for x, y, z in sphere.faces_centers] print(body.dofs.keys())
dict_keys(['Surge', 'Sway', 'Heave', 'Roll', 'Pitch', 'Yaw', 'x-shear'])
hydrostatics = body.compute_hydrostatics(rho=1025.0) print(hydrostatics["disp_volume"])
Non-rigid dofs: {'x-shear'} are detected and respective inertia coefficients are assigned as NaN.
3.8226741555580706
print(hydrostatics["hydrostatic_stiffness"])
<xarray.DataArray 'hydrostatic_stiffness' (influenced_dof: 7, radiating_dof: 7)> array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 0.00000000e+00, 0.00000000e+00, 2.51180327e-12, -6.10507738e-14, -1.11635701e-12, 0.00000000e+00, 3.59300157e-12], [ 0.00000000e+00, 0.00000000e+00, -6.10507738e-14, -1.71059889e-11, -2.58375596e-13, 8.67956671e-12, 1.22527404e-12], [ 0.00000000e+00, 0.00000000e+00, -1.11635701e-12, -2.58375596e-13, -1.62762163e-11, 2.03071755e-12, -3.00142108e+04], [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]]) Coordinates: * influenced_dof (influenced_dof) <U7 'Surge' 'Sway' ... 'Yaw' 'x-shear' * radiating_dof (radiating_dof) <U7 'Surge' 'Sway' ... 'Yaw' 'x-shear'
print(hydrostatics["inertia_matrix"])
<xarray.DataArray 'inertia_matrix' (influenced_dof: 7, radiating_dof: 7)> array([[ 3.91824101e+03, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, -0.00000000e+00, nan], [ 0.00000000e+00, 3.91824101e+03, 0.00000000e+00, -0.00000000e+00, 0.00000000e+00, 0.00000000e+00, nan], [ 0.00000000e+00, 0.00000000e+00, 3.91824101e+03, 0.00000000e+00, -0.00000000e+00, 0.00000000e+00, nan], [ 0.00000000e+00, -0.00000000e+00, 0.00000000e+00, 1.45356111e+03, -8.50705682e-14, -5.27523649e-14, nan], [ 0.00000000e+00, 0.00000000e+00, -0.00000000e+00, -8.50705682e-14, 1.45356111e+03, 3.64300400e-14, nan], [-0.00000000e+00, 0.00000000e+00, 0.00000000e+00, -5.27523649e-14, 3.64300400e-14, 1.39120318e+03, nan], [ nan, nan, nan, nan, nan, nan, nan]]) Coordinates: * influenced_dof (influenced_dof) <U7 'Surge' 'Sway' ... 'Yaw' 'x-shear' * radiating_dof (radiating_dof) <U7 'Surge' 'Sway' ... 'Yaw' 'x-shear'
from numpy import infty problem = cpt.RadiationProblem(body=body, radiating_dof="Heave", omega=1.0, water_depth=infty, g=9.81, rho=1000)
problem = cpt.RadiationProblem(body=body, radiating_dof="Heave", wavelength=60.0)
solver = cpt.BEMSolver()
res1 = solver.solve(problem) res1
RadiationResult(body=my sphere, wavelength=60.000, water_depth=inf)
res1.added_masses
{'Surge': -6.916598695673294e-14, 'Sway': -2.766639478269318e-14, 'Heave': 2209.223576380206, 'Roll': -1.6254006934832242e-13, 'Pitch': 5.139897405722218e-13, 'Yaw': -1.6055998721176972e-14, 'x-shear': 1.1239472880469104e-13}
res1.radiation_dampings
{'Surge': 1.0296491628517107e-14, 'Sway': 0.0, 'Heave': 14.812975952828692, 'Roll': -1.232292881072526e-15, 'Pitch': 2.3824329034068838e-15, 'Yaw': -1.5359639827142884e-15, 'x-shear': -1.0707255922207949e-14}
diffraction_problem = cpt.DiffractionProblem(body=body, wave_direction=np.pi / 2, omega=1.0)
res2 = solver.solve(diffraction_problem) res2
DiffractionResult(body=my sphere, omega=1.000, water_depth=inf)
res2.pressure
array([-366.55158882 +39.03994492j, -335.11824363 +73.82881477j, -266.67280472+109.04964403j, -163.76659604+138.79061774j, -33.56199767+159.13375221j, 112.05574985+166.55974045j, 258.38647576+158.5147973j , 389.44581604+134.41738457j, 487.21039632 +96.50506907j, 536.6397512 +52.94812672j, -367.23781001 +77.39203305j, -338.47869172+168.08489028j, -274.54907515+259.47835661j, -176.48090975+336.14949633j, -49.66751505+388.00049886j, 95.38530193+406.00874175j, 244.3325481 +383.63497604j, 380.23622187+319.43712431j, 483.11190336+219.34562599j, 535.78085016+104.85138851j, -367.6309858 +92.03916976j, -340.48306465+204.06261114j, -279.30190479+316.84440409j, -184.18748093+411.34373998j, -59.44566888+475.15212493j, 85.26450935+497.19355298j, 235.81494901+469.41418329j, 374.68009295+390.00099085j, 480.6683744 +266.23655825j, 535.28914779+124.67414973j, -367.23781001 +77.39203305j, -338.47869172+168.08489028j, -274.54907515+259.47835661j, -176.48090975+336.14949633j, -49.66751505+388.00049886j, 95.38530193+406.00874175j, 244.3325481 +383.63497604j, 380.23622187+319.43712431j, 483.11190336+219.34562599j, 535.78085016+104.85138851j, -366.55158882 +39.03994492j, -335.11824363 +73.82881477j, -266.67280472+109.04964403j, -163.76659604+138.79061774j, -33.56199767+159.13375221j, 112.05574985+166.55974045j, 258.38647576+158.5147973j , 389.44581604+134.41738457j, 487.21039632 +96.50506907j, 536.6397512 +52.94812672j, -366.38969418 -8.36995953j, -334.74042801 -42.7279097j , -266.08098934 -77.07576674j, -163.00053578-105.53888091j, -32.68325177-124.29686624j, 112.96724615-129.9690289j , 259.23846786-120.16739602j, 390.14463689 -94.49445455j, 487.67676667 -55.3941984j , 536.84454224 -11.21287642j, -366.81396433 -46.72205138j, -337.48955761-136.98400345j, -272.99968245-227.50451959j, -174.47533793-302.89782883j, -47.3669283 -353.16370374j, 97.77163034-369.41812407j, 246.5630924 -345.28765099j, 382.06575852-279.51424096j, 484.33287678-178.2347773j , 536.31700008 -63.1161428j , -367.10708372 -61.36919038j, -339.26042766-172.96173557j, -277.38675014-284.87059197j, -181.70845781-378.09211532j, -56.60198719-440.31538595j, 88.21417357-460.60299331j, 238.5720534 -431.06690535j, 376.94152455-350.07813636j, 482.17758053-225.12572315j, 535.95186555 -82.93890685j, -366.81396433 -46.72205138j, -337.48955761-136.98400345j, -272.99968245-227.50451959j, -174.47533793-302.89782883j, -47.3669283 -353.16370374j, 97.77163034-369.41812407j, 246.5630924 -345.28765099j, 382.06575852-279.51424096j, 484.33287678-178.2347773j , 536.31700008 -63.1161428j , -366.38969418 -8.36995953j, -334.74042801 -42.7279097j , -266.08098934 -77.07576674j, -163.00053578-105.53888091j, -32.68325177-124.29686624j, 112.96724615-129.9690289j , 259.23846786-120.16739602j, 390.14463689 -94.49445455j, 487.67676667 -55.3941984j , 536.84454224 -11.21287642j])