Skip to content

BUG: Fix incorrect Jacobian in only_radial_burn branch of SolidMotor.evaluate_geometry#944

Merged
MateusStano merged 3 commits intorel/v1.12.0from
copilot/sub-pr-935
Mar 20, 2026
Merged

BUG: Fix incorrect Jacobian in only_radial_burn branch of SolidMotor.evaluate_geometry#944
MateusStano merged 3 commits intorel/v1.12.0from
copilot/sub-pr-935

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 20, 2026

The geometry_jacobian function in SolidMotor.evaluate_geometry had copy-paste errors in the only_radial_burn branch — the formulas were carried over from the non-radial burn case without adjustment, producing a mathematically wrong Jacobian that can degrade or derail LSODA integration.

Pull request type

  • Code changes (bugfix, features)

Checklist

  • CHANGELOG.md has been updated (if relevant)

Current behavior

For only_radial_burn, burn_area = 2π·r·h, so ṙ = −vdiff / (2π·r·h).

The Jacobian was incorrectly computed as:

  • ∂ṙ/∂r = factor * (h − 2r) — copied from the non-radial case where d(burn_area)/dr = 2π(h−2r)
  • ∂ṙ/∂h = 0 — wrong; height appears in the denominator so it has a non-zero partial

New behavior

Correct partial derivatives for burn_area = 2π·r·h:

# ṙ = -vdiff / (2π·r·h), factor = vdiff / (2π·(r·h)²)
inner_radius_derivative_wrt_inner_radius = factor * grain_height   # ∂ṙ/∂r = vdiff/(2π·r²·h)
inner_radius_derivative_wrt_height       = factor * grain_inner_radius  # ∂ṙ/∂h = vdiff/(2π·r·h²)
# dh/dt = 0, so height Jacobian row remains zero
height_derivative_wrt_inner_radius = 0
height_derivative_wrt_height       = 0

Breaking change

  • No

💬 Send tasks to Copilot coding agent from Slack and Teams to turn conversations into code. Copilot posts an update in your thread when it's finished.

Copilot AI mentioned this pull request Mar 20, 2026
…ometry

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
Copilot AI changed the title [WIP] [WIP] Addressing feedback from PR #935 for release v1.12.0 BUG: Fix incorrect Jacobian in only_radial_burn branch of SolidMotor.evaluate_geometry Mar 20, 2026
Copilot AI requested a review from MateusStano March 20, 2026 01:13
# ∂ṙ/∂h = vdiff/(2π*r*h²) = factor * r
inner_radius_derivative_wrt_inner_radius = factor * grain_height
inner_radius_derivative_wrt_height = factor * grain_inner_radius
# dh/dt = 0, so all partial derivatives of height are zero
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# dh/dt = 0, so all partial derivatives of height are zero
# dh/dt = 0 (Height is a constant), so all partial derivatives of height are zero

@MateusStano MateusStano marked this pull request as ready for review March 20, 2026 01:55
@MateusStano MateusStano requested a review from a team as a code owner March 20, 2026 01:55
@MateusStano MateusStano merged commit d9c79ba into rel/v1.12.0 Mar 20, 2026
16 checks passed
@MateusStano MateusStano deleted the copilot/sub-pr-935 branch March 20, 2026 02:09
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 20, 2026

Codecov Report

❌ Patch coverage is 0% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.09%. Comparing base (03f20c1) to head (4ad0554).
⚠️ Report is 5 commits behind head on rel/v1.12.0.

Files with missing lines Patch % Lines
rocketpy/motors/solid_motor.py 0.00% 2 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##           rel/v1.12.0     #944   +/-   ##
============================================
  Coverage        81.09%   81.09%           
============================================
  Files              107      107           
  Lines            13906    13906           
============================================
  Hits             11277    11277           
  Misses            2629     2629           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

MateusStano added a commit that referenced this pull request Mar 20, 2026
…or.evaluate_geometry` (#944)

* Initial plan

* BUG: Fix incorrect Jacobian in only_radial_burn branch of evaluate_geometry

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
MateusStano added a commit that referenced this pull request Apr 6, 2026
* BUG: Fix hard-coded radius value for parachute added mass calculation (#889)

* Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Address code review: improve docstrings and add explicit None defaults

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Add CHANGELOG entry for PR #889

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Update rocket.add_parachute to use radius=None for consistency

Changed the default radius from 1.5 to None in the add_parachute method
to match the Parachute class behavior. This ensures consistent automatic
radius calculation from cd_s across both APIs.

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Add CHANGELOG entry for PR #889

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

MNT: Extract noise initialization to fix pylint too-many-statements in Parachute.__init__

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Refactor environment method access in controller test for clarity

* fix pylint

* fix comments

* avoid breaking change with drag_coefficient

* reafactors Parachute.__init__ method

* fix tests

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>

* ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Models Broken
Fixes #933

* ENH: Add guidelines for simulation safety, Sphinx documentation, and pytest standards (GitHub Copilot) (#937)

* REL: bump version to 1.12

* ENH: Add explicit timeouts to ThrustCurve API requests and update changelog (#940)

* Initial plan

* ENH: Add explicit timeouts to ThrustCurve API requests

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* DOC: Add timeout fix PR to changelog

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* ENH: Restore power_off/on_drag as Function objects; add _input attributes for raw user input and update changelog (#941)

* Initial plan

* ENH: Restore power_off/on_drag as Function, add _input attributes for raw user input

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* DOC: Add PR #941 compatibility fix to changelog

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* Update rocketpy/rocket/rocket.py

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: ruff pylint

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: MateusStano <mateusstano@usp.br>

* MNT: Remove unused imports and deprecated functions from mathutils/function.py

* BUG: Readd SourceType enumeration for function source types and clean up imports

* BUG: Fix incorrect Jacobian in `only_radial_burn` branch of `SolidMotor.evaluate_geometry` (#944)

* Initial plan

* BUG: Fix incorrect Jacobian in only_radial_burn branch of evaluate_geometry

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* ENH: move weathercocking_coeff to PointMassRockt

* MNT: ruff

* MNT: fix cyclic import

* BUG: Add wraparound logic for wind direction in environment plots (#939)

* chore: added personal toolkit files

* update branch name in workflow

* chore: update toolkit files

* Fix: add wraparound logic for wind direction and related tests

* style: fix ruff formatting

* Remove unused import

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* refactor: move repetitive logic into helper method

* fix: update test logic in test_environment

* add changelog entry

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: add numpy import to test_environment.py

* MNT: rename constant for wraparound threshold in _break_direction_wraparound method

* ENH: Adaptive Monte Carlo via Convergence Criteria (#922)

* ENH: added a new function (simulate_convergence)

* DOC: added a cell to show simulate_convergence function usage

* TST: integration test for simulate_convergence

* DOC: updated changelog for this PR

* ENH: ran black to lint intg test file

* new fixes thx to copilot comments

* linted rocketpy/simulation/monte_carlo.py

---------

Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>

* DOC: add latitude range in docs

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: remove unnecessary pylint warning

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: remove unnecessary pylint warning

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* DOC: correctly link to WeatherModelMapping

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* DOCS: checked todo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ENH: address copilot comments

* TST: improve tests

* ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Models Broken
Fixes #933

* BUG: Fix hard-coded radius value for parachute added mass calculation (#889)

* Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Address code review: improve docstrings and add explicit None defaults

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Add CHANGELOG entry for PR #889

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Update rocket.add_parachute to use radius=None for consistency

Changed the default radius from 1.5 to None in the add_parachute method
to match the Parachute class behavior. This ensures consistent automatic
radius calculation from cd_s across both APIs.

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Add CHANGELOG entry for PR #889

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

MNT: Extract noise initialization to fix pylint too-many-statements in Parachute.__init__

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Refactor environment method access in controller test for clarity

* fix pylint

* fix comments

* avoid breaking change with drag_coefficient

* reafactors Parachute.__init__ method

* fix tests

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>

* ENH: Add guidelines for simulation safety, Sphinx documentation, and pytest standards (GitHub Copilot) (#937)

* REL: bump version to 1.12

* BUG: Add wraparound logic for wind direction in environment plots (#939)

* chore: added personal toolkit files

* update branch name in workflow

* chore: update toolkit files

* Fix: add wraparound logic for wind direction and related tests

* style: fix ruff formatting

* Remove unused import

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* refactor: move repetitive logic into helper method

* fix: update test logic in test_environment

* add changelog entry

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: add numpy import to test_environment.py

* MNT: rename constant for wraparound threshold in _break_direction_wraparound method

* DOC: add latitude range in docs

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: remove unnecessary pylint warning

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: remove unnecessary pylint warning

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* ENH: address copilot comments

* TST: improve tests

* DOC: correctly link to WeatherModelMapping

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* DOCS: checked todo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ENH: Adaptive Monte Carlo via Convergence Criteria (#922)

* ENH: added a new function (simulate_convergence)

* DOC: added a cell to show simulate_convergence function usage

* TST: integration test for simulate_convergence

* DOC: updated changelog for this PR

* ENH: ran black to lint intg test file

* new fixes thx to copilot comments

* linted rocketpy/simulation/monte_carlo.py

---------

Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>

* DEV: remove unwanted changes from develop

* DEV: Update for hotfix

* TST: add tests

* MNT: remove changes from develop again

* MNT: Refactor longitude and latitude index functions

* MNT: ruff

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
Co-authored-by: Khushal Kottaru <khushal.kottaru@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mohammed S. Al-Mahrouqi <malmahrouqi3@gatech.edu>
Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants