Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is yet another possible refactoring of the single-stage example in #301 suggested by @mbkumar, as an alternative to #317. In this approach,
MPIFiniteDifference
broadcastsfull_x
instead of just the freex
, so there is no extra data that needs to be broadcast. The coil dofs are fixed during the finite-differencing, then un-fixed to update the coil dofs and compute their gradient analytically, then fixed again for the next finite-differencing, etc. Even though the coil dofs are fixed during the finite differencing, they are still part offull_x
, so they get broadcast.To get this working, a few functions were added to
Optimizable
: a setter forfull_x
(copied from @mbkumar 's commit to #317), andfull_fix()
andfull_unfix()
to set the free/fixed property for the full dofs on which an object depends. Corresponding tests have been added. A few changes from #301 tofinite_difference.py
andoptimizable.py
have been reverted, as in #317.For
single_stage_optimization_finite_beta.py
, this branch gives identical values for all quantities at the end of the optimization and uses fewer calls toVirtualCasing.from_vmec()
compared to #301.I don't have a super strong preference between this approach and #317, but perhaps slightly prefer this one, since it makes sense that
full_x
should be synched byMPIFiniteDifference
anyway. What do you think?