air-cannon/1d_sim.py
2025-11-24 21:42:08 +01:00

52 lines
953 B
Python

import numpy as np
import matplotlib.pyplot as plt
l_barrel = 2 #m
d_barrel = 0.2 #m
l_sabot = 0.03 #m
mu_sabot = 0.04
m_payload = 6 #kg
vol_chamber = 0.015 #m^3
p_chamber = 20e5 #Pa
t_chamber = 300 #K
gamma = 1.4
dt = 0.00003
a_b = d_barrel**2 * np.pi / 4
def step(t, f, a, v, l, vol, p, temp):
global dt
ft = a_b * p - mu_sabot*d_barrel*np.pi*l_sabot*p
at = ft / m_payload
vt = v + at*dt
lt = l + vt*dt
volt = vol + vt*dt*a_b
pt = p * (vol/volt)**gamma
tt = t+dt
tempt = t_chamber * (vol_chamber/vol)**(gamma-1)
return tt, ft, at, vt, lt, volt, pt, tempt
data = [(
0, 0, 0, 0, 0, vol_chamber, p_chamber, t_chamber,
),]
i = 0
print(data[0])
while data[-1][4] < l_barrel:
i+=1
print(i)
erg = step(*data[-1])
data.append(erg)
print("done")
tt, ft, at, vt, lt, volt, pt, tempt = np.transpose(data)
plt.plot(lt, pt/1000)
plt.xlabel("Weg ([m]")
plt.ylabel("Pressure [bar]")
plt.show()