OrdinaryDiffEq.jl icon indicating copy to clipboard operation
OrdinaryDiffEq.jl copied to clipboard

Lie Group Integrators

Open ChrisRackauckas opened this issue 4 years ago • 11 comments

For u' = A(u,p,t)*u. In theory this could apply to arbitrary f, but we can just show in documentation how to use the Jacobian for this.

From https://arxiv.org/pdf/1207.0069.pdf :

  • [x] Lie–Euler
  • [x] Runge–Kutta–Munthe-Kaas 2
  • [x] Crouch-Grossman 2
  • [x] Runge–Kutta–Munthe-Kaas 4 (RKMK4)
  • [x] LieRK4 (extension to 16)

http://papers.rgrossman.com/journal-011.pdf

  • [x] CG3
  • [ ] CGMS3

https://link.springer.com/content/pdf/10.1023/A:1016645730465.pdf

  • [x] CG4a
  • [ ] CG5a

https://link.springer.com/content/pdf/10.1023/A:1022325426017.pdf

  • [ ] CG3
  • [ ] CG4
  • [ ] CGSDIRK3
  • [ ] CGESDIRK3

Hairer III

  • [ ] CG32 (the other is the same as CG3) page 125
  • [ ] LieMidpoint page 127

ChrisRackauckas avatar Mar 12 '20 23:03 ChrisRackauckas

Lie-Euler implemented in #1090

Biswajitghosh98 avatar Mar 18 '20 23:03 Biswajitghosh98

Out of curiosity, how is one supposed to supply the function for the group exponential?

mateuszbaran avatar Mar 24 '20 13:03 mateuszbaran

You define your f as an operator with and the operator specification has https://docs.juliadiffeq.org/latest/features/diffeq_operator/#AbstractDiffEqLinearOpeartor-Interface-Description-1 exp and expv

ChrisRackauckas avatar Mar 24 '20 21:03 ChrisRackauckas

Nice. I'll try integrating it with the Lie group functionality of Manifolds.jl.

mateuszbaran avatar Mar 24 '20 21:03 mateuszbaran

oh interesting. Yes, let us know what you need. If we're missing anything in the interface to do this effectively, we can make modifications.

ChrisRackauckas avatar Mar 24 '20 21:03 ChrisRackauckas

Sure, I'll let you know if I encounter any problems.

mateuszbaran avatar Mar 24 '20 21:03 mateuszbaran

Could you always use calls like expv(dt, L, u) when performing a step for Lie group integrators?Converting the operator to matrix for all non-Krylov methods seems restrictive. Similarly I'd like to be able to separately get dt, L and u for other methods (in case they are required by other integrators then LieEuler) like the Lie group action, logarithmic map or the differential of the group action.

By the way, wouldn't your LieEuler work for any Riemannian manifold given the right exponential map? Is there a reason for restricting it to Lie groups?

mateuszbaran avatar Mar 28 '20 12:03 mateuszbaran

There is an option in each implementation for either using exp or expv.

ChrisRackauckas avatar Mar 28 '20 13:03 ChrisRackauckas

So the only consequence of setting krylov to true here: https://github.com/SciML/OrdinaryDiffEq.jl/pull/1090/files#diff-9d28f892ddd67f73e3e8d9cc88442486R50 is that expv will be used? Does it have any other effects? I'm not particularly familiar with DifferentialEquations.jl yet.

mateuszbaran avatar Mar 28 '20 14:03 mateuszbaran

For the algorithms that use exponentials, yes.

By the way, wouldn't your LieEuler work for any Riemannian manifold given the right exponential map? Is there a reason for restricting it to Lie groups?

It only requires a right exponential map.

ChrisRackauckas avatar Mar 28 '20 14:03 ChrisRackauckas

  • [x] Runge–Kutta–Munthe-Kaas 2 by #1216
  • [x] Crouch-Grossman 2 by #1227
  • [x] Runge–Kutta–Munthe-Kaas 4 (RKMK4) by #1218
  • [x] LieRK4 (extension to 16) by #1226
  • [x] CG3 by #1240
  • [x] CG4a by by #1921

ErikQQY avatar Mar 30 '23 08:03 ErikQQY