Skip to content

es 420 release notes

Jean-Noël Grad edited this page Jan 15, 2021 · 45 revisions

These are the draft release notes for ESPResSo 4.2

ESPResSo 4.2

This is a feature release, i.e., new functionality is added to ESPResSo.

Changed requirements

  • LaTeX is no longer a requirement for building the Sphinx documentation and running the tutorials (#3256, #3395)

  • The minimal versions of all dependencies was increased (#3375, #3687, #3878, #3984, #3994): Python 3.6, Cython 0.29, CMake 3.16, Boost 1.66, and Python packages based on versions available in Ubuntu 18.04.

  • CUDA 11 support was added (#3870)

  • CUDA 8 and CUDA 9 support was removed (#3984)

  • AMD GPU support via ROCm (HCC and HIP-Clang compilers) was removed (#3966)

Added functionality and documentation

  • Brownian Dynamics simulations can be carried out with the newly added Brownian integrator and Brownian thermostat (#1842)

  • Stokesian Dynamics simulations can be carried out with the newly added Stokesian integrator and Stokesian thermostat (#3790, #3987)

  • Incompatible thermostat/integrator combinations will now throw an error (#3880)

  • Profile observables now provide methods bin_centers() and bin_edges() to facilitate plotting (#3608)

  • Accumulator and Correlator classes now return the data in suitably shaped multi-dimensional numpy arrays; dependent properties such as lag times and sample sizes need to be obtained separately by calling methods (#3848)

  • Shapes can be merged into meta-shapes (#3493, #3538)

  • A parametric weight function was added to the DPD interaction (#3570)

  • H5MD output files now support a unit system (#3751)

  • MDAnalysis integration now provides bond information (#3801)

  • ScaFaCoS integration now supports activating an electrostatics ScaFaCoS actor at the same time as a magnetostatics ScaFaCoS actor (#4036)

  • MMM1D now throws an error for incorrect periodicity or cell system instead of causing a segfault (#4064)

  • The user guide chapter on thermostats was moved to the chapter on integrators, since they are tightly coupled (#4080)

  • Tutorials 01, 02, 04 and 05 have been improved (#3408, #3881, #3914, #3893)

  • Tutorials now use the exercise2 plugin to hide solutions (#3872)

  • Tutorials have been re-organized by difficulty level (#3993)

  • Scientific publications referenced in comment lines in the core have been converted to BibTeX citations and moved to doxygen blocks to make them more accessible (#3304)

  • The particle director can now be set from the python interface (#4053)

  • The particle method vs_auto_relate_to() can now take a particle as argument instead of a particle id (#4058)

  • Particles can now be serialized and deserialized in the python interface with particle_dict = p.to_dict() and system.part.add(particle_dict) (#4060)

Feature configuration at compile time

  • GPU support is now opt-in (#3582). Pass the CMake flags -DWITH_CUDA=ON to compile CUDA code and optionally -DWITH_CUDA_COMPILER=<compiler> to select the CUDA compiler: NVCC (default), Clang.

  • Optional features HDF5, GSL, ScaFaCoS and Stokesian Dynamics will now throw an error if they are explicitly requested with the corresponding -DWITH_<FEATURE>=ON flag and their dependencies are not found (#3735). In the original build system, CMake would silently ignore these features if the dependencies were not found, creating confusion as to what was exactly compiled. Note: this change doesn't affect standard builds where CMake is called without these feature flags, which is the most common use case.

  • The LANGEVIN_PER_PARTICLE feature was renamed to THERMOSTAT_PER_PARTICLE (#4057)

Interface changes

  • The NpT thermostat now uses the Philox random number generator and requires a random seed on first instantiation (#3444).

  • The global Mersenne Twister RNG was removed (#3482). All thermostats are now Philox-based. Local Mersenne Twister RNGs are still used in the linear polymer position generator (now with proper warmup) and in the ReactionAlgorithm class.

  • The polymer setup code was moved from the core to Python (#3477). The espressomd.polymer.positions() function was renamed to espressomd.polymer.linear_polymer_positions() and the espressomd.diamond.Diamond class was converted to function espressomd.polymer.setup_diamond_polymer(). For diamond polymers, counter-ions must now be added manually by the user.

  • It is no longer necessary to manually reshape the output of Observable objects. The Observable classes now return multi-dimensional numpy arrays and the documentation clearly indicates the shape and size of the calculated data (#3560). The same applies to Accumulators and TimeSeries (#3578)

  • The observable ComForce was renamed to TotalForce, to reflect in the name what it actually calculates (#3471).

  • The RDF feature was removed from the Analysis module and converted to an Observable class (#3706). Time averages can be obtained using the TimeSeries accumulator.

  • All occurrences of "Stress Tensor" in the Analysis module and LB module were renamed to "Pressure Tensor" to better reflect what is actually calculated (#3723)

  • The MeanVarianceCalculator interface was changed (#3996)

Changed and removed functionality

  • The active matter tutorial was converted into a Jupyter notebook (#3395)

  • The reaction ensemble tutorial deprecated in 4.1.1 was removed (#3256)

  • The PdbParser feature deprecated in 4.1.1 was removed (#3257)

  • The ENGINE shear torque calculation feature deprecated in 4.1.1 was removed (#3277)

  • The MEMBRANE_COLLISION and OifOutDirection features were removed (#3418)

  • The AFFINITY feature was removed (#3225)

  • The unused and untested UMBRELLA feature was removed (#4032, #4079)

  • The unused and untested VIRTUAL_SITES_COM feature was removed (#3250)

  • The unused and untested MD Metadynamics feature was removed (#3563)

  • The unused and untested Stomatocyte shape was removed (#3730)

  • The incorrectly implemented and untested HarmonicDumbbellBond interaction was removed (#3974, )

  • The per-particle temperature feature was removed (#4057)

  • The Current observable was removed in favor of the FluxDensityProfile observable (#3973)

  • The incorrectly implemented analysis function cylindrical_average was removed in favor of the CylindricalDensityProfile observable (#3470)

  • The minimize_energy member of the System class was removed (#3390, #3891). The steepest descent algorithm is now a regular integrator that is set up via the system.integrator.set_steepest_descent() method.

  • The MMM2D electrostatics feature was removed (#3340). Electrostatics in slab geometries can still be achieved by ELC, with significantly better performance.

  • The layered cell system was removed (#3512)

  • The Analysis module min_dist2() function was removed and the dist_to() function was merged into system.distance_vec() (#3586)

  • The Analysis module energy() function now returns the lower triangle of the non-bonded interaction matrix, to be consistent with pressure() and stress_tensor() (#3712)

  • The number of cells for the link cell algorithm can no longer be constrained to a range of values (#3701)

  • The system.cell_system.get_pairs_() method was renamed and now supports filtering particle pairs by type (#4035)

  • The NpT integrator can no longer be used with the GPU implementation of P3M due to the undefined P3MGPU contribution to the virial (#4026)

Performance enhancements

Bug fixes

  • The transform_vector_cartesian_to_cylinder() now calculates the correct phi angle (#4094). The bug was present since ESPResSo 4.0.0 and affected observables CylindricalVelocityProfile, CylindricalFluxDensityProfile, CylindricalLBVelocityProfile, CylindricalLBVelocityProfileAtParticlePositions, CylindricalLBFluxDensityProfileAtParticlePositions.

  • The memory leaks in the TabulatedBond interactions were resolved (#3961)

  • The memory leaks in the electrostatics and magnetostatics tuning functions were resolved (#4069)

  • The system.actors.clear() method was broken and would only remove half of the actors since 4.0.0. This is now fixed (#4037).

  • Setting the NpT or steepest descent integrators with incorrect parameters no longer leaves the system in an undefined state (#4026).

  • The OpenGL visualizer had a tendency to slow down after pausing and resuming the simulation, or freezing when using the steepest descent integrator. This was due to a race condition between two threads that has been fixed (#4040).

  • Illegal LB node access is now properly caught by exceptions (#3978)

  • The ELC and MDLC actors now throw an error when a particle enters the gap region (#4051)

  • The dipolar direct sum with replica method is now disabled on periodic systems with zero replica, as it does not apply minimum image convention (#4061)

  • The DipolarP3M checkpointing mechanism was fixed (#3879)

  • A buffer overflow in the DipolarP3M tuning function lead to random failures during tuning, this is now fixed (#3879)

  • A buffer overflow in the LB code could lead to incorrect results in grids of size 9x9x9 or larger with open boundaries, this is now fixed (#4078)

  • It is no longer possible to accidentally add the same bond twice on the same particles (#4058)

  • Providing incorrect parameters to the ScaFaCoS actors no longer cause ESPResSo to crash (#4068)

  • The Boost 1.74 bug was patched (#3978)

New tutorials

Under the hood changes

  • The Python code is now checked with Pylint to prevent the introduction of unused code and dangerous anti-patterns (#3293, #3203)

  • The Python code and C++ code are now checked with LGTM to detect coding errors and anti-patterns (#3851, #3856)

  • The CMakeLists.txt files are now formatted automatically with cmake-format (#3622)

  • The Particle struct was moved to a dedicated header file Particle.hpp to improve separation of concerns in the core (#3251, #3164).

  • The Observable_stat structs were moved to a dedicated header file Observable_stat.hpp and decoupled from the pressure/energy/coulomb/dipolar frameworks (#3712) and made stateless (#3723)

  • Observables based on particle ids have been rewritten using particle traits to decouple the Particle struct from Observable classes (#3667)

  • The Python Integrator class was split in multiple classes, one for each integrator, with a structure similar to actor and interaction classes (#3390). This layout better reflects the structure of integrators in the core and will make it easier to include new integrators in the future. This change doesn't break the API.

  • The ghost communication infrastructure was simplified (#3216, #3399)

  • Thermostats are now fully object-oriented in the core to reduce code duplication (#3438, #3444, #3461)

  • The local_particles global variable is no longer accessible directly (#3501)

  • The Python tests now use specialized assertions to generate more helpful error messages (#3419)

  • The tutorial tests were simplified using AST to parse Jupyter notebooks (#3408)

  • The CMake logic for tutorials has been simplified (#3408, #3486)

  • The Cython interface was thoroughly cleaned up from unused imports (#3496, #3510)

  • The ScriptInterface backend was rewritten (#3794)

  • The duplicated functions between P3M and DipolarP3M were factored out (#3879)

  • Statistical tests are no longer executed in coverage and sanitizers builds (#3999)

  • The Utils::Mpi::gather_buffer() function was fixed (#4075). The bug didn't affect ESPResSo.

  • Clang 10 warnings were addressed (#4084)