initial commit

This commit is contained in:
Daniel Mevec 2025-11-24 21:42:08 +01:00
commit f7bca393a1
4 changed files with 788 additions and 0 deletions

52
1d_sim.py Normal file
View file

@ -0,0 +1,52 @@
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()

477
calc.ipynb Normal file

File diff suppressed because one or more lines are too long

101
calc.py Normal file
View file

@ -0,0 +1,101 @@
import numpy as np
from scipy import constants
import matplotlib.pyplot as plt
# Konstanten und Physik
gasses = {
"air": {
"c_p": 1.005e3, # J/kgK
"c_v": 0.718e3, # J/kgK
"m_mol": 28.949e-3 , # kg/mol
},
}
gas = gasses['air']
temp_r = 273.15+25
r_s = constants.R / gas['m_mol']
# Modellparameter
sample_d = 0.2 #m
sample_l = 0.3 #m
sample_vel = 100 #m/s
sample_m = 6 #kg
chamber_p = 20e5 # Pa
sample_a = (sample_d/2)**2 * np.pi
sample_v = sample_a * sample_l
density = sample_m / sample_v #kg/m³
e_kin = sample_m * sample_vel**2 / 2
print(f"Probenenergie: {e_kin/1000:.0f} kJ")
chamber_v = e_kin/ chamber_p
# chamber_v = 0.05
print(f"Chamber Volume = {chamber_v*1000:.1f} l")
m_g = chamber_v*chamber_p / (r_s * temp_r)
print(f"Gas-Masse = {m_g:.3f} kg = {m_g / (sample_m+m_g) *100:.2f} % der Systemmasse")
# e_kin = (sample_m * sample_vel**2 / 2) + (m_g * sample_vel**2 /6)
# print(f"kinetische System-energie = {e_kin:.0f} J")
## isothermer Ansatz
e_pot = chamber_p * chamber_v
print(f"p V = {e_pot} J")
l_f = chamber_v / sample_a
print(f"l_f = V_c / A = {l_f:.3f} m")
barrel_l = l_f * np.exp(e_kin / e_pot)-l_f
print(f"Lauflänge = {barrel_l:.3f} m")
# Adiabatischer Ansatz
gamma = gas['c_p']/gas['c_v']
print(f"γ = {gamma}")
l_f = chamber_v / sample_a
const = chamber_v*chamber_p *(l_f**(gamma-1)) / (1-gamma)
L = (e_kin/const + l_f**(1-gamma))**(1/(1-gamma)) - l_f
print(f"Lauflänge L = {L:.3f}")
# Grafiken
def work(x):
return const *((l_f + x)**(1-gamma) - l_f**(1-gamma))
def vel(x):
return np.sqrt(2*work(x) /sample_m)
def vol(x):
return chamber_v + sample_a*x
t_0 = 273.15+25
def temp(x):
return t_0 * (chamber_v / vol(x))**(gamma-1)
def pres(x):
return e_pot * (chamber_v / vol(x))**(gamma-1) / chamber_v
print(f"L = {L:.3f}")
l_v = 3
print(f"W(x={L:.3f}, p={chamber_p:.0e}) = {work(L):.3f}")
print(f"p(x={L:.3f}, p={chamber_p:.0e}) = {pres(L):.2e}")
print(f"V(x={L:.3f}, p={chamber_p:.0e}) = {vol(L):.2e}")
print(f"ΔT(x={L:.3f}, p={chamber_p:.0e}) = { temp(L):.2f}")
print(e_kin + vol(L)*pres(L))
l_array = np.linspace(0,L,400)
plt.plot(l_array, vel(l_array))
plt.ylabel('Speed [m/s]')
plt.xlabel('Sample Travel [m]')
plt.show()

158
sim.ipynb Normal file

File diff suppressed because one or more lines are too long