-
Notifications
You must be signed in to change notification settings - Fork 36
Ideas for new features and examples
Sylwester Arabas edited this page Sep 15, 2023
·
76 revisions
Some of the ideas listed below are good candidates for individual or team projects or theses.
- mixing scenario indicator product (like the alpha parameter from Grabowski & Morrison)
- deliquescence + efflorescence
- cloud formation on adiabatic descent (Bohren 1986, JAS)
- radiative transfer (see Numba code here: https://doi.org/10.1016/j.cpc.2021.108198)
- cloud biology: https://acp.copernicus.org/articles/20/1777/2020/acp-20-1777-2020.html
- Ouzo (Ostwald ripening)
- ventilation coefficient in condensation
- turbulent kernels
- drop temperatures
- the initial water amount added to the system by r_wet_init - where and how to take into account/report
- diffusion kinetics as in eq. 9 G&T'21: https://acp.copernicus.org/articles/21/4059/2021/
- add checks for mass conservation in dry radius discretisation (if we are discretising number distribution, in the example (or even within initialisation logic) we should be able to impose a threshold on the acceptable level of incurred mass difference (between the one obtainable via moments of dry volume and the analytical value stemming from lognormal distribution parameters))
- Eulerian diffusion in kinematic_2d: through mu_coeff of PyMPDATA
- support for >0D (not aware of any major reason it should not work!)
- reproduce 2D setup simulations from J&P (but also Schmeller & Geresdi '19)
- @njit for all methods
- numba.prange where possible
- better than Explicit Euler in oxidation
- take Henry coefficients and other constants from chempy?
- GPU support
- transport options from Maxey & Corrsin
- sub-stepping issue described in appendix B of UWLCM paper: https://www.geosci-model-dev.net/12/2587/2019/#section9
- figures from "An elementary parcel model with explicit condensation and supersaturation" by Rogers (1975, https://doi.org/10.1080/00046973.1975.9648397)
- Fig 4a from Wang & Grabowski 2009 as parcel coalescence example (https://rmets.onlinelibrary.wiley.com/doi/epdf/10.1002/asl.210)
- comparison against Bott's algorithm solution: https://www2.meteo.uni-bonn.de/forschung/gruppen/tgwww/people/abott/fortran/fortran_english.html
- external vs. internal mixing (needs adding hygroscopicity as attribute), example e.g. from Arabas & Pawlowska 2011 (GMD)
- new Hoppel gap examples, see MoAC wiki
- the stat-phys & F-P papers - see MoAC wiki
- Unterstrasser box and column examples
- rock-paper-scissors :) https://arxiv.org/abs/1808.02386
- Jensen & Nugent example
- 2nd kinematic framework from Szumowski's paper
- 2d spectral turbulence kinematic example from Pinsky et al. 2008
- fog case
- parcel output on metpy plots (CAPE?)
- lognormal shape preservation under collisions
- CCNC instrument
- Venus clouds
- cloud seeding example
- spurious supersaturation
- sol-gel transition
- oil in water
- plankton
- human speech droplets: http://dx.doi.org/10.1111/ina.12737
- https://www.nature.com/articles/s41598-021-89346-6
- co-condensation: https://www.nature.com/articles/ngeo1809
- two-sd ripening test case
- n=0 energy conservation test for parcel
- unit test checking precipitation from other than lowest grid cell
- 32-bit multiplicity overflows (see xfail in Berry smoke test)
- tests for collision_deficit=0 with adaptivity=True (and !=0 for adaptivity=False) (i.e.,
min
would not be needed ing = min(int(gamma[i]), prop)
in compute_gamma_body() with adaptivity) - depict float/double difference case with a unit test (to check if fakeThrust is able to reproduce it) (this first need a big refactor around PrecisionResolver - currently switching the precision requires modifying source code!)
- include a sample reference netCDF file in the repo and check if its contents match the data generated within CI (what about including Wall and CPU times?)
- unit test for presence of zero-filling loop in sum_pair and alike (case of odd number of sd and single-sd in adjecent cells)
- test with coal_dt_range=[dt, dt] and fixed seed -> should be same behaviour as adaptive=False
- around super().sync()/self.notify() magic in moist environments
- common base class for kinematic envs
- phase out precision resolver (precision field for Formulae?) + usage also for constants
- unify ParticlesSizeSpectrum and ParticlesVolumeSpectrum products
- combine fuse logic with dt_range in make_adapt_substeps(), i.e. set n_substeps_max = ... (fuse) instead of raising NotImplementedError()
- remove length from backend methods (len(idx) enough)
- remove all explicit types from C++ code in Thrust backend (decltype + auto should be enough)
- something cleaner than: particulator.attributes.attributes[...].mark_updated()
- create a base class for all *Methods backend.impl classes to fix self.formulae initialisation
- shouldn't Pint be a test-time dependency only?
- sort out double si units in examples (one fake, one real)
- do recalculate_cell_id & recalculate TpRH from within attributes
- employ MergeShuffle for parallel permutations (https://github.com/axel-bacher/mergeshuffle)
- lookup tables for speeding up physics
- moments, moments, moments
- use atomicAdd in Numba flag_precipitated
- introduce times_max? (one loop less on GPU)
- padding of arrays for ThrustRTC: idx size and relative storages sizes should be a multiple of 32 to ensure that all data of 1 super-droplets are in one GPU memory bank to avoid serialization
- rethink if gamma vector should not be of integer type
- gradually decrease the amount of shuffled numbers during adaptive coalescence substeps
- parallel random shuffling on CPU (np.random.rand() within numba.prange), hint: https://github.com/numba/numba/issues/2486#issuecomment-320089562
- one loop instead of two in coalescence normalize (without the need to use temporary memory for norm_factor)
- Amazon SageMaker badges?
- create pytest plugin for checking TODO annotations (currently almost the same code is in four repos: PySDM, PySDM-examples, PyMPDATA, PyMPDATA-examples); also obsolete dependency on ghapi; technical hints could be taken from https://github.com/nschloe/pytest-codeblocks
- serialization of Particles to enable simulation restarts
- logging layer (https://docs.python.org/3/library/logging.html)
- PM10, PM2.5 products
- mass-doubling spectral discretisation
- new GPU backend using CuPy (https://cupy.dev/)
- kernel density estimate for spectrum (sec. 5.1.4 in Shima et al. '09)
- 16-bit floating point option?
- common logic for cell-wise "foreach"
- ThrustRTC.n_threads: https://gist.github.com/f0k/63a664160d016a491b2cbea15913d549
- enhance out-of-the box settings in Paraview (netCDF output)
- kernel plots
- droplets in space with vtk-js: https://kitware.github.io/vtk-js/examples/
- more controls in kinematic 2D GUI: spin-up, random seed, terminal velocity choice, kernel choice, backend choice, aerosol spectrum parameters, parallelisation controls, products, initialisation controls (constant multiplicity, ...)
- pypi deployment (using twine)
- Apple M1 runs
- pytest-parallel: https://pypi.org/project/pytest-parallel/
- GPU-enabled runs: https://github.com/jfpanisset/cloud_gpu_build_agent
- parallel=False run on Github Actions
- pylint & mypy within CI script
- use pytest-check-links on GA for checking links in README and notebooks: https://github.com/jupyterlab/pytest-check-links
- assertions for execution times (e.g. for testing numba version bumps)
- conda package
Extra hints for Python developers are here.