# Roadmap

## Clean up code and increase [code coverage](https://app.codecov.io/gh/fluiddyn/fluidsim)

Code not covered should be removed, except for very good reasons.

fluidsim-core should be >~95%, with proper unittests.

See <https://foss.heptapod.net/fluiddyn/fluidsim/-/issues/100>

## Fluidsim-core and fluidsim-... packages for using third-party programs

- snek5000 stable

- fluidsim-core should grow, in particular by moving code from fluidsim and
  snek5000 to fluidsim-core when needed for the implementation of another package
  (in particular fluidsim-openfoam).

- fluidsim-... (OpenFoam, Dedalus, Basilisk, ...)

## Fluidsim

Specialized in pseudo-spectral Fourier.

- Questions about focus:

  - What about cos/sin transforms?

  - What about `fluidsim.solvers.sphere`?

- SVV (Spectral Vanishing Viscosity)

- Different diffusivity coefficients for different variables (Prandtl/Schmidt
  numbers), in particular for ns3d.strat.

- cos/sin transform (how? options operators?)

- More 3D solvers:

  - MHD
  - [Gross–Pitaevskii equation](https://en.wikipedia.org/wiki/Gross%E2%80%93Pitaevskii_equation)
  - ... (?)

- Linear stability (as in
  [NS3D](http://yakari.polytechnique.fr/people/deloncle/ns3d.html)

- FFT accelerated with GPU and MPI+GPU (fluidfft)

- Shear as in [Snoopy](https://ipag.osug.fr/~lesurg/snoopy.html) (see
  [#99](https://foss.heptapod.net/fluiddyn/fluidsim/-/issues/99))

- Simul class made of 2 (or n) interacting Simul classes. For example, ns2d +
  passive scalar at higher resolution. Or fluid-structure interaction as in
  [FLUSI](https://github.com/pseudospectators/FLUSI) (see
  [!104](https://foss.heptapod.net/fluiddyn/fluidsim/-/issues/104))

- Particles and Lagrangian dynamics

## Long term

- API to dynamically define a solver

"Ability to dynamically and concisely build a solver is what Dedalus is good at.
And performance and batteries-included approach is where FluidSim shines. Our
InfoSolver + Parameters approach is flexible but requires a lot of boilerplate
code. Even today I always need to refer to documentation while creating a new
solver. It must be possible to create intuitive factory classes which dynamically
generate InfoSolver, Parameters, Simul classes for us. We could refer to some well
known design patterns for inspiration." (Ashwin V. Mohanan)

- Explore use of type hints

Inline or separate *.pyi files? Use MonkeyType or similar to autogenerate type
hints from tests? Some inspiration:
[FOSDEM talk](https://fosdem.org/2022/schedule/event/python_type_safety/) and
[this blog post](https://nskm.xyz/posts/stcmp2/)
