Skip to content

Commit

Permalink
Create aerospace_dynamics_simulator.py
Browse files Browse the repository at this point in the history
  • Loading branch information
KOSASIH authored Jul 30, 2024
1 parent b113c5f commit df833a1
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions core/aerospace/aerospace_dynamics_simulator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import numpy as np
from scipy.integrate import odeint

class AerospaceDynamicsSimulator:
def __init__(self, vehicle_mass, vehicle_size, atmospheric_conditions):
self.vehicle_mass = vehicle_mass
self.vehicle_size = vehicle_size
self.atmospheric_conditions = atmospheric_conditions

def simulate(self, time_step, total_time):
# Define the equations of motion
def equations_of_motion(state, t):
# Calculate forces and moments
forces = self.calculate_forces(state)
moments = self.calculate_moments(state)

# Update state variables
state_dot = np.array([
state[1],
forces / self.vehicle_mass,
state[3],
moments / self.vehicle_mass
])

return state_dot

# Initialize state variables
state0 = np.array([0, 0, 0, 0])

# Simulate the dynamics
state = odeint(equations_of_motion, state0, np.arange(0, total_time, time_step))

return state

def calculate_forces(self, state):
# Calculate aerodynamic forces
aerodynamic_forces = self.calculate_aerodynamic_forces(state)

# Calculate gravitational forces
gravitational_forces = self.calculate_gravitational_forces(state)

return aerodynamic_forces + gravitational_forces

def calculate_moments(self, state):
# Calculate aerodynamic moments
aerodynamic_moments = self.calculate_aerodynamic_moments(state)

return aerodynamic_moments

def calculate_aerodynamic_forces(self, state):
# Calculate air density
air_density = self.atmospheric_conditions.air_density(state[2])

# Calculate aerodynamic coefficients
aerodynamic_coefficients = self.vehicle_size.aerodynamic_coefficients(state[1])

# Calculate aerodynamic forces
aerodynamic_forces = 0.5 * air_density * aerodynamic_coefficients * state[1]**2

return aerodynamic_forces

def calculate_gravitational_forces(self, state):
# Calculate gravitational acceleration
gravitational_acceleration = self.atmospheric_conditions.gravitational_acceleration(state[2])

# Calculate gravitational forces
gravitational_forces = self.vehicle_mass * gravitational_acceleration

return gravitational_forces

def calculate_aerodynamic_moments(self, state):
# Calculate air density
air_density = self.atmospheric_conditions.air_density(state[2])

# Calculate aerodynamic coefficients
aerodynamic_coefficients = self.vehicle_size.aerodynamic_coefficients(state[1])

# Calculate aerodynamic moments
aerodynamic_moments = 0.5 * air_density * aerodynamic_coefficients * state[1]**2 * self.vehicle_size.length

return aerodynamic_moments

0 comments on commit df833a1

Please sign in to comment.