Skip to content
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
170e89c
Merge pull request #869 from RocketPy-Team/master
phmbressan Nov 2, 2025
b451c38
Fix CSV column header spacing in FlightDataExporter (#865)
Copilot Nov 21, 2025
9da4565
Enh/custom warning no motor parachute aerosurface (#871)
Bizo883 Nov 26, 2025
157042d
Enh/motor thrustcurve api (#870)
Marchma0 Nov 27, 2025
8c732d4
ENH: Enable only radial burning (#815)
caioessouza Nov 27, 2025
704c796
ENH: Implementing 3-dof-simulation (#745)
aZira371 Nov 27, 2025
02c1827
ENH: Compatibility with MERRA-2 atmosphere reanalysis files #825 (#877)
Monta120 Nov 27, 2025
ae46e55
Enh/thrustcurve api cache (#881)
Monta120 Nov 27, 2025
d63add7
DOC: fix changelog after recent merges
Gui-FernandesBR Nov 27, 2025
0c8790e
ENH: Add save functionality to _MonteCarloPlots.all method (#884)
Copilot Nov 27, 2025
3cf266b
Fix parallel Monte Carlo simulation showing incorrect iteration count…
Copilot Nov 27, 2025
793e5f6
FIX documentation issues (#886)
Gui-FernandesBR Nov 27, 2025
2b6fa42
Feat/flight comparison (#888)
Monta120 Dec 2, 2025
b252199
Enh/bootstrapping for ci estimation (#897)
Marchma0 Dec 2, 2025
4ef7e77
FEAT/Rail Button Bending Moments (#901)
Monta120 Dec 3, 2025
afb3e3e
Env/flight axial acceleration (#876)
hogatata Dec 3, 2025
a5d67c7
ENH: add animations for motor propellant mass and tank fluid volumes …
Bizo883 Dec 3, 2025
607af52
ENH: reorganize changelog entries for clarity and consistency
Gui-FernandesBR Dec 3, 2025
45a7369
ENH: Add multi-dimensional drag coefficient support (Cd as function o…
Copilot Dec 3, 2025
14b9984
ENH: 3-dof lateral motion improvement (#883)
aZira371 Dec 3, 2025
6eaf99d
TST: add branch coverage for fin_flutter_analysis and fix keyword arg…
erielc Dec 4, 2025
eaa9181
MNT: net thrust addition to 3 dof in flight class (#907)
aZira371 Dec 4, 2025
a25fd25
Enh/automatically download images (#896)
C8H10O2 Dec 8, 2025
45a891e
ENH: Refactor Flight class to improve time node handling and sensor/c…
Gui-FernandesBR Dec 9, 2025
05d7f90
DOCs: Fix documentation build (#908)
Gui-FernandesBR Dec 15, 2025
ba77fd5
ENH: replace if elif else chains with match statement (#921)
tibisabau Dec 16, 2025
7a10e29
TST: Add acceptance tests for 3DOF flight simulation based on Bella L…
Copilot Dec 23, 2025
c4b03e8
MNT: ruff update
MateusStano Feb 24, 2026
10457f9
Fix incorrect indexing in max_acceleration_power_off_time (#898)
Copilot Feb 24, 2026
8cdb69f
BUG: Duplicate _controllers in Flight.TimeNodes.merge() (#931)
zuorenchen Feb 28, 2026
0df092d
ENH: Improve multi-variable drag compatibility, regular-grid handling…
MateusStano Mar 8, 2026
b41e7c3
REL: bump version to 1.12
MateusStano Mar 8, 2026
b0bc810
BUG: Fix missing titles in roll parameter plots for fin sets (#934)
Gui-FernandesBR Mar 8, 2026
37dd8de
DOC: HEDY Flight Example (#928)
theDiego21 Mar 8, 2026
e5fcc93
ENH: Air brakes controller functions now support 8-parameter signatur…
RahulKrishna145 Mar 9, 2026
1544355
REL: bump version to 1.12
MateusStano Mar 8, 2026
ccb19ab
Merge branch 'rel/v1.12.0' of https://github.com/RocketPy-Team/Rocket…
MateusStano Mar 9, 2026
1618fb0
MNT: Add pylint disable for too-many-statements in env test
MateusStano Mar 9, 2026
cd967f4
BUG: Fix hard-coded radius value for parachute added mass calculation…
Copilot Mar 14, 2026
6e13e2b
REL: bump version to 1.12
MateusStano Mar 8, 2026
8938aa7
ENH: Add explicit timeouts to ThrustCurve API requests and update cha…
Copilot Mar 19, 2026
03f20c1
ENH: Restore power_off/on_drag as Function objects; add _input attrib…
Copilot Mar 20, 2026
556afaf
MNT: Remove unused imports and deprecated functions from mathutils/fu…
MateusStano Mar 20, 2026
0c6fce1
BUG: Readd SourceType enumeration for function source types and clean…
MateusStano Mar 20, 2026
d9c79ba
BUG: Fix incorrect Jacobian in `only_radial_burn` branch of `SolidMot…
Copilot Mar 20, 2026
e431490
ENH: move weathercocking_coeff to PointMassRockt
MateusStano Mar 20, 2026
4a64b37
MNT: ruff
MateusStano Mar 20, 2026
1e748d8
MNT: fix cyclic import
MateusStano Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ cython_debug/
# Docs
*.docx
*.pdf
docs/*.gif

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
Expand Down
5 changes: 1 addition & 4 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,6 @@ recursive=no
# source root.
source-roots=

# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode=yes

# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
Expand Down Expand Up @@ -229,6 +225,7 @@ good-names=FlightPhases,
center_of_mass_without_motor_to_CDM,
motor_center_of_dry_mass_to_CDM,
generic_motor_cesaroni_M1520,
Re, # Reynolds number

# Good variable names regexes, separated by a comma. If names match any regex,
# they will always be accepted
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@
"outerboundaryis",
"overshootable",
"planform",
"pointmassmotor",
"polystyle",
"powerseries",
"Prandtl",
Expand Down
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,50 @@ Attention: The newest changes should be on top -->

### Added

-

### Changed

-

### Fixed

-

## [v1.12.0] - 2026-03-08

### Added

- TST: Add acceptance tests for 3DOF flight simulation based on Bella Lui rocket [#914] (https://github.com/RocketPy-Team/RocketPy/pull/914_
- ENH: Add background map auto download functionality to Monte Carlo plots [#896](https://github.com/RocketPy-Team/RocketPy/pull/896)
- MNT: net thrust addition to 3 dof in flight class [#907] (https://github.com/RocketPy-Team/RocketPy/pull/907)
- ENH: 3-dof lateral motion improvement [#883](https://github.com/RocketPy-Team/RocketPy/pull/883)
- ENH: Add multi-dimensional drag coefficient support (Cd as function of M, Re, α) [#875](https://github.com/RocketPy-Team/RocketPy/pull/875)
- ENH: Add save functionality to `_MonteCarloPlots.all` method [#848](https://github.com/RocketPy-Team/RocketPy/pull/848)
- ENH: add animations for motor propellant mass and tank fluid volumes [#894](https://github.com/RocketPy-Team/RocketPy/pull/894)
- ENH: Rail button bending moments calculation in Flight class [#893](https://github.com/RocketPy-Team/RocketPy/pull/893)
- ENH: Implement Bootstrapping for Confidence Interval Estimation [#891](https://github.com/RocketPy-Team/RocketPy/pull/897)
- ENH: Built-in flight comparison tool (`FlightComparator`) to validate simulations against external data [#888](https://github.com/RocketPy-Team/RocketPy/pull/888)
- ENH: Add persistent caching for ThrustCurve API [#881](https://github.com/RocketPy-Team/RocketPy/pull/881)
Comment thread
MateusStano marked this conversation as resolved.
- ENH: Add axial_acceleration attribute to the Flight class [#876](https://github.com/RocketPy-Team/RocketPy/pull/876)
- ENH: custom warning no motor or aerosurface [#871](https://github.com/RocketPy-Team/RocketPy/pull/871)
- ENH: Add thrustcurve api integration to retrieve motor eng data [#870](https://github.com/RocketPy-Team/RocketPy/pull/870)
- ENH: Compatibility with MERRA-2 atmosphere reanalysis files [#825](https://github.com/RocketPy-Team/RocketPy/pull/825)
- ENH: Enable only radial burning [#815](https://github.com/RocketPy-Team/RocketPy/pull/815)

### Changed

- ENH: Improve multi-variable drag compatibility, regular-grid handling, and related tests/docs [#927](https://github.com/RocketPy-Team/RocketPy/pull/927/changes)
- ENH: replace if elif else chains with match statement [#921](https://github.com/RocketPy-Team/RocketPy/pull/921/changes)
- ENH: Refactor Flight class to improve time node handling and sensor/controllers [#843](https://github.com/RocketPy-Team/RocketPy/pull/843)

### Fixed

- DOC: Fix documentation build [#908](https://github.com/RocketPy-Team/RocketPy/pull/908)
- BUG: energy_data plot not working for 3 dof sims [[#906](https://github.com/RocketPy-Team/RocketPy/issues/906)]
- BUG: Fix CSV column header spacing in FlightDataExporter [#864](https://github.com/RocketPy-Team/RocketPy/issues/864)
- BUG: Fix parallel Monte Carlo simulation showing incorrect iteration count [#806](https://github.com/RocketPy-Team/RocketPy/pull/806)
- BUG: Duplicate _controllers in Flight.TimeNodes.merge() [#931](https://github.com/RocketPy-Team/RocketPy/pull/931)

## [v1.11.0] - 2025-11-01

Expand Down Expand Up @@ -71,6 +111,7 @@ Attention: The newest changes should be on top -->
## [v1.10.0] - 2025-05-16

### Added

- ENH: Support for ND arithmetic in Function class. [#810] (https://github.com/RocketPy-Team/RocketPy/pull/810)
- ENH: allow users to provide custom samplers [#803](https://github.com/RocketPy-Team/RocketPy/pull/803)
- ENH: Implement Multivariate Rejection Sampling (MRS) [#738] (https://github.com/RocketPy-Team/RocketPy/pull/738)
Expand Down
10 changes: 8 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
# -- Project information -----------------------------------------------------

project = "RocketPy"
copyright = "2025, RocketPy Team"
copyright = "2026, RocketPy Team"

author = "RocketPy Team"

# The full version, including alpha/beta/rc tags
release = "1.11.0"
release = "1.12.0"


# -- General configuration ---------------------------------------------------
Expand Down Expand Up @@ -61,6 +61,12 @@
# Don't run notebooks
nbsphinx_execute = "never"

# Configure jupyter_sphinx execution behavior
jupyter_execute_kwargs = {
"timeout": 300, # 5 minutes timeout per cell
"allow_errors": True, # Continue building even if cells raise errors
Comment thread
MateusStano marked this conversation as resolved.
}

# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]

Expand Down
603 changes: 516 additions & 87 deletions docs/notebooks/monte_carlo_analysis/monte_carlo_class_usage.ipynb

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion docs/user/compare_flights.rst
Original file line number Diff line number Diff line change
Expand Up @@ -226,4 +226,5 @@ Alternatively, we can plot the results altogether by calling one simple method:

.. jupyter-execute::

comparison.all()
# commented to avoid long output
# comparison.all()
21 changes: 21 additions & 0 deletions docs/user/environment/1-atm-models/reanalysis.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,27 @@ ERA5 data can be downloaded from the
processed by RocketPy. It is recommended that you download only the \
necessary data.

MERRA-2
-------

The Modern-Era Retrospective analysis for Research and Applications, Version 2 (MERRA-2) is a NASA atmospheric reanalysis for the satellite era using the Goddard Earth Observing System, Version 5 (GEOS-5) with its Atmospheric Data Assimilation System (ADAS).

You can download these files from the `NASA GES DISC <https://disc.gsfc.nasa.gov/>`_.

To use MERRA-2 data in RocketPy, you generally need the **Assimilated Meteorological Fields** collection (specifically the 3D Pressure Level data, usually named ``inst3_3d_asm_Np``). Note that MERRA-2 files typically use the ``.nc4`` extension (NetCDF-4), which is fully supported by RocketPy.

You can load these files using the ``dictionary="MERRA2"`` argument:

.. code-block:: python

env.set_atmospheric_model(
type="Reanalysis",
file="MERRA2_400.inst3_3d_asm_Np.20230620.nc4",
dictionary="MERRA2"
)

RocketPy automatically handles the unit conversion for MERRA-2's surface geopotential (energy) to geometric height (meters).


Setting the Environment
^^^^^^^^^^^^^^^^^^^^^^^
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ Other profiles can be derived from it, however, winds are automatically set to

env.plots.atmospheric_model()

.. skip one line with |
|
|

The International Standard Atmosphere can also be reset at any time by using the
:meth:`rocketpy.Environment.set_atmospheric_model` method. For example:
Expand Down
13 changes: 9 additions & 4 deletions docs/user/first_simulation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ regarding the launch site:

| This roughly corresponds to the location of Spaceport America, New Mexico.


Next, we need to specify the atmospheric model to be used. In this example,
we will get GFS forecasts data from tomorrow.

Expand All @@ -110,6 +111,7 @@ of tomorrow:

| Now we set the atmospheric model to be used:


.. jupyter-execute::

env.set_atmospheric_model(type="Forecast", file="GFS")
Expand Down Expand Up @@ -189,6 +191,7 @@ to specify several parameters:

| We can see its characteristics by calling the info method:


.. jupyter-execute::

Pro75M1670.info()
Expand Down Expand Up @@ -637,8 +640,9 @@ and the rocket Mach number (see :meth:`rocketpy.Flight.mach_number`) to the file
)

| As you can see, the first argument is the file name to be created. The following
arguments are the attributes to be exported. We can check the file by reading it
with :func:`pandas.read_csv`:
arguments are the attributes to be exported. We can check the file by reading it
with :func:`pandas.read_csv`:


.. jupyter-execute::

Expand All @@ -647,8 +651,9 @@ with :func:`pandas.read_csv`:
pd.read_csv("calisto_flight_data.csv")

| The file header specifies the meaning of each column. The time samples are
obtained from the simulation solver steps. To export the data at a different
sampling rate, use the ``time_step`` argument:
obtained from the simulation solver steps. To export the data at a different
sampling rate, use the ``time_step`` argument:


.. jupyter-execute::

Expand Down
33 changes: 33 additions & 0 deletions docs/user/flight.rst
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,39 @@ The Flight object provides access to all forces and accelerations acting on the
M2 = flight.M2 # Pitch moment
M3 = flight.M3 # Yaw moment

Rail Button Forces and Bending Moments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

During the rail launch phase, RocketPy calculates reaction forces and internal bending moments at the rail button attachment points:

**Rail Button Forces (N):**

- ``rail_button1_normal_force`` : Normal reaction force at upper rail button
- ``rail_button1_shear_force`` : Shear (tangential) reaction force at upper rail button
- ``rail_button2_normal_force`` : Normal reaction force at lower rail button
- ``rail_button2_shear_force`` : Shear (tangential) reaction force at lower rail button

**Rail Button Bending Moments (N⋅m):**

- ``rail_button1_bending_moment`` : Time-dependent bending moment at upper rail button attachment
- ``max_rail_button1_bending_moment`` : Maximum absolute bending moment at upper rail button
- ``rail_button2_bending_moment`` : Time-dependent bending moment at lower rail button attachment
- ``max_rail_button2_bending_moment`` : Maximum absolute bending moment at lower rail button

**Calculation Method:**

Bending moments are calculated using beam theory assuming simple supports (rail buttons provide reaction forces but no moment reaction at rail contact). The total moment combines:

1. Shear force × button height (cantilever moment from button standoff)
2. Normal force × distance to center of dry mass (lever arm effect)

Moments are zero after rail departure and represent internal structural loads for airframe and fastener stress analysis. Requires ``button_height`` to be defined when adding rail buttons via ``rocket.set_rail_buttons()``.

.. note::
See Issue #893 for implementation details and validation approach.



Attitude and Orientation
~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
Loading
Loading