Releases: NonlinearOscillations/HarmonicBalance.jl
Releases · NonlinearOscillations/HarmonicBalance.jl
v0.9.0
HarmonicBalance v0.9.0
The new features include:
- All the time evolution feature are now only available when also
OrdinaryDiffEq
is loaded. This makes loading/compile time less convoluted and reduces our namespace in a normal HB session. I would say that in the future we want something similar to Plots. Allowing the user to choose their plotting package and not have clashing namespaces with for exampleMakie.plot
andPlots.plot
. - I added a ModelingToolkit extension which gets loaded when ModelingToolkit is loaded in the same session. It allows us to translate the
HarmonicEquation
struct to anODEProblem
. The ModelingToolkit framework does this very efficiently by: also compiling Jacobian automatically, freedom to choose in-place or out-of-place, making it statically compiling and adding extra structure for the OrdinaryDiffEq solver to use. The result in a dramatic increase in performance when solving the ODE (from 14ms to 500μs). - Lastly, I added a SteadyStateDiffEq extension. For the parameter estimation project, I had to rewrite the HarmonicBalance steady state sweep solver. It was highly inefficient (no use of Jacobian in the RK solver, not static, too many allocations) and it did an interpolation of the parameters sweep where it changed the parameter in every time step. The latter, at first thought, seems a good idea, but it introduces oscillations and you had to evolve for very long which introduces inefficiency and energy loss (timestep integration loss). Instead, we now use a root solver (Newton-Raphson) following the branch until the branch is unstable (bifurcation) and we use a steady solver to find the next branch. This is similar to what
follow_branch
does but without using HomotopyContinuation. This made it Automatic differentiable needed for optimization algorithms.
Merged pull requests:
- Remove
getindex
function forOrderedDict
(#141) (@oameye) - set progressbar length and some formatting (#142) (@oameye)
- add "no_sorting" option (#145) (@oameye)
- HarmonicBalance Extensions (#154) (@oameye)
- Update issue templates (#155) (@oameye)
- Bump actions/checkout from 2 to 4 (#159) (@dependabot[bot])
Closed issues:
v0.8.0
HarmonicBalance v0.8.0
The release contains some breaking changes, i.e., some of you old code will not work on the new version. This includes:
- We changed the keyword
random_warmup::Bool
to replace it withmethod::Char
keyword. We did this to allow more homoyopy methods then:total_degree
and:random_warmup
For example, now you could also use the:polyhedral
method. See Homotopy Continuation documentation for more info. In the future, we are planning to add the:monodromy
method. - For larger systems, the classification was quite slow. This was partly due to inefficient use of dictionary as a data structure. We rewrote the code such that this was avoided and got 3x speedup from it. However, this comes with side effect that costum classification function defined by the user will not work for v0.8. Nevertheless, these costum function can easily be update by assuming a vector instead of dictionary.
Some other (non-breaking) noteworthy changes are:
- We threaded the classification process. Just start your julia instance with some threads and threading is automatically enabled.
- We have added the option to access all the homotopy solver options. The enables you to tweak
tracker_options
andendgame_options
which make the homotopy faster. Just add the kwargs you want to theget_steady_states
and those will be passed on to the homotopysolve
function. - The last but not the least, we finally got a seed feature. This means HarmonicBalance.jl is now completely reproduceable. This not only means that we now can write better tests for the package, but you can also more easily report bugs/results to collaborators. But even better, when sharing code to the outside world it will be reproduceable.
Merged pull requests:
- Fix double progress bar (#128) (@oameye)
- Make it possible to thread the classification of solutions (#130) (@oameye)
- Speed up for classification by refactoring solution interface (#133) (@jkosata)
- change
random_warmup::Bool
keyword tomethod::Char
(#134) (@oameye) - classification bug (#135) (@oameye)
- classification bug (#136) (@oameye)
- Method keyword (#137) (@oameye)
- Add seed to reproduce results/bugs (#138) (@oameye)
- Update test.yml to test on 1.10 (#139) (@oameye)
- Play with warmup method and add polyhedral method (#140) (@oameye)
Closed issues:
get_single_solution
use in internals (#132)
v0.7.2
v0.7.1
LimitCycles module brushed up, reproduces https://arxiv.org/abs/2308.06092
v0.7.0
HarmonicBalance v0.7.0
Merged pull requests:
- plotting branches, optimized sorting, deps removed (#88) (@jkosata)
- Precompilation (#94) (@jkosata)
- Correcting small issues (#95) (@oameye)
- Harmonic balance cleaned (#96) (@oameye)
- Jacobian spectrum in the rotating frame (#99) (@bestlerm)
- upgrading to Symbolics 5.0 (#102) (@oameye)
- Krylov-Bogoliubov (#103) (@oameye)
- Symbolics 5.0 to KB branch (#106) (@oameye)
- Make complex number possible in ParameterRange (#107) (@oameye)
- Fix depricated hysteris_sweep file (#110) (@oameye)
- Eigenvalue plotting function (#115) (@oameye)
- Revert "Fix depricated hysteris_sweep file" (#117) (@jdelpino)
- Fix Depricated hysterysis file (#118) (@oameye)
- tag v7.0 release (#119) (@oameye)
- add CompatHelper and Tagbot to make our life easier (#120) (@oameye)
- CompatHelper: add new compat entry for DelimitedFiles at version 1, (keep existing compat) (#121) (@github-actions[bot])
- CompatHelper: add new compat entry for DocStringExtensions at version 0.9, (keep existing compat) (#122) (@github-actions[bot])
- CompatHelper: bump compat for Latexify to 0.16, (keep existing compat) (#123) (@github-actions[bot])
Closed issues:
- Jacobian eigenvalue plotter is no longer supported in 0.60 (#45)
- Tests for plotting (#52)
- Use precompilation (#53)
- Instability in computing steady states for certain parameter ranges (#62)
- add keyword to the
plot
function to only show specific branches. (#74) - Linear response spectrum in the rotating frame (#97)
- Test performance by using Unityper (#104)
- Need of SnoopPrecompile for julia 1.9 (#105)
- add CompatHelper (#113)
v0.6.4
v0.6.3
What's Changed
new functionality
- Implementation of
plot_spaghetti
andplot2d_cut
by @oameye in #80 - added keyword to control the display of the progress bar (resolves #60) by @oameye in #65
small fixes
- Add
branch
argument to the documentation by @oameye in #66 - Naive implementation of conditional allocation of ProgressBar by @oameye in #73
- Update parametron.md by @oameye in #78
- Data structures to ordered collections by @oameye in #77
- Realify warnings by @oameye in #81
Full Changelog: v0.6.2...v0.6.3
v0.6.2
v0.6.1
v0.6.0
- matplotlib replace by Plots, plotting functions overhauled for more flexibility (see docs)
- slow_flow! bugfixed to keep higher-order derivatives if requested
- LinearResponse simplified to use
plot_linear_response
withorder
as keyword, instead of many different functions - documented examples reduced and updated, made 1:1 with the notebook repo