Skip to content

Conversation

@cmbenne3
Copy link
Contributor

@cmbenne3 cmbenne3 commented Dec 10, 2025

Summary

This PR makes the necessary changes to enable the Dymos PicardShooting transcription to be used in addition to the current collocation (Radau) transcription.

A new setting 'transcription' has been added into the phase_info declaration. This has two options:

  1. 'Collocation'
  2. 'PicardShooting'

The make_default_transcription() method of the flight_phase_builder class has been updated to use this setting to set the dymos transcription of each phase. An error message is thrown if the user sets this to something that is not supported (anything other than the above options). If the user omits does not specify a transcription then 'Collocation' is used by default to maintain backwards compatibility.

Adding this setting to the phase_info gives this functionality to level 1 and level 2 users.

To support this change the way the control, state and time initialization values are set has been updates to use the correct Dymos methods, and Dymos handles the differences for shooting under the hood.

The L3 example has been updated to unpack the trajectory setup and expose the interactions with Dymos and OpenMDAO. The L3 example still runs the same aircraft and mission as the L2 and L1 examples.

2 new tests are added to the test_height_energy_mission suite to test that the shooting method works:

  1. For basic case of FwFm with the nominal phase info
  2. For a more advanced case where mach, and altitude are optimized and a throttle path constraint is added.

Since the phase info polynomial control orders are still set to 1 I think both of these missions will still consist of straight line segments for each phase.

The docs have been sparsely updated in the places where collocation is mentioned. I wasn't sure what to do for this page:
image
Does this still hold true for shooting?

Backwards incompatibilities

None

New Dependencies

None

@cmbenne3 cmbenne3 marked this pull request as draft December 10, 2025 18:06
@cmbenne3 cmbenne3 marked this pull request as ready for review January 27, 2026 21:58
segment_ends=seg_ends,
)
if transcription_type == 'Collocation':
seg_ends, _ = dm.utils.lgl.lgl(num_segments + 1)
Copy link
Member

Choose a reason for hiding this comment

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

Probably a question for Rob, but I wonder if this LGL (clustering points near the ends) is also supported in Picard shooting.

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.

2 participants