Releases: open-atmos/PySDM
PySDM v1.8
- TopHat spectrum + test
- Flatau-Walko-Cotton polynomial fit fot saturated vapour pressure wrt ice + test
- smoke tests for Alpert & Knopf 2016 Fig 1 example
PySDM v1.7
- added Alpert & Knopf 2016 immersion freezing example
- cleanups
PySDM v1.6
- new example based on Lowe et al. 2019 Nature Comm. paper on surface-active organics - kudos @claresinger and @rxward!
- kappa (times dry volume) as particle attribute, also optionally dry organic volume
- backend routines, new products, initialisation methods (spectro_glacial_sampling) and basic tests for upcoming immersion freezing dynamic
- VTK exporter metadata aligned to properly overlay netCDF output in Paraview
- 2D kinematic environment GUI improvements and major code cleanup
- UniformRandom spectral sampling
- cleanups, fixes, new tests (r_wet_init, condensation diagnotics, moments, ...)
PySDM v1.5
Maintenance release with git package URLs removed from setup.py (possible as we are now on pypi.org).
Also: performance-oriented refactors around moments and moment products (kudos @piotrbartman!)
PySDM v1.4
TOP 5:
-
condensation on GPU (and required updates to FakeThrust, e.g.
extract_struct_defs()
); parcel and 1d-kinematic examples work now OK on both CPU and GPU; kudos to @piotrbartman -
numerous cleanups and fixes in aqueous chemistry code, incl. rewrite of pH handling (HydrogenIonConcentration attribute), options to calculate both volume-weighted and number-weighted pH, calculation of dry radius based on actual amounts of chemical compounds; several figures from Kreidenweis et al. 2003 and Jaruga and Pawlowska 2018 reproduced successfully; kudos to @trontrytel
-
VTK exporter for attributes (files readily usable with Paraview for visualisation of particle attributes); kudos to @abulenok
-
brand new
PySDM.physics
infrastructure enabling common physics code for CPU and GPU backends (c_inline
) and enabling user-facing control over the choice of physical formulae (e.g., condensation solver coordinate, saturation vapour pressure approximation, temperature dependence in diffusion coefficients, etc), JIT options and random seed through theFormulae.__init__()
arguments; backend are now instantiated by the Builder; -
Julia and Matlab (in addition to Python) example code in the README file (box coalescence & parcel condensation).
Other news:
- deployment of pdoc-generated API manual to GitHub pages (https://atmos-cloud-sim-uj.github.io/PySDM/);
- multi-threaded operation for moment calculation on CPU (using atomic_* functions from github.com/KatanaGraph/katana)
- surface precipitation calculations on GPU
- numerous fixes in GPU backend routines, including gently handling zero-length For launches
- replaced bisection with TOMS-748 in the Numba backend (for r_wet_init, condensation implicit Euler and pH calculation)
- thread-safe handling of "success" checks within condensation solver
- simplification of the BDF code (test helper for validation condensation solver)
- running Julia and Matlab examples on GitHub Actions
- products: removed range and scale fields (now only defined in the ICMW example)
- many more tests work on GPU now (displacement, condensation, ...)
- widget freezer in Shima_et_al_2009 example
- cleanups in docstrings
PySDM v1.3
TOP 5:
- aqueous chemistry dynamic draft with two new examples, kudos @Golui & @trontrytel!
(new examples, WIP: Kreidenweis_et_al_2003 & Jaruga_and_Pawlowska_2018) - moving examples to a separate repo, making them an installable package
(https://github.com/atmos-cloud-sim-uj/PySDM-examples) - dropping dep on molmass in favour of chempy (used by the new dynamic)
- notebook execution moved from Travis to Github Actions (using pytest instead of bash script)
- activation, deactivation and ripening counters (and relevant products)
Other news:
- notebook header cleanup (just pip install PySDM_examples for Colab)
- swithing to newer Jupyter Lab interface in mybinder.org badge links
- cleanup around coalsecence timestep adaptivity
- new products: TotalConcentration, ParcelDisplacement, Time, CloudDropletEffectiveRadius, PeakSupersaturation, ActivatingRate, DeactivatingRate, RipeningRate, TotalDryMassMixingRatio, DynamicWallTime, AqueousMassSpectrum, Concentration, pH
- improved in-cloud hydrostatic profile integration + tests
- removed intensive attribute logic from coalescence; added proper handling within IntensiveAttribute class
- using @strict decorator for Settings classes (pystrict package)
- added cron-schedulled builds to GA
- added "pip -e" installation into continuous integration workflows
- dropped Python 3.6 builds, introduced 3.9
- fixed attr iteration in Thrust coalescence (chemistry first to use it)
- dynamic/static schedule parameters for condensation
- moved Matlab examples to a separate repo (PySDM_examples.m)
- moved Julia examples to a separate repo (PySDM_examples.jl)
- proper seed passing for initialisation in ThrustRTC.Random
- checking README code with pytest using exdown
PySDM v1.2
TOP 5:
- new adaptivity controls for SDM coalescence (kudos @piotrbartman!)
- new smart scheduling for parallel execution in multi-cell adaptive coalescence (for both GPU and CPU)
- new environment: kinematic_1D
- new example based on Shipway & Hill 2012 using PyMPDATA 1D advection
- major refactors around storage logic and coalescence-related backend methods
Other news:
- numerous fixes to support 1D simulations
- several physics formulae residing in environment code moved to
physics
- new products:
CoalescenceTimestepMean
,CoalescenceTimestepMin
,WaterMixingRatio
- support for
atomicMin()
inFakeThrustRTC
test_todos_annotated.py
- checking if all TODOs in the code have a valid GitHub issue number- major cleanups (incl. removal of numerous obsolete backend tests)
- new tests: adaptive coalescence, new example
PySDM v1.1
TOP5:
- major refactor of backend storage classes (including introduction of Index, PairIndicator and PairwiseStorage)
- support for calculating moments on GPU with parallel sums using atomicAdd (thanks @tehAgitto)
- fakeThrust machinery for testing GPU code on CPU (incl. C to Python translation) and the backends fixture for pytests (kudos @piotrbartman!)
- PySDM_tutorials folder with minimal usage examples for the "box" and the "parcel" environments depicting how to use PySDM from Python, Matlab and Julia + minimal example for the "kinematic_2d" environment in Python
- initialisation logic refactored and moved to init_attributes() methods in environments
Other news:
- added continuous integration scripts for Github Actions (Windows, macOS, Linux) and Appveyor (32-bit and 64-bit Windows jobs)
- support for switching floating point format on GPU backend, fixed int overflow issues in Thrust C code
- introducing alias backend names: CPU=Numba and GPU=ThrustRTC
- CUDA detection code with hints for Colab users
- Bartman et al. 2021 example with animation generated from netCDF file
- fixed tolerance handling in bisection + adjusted default tolerances for condensation
- switched from mendeleev to molmass package as dependency for physical constants
- setup.py file for installation with pip
- removed dependency on mpmath (mpmath.besseli -> scipy.special.ive)
- relocation of all product classes into PySDM/products
- renamed ICMW_2012_case_1 to Arabas_et_al_2015_Figs_8_9
- added
widgets
andtemporary_file
in PySDM_examples/utils including helper logic for downloading files from Colab - fixed ipywidgets no-icons problem on Colab ("display(HTML(...))" with in widgets/init.py)
- renamed all Setup classes to Settings (not to have multiple setup.py files which puzzled Dependabot)
- work in progress towards cell-wise adaptivity for coalescence (still guarded with not-implemented exception)
- new products: CollisionRate, CollisionRateDeficit, SurfacePrecipitation
- use "-We" flag for python in CI scripts to trigger error on warnings (what triggered numerous cleanups)
- switch from TRAVIS to CI env var whenever checking for continuous integration environment
- README and notebook header enhancements (incl. Colab and mybinder badges in notebook headers)
- more metadata in netCDF output
- moved timing logic from stats.py into products
- renamed State to Particles
- simplified inheritance in environments
- AmbientThermodynamics dynamic
- more parrallel=True/prange loops in numba backend
- automatic initial spectrum range by specifying sampling region with percentiles
- adapted EulerianAdvection to new PyMPDATA API (MPyDATA->PyMPDATA, advectee, advector)
- enforcing stateless backends by preventing instantiation with an exception in init
PySDM v1.0
Initial release accompanying Piotr Bartman's MSc thesis and featuring:
- coalescence with adaptive time step (CPU, GPU)
- condensation with adaptive time step (CPU)