Skip to content

Commit 0873d21

Browse files
committed
ENH: added radius and porosity to parachute
1 parent 3fe2b62 commit 0873d21

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

rocketpy/rocket/parachute.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ def __init__(
102102
sampling_rate,
103103
lag=0,
104104
noise=(0, 0, 0),
105+
parachute_radius=1.5,
106+
porosity=0.0432,
105107
):
106108
"""Initializes Parachute class.
107109
@@ -161,6 +163,8 @@ def __init__(
161163
self.sampling_rate = sampling_rate
162164
self.lag = lag
163165
self.noise = noise
166+
self.parachute_radius = parachute_radius
167+
self.porosity = porosity
164168
self.noise_signal = [[-1e-6, np.random.normal(noise[0], noise[1])]]
165169
self.noisy_pressure_signal = []
166170
self.clean_pressure_signal = []
@@ -264,6 +268,8 @@ def to_dict(self, include_outputs=False):
264268
"sampling_rate": self.sampling_rate,
265269
"lag": self.lag,
266270
"noise": self.noise,
271+
"parachute_radius": self.parachute_radius,
272+
"porosity": self.porosity,
267273
}
268274

269275
if include_outputs:
@@ -290,6 +296,8 @@ def from_dict(cls, data):
290296
sampling_rate=data["sampling_rate"],
291297
lag=data["lag"],
292298
noise=data["noise"],
299+
parachute_radius=data["parachute_radius"],
300+
porosity=data["porosity"],
293301
)
294302

295303
return parachute

rocketpy/simulation/flight.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,13 @@ def __simulate(self, verbose):
767767
callbacks = [
768768
lambda self, parachute_cd_s=parachute.cd_s: setattr(
769769
self, "parachute_cd_s", parachute_cd_s
770-
)
770+
),
771+
lambda self, parachute_radius=parachute.radius: setattr(
772+
self, "parachute_radius", parachute_radius
773+
),
774+
lambda self, parachute_porosity=parachute.porosity: setattr(
775+
self, "parachute_porosity", parachute_porosity
776+
),
771777
]
772778
self.flight_phases.add_phase(
773779
node.t + parachute.lag,
@@ -1013,7 +1019,13 @@ def __simulate(self, verbose):
10131019
lambda self,
10141020
parachute_cd_s=parachute.cd_s: setattr(
10151021
self, "parachute_cd_s", parachute_cd_s
1016-
)
1022+
),
1023+
lambda self, parachute_radius=parachute.radius: setattr(
1024+
self, "parachute_radius", parachute_radius
1025+
),
1026+
lambda self, parachute_porosity=parachute.porosity: setattr(
1027+
self, "parachute_porosity", parachute_porosity
1028+
),
10171029
]
10181030
self.flight_phases.add_phase(
10191031
overshootable_node.t + parachute.lag,
@@ -1961,22 +1973,26 @@ def u_dot_parachute(self, t, u, post_processing=False):
19611973

19621974
# Get Parachute data
19631975
cd_s = self.parachute_cd_s
1976+
R = self.parachute_radius
1977+
porosity = self.parachute_porosity
1978+
19641979

19651980
# Get the mass of the rocket
19661981
mp = self.rocket.dry_mass
19671982

19681983
# Define constants
1969-
ka = 1 # Added mass coefficient (depends on parachute's porosity)
1970-
R = 1.5 # Parachute radius
1984+
ka = 1.068 * (1 - 1.465 * porosity - 0.25975 * porosity**2 + 1.2626 * porosity**3)
19711985
# to = 1.2
19721986
# eta = 1
19731987
# Rdot = (6 * R * (1 - eta) / (1.2**6)) * (
19741988
# (1 - eta) * t**5 + eta * (to**3) * (t**2)
19751989
# )
19761990
# Rdot = 0
19771991

1992+
# tf = 8 * nominal diameter / velocity at line stretch
1993+
19781994
# Calculate added mass
1979-
ma = ka * rho * (4 / 3) * np.pi * R**3
1995+
ma = ka * rho * (4 / 3) * np.pi * R**3 # ma = ka * rho * (4 / 3) * np.pi * R**2 * height
19801996

19811997
# Calculate freestream speed
19821998
freestream_x = vx - wind_velocity_x
@@ -1985,9 +2001,9 @@ def u_dot_parachute(self, t, u, post_processing=False):
19852001
free_stream_speed = (freestream_x**2 + freestream_y**2 + freestream_z**2) ** 0.5
19862002

19872003
# Determine drag force
1988-
pseudo_drag = -0.5 * rho * cd_s * free_stream_speed
2004+
pseudo_drag = -0.5 * rho * cd_s * free_stream_speed # * Area
19892005
# pseudo_drag = pseudo_drag - ka * rho * 4 * np.pi * (R**2) * Rdot
1990-
Dx = pseudo_drag * freestream_x
2006+
Dx = pseudo_drag * freestream_x # add eta efficiency for wake
19912007
Dy = pseudo_drag * freestream_y
19922008
Dz = pseudo_drag * freestream_z
19932009
ax = Dx / (mp + ma)

0 commit comments

Comments
 (0)