diff --git a/.vscode/settings.json b/.vscode/settings.json index 7fa0c1ff8..70f540be4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -239,6 +239,7 @@ "outerboundaryis", "overshootable", "planform", + "pointmassmotor", "polystyle", "powerseries", "Prandtl", diff --git a/docs/examples/3_DOF_TRIAL.ipynb b/docs/examples/3_DOF_TRIAL.ipynb new file mode 100644 index 000000000..f5daefa0f --- /dev/null +++ b/docs/examples/3_DOF_TRIAL.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# 3 DOF Rocket Flight Simulation using RocketPy\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from scipy.signal import savgol_filter\n", + "from rocketpy.rocket.rocket import PointMassRocket\n", + "from rocketpy import Flight, Environment, Function, PointMassMotor\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Gravity Details\n", + "\n", + "Acceleration of gravity at surface level: 9.8100 m/s²\n", + "Acceleration of gravity at 1.000 km (ASL): 9.8100 m/s²\n", + "\n", + "\n", + "Launch Site Details\n", + "\n", + "Launch Date: 2020-02-22 13:00:00 UTC\n", + "Launch Site Latitude: 47.21348°\n", + "Launch Site Longitude: 9.00334°\n", + "Reference Datum: SIRGAS2000\n", + "Launch Site UTM coordinates: 500252.61 E 5228887.37 N\n", + "Launch Site UTM zone: 32T\n", + "Launch Site Surface Elevation: 407.0 m\n", + "\n", + "\n", + "Atmospheric Model Details\n", + "\n", + "Atmospheric Model Type: Reanalysis\n", + "Reanalysis Maximum Height: 1.000 km\n", + "Reanalysis Time Period: from 2020-02-22 00:00:00 to 2020-02-22 18:00:00 utc\n", + "Reanalysis Hour Interval: 4 hrs\n", + "Reanalysis Latitude Range: From 48.0° to 46.0°\n", + "Reanalysis Longitude Range: From 8.0° to 10.0°\n", + "\n", + "Surface Atmospheric Conditions\n", + "\n", + "Surface Wind Speed: 1.26 m/s\n", + "Surface Wind Direction: 213.21°\n", + "Surface Wind Heading: 33.21°\n", + "Surface Pressure: 980.43 hPa\n", + "Surface Temperature: 286.63 K\n", + "Surface Air Density: 1.192 kg/m³\n", + "Surface Speed of Sound: 339.39 m/s\n", + "\n", + "\n", + "Earth Model Details\n", + "\n", + "Earth Radius at Launch site: 6366.66 km\n", + "Semi-major Axis: 6378.14 km\n", + "Semi-minor Axis: 6356.75 km\n", + "Flattening: 0.0034\n", + "\n", + "\n", + "Atmospheric Model Plots\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define Environment\n", + "# Environment conditions\n", + "env = Environment(\n", + " gravity=9.81,\n", + " latitude=47.213476,\n", + " longitude=9.003336,\n", + " date=(2020, 2, 22, 13),\n", + " elevation=407,\n", + ")\n", + "\n", + "env.set_atmospheric_model(\n", + " type=\"Reanalysis\",\n", + " file=\"../../data/weather/bella_lui_weather_data_ERA5.nc\",\n", + " dictionary=\"ECMWF\",\n", + ")\n", + "env.max_expected_height = 1000\n", + "env.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Define Motor\n", + "# Thrust profile: constant for 3 seconds\n", + "def thrust_profile(t):\n", + " return 250 if 0 <= t <= 3 else 0\n", + "\n", + "motor = PointMassMotor(\n", + " thrust_source=thrust_profile,\n", + " dry_mass=1.0,\n", + " propellant_initial_mass=0.5,\n", + " propellant_final_mass=0.0,\n", + " burn_time=3.0\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "PointMassRocket.__init__() got an unexpected keyword argument 'drag_coefficient'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mTypeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# Define Rocket\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m rocket = \u001b[43mPointMassRocket\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmass\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m2.0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdrag_coefficient\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m0.75\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 3\u001b[39m rocket.add_motor(motor)\n", + "\u001b[31mTypeError\u001b[39m: PointMassRocket.__init__() got an unexpected keyword argument 'drag_coefficient'" + ] + } + ], + "source": [ + "# Define Rocket\n", + "rocket = PointMassRocket(mass=2.0, drag_coefficient=0.75)\n", + "rocket.add_motor(motor)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Simulate Flight (3 DOF)\n", + "flight = Flight(\n", + " rocket=rocket,\n", + " environment=env,\n", + " rail_length=5.0,\n", + " inclination=85, # degrees from horizontal\n", + " heading=90, # east\n", + " simulation_mode=\"3 DOF\",\n", + " terminate_on_apogee=False,\n", + " max_time=20,\n", + " name=\"Test3DOF\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABsfklEQVR4nO3dd3gU9drG8e9uek9oCaELSG+CIIqFDiKCooiiVAGRIgKCKB0E6V0QFRFFQCzoQURCUQTpRao06RBAICQhbZOd9w9kX2MIJJBkNsn9ua5ch535zcz9ZJKTx6kWwzAMRERERHIxq9kBRERERMymhkhERERyPTVEIiIikuupIRIREZFcTw2RiIiI5HpqiERERCTXU0MkIiIiuZ4aIhEREcn11BCJiIhIrqeGSESyTPHixXnqqafMjnFHv/zyCxaLhV9++eWOY0+cOIHFYmH+/PmZngugQ4cOFC9ePEu2lZWKFy9Ohw4dzI4huZgaIpH/2L9/P88//zz33Xcf3t7e5MuXj8cee4z//e9/aVp++PDhWCwWx5e3tzdFixalefPmfPrpp8THx6e67PLly2nSpAl58+bF09OT+++/n/79+3P58uUUYzt06JBsO//+Wrly5W0zFi9ePNl4Hx8fatasyYIFC9JUozP4/fffGT58OBEREeletnXr1lgsFgYOHJjmZb788kumTp2aprErVqxg+PDh6c6Vk9xsKtPyJeIMXM0OIOJsTp48SVRUFO3btyc0NJSYmBi++eYbnn76aT788EO6du2apvXMnj0bX19f4uPjOXv2LD///DOdOnVi6tSpLF++nCJFiiQb379/fyZNmkSVKlUYOHAgefLkYefOncycOZPFixezZs0aypQpk2wZDw8PPv744xTbrlKlyh3zVa1alX79+gFw/vx5Pv74Y9q3b098fDxdunRJU41m+v333xkxYgQdOnQgMDAwzctFRkbyv//9j+LFi7No0SLef//9NP1R/vLLL9m3bx99+vRJNr1YsWLExsbi5ubmmLZixQpmzZqVq5uicuXK8fnnnyebNmjQIHx9fXn33XdTjD906BBWq/4bXUxkiMgdJSYmGlWqVDHKlClzx7HDhg0zAOPSpUsp5n3xxReG1Wo1atWqlWz6l19+aQDGCy+8YCQmJiabt2XLFsPb29uoVKmSYbPZHNPbt29v+Pj43FU9xYoV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FpGRkamessxqN7+vpUuXTjGvTJky7Ny50/H5yJEjXLt2LcXPxk0XL1687baef/55+vbty5IlS3jnnXcwDIOlS5fStGlTx/ejRIkS9O3bl8mTJ7Nw4UIeffRRnn76aV5++eVkDVtmKFq0aLLPN7f337s0AwICkl0bdK/fF8l91BCJpNFzzz1Ht27dOHz4cIrb39Nj3759AJQqVQr4/+Ziz549qS5z8uRJIiMj09RwpFW+fPkczVTjxo0pW7YsTz31FNOmTUtxfVBGqlChAhEREXz++ed069aNEiVKOObdPPozYcIEqlatesvlbx5hS68vvvgCgDfffJM333wzxfxvvvmGjh073tW60yq1RjopKemu12m32ylQoECqR7nudF1VaGgojz76KF999RXvvPMOmzdv5tSpU4wbNy7ZuEmTJtGhQwe+//57Vq1aRe/evRk7diybN2+mcOHCd53/Tv57k8Htphv/uqj6Xr8vkvuoIRJJo9jYWIB7vqvm5oWfjRs3BuD+++/n/vvvZ9myZUybNu2Wp85uPjAxM5/y3KxZMx5//HHGjBlDt27d8PHxoVixYqxevZqoqKhkuf7880/gxjN4AEqWLIndbufAgQOpNjI35cuXj6+//po6depQv359NmzYQGhoqGM9AP7+/nc88pWeo3SGYfDll19St25dXn/99RTzR40axcKFC2/bEKVne6mNvXlk678XIv/3Lq+b39ebR8z+7dChQ8k+lyxZktWrV/PII4/g5eWV5oz/9sILL/D6669z6NAhlixZgre3N82bN08xrlKlSlSqVInBgwfz+++/88gjjzBnzhxGjx59V9vNTBnxfZHcRdcQifzHrQ6l22w2FixYgJeX1z0dpfnyyy/5+OOPqV27drI71oYOHcrVq1d57bXXUhwt2LFjB+PGjaNixYq0atXqrredFgMHDuTy5ct89NFHADz55JMkJSUxc+bMZOOmTJmCxWKhadOmALRs2RKr1crIkSNTXONj3OL2/MKFC7N69WpiY2Np2LCh40nc1atXp2TJkkycONFxavHfLl265Pi3j48PkLK5uJWNGzdy4sQJOnbsyHPPPZfi64UXXmDdunWcO3cu1XX4+PikuRlOLVuxYsVwcXFh/fr1yaZ/8MEHyT4XLFiQqlWr8tlnnyXbZlhYGAcOHEg2tnXr1iQlJTFq1KgUORITE9P0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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot Altitude\n", + "times = np.linspace(0, flight.time, 10000)\n", + "altitudes = [flight.z(t) for t in times]\n", + "\n", + "plt.plot(times, altitudes)\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Altitude (m)\")\n", + "plt.title(\"3 DOF Rocket Altitude vs Time\")\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulation Mode: 3 DOF\n", + "Equations of Motion: standard\n" + ] + } + ], + "source": [ + "print(f\"Simulation Mode: {flight.simulation_mode}\")\n", + "\n", + "# Display additional details about the equations if available in the simulation object\n", + "if hasattr(flight, 'equations_of_motion'):\n", + " print(f\"Equations of Motion: {flight.equations_of_motion}\")\n", + "else:\n", + " print(\"No explicit equations of motion found in flight class\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/rocketpy/__init__.py b/rocketpy/__init__.py index f99a70f28..a4218ee27 100644 --- a/rocketpy/__init__.py +++ b/rocketpy/__init__.py @@ -18,6 +18,7 @@ MassFlowRateBasedTank, Motor, SolidMotor, + PointMassMotor, SphericalTank, Tank, TankGeometry, @@ -37,6 +38,7 @@ Parachute, RailButtons, Rocket, + PointMassRocket, Tail, TrapezoidalFins, ) diff --git a/rocketpy/motors/__init__.py b/rocketpy/motors/__init__.py index 73f49633c..4c00436a7 100644 --- a/rocketpy/motors/__init__.py +++ b/rocketpy/motors/__init__.py @@ -4,6 +4,7 @@ from .liquid_motor import LiquidMotor from .motor import GenericMotor, Motor from .solid_motor import SolidMotor +from .pointmassmotor import PointMassMotor from .tank import ( LevelBasedTank, MassBasedTank, diff --git a/rocketpy/motors/pointmassmotor.py b/rocketpy/motors/pointmassmotor.py new file mode 100644 index 000000000..36a231756 --- /dev/null +++ b/rocketpy/motors/pointmassmotor.py @@ -0,0 +1,266 @@ +from functools import cached_property + +import numpy as np + +from typing import Callable + +from rocketpy.mathutils.function import Function, funcify_method +from .motor import Motor + +class PointMassMotor(Motor): + """Class representing a motor modeled as a point mass. + + Inherits from the Motor class and simplifies the model to a thrust-producing + object without detailed structural components. The total mass of the motor + will vary with propellant consumption, similar to a standard motor. However, + its inertia components and the center of propellant mass are considered zero + and fixed at the motor's reference point, respectively. + """ + + def __init__( + self, + thrust_source, + dry_mass, + propellant_initial_mass, + burn_time = None, + propellant_final_mass = None, + reshape_thrust_curve = False, + interpolation_method = "linear", + ): + """Initialize the PointMassMotor class. + + This motor simplifies the physical model by considering its mass to be + concentrated at a single point, effectively setting all its inertia + components to zero. Propellant mass variation and exhaust velocity + are still simulated and derived from the thrust and propellant consumption + characteristics, similar to the base Motor class. + + Parameters + ---------- + thrust_source : int, float, callable, str, numpy.ndarray, Function + Thrust source. Can be a constant value (int, float), a callable + function of time, a path to a CSV file, a NumPy array, or a + RocketPy `Function` object. + dry_mass : float + Total dry mass of the motor in kg. + propellant_initial_mass : float + Initial mass of the propellant in kg. This is a required parameter + as the point mass motor will still simulate propellant consumption. + burn_time : float, optional + Total burn time of the motor in seconds. Required if `thrust_source` + is a constant value or a callable function, and `propellant_final_mass` + is not provided. If `thrust_source` is a CSV, array, or Function, + the burn time is derived from it. + propellant_final_mass : float, optional + Final mass of the propellant in kg. Required if `thrust_source` + is a callable function and `burn_time` is not provided. If not + provided, it is calculated by the base Motor class. + reshape_thrust_curve : bool, optional + Whether to reshape the thrust curve to start at t=0 and end at + burn_time. Defaults to False. + interpolation_method : str, optional + Interpolation method for the thrust curve, if applicable. + Defaults to 'linear'. + + Raises + ------ + ValueError + If insufficient data is provided for mass flow rate calculation. + TypeError + If an invalid type is provided for `thrust_source`. + """ + if isinstance(thrust_source, (int, float, Callable)): + if propellant_initial_mass is None: + raise ValueError( + "For constant or callable thrust, 'propellant_initial_mass' is required." + ) + if burn_time is None and propellant_final_mass is None: + raise ValueError( + "For constant or callable thrust, either 'burn_time' or " + "'propellant_final_mass' must be provided." + ) + + elif isinstance(thrust_source, (Function, np.ndarray, str)): + if propellant_initial_mass is None: + raise ValueError( + "For thrust from a Function, NumPy array, or CSV, 'propellant_initial_mass' is required." + ) + else: + raise TypeError( + "Invalid 'thrust_source' type. Must be int, float, callable, str, numpy.ndarray, or Function." + ) + + self._propellant_initial_mass = propellant_initial_mass + self.propellant_final_mass = propellant_final_mass + + super().__init__( + thrust_source=thrust_source, + dry_inertia=(0, 0, 0), # Inertia is zero for a point mass + nozzle_radius=0, # Nozzle radius is irrelevant for a point mass model + center_of_dry_mass_position=0, # Pass 0 directly to the superclass + dry_mass=dry_mass, + nozzle_position=0, # Nozzle is at the motor's origin + burn_time=burn_time, + reshape_thrust_curve=reshape_thrust_curve, + interpolation_method=interpolation_method, + coordinate_system_orientation="nozzle_to_combustion_chamber", # Standard orientation + ) + + # Removed the thrust method. It will now be inherited directly from the Motor base class, + # which already correctly handles the conversion of thrust_source to a Function + # and exposes it as a cached property. + + # Removed the total_mass override. The base Motor class's total_mass property + # will now correctly calculate dry_mass + propellant_mass(t), which is the desired + # varying mass behavior for the point mass motor. + + # Removed the center_of_dry_mass_position override. It is now passed directly + # to the super().__init__ as 0. + @property + def propellant_initial_mass(self): + """Returns the initial propellant mass for a point mass motor. + + This property retrieves the value set during initialization. This implementation + is required as 'propellant_initial_mass' is an abstract method in the parent Motor class. + + Returns + ------- + float + Propellant initial mass in kg. + """ + return self._propellant_initial_mass + + @funcify_method("Time (s)", "Exhaust velocity (m/s)") + def exhaust_velocity(self): + """Exhaust velocity by assuming it as a constant. The formula used is + total impulse/propellant initial mass. + + Returns + ------- + self.exhaust_velocity : Function + Gas exhaust velocity of the motor. + + Notes + ----- + This corresponds to the actual exhaust velocity only when the nozzle + exit pressure equals the atmospheric pressure. + """ + return Function( + self.total_impulse / self.propellant_initial_mass + ).set_discrete_based_on_model(self.thrust) + + @cached_property + @funcify_method("Time (s)", "Mass flow rate (kg/s)", extrapolation="zero") + def total_mass_flow_rate(self) -> Function: + """Time derivative of the propellant mass as a function of time. + + It calculates mass flow rate as the negative of thrust divided by exhaust velocity, + consistent with the fundamental rocket equation. + + Returns + ------- + Function + Time derivative of total propellant mass a function of time. + """ + + exhaust_vel_func = self.exhaust_velocity + return -self.thrust / exhaust_vel_func + + @cached_property + @funcify_method("Time (s)", "Propellant Mass (kg)") + def center_of_propellant_mass(self): + """Returns the position of the center of mass of the propellant. + + For a point mass motor, the propellant's center of mass is considered + to be at the origin (0) of the motor's coordinate system. + + Returns + ------- + Function + A Function object representing the center of propellant mass (always 0). + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_11(self): + """Returns the propellant moment of inertia around the x-axis. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_12(self): + """Returns the propellant product of inertia I_xy. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_13(self): + """Returns the propellant product of inertia I_xz. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_22(self): + """Returns the propellant moment of inertia around the y-axis. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_23(self): + """Returns the propellant product of inertia I_yz. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 + + @cached_property + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_33(self): + """Returns the propellant moment of inertia around the z-axis. + + For a point mass motor, this is always zero. + + Returns + ------- + Function + A Function object representing zero propellant inertia. + """ + return 0 diff --git a/rocketpy/rocket/__init__.py b/rocketpy/rocket/__init__.py index 0687b5ee5..4019c87b8 100644 --- a/rocketpy/rocket/__init__.py +++ b/rocketpy/rocket/__init__.py @@ -15,3 +15,4 @@ from rocketpy.rocket.components import Components from rocketpy.rocket.parachute import Parachute from rocketpy.rocket.rocket import Rocket +from rocketpy.rocket.rocket import PointMassRocket \ No newline at end of file diff --git a/rocketpy/rocket/rocket.py b/rocketpy/rocket/rocket.py index 31ef9dd3f..f8bfe0a91 100644 --- a/rocketpy/rocket/rocket.py +++ b/rocketpy/rocket/rocket.py @@ -2003,3 +2003,108 @@ def from_dict(cls, data): ) return rocket + +class PointMassRocket(Rocket): + """Rocket modeled as a point mass for 3-DOF simulations.""" + + def __init__(self, mass, radius=0.05): + self, + radius: float = 0, + mass: float = 0, + center_of_mass: float = 0, + power_off_drag = 0, + power_on_drag = 0, + super().__init__( + radius=radius, + mass=mass, + inertia=(0, 0, 0), + center_of_mass_without_motor=center_of_mass, + power_off_drag=power_off_drag, + power_on_drag=power_on_drag, + ) + + def I_11(self) -> Function: + """Returns the moment of inertia around the x-axis for a point mass (always 0).""" + return Function(0) + + def I_22(self) -> Function: + """Returns the moment of inertia around the y-axis for a point mass (always 0).""" + return Function(0) + + def I_33(self) -> Function: + """Returns the moment of inertia around the z-axis for a point mass (always 0).""" + return Function(0) + + def I_12(self) -> Function: + """Returns the product of inertia I_xy for a point mass (always 0).""" + return Function(0) + + def I_13(self) -> Function: + """Returns the product of inertia I_xz for a point mass (always 0).""" + return Function(0) + + def I_23(self) -> Function: + """Returns the product of inertia I_yz for a point mass (always 0).""" + return Function(0) + + @property + def dry_I_11(self) -> float: + """Returns the dry moment of inertia around the x-axis for a point mass (always 0).""" + return 0.0 + + @property + def dry_I_22(self) -> float: + """Returns the dry moment of inertia around the y-axis for a point mass (always 0).""" + return 0.0 + + @property + def dry_I_33(self) -> float: + """Returns the dry moment of inertia around the z-axis for a point mass (always 0).""" + return 0.0 + + @property + def dry_I_12(self) -> float: + """Returns the dry product of inertia I_xy for a point mass (always 0).""" + return 0.0 + + @property + def dry_I_13(self) -> float: + """Returns the dry product of inertia I_xz for a point mass (always 0).""" + return 0.0 + + @property + def dry_I_23(self) -> float: + """Returns the dry product of inertia I_yz for a point mass (always 0).""" + return 0.0 + + def evaluate_inertias(self): + """Calculates and returns the rocket's inertias. For a PointMassRocket, these are always zero.""" + self.I_11 = self.I_22 = self.I_33 = Function(0) + self.I_12 = self.I_13 = self.I_23 = Function(0) + return (0, 0, 0, 0, 0, 0) + + def evaluate_dry_inertias(self): + """Calculates and returns the rocket's dry inertias. For a PointMassRocket, these are always zero.""" + self.dry_I_11 = self.dry_I_22 = self.dry_I_33 = 0.0 + self.dry_I_12 = self.dry_I_13 = self.dry_I_23 = 0.0 + return (0, 0, 0, 0, 0, 0) + + @property + def center_of_mass(self) -> Function: + """Returns the center of mass for a PointMassRocket. + If a motor is attached, this will be the motor's center of mass. + Otherwise, it will be the `center_of_mass_without_motor`. + """ + if self.motor and not isinstance(self.motor, EmptyMotor): + return self.motor_center_of_mass_position + return Function(self.center_of_mass_without_motor) + + @property + def center_of_dry_mass_position(self) -> float: + """Returns the center of dry mass position for a PointMassRocket. + If a motor is attached, this will be the motor's center of dry mass position. + Otherwise, it will be the `center_of_mass_without_motor`. + """ + if self.motor and not isinstance(self.motor, EmptyMotor): + return self.motor_center_of_dry_mass_position + return self.center_of_mass_without_motor diff --git a/rocketpy/simulation/flight.py b/rocketpy/simulation/flight.py index e1db71ba7..8121015ef 100644 --- a/rocketpy/simulation/flight.py +++ b/rocketpy/simulation/flight.py @@ -489,6 +489,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-statements verbose=False, name="Flight", equations_of_motion="standard", + simulation_mode="6 DOF", ode_solver="LSODA", ): """Run a trajectory simulation. @@ -602,6 +603,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-statements self.terminate_on_apogee = terminate_on_apogee self.name = name self.equations_of_motion = equations_of_motion + self.simulation_mode = simulation_mode self.ode_solver = ode_solver # Controller initialization @@ -1191,9 +1193,15 @@ def __init_solver_monitors(self): def __init_equations_of_motion(self): """Initialize equations of motion.""" - if self.equations_of_motion == "solid_propulsion": + if self.equations_of_motion == "solid_propulsion" and self.simulation_mode == '6 DOF': # NOTE: The u_dot is faster, but only works for solid propulsion self.u_dot_generalized = self.u_dot + elif self.equations_of_motion == "solid_propulsion" and self.simulation_mode == '3 DOF': + # NOTE: The u_dot is faster, but only works for solid propulsion + self.u_dot_generalized = self.u_dot_3dof + elif self.simulation_mode == '3 DOF': + # NOTE: The u_dot is faster, but only works for solid propulsion + self.u_dot_generalized = self.u_dot_generalized_3dof def __init_controllers(self): """Initialize controllers and sensors""" @@ -1427,26 +1435,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals # Retrieve integration data _, _, z, vx, vy, vz, e0, e1, e2, e3, omega1, omega2, omega3 = u # Determine lift force and moment + omega1, omega2, omega3 = 0, 0, 0 R1, R2, M1, M2, M3 = 0, 0, 0, 0, 0 # Thrust correction parameters pressure = self.env.pressure.get_value_opt(z) # Determine current behavior - if self.rocket.motor.burn_start_time < t < self.rocket.motor.burn_out_time: + if t < self.rocket.motor.burn_out_time: # Motor burning # Retrieve important motor quantities - # Inertias - motor_I_33_at_t = self.rocket.motor.I_33.get_value_opt(t) - motor_I_11_at_t = self.rocket.motor.I_11.get_value_opt(t) - motor_I_33_derivative_at_t = self.rocket.motor.I_33.differentiate( - t, dx=1e-6 - ) - motor_I_11_derivative_at_t = self.rocket.motor.I_11.differentiate( - t, dx=1e-6 - ) # Mass - mass_flow_rate_at_t = self.rocket.motor.mass_flow_rate.get_value_opt(t) propellant_mass_at_t = self.rocket.motor.propellant_mass.get_value_opt(t) # Thrust + net_thrust = max( self.rocket.motor.thrust.get_value_opt(t) + self.rocket.motor.pressure_thrust(pressure), @@ -1457,39 +1457,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals M2 -= self.rocket.thrust_eccentricity_x * net_thrust else: # Motor stopped - # Inertias - ( - motor_I_33_at_t, - motor_I_11_at_t, - motor_I_33_derivative_at_t, - motor_I_11_derivative_at_t, - ) = (0, 0, 0, 0) # Mass - mass_flow_rate_at_t, propellant_mass_at_t = 0, 0 + propellant_mass_at_t = 0 # thrust net_thrust = 0 # Retrieve important quantities - # Inertias - rocket_dry_I_33 = self.rocket.dry_I_33 - rocket_dry_I_11 = self.rocket.dry_I_11 # Mass rocket_dry_mass = self.rocket.dry_mass # already with motor's dry mass total_mass_at_t = propellant_mass_at_t + rocket_dry_mass mu = (propellant_mass_at_t * rocket_dry_mass) / ( propellant_mass_at_t + rocket_dry_mass ) - # Geometry - # b = -self.rocket.distance_rocket_propellant - b = ( - -( - self.rocket.center_of_propellant_position.get_value_opt(0) - - self.rocket.center_of_dry_mass_position - ) - * self.rocket._csys - ) - c = self.rocket.nozzle_to_cdm - nozzle_radius = self.rocket.motor.nozzle_radius # Prepare transformation matrix a11 = 1 - 2 * (e2**2 + e3**2) a12 = 2 * (e1 * e2 - e0 * e3) @@ -1538,9 +1517,6 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals R3 = air_brakes_force # Substitutes rocket drag coefficient else: R3 += air_brakes_force - # Off center moment - M1 += self.rocket.cp_eccentricity_y * R3 - M2 -= self.rocket.cp_eccentricity_x * R3 # Get rocket velocity in body frame vx_b = a11 * vx + a21 * vy + a31 * vz vy_b = a12 * vx + a22 * vy + a32 * vz @@ -1584,92 +1560,19 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals R1 += X R2 += Y R3 += Z - M1 += M - M2 += N - M3 += L - # Off center moment - M3 += self.rocket.cp_eccentricity_x * R2 - self.rocket.cp_eccentricity_y * R1 - - # Calculate derivatives - # Angular acceleration - alpha1 = ( - M1 - - ( - omega2 - * omega3 - * ( - rocket_dry_I_33 - + motor_I_33_at_t - - rocket_dry_I_11 - - motor_I_11_at_t - - mu * b**2 - ) - + omega1 - * ( - ( - motor_I_11_derivative_at_t - + mass_flow_rate_at_t - * (rocket_dry_mass - 1) - * (b / total_mass_at_t) ** 2 - ) - - mass_flow_rate_at_t - * ((nozzle_radius / 2) ** 2 + (c - b * mu / rocket_dry_mass) ** 2) - ) - ) - ) / (rocket_dry_I_11 + motor_I_11_at_t + mu * b**2) - alpha2 = ( - M2 - - ( - omega1 - * omega3 - * ( - rocket_dry_I_11 - + motor_I_11_at_t - + mu * b**2 - - rocket_dry_I_33 - - motor_I_33_at_t - ) - + omega2 - * ( - ( - motor_I_11_derivative_at_t - + mass_flow_rate_at_t - * (rocket_dry_mass - 1) - * (b / total_mass_at_t) ** 2 - ) - - mass_flow_rate_at_t - * ((nozzle_radius / 2) ** 2 + (c - b * mu / rocket_dry_mass) ** 2) - ) - ) - ) / (rocket_dry_I_11 + motor_I_11_at_t + mu * b**2) - alpha3 = ( - M3 - - omega3 - * ( - motor_I_33_derivative_at_t - - mass_flow_rate_at_t * (nozzle_radius**2) / 2 - ) - ) / (rocket_dry_I_33 + motor_I_33_at_t) - # Euler parameters derivative - e0dot = 0.5 * (-omega1 * e1 - omega2 * e2 - omega3 * e3) - e1dot = 0.5 * (omega1 * e0 + omega3 * e2 - omega2 * e3) - e2dot = 0.5 * (omega2 * e0 - omega3 * e1 + omega1 * e3) - e3dot = 0.5 * (omega3 * e0 + omega2 * e1 - omega1 * e2) - # Linear acceleration L = [ ( R1 - - b * propellant_mass_at_t * (omega2**2 + omega3**2) - - 2 * c * mass_flow_rate_at_t * omega2 + ) / total_mass_at_t, ( R2 - + b * propellant_mass_at_t * (alpha3 + omega1 * omega2) - + 2 * c * mass_flow_rate_at_t * omega1 + ) / total_mass_at_t, + (R3 - b * propellant_mass_at_t * (alpha2 - omega1 * omega3) + net_thrust) / total_mass_at_t, ] @@ -1690,17 +1593,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals ax, ay, az, - e0dot, - e1dot, - e2dot, - e3dot, - alpha1, - alpha2, - alpha3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, ] if post_processing: self.__post_processed_variables.append( + [ t, ax, @@ -1718,6 +1622,127 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals net_thrust, ] ) + return u_dot + + def u_dot_generalized_3dof(self, t, u, post_processing=False): + """Calculates derivative of u state vector with respect to time when the + rocket is flying in 3 DOF motion in space and significant mass variation + effects exist. + + Parameters + ---------- + t : float + Time in seconds. + u : list + State vector: [x, y, z, vx, vy, vz, q0, q1, q2, q3, omega1, omega2, omega3]. + post_processing : bool, optional + If True, adds flight data to self variables like self.angle_of_attack. + + Returns + ------- + list + Derivative state vector: [vx, vy, vz, ax, ay, az, + e0_dot, e1_dot, e2_dot, e3_dot, alpha1, alpha2, alpha3]. + """ + # Unpack state + _, _, z, vx, vy, vz, e0, e1, e2, e3, omega1, omega2, omega3 = u + + # Define vectors + v = Vector([vx, vy, vz]) + e = [e0, e1, e2, e3] + w = Vector([omega1, omega2, omega3]) + + # Mass and transformation + total_mass = self.rocket.total_mass.get_value_opt(t) + K = Matrix.transformation(e) + Kt = K.transpose + + # Atmospheric and wind data + rho = self.env.density.get_value_opt(z) + wind_vx = self.env.wind_velocity_x.get_value_opt(z) + wind_vy = self.env.wind_velocity_y.get_value_opt(z) + wind_velocity = Vector([wind_vx, wind_vy, 0]) + + free_stream_velocity = wind_velocity - v + free_stream_speed = abs(free_stream_velocity) + speed_of_sound = self.env.speed_of_sound.get_value_opt(z) + mach = free_stream_speed / speed_of_sound + + # Drag computation + if t < self.rocket.motor.burn_out_time: + cd = self.rocket.power_on_drag.get_value_opt(mach) + else: + cd = self.rocket.power_off_drag.get_value_opt(mach) + + R1, R2, R3 = 0, 0, -0.5 * rho * free_stream_speed**2 * self.rocket.area * cd + + for air_brake in self.rocket.air_brakes: + if air_brake.deployment_level > 0: + ab_cd = air_brake.drag_coefficient.get_value_opt( + air_brake.deployment_level, mach + ) + ab_force = ( + -0.5 + * rho + * free_stream_speed**2 + * air_brake.reference_area + * ab_cd + ) + if air_brake.override_rocket_drag: + R3 = ab_force + else: + R3 += ab_force + + # Velocity in body frame + vb_body = Kt @ v + + for surface, _ in self.rocket.aerodynamic_surfaces: + cp = self.rocket.surfaces_cp_to_cdm[surface] + vb_component = vb_body + (w ^ cp) + + comp_z = z + (K @ cp).z + wind_cx = self.env.wind_velocity_x.get_value_opt(comp_z) + wind_cy = self.env.wind_velocity_y.get_value_opt(comp_z) + wind_body = Kt @ Vector([wind_cx, wind_cy, 0]) + + rel_velocity = wind_body - vb_component + rel_speed = abs(rel_velocity) + rel_mach = rel_speed / speed_of_sound + + reynolds = ( + self.env.density.get_value_opt(comp_z) + * rel_speed + * surface.reference_length + / self.env.dynamic_viscosity.get_value_opt(comp_z) + ) + + fx, fy, fz, *_ = surface.compute_forces_and_moments( + rel_velocity, rel_speed, rel_mach, rho, cp, w, reynolds + ) + R1 += fx + R2 += fy + R3 += fz + + # Thrust and weight + thrust = self.rocket.motor.thrust.get_value_opt(t) + gravity = self.env.gravity.get_value_opt(z) + weight_body = Kt @ Vector([0, 0, -total_mass * gravity]) + + total_force = Vector([0, 0, thrust]) + weight_body + Vector([R1, R2, R3]) + + # Dynamics + v_dot = K @ (total_force / total_mass) + e_dot = [0, 0, 0, 0] # Euler derivatives unused in 3DOF + w_dot = [0, 0, 0] # No angular dynamics in 3DOF + r_dot = [vx, vy, vz] + + u_dot = [*r_dot, *v_dot, *e_dot, *w_dot] + + if post_processing: + self.__post_processed_variables.append( + [t, *v_dot, *w_dot, R1, R2, R3, 0, 0, 0] + + ) return u_dot @@ -1726,7 +1751,7 @@ def u_dot_generalized(self, t, u, post_processing=False): # pylint: disable=too rocket is flying in 6 DOF motion in space and significant mass variation effects exist. Typical flight phases include powered ascent after launch rail. - + Parameters ---------- t : float