$ F_{total} = F_B + F_G + F_D = C_B \left( V_{diver} + V_{tlc} \frac{d + 10[m]}{10 [m]} \right) - mg + C_R v²$$ F_{total} = F_B + F_G + F_D = C_B \left( V_{diver} + V_{tlc} \frac{10 [m]}{d + 10[m]} \right) - mg + C_R v²$
import numpy as np
import math
import scipy as sp
from scipy.integrate import odeint
from scipy.integrate import solve_ivp
# Physical constants
rho = 1023.6 # kg/m³ density of saline water
g = 9.807 # m/s² gravitational acceleration on earth
# Assumptions about diver
V_diver = 0.062 # m³ volume of diver
V_tlc = 0.006 # m³ total lung capacity
m = 66 # Kg weight of diver
A = 0.07 # m² crossectional area of diver in diving direction
C_D = 0.3 # - Drag coefficient
# Derived
C_B = rho * g # Buoyency coefficient
C_R = 0.5 * rho * C_D * A # Resistive coefficient
# equation
def dSdd(d, S):
d, v = S
return [
v,
(C_B * V_diver + 10 * C_B * V_tlc / ( d + 10 ) - m * g + C_R * v**2) / m
]
# initial conditions
d_0 = 20
v_0 = 1
S_0 = [d_0, v_0]
# time interval
t = np.linspace(0, 60, 1000)
# solution odeint
odeint(dSdd, y0 = S_0, t=t, tfirst=True, full_output = 1)
# solution solve_ivp
solve_ivp(dSdd, t_span=(0, max(t)), y0=S_0, t_eval=t)
import numpy as np
import math
import scipy as sp
from scipy.integrate import odeint
from scipy.integrate import solve_ivp
# Physical constants
rho = 1023.6 # kg/m³ density of saline water
g = 9.807 # m/s² gravitational acceleration on earth
# Assumptions about diver
V_diver = 0.062 # m³ volume of diver
V_tlc = 0.006 # m³ total lung capacity
m = 66 # Kg weight of diver
A = 0.07 # m² crossectional area of diver in diving direction
C_D = 0.3 # - Drag coefficient
# Derived
C_B = rho * g # Buoyency coefficient
C_R = 0.5 * rho * C_D * A # Resistive coefficient
# equation
def dSdd(d, S):
d, v = S
return [
v,
(C_B * V_diver + 10 * C_B * V_tlc / ( d + 10 ) - m * g + C_R * v**2) / m
]
# initial conditions
d_0 = 20
v_0 = 1
S_0 = [d_0, v_0]
# time interval
t = np.linspace(0, 60, 1000)
# solution odeint
odeint(dSdd, y0 = S_0, t=t, tfirst=True, full_output = 1)
# solution solve_ivp
solve_ivp(dSdd, t_span=(0, max(t)), y0=S_0, t_eval=t)
/home/marc/.cache/pypoetry/virtualenvs/data-science-6CF2GDM8-py3.9/lib/python3.9/site-packages/scipy/integrate/odepack.py:247: ODEintWarning: Excess work done on this call (perhaps wrong Dfun type). Run with full_output = 1 to get quantitative information.
warnings.warn(warning_msg, ODEintWarning)
message: 'Required step size is less than spacing between numbers.'
nfev: 614
njev: 0
nlu: 0
sol: None
status: -1
success: False
t: array([0. , 0.06006006, 0.12012012, 0.18018018, 0.24024024,
0.3003003 , 0.36036036, 0.42042042, 0.48048048, 0.54054054,
0.6006006 , 0.66066066, 0.72072072, 0.78078078, 0.84084084,
0.9009009 , 0.96096096, 1.02102102, 1.08108108, 1.14114114,
1.2012012 , 1.26126126, 1.32132132, 1.38138138, 1.44144144,
1.5015015 , 1.56156156, 1.62162162, 1.68168168, 1.74174174,
1.8018018 , 1.86186186, 1.92192192, 1.98198198, 2.04204204,
2.1021021 , 2.16216216, 2.22222222, 2.28228228, 2.34234234,
2.4024024 , 2.46246246, 2.52252252, 2.58258258, 2.64264264,
2.7027027 , 2.76276276, 2.82282282, 2.88288288, 2.94294294,
3.003003 , 3.06306306, 3.12312312, 3.18318318, 3.24324324,
3.3033033 , 3.36336336, 3.42342342, 3.48348348, 3.54354354,
3.6036036 , 3.66366366, 3.72372372, 3.78378378, 3.84384384,
3.9039039 , 3.96396396, 4.02402402, 4.08408408, 4.14414414,
4.2042042 , 4.26426426, 4.32432432, 4.38438438, 4.44444444,
4.5045045 , 4.56456456, 4.62462462, 4.68468468, 4.74474474,
4.8048048 , 4.86486486, 4.92492492, 4.98498498, 5.04504505,
5.10510511, 5.16516517, 5.22522523, 5.28528529, 5.34534535,
5.40540541, 5.46546547, 5.52552553, 5.58558559, 5.64564565,
5.70570571, 5.76576577, 5.82582583, 5.88588589, 5.94594595,
6.00600601, 6.06606607, 6.12612613, 6.18618619, 6.24624625,
6.30630631, 6.36636637, 6.42642643, 6.48648649, 6.54654655,
6.60660661, 6.66666667, 6.72672673, 6.78678679, 6.84684685,
6.90690691, 6.96696697, 7.02702703, 7.08708709, 7.14714715,
7.20720721, 7.26726727, 7.32732733, 7.38738739, 7.44744745,
7.50750751, 7.56756757, 7.62762763, 7.68768769, 7.74774775,
7.80780781, 7.86786787, 7.92792793, 7.98798799])
t_events: None
y: array([[ 20. , 20.06022325, 20.12077573, 20.18166178,
20.24288651, 20.3044545 , 20.36637012, 20.4286379 ,
20.4912626 , 20.55424917, 20.61760275, 20.6813287 ,
20.74543256, 20.80992008, 20.87479721, 20.94007008,
21.00574504, 21.07182864, 21.13832763, 21.20524893,
21.27259971, 21.34038729, 21.40861921, 21.47730323,
21.54644727, 21.61605948, 21.6861482 , 21.75672196,
21.82778949, 21.89935974, 21.97144185, 22.04404523,
22.11719859, 22.19092128, 22.26521681, 22.34008972,
22.41554563, 22.4915912 , 22.56823418, 22.64548333,
22.72334851, 22.80184062, 22.88097161, 22.9607545 ,
23.04120335, 23.12233331, 23.20416057, 23.28670235,
23.36997697, 23.4540038 , 23.53880323, 23.62439676,
23.71080692, 23.79805729, 23.88617252, 23.97517832,
24.06510146, 24.15596974, 24.24781206, 24.34065834,
24.43453958, 24.52948782, 24.62553619, 24.72271883,
24.82107098, 24.92062892, 25.02142997, 25.12351255,
25.2269161 , 25.33168113, 25.43784921, 25.54546297,
25.65456608, 25.7652033 , 25.87742041, 25.99126427,
26.1067828 , 26.22402496, 26.34304079, 26.46388446,
26.58669772, 26.71157337, 26.8385711 , 26.96776102,
27.09922374, 27.23305032, 27.36934229, 27.50821168,
27.64978094, 27.79418303, 27.94156136, 28.09206981,
28.24587274, 28.40314496, 28.56407178, 28.72884895,
28.8976827 , 29.07078974, 29.24839722, 29.43074279,
29.61807456, 29.81083624, 30.0095311 , 30.21431322,
30.4254371 , 30.64326674, 30.86827566, 31.1010469 ,
31.34227302, 31.59275608, 31.85340768, 32.12524893,
32.40941044, 32.70713236, 33.01976433, 33.34876555,
33.69570468, 34.06225995, 34.4510292 , 34.86534333,
35.30887002, 35.78633731, 36.30353361, 36.86798076,
37.48862955, 38.17688489, 38.95181674, 39.84035888,
40.87817713, 42.12560177, 43.6927668 , 45.79877743,
49.03175348, 56.27649463],
[ 1. , 1.00544608, 1.01096335, 1.01655377,
1.02221991, 1.02796387, 1.03378755, 1.03969295,
1.04568219, 1.05175752, 1.05792131, 1.06417603,
1.07052428, 1.07696878, 1.08351237, 1.09015801,
1.09690877, 1.10376784, 1.11073853, 1.11782428,
1.12502863, 1.13235525, 1.13980793, 1.14739057,
1.15510719, 1.16296194, 1.17095908, 1.17910299,
1.18739816, 1.19584922, 1.20446089, 1.21323815,
1.22221116, 1.2313979 , 1.2407953 , 1.2504013 ,
1.26021483, 1.27023586, 1.28046533, 1.2909052 ,
1.30155845, 1.31242904, 1.32352196, 1.3348432 ,
1.34639975, 1.35819961, 1.37025178, 1.38256629,
1.39515414, 1.40802737, 1.421199 , 1.43468308,
1.44849466, 1.46264977, 1.47716548, 1.49205986,
1.50735197, 1.52306189, 1.53921071, 1.55582052,
1.5729144 , 1.59051647, 1.60865184, 1.62734661,
1.64662791, 1.66652388, 1.68706363, 1.70827733,
1.7301961 , 1.75285212, 1.77627853, 1.8005095 ,
1.82558021, 1.85152684, 1.87838657, 1.9061976 ,
1.93499912, 1.96483134, 1.99573547, 2.02775866,
2.06108008, 2.09578494, 2.13190374, 2.16948422,
2.20859136, 2.24930734, 2.29173157, 2.33598069,
2.38218857, 2.4305063 , 2.48110217, 2.53416174,
2.58988776, 2.64850021, 2.7102363 , 2.77535047,
2.84411438, 2.9168169 , 2.99376414, 3.07527943,
3.16170334, 3.25408583, 3.3535738 , 3.45987045,
3.57297988, 3.69324192, 3.82133214, 3.95826186,
4.10537813, 4.26436373, 4.4372372 , 4.6263528 ,
4.83440054, 5.06440617, 5.31973118, 5.60407278,
5.92146395, 6.27627341, 6.67633158, 7.13167175,
7.65433238, 8.26176668, 8.97684267, 9.83515678,
10.87519331, 12.14316414, 13.75241444, 15.88570982,
18.80474186, 23.02438119, 29.73016354, 41.82752868,
70.82032029, 230.53580339]])
y_events: None
status: -1 success: False t: array([0. , 0.06006006, 0.12012012, 0.18018018, 0.24024024, 0.3003003 , 0.36036036, 0.42042042, 0.48048048, 0.54054054, 0.6006006 , 0.66066066, 0.72072072, 0.78078078, 0.84084084, 0.9009009 , 0.96096096, 1.02102102, 1.08108108, 1.14114114, 1.2012012 , 1.26126126, 1.32132132, 1.38138138, 1.44144144, 1.5015015 , 1.56156156, 1.62162162, 1.68168168, 1.74174174, 1.8018018 , 1.86186186, 1.92192192, 1.98198198, 2.04204204, 2.1021021 , 2.16216216, 2.22222222, 2.28228228, 2.34234234, 2.4024024 , 2.46246246, 2.52252252, 2.58258258, 2.64264264, 2.7027027 , 2.76276276, 2.82282282, 2.88288288, 2.94294294, 3.003003 , 3.06306306, 3.12312312, 3.18318318, 3.24324324, 3.3033033 , 3.36336336, 3.42342342, 3.48348348, 3.54354354, 3.6036036 , 3.66366366, 3.72372372, 3.78378378, 3.84384384, 3.9039039 , 3.96396396, 4.02402402, 4.08408408, 4.14414414, 4.2042042 , 4.26426426, 4.32432432, 4.38438438, 4.44444444, 4.5045045 , 4.56456456, 4.62462462, 4.68468468, 4.74474474, 4.8048048 , 4.86486486, 4.92492492, 4.98498498, 5.04504505, 5.10510511, 5.16516517, 5.22522523, 5.28528529, 5.34534535, 5.40540541, 5.46546547, 5.52552553, 5.58558559, 5.64564565, 5.70570571, 5.76576577, 5.82582583, 5.88588589, 5.94594595, 6.00600601, 6.06606607, 6.12612613, 6.18618619, 6.24624625, 6.30630631, 6.36636637, 6.42642643, 6.48648649, 6.54654655, 6.60660661, 6.66666667, 6.72672673, 6.78678679, 6.84684685, 6.90690691, 6.96696697, 7.02702703, 7.08708709, 7.14714715, 7.20720721, 7.26726727, 7.32732733, 7.38738739, 7.44744745, 7.50750751, 7.56756757, 7.62762763, 7.68768769, 7.74774775, 7.80780781, 7.86786787, 7.92792793, 7.98798799]) t_events: None y: array([[ 20. , 20.06022325, 20.12077573, 20.18166178, 20.24288651, 20.3044545 , 20.36637012, 20.4286379 , 20.4912626 , 20.55424917, 20.61760275, 20.6813287 , 20.74543256, 20.80992008, 20.87479721, 20.94007008, 21.00574504, 21.07182864, 21.13832763, 21.20524893, 21.27259971, 21.34038729, 21.40861921, 21.47730323, 21.54644727, 21.61605948, 21.6861482 , 21.75672196, 21.82778949, 21.89935974, 21.97144185, 22.04404523, 22.11719859, 22.19092128, 22.26521681, 22.34008972, 22.41554563, 22.4915912 , 22.56823418, 22.64548333, 22.72334851, 22.80184062, 22.88097161, 22.9607545 , 23.04120335, 23.12233331, 23.20416057, 23.28670235, 23.36997697, 23.4540038 , 23.53880323, 23.62439676, 23.71080692, 23.79805729, 23.88617252, 23.97517832, 24.06510146, 24.15596974, 24.24781206, 24.34065834, 24.43453958, 24.52948782, 24.62553619, 24.72271883, 24.82107098, 24.92062892, 25.02142997, 25.12351255, 25.2269161 , 25.33168113, 25.43784921, 25.54546297, 25.65456608, 25.7652033 , 25.87742041, 25.99126427, 26.1067828 , 26.22402496, 26.34304079, 26.46388446, 26.58669772, 26.71157337, 26.8385711 , 26.96776102, 27.09922374, 27.23305032, 27.36934229, 27.50821168, 27.64978094, 27.79418303, 27.94156136, 28.09206981, 28.24587274, 28.40314496, 28.56407178, 28.72884895, 28.8976827 , 29.07078974, 29.24839722, 29.43074279, 29.61807456, 29.81083624, 30.0095311 , 30.21431322, 30.4254371 , 30.64326674, 30.86827566, 31.1010469 , 31.34227302, 31.59275608, 31.85340768, 32.12524893, 32.40941044, 32.70713236, 33.01976433, 33.34876555, 33.69570468, 34.06225995, 34.4510292 , 34.86534333, 35.30887002, 35.78633731, 36.30353361, 36.86798076, 37.48862955, 38.17688489, 38.95181674, 39.84035888, 40.87817713, 42.12560177, 43.6927668 , 45.79877743, 49.03175348, 56.27649463], [ 1. , 1.00544608, 1.01096335, 1.01655377, 1.02221991, 1.02796387, 1.03378755, 1.03969295, 1.04568219, 1.05175752, 1.05792131, 1.06417603, 1.07052428, 1.07696878, 1.08351237, 1.09015801, 1.09690877, 1.10376784, 1.11073853, 1.11782428, 1.12502863, 1.13235525, 1.13980793, 1.14739057, 1.15510719, 1.16296194, 1.17095908, 1.17910299, 1.18739816, 1.19584922, 1.20446089, 1.21323815, 1.22221116, 1.2313979 , 1.2407953 , 1.2504013 , 1.26021483, 1.27023586, 1.28046533, 1.2909052 , 1.30155845, 1.31242904, 1.32352196, 1.3348432 , 1.34639975, 1.35819961, 1.37025178, 1.38256629, 1.39515414, 1.40802737, 1.421199 , 1.43468308, 1.44849466, 1.46264977, 1.47716548, 1.49205986, 1.50735197, 1.52306189, 1.53921071, 1.55582052, 1.5729144 , 1.59051647, 1.60865184, 1.62734661, 1.64662791, 1.66652388, 1.68706363, 1.70827733, 1.7301961 , 1.75285212, 1.77627853, 1.8005095 , 1.82558021, 1.85152684, 1.87838657, 1.9061976 , 1.93499912, 1.96483134, 1.99573547, 2.02775866, 2.06108008, 2.09578494, 2.13190374, 2.16948422, 2.20859136, 2.24930734, 2.29173157, 2.33598069, 2.38218857, 2.4305063 , 2.48110217, 2.53416174, 2.58988776, 2.64850021, 2.7102363 , 2.77535047, 2.84411438, 2.9168169 , 2.99376414, 3.07527943, 3.16170334, 3.25408583, 3.3535738 , 3.45987045, 3.57297988, 3.69324192, 3.82133214, 3.95826186, 4.10537813, 4.26436373, 4.4372372 , 4.6263528 , 4.83440054, 5.06440617, 5.31973118, 5.60407278, 5.92146395, 6.27627341, 6.67633158, 7.13167175, 7.65433238, 8.26176668, 8.97684267, 9.83515678, 10.87519331, 12.14316414, 13.75241444, 15.88570982, 18.80474186, 23.02438119, 29.73016354, 41.82752868, 70.82032029, 230.53580339]]) y_events: None
Edit
The problem was the use of different coordinate systems for velocity and forces versus depth as pointed out by Lutz Lehmann in the comments.
Changing the equations in the following way made things work perfectly:
$ F_{total} = F_B + F_G + F_D = m g - C_B \left( V_{diver} + V_{tlc} \frac{10 [m]}{d + 10[m]} \right) - C_R v²$
and
$ d' = v $
$ v' = d'' = \frac{ - C_R v² - C_B V_{tlc} \frac{10 [m]}{d + 10[m]} - C_B V_{diver} + m g }{m}$
with
$d_0 = \text{initial depth}$
$v_0 = \text{initial velocity}$
and
def dSdd(d, S):
d, v = S
return [
v,
- C_R * v ** 2 - C_B * V_tlc * 10 / ( d + 10) - C_B * V_diver + m * g / m
]