Skip to content

Ideas for new features and examples

Sylwester Arabas edited this page Nov 15, 2021 · 19 revisions

Some of the ideas listed below are good candidates for individual or team projects or theses.

New features:

  • G factor handling for laplacian
  • Fully third order option from Maciek Waruszewski's PhD/paper: http://dx.doi.org/10.1016/j.jcp.2018.01.005
  • Parallelisation using ga4py: https://github.com/GlobalArrays/ga4py
  • Parallelisation using numba-mpi: https://github.com/atmos-cloud-sim-uj/numba-mpi
  • Kahan summation
  • handle multiple fields within PyMPDATA?
  • generalise domain span (to start at fractional or integer index location): (libmpdata++ does it differently (physical space starts at i=1/2, i.e. scalars at boundary) than PyMPDATA (physical space starts at i=0, i.e. vectors at boundary). Here is feedback on the issue from @mwarusz (my wording as translating from Polish):
    • The main (if not the only) difference is in the boundary conditions. For instance, with rigid wall boundary in 1D:

      • in the case of scalars at the boundary, right edge formulae read: u_N = 0 F_{N+1/2} = -F_{N-1/2} => F_N ~ (F_{N+1/2} + F_{N-1/2}) / 2 = 0 where u is the velocity component (scalar) and F is the flux (vector)

      • in the case when the fluxes are at the boundary, the formulae read: u_{N+1/2} = -u_{N-1/2} => u_N ~ (u_{N+1/2} + u_{N-1/2}) / 2 = 0 F_N = 0 To sum up, the difference lies in what do we want to treat analytically in the formulation of boundary conditions, and what to approximate numerically.

      Noteworthy, when using grid-based numerical approximations, we may and up with different formulations, e.g., extrapolation u_N ~ (3 * u_{N-1/2} - u{N-3/2}) / 2) may not fulfill the approximated boundary condition logic.

      Both formulations are valid, there seem not to be a simple reason to say one is better than the other. Would be great to find some discussion of the differences in literature, and implement both options in PyMPDATA!

Performance:

  • LLVM profiling
  • benchmark arakawa_c fields against fortran, blitz++, eigen, ...
  • automated test on travis comparing with libmpdata++ (and/or microHH)
  • min/max searches within FCT could be coalesced
  • test ensuring that apply traversals are done in correct dimension order

Refactors:

  • common base class for VectorField and ScalarField with common code
  • move axpy to formulae
  • njit_flags also in indexers?

New examples:

Misc:

  • MPI tests on Raspberry Pi cluster

Packaging, dissemination, etc:

  • PyPI package
  • conda package

CI features: