forked from espressomd/espresso
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
2307 lines (1591 loc) · 90.2 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=================
= ESPRESSO NEWS =
=================
ESPResSo 4.2.0
==============
This is a feature release, i.e., new functionality is added to ESPResSo.
New thermostats, cell systems and boundary conditions have been introduced
to simulate systems with Stokesian Dynamics, Brownian Dynamics, strongly
inhomogeneous particle sizes or translation-invariant shear flow. The
interface underwent (non-silent) changes, therefore scripts will have to
be slightly adapted. Most notably, particle access by id and particle
slices have a new syntax, and electrostatic/magnetostatic layer correction
and reaction methods have a different setup. All errors are also now
emitted as Python exceptions and are recoverable with minimal effort.
An additional focus of this release is the simplification of both the C++ core
and the Python script interface to facilitate future extensions of ESPResSo.
The testing of ESPResSo's functionality has been extended considerably.
We recommend that this release be used for all production simulations.
No further bug fix releases will be provided for the 4.1 line, and not
all fixes are present in ESPResSo 4.1.4.
Please carefully read the detailed list of changes below before using this
release. Issues can be reported at https://github.com/espressomd/espresso.
Added functionality
-------------------
* `P3MGPU` now supports energy and pressure calculation via the CPU
kernels (#4506).
* `ELC` now works with `P3MGPU` (#4506).
* The LB grid now supports slicing operations (#4195) and LB slices are
equality comparable (#4268).
* Lees-Edwards boundary conditions can be used for particle-based
simulations (#4457). Lattice-Boltzmann support will be added in
the 4.3.0 release.
* The non-bonded energy of a single particle can be calculated (#4401).
* The list of close neighbors of a single particle can be extracted (#4401).
* 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).
* Bonded interactions can now be automatically broken when the bond length
exceeds a critical value (#4456). This feature can be combined with
collision detection to model reversible bonds (#4464).
* A new cell system `HybridDecomposition` was introduced to speed up
simulations with inhomogeneous particle interaction ranges (#4373).
* Shapes can be merged into meta-shapes (#3493, #3538).
* The `HollowConicalFrustum` can now be sliced open, made thick and rotated
to model quarter pipes in any orientation (#4179). The main application is
in the construction of complex microchannel geometries via `LBBoundaries`.
* A parametric weight function was added to the DPD interaction (#3570).
* H5MD output files now support a unit system (#3751).
* H5MD output files now support custom specifications to control which
particle and box properties to write to disk (#4480).
* The `H5md` class is now checkpointable and usable in an interactive
Python session (#3751).
* MDAnalysis integration now provides bond information (#3801).
Changed requirements
--------------------
* The minimal version of all dependencies was increased (#3375, #3687,
#3878, #3984, #3994, #4115, #4312, #4337, #4489): Python 3.8, Cython
0.29.14, CMake 3.16, Boost 1.69, Sphinx 2.3.0, and Python packages
versions are pinned on versions available in the Ubuntu 20.04 repository.
* CMake no longer emits a warning about the deprecated `distutils` Python
package, which is also no longer a requirement (#4433).
* 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).
* library `libcuda` is no longer a dependency in CUDA builds (#4095).
* Installation instructions for ESPResSo on Microsoft Windows via WSL are
now available (#4348).
* LaTeX is no longer a requirement for building the Sphinx documentation
and running the tutorials (#3256, #3395).
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, ScaFaCoS and Stokesian Dynamics are now opt-in
(#3735, #4112). If they are requested with their `-DWITH_<FEATURE>=ON`
flag and their dependencies are not found, CMake will raise an error.
In the older 4.1 build system, CMake would silently ignore these features
when their dependencies were not found, causing confusion as to what was
exactly compiled.
* Experimental support for fast-math mode was added (#4318). Some features
might break depending on the compiler used to build ESPResSo. Please
quantify the numerical stability of your simulations before enabling
fast-math mode in production.
* The `LANGEVIN_PER_PARTICLE` feature was renamed to
`THERMOSTAT_PER_PARTICLE` (#4057).
* The magnetostatic extension `DLC` now depends on feature `DIPOLES`
instead of `DP3M`, since FFTW is not a dependency of `DLC` (#4238).
* The electrostatic extension `ICC` now depends on feature `ELECTROSTATICS`
instead of `P3M`, since FFTW is not a dependency of `ICC` (#4238).
* The `MMM1D_MACHINE_PREC` feature was added to enable Chebychev series for
MMM1D on CPU without the need to define the (now removed)
`BESSEL_MACHINE_PREC` macro (#4311).
* The `EXPERIMENTAL_FEATURES` feature was removed (#4482).
Improved documentation
----------------------
* Tutorials have been renamed and organized by difficulty level (#3993).
* Tutorials Lennard-Jones, electrostatics, lattice-Boltzmann, raspberry
electrophoresis and constant-pH have been improved (#3408, #3881, #3914,
#3893, #4302, #4262).
* Tutorial lattice-Boltzmann was split into three tutorials: polymer
diffusion, Brownian motion and Poiseuille flow (#4052, #4329).
* The active matter tutorial was rewritten into a Jupyter notebook
(#3395, #4304).
* An error analysis tutorial was added (#4174).
* Tutorials now use the `exercise2` plugin to hide solutions (#3872);
since this plugin only exists for the classic Jupyter Notebook,
a conversion script is provided for JupyterLab users (#4522).
* The user guide now includes a button on Python code samples to hide
terminal output and Python prompt symbols (`>>>` and `...`), so as to
facilitate copy-pasting examples directly in the terminal (#4386).
* The user guide now uses a responsive theme for mobile/tablet users (#4504).
* The user guide chapter on thermostats was moved to the chapter on
integrators, since they are tightly coupled (#4080).
* Mentions to non-existent functions were removed from the user guide (#4482).
* Scientific publications referenced in comment lines in the core have been
converted to BibTeX citations and integrated into Doxygen blocks to make
them accessible in the Doxygen HTML documentation (#3304).
* The Reaction Field electrostatic method is now documented (#4218).
* The H5MD feature is now better documented (#4480).
* A Gibbs ensemble sample was added to simulate the exchange of particles
between two ESPResSo systems via the `multiprocessing` Python module (#4243).
* A reaction ensemble sample was added to simulate a complex chemical
reaction involving 5 chemical species (#3778).
Interface changes
-----------------
* The `system.set_random_state_PRNG()` method was removed (#3482).
* The []-operator on `system.part` was removed (#4402). Use
`system.part.by_id(1)` to fetch a specific particle,
`system.part.by_id([1, 3])` to fetch a group of particles, or
`system.part.all()` to fetch all particles. This change was necessary
to resolve the ambiguity of particle slices containing non-contiguous
particle ids.
* The domain decomposition cell system was renamed to regular decomposition
(#4442). The `system.cell_system.set_domain_decomposition()` function
was renamed to `system.cell_system.set_regular_decomposition()`.
* Bonds are now immutable (#4350). Bonds added to the list of bonds can
no longer be overwritten by a bond of a different type, as it could
lead to undefined behavior when the number of bonded partners was
higher in the overwriting bond. Bonds can now be removed from the
list of bonds, after they have been removed from particles.
* Observable parameters are now immutable (#4206, #4211).
* The `Electrokinetics` actor parameters are now immutable (#4327).
* The `LBFluid`, `LBFluidGPU`, `Electrokinetics` and `Species` methods
`print_*()` have been renamed to `write_*()` (#4049).
* The `ELC` actor is no longer an electrostatics extension (#4125, #4506).
The `ELC` actor now takes a `P3M` or a `P3MGPU` actor as argument and
modifies it. Only the `ELC` actor needs to be added to the system list
of actors. The `ELC` actor can now be removed from the list of actors.
* The `DLC` actor is no longer a magnetostatic extension (#4506). The
`DLC` actor now takes a magnetostatic actor as argument and modifies it.
Only the `DLC` actor needs to be added to the system list of actors.
* The NpT thermostat now uses the Philox random number generator and
requires a random seed on first instantiation (#3444).
* 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 analysis module `energy()`, `pressure()` and `pressure_tensor()`
functions now return only two slots for electrostatics and magnetostatics:
short-range contribution in the first slot and long-range contribution +
layer correction in the second slot (#3770).
* The analysis module `pressure()` and `pressure_tensor()` functions no
longer provide a velocity-compensation flag to compute the pressure at
half the time step in NpT simulations (#3756).
* The `espressomd.reaction_ensemble` module was renamed to
`espressomd.reaction_methods` (#4482).
* The argument `temperature` in reaction methods was renamed to `kT`
for clarity (#4305).
* All reaction methods now take keyword arguments instead of positional
arguments (#4451).
* The constant pH method now implements a symmetric proposal probability
instead of an asymmetric proposal probability (#4207).
* The reaction method parameter `exclusion_radius` was renamed to
`exclusion_range` (#4469).
* Reaction method now take an optional parameter `exclusion_radius_per_type`
for better control of the exclusion radius in simulations involving
different particle sizes (#4469).
* The `WidomInsertion.measure_excess_chemical_potential()` method was
replaced by `WidomInsertion.calculate_particle_insertion_potential_energy()`,
which returns the instantaneous value of the excess chemical potential
instead of the accumulated mean and standard error (#4374). The mean value
and standard error of the excess chemical potential must be now be
calculated by `WidomInsertion.calculate_excess_chemical_potential()`.
* Reaction method constraints can now be safely changed from cylindrical
to slab and can be removed (#4310). They will also raise an error when
created with invalid parameters.
* The `mpiio` global variable was removed (#4455). The MPI-IO feature is now
used by creating a local instance with `mpiio = espressomd.io.mpiio.Mpiio()`.
* The MPI-IO feature now raises an exception from which the user can
recover when the simulation script runs on 1 MPI rank, instead of
an unrecoverable fatal error (#4455). This change is meant to help
debugging read/write errors in simulation scripts. On 2 or more MPI
ranks, exceptions still lead to a fatal error.
* The `H5md` class takes new arguments during instantiation (#3785).
* The `system.cell_system.get_pairs_()` method was renamed to
`system.cell_system.get_pairs()` and now supports filtering particle
pairs by type (#4035).
* 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.
* The particle director can be set from the Python interface (#4053).
* The particle method `vs_auto_relate_to()` can take a particle as
argument instead of a particle id (#4058).
* Particles can be serialized and deserialized in the Python interface with
`particle_dict = p.to_dict()` and `system.part.add(particle_dict)` (#4060).
* 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
time series (#3578).
* `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
`lag_times()` resp. `sample_sizes()` (#3848).
* `Profile` observables provide methods `bin_centers()` and `bin_edges()`
to facilitate plotting (#3608).
* The observable `ComForce` was renamed to `TotalForce`, so as to better
reflect 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, LB module and
EK module were renamed to "Pressure Tensor" to better reflect what is
actually calculated (#3723, #4228).
* The `MeanVarianceCalculator` interface changed (#3996).
* Observables now check their input parameters (#4211, #4255) and raise
an exception when an invalid value is detected (e.g. `min_x > max_x`
in profile-based observables).
* Cylindrical observable classes have an extra `transform_params` argument
to change the orientation of the cylindrical coordinates systems and
control the origin of the phi angle (#4152).
* Incompatible thermostat/integrator combinations raise an exception (#3880).
* The `system.cuda_init_handle.list_devices()` feature is now a function,
and the `system.cuda_init_handle.list_devices_properties()` function
disabled in 4.0.0 was restored (#4095).
* CUDA errors now halt the flow of the program by throwing a Python
exception with a clear error message (#4095).
* Parameter `particle_scales` of coupling-based fields `PotentialField`
and `ForceField` now takes a `dict` object instead of a list of tuples
(#4121).
* The `System` class no longer has a `globals` member (#4276). Global
variables are still accessible from other members of the `System` class.
* Methods from the cluster analysis class `Cluster` no longer returns
`False` when a string passed to `call_method()` doesn't match the name
of a core method; instead `None` is returned (#4234).
* Methods from the cluster analysis class `ClusterStructure`, integrator
classes and interaction classes no longer returns `True` when the
corresponding core method doesn't return a value; instead `None`
is returned (#4234, #4516).
* Several parameters of the `ICC` class are no longer optional: `epsilons`,
`normals`, `areas`, `sigmas` (#4162).
* The electrostatic actors charge neutrality check tolerance can be modified
via `actor.charge_neutrality_tolerance`; this is mostly relevant to actors
coupled to `ICC`, whose induced charges can have values spanning several
orders of magnitude (#4506).
* Electrostatic and magnetostatic methods that support tuning now have a
`timings` argument to control the number of integration loops to run
during tuning (#4276).
* The Drude helpers (global variables and free functions) have been
gathered into a checkpointable class `DrudeHelpers`, which now relies
on particle handles instead of particle ids (#4353).
* ScaFaCoS integration now supports activating an electrostatics ScaFaCoS
actor at the same time as a magnetostatics ScaFaCoS actor (#4036).
* The list of actors can no longer end up in an invalid state: updating
an electrostatic or magnetostatic actor with an invalid parameter now
automatically restores the original parameter; inserting an invalid
electrostatic or magnetostatic actor in the list of actors now
automatically removes the actor from the list of active actors,
even when the exception happens during tuning (#4506).
* The `LBBoundaries` slip velocity check was lowered to Mach 0.35, or 0.2 in
LB units (#4376).
* The OpenGL visualizer allows changing the radius of LB velocity arrows,
documents all LB-related keyword arguments, and no longer suffers from
a division-by-zero error that used to trigger a runtime warning for
fluid inside boundaries (#4376).
* The `Electrokinetics` class got an optional `ext_force_density` parameter
for consistency with other LB implementations (#4203).
* MDAnalysis integration now checks if the MDAnalysis package version is
supported (#4386).
Removed functionality
---------------------
* 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 `EK_DOUBLE_PREC` feature was removed (#4192).
* The unused and untested MD metadynamics feature was removed (#3563).
* The unused and untested `Stomatocyte` shape was removed (#3730).
* The `PdbParser` feature deprecated in 4.1.1 was removed (#3257).
* The incorrectly implemented and untested `HarmonicDumbbellBond`
interaction was removed (#3974, #4079).
* The layered cell system was removed (#3512).
* The unused Wang-Landau reaction ensemble algorithm was removed (#4288).
* The reaction ensemble tutorial deprecated in 4.1.1 was removed (#3256).
* 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 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 analysis module `min_dist2()` function was removed and the `dist_to()`
function was merged into `system.distance_vec()` (#3586).
* The analysis module `nbhood()` function slab search mode was removed
(#4516) since it was incorrect (all ESPResSo versions were affected).
* The number of cells for the link cell algorithm can no longer be
constrained to a range of values (#3701).
* 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.
* It is no longer possible to checkpoint an ESPResSo system instance that
contains `Union` shape-based constraints when the simulation is running
with 2 or more MPI ranks. An error will be raised (#4287, #4510).
* It is no longer possible to checkpoint an `Electrokinetics` instance (#4327).
* The unmaintained `lj-demo.py` sample was removed (#4482).
* The unmaintained `mayaviLive` visualizer was removed (#4515).
Improved testing
----------------
* The C++ core of ESPResSo is covered by unit tests and integration tests
at 98% coverage (#4426, #4479, #4489).
* The structure factor code is tested against simple lattices (#4205).
* The MMM1D GPU code is tested (#4064).
* The reaction method core classes are unit tested (#4164).
Performance enhancements
------------------------
* The `Particle` memory footprint was reduced and the MPI serialization
code was improved (#4414). The structure size is now 584 bytes instead
of 640 bytes on maxset configuration (10% reduction). All substructures
in `Particle` are bitwise serializable and dynamic vectors are compact
vectors. The performance gain is about 9% for a LJ liquid on both maxset
and empty configurations, for both 1 000 and 10 000 particles per core.
* Particle creation happens in constant time instead instead of monotonically
increasing with the number of particles already in the system (#4493).
* When only one MPI rank is used, the maximum cutoff of bonded interactions
is ignored when initializing the cell properties, since the bond partners
are always accessible on the same node, regardless of the cell size; if
the system also doesn't have short-range interactions, the short-range
loop is skipped (#4452).
* The `ReactionAlgorithm::do_reaction()` function used by reaction methods
now caches the potential energy of the system and only updates it after
a successful reaction trial move (#4374).
* Reaction methods can delegate the particle neighbor search to the cell
system when evaluating the exclusion range of inserted particles (#4401).
This leads to better performance only on 2 or more MPI ranks.
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`.
* Several memory leaks were fixed in the `TabulatedBond` interactions
(#3961), electrostatics and magnetostatics tuning functions (#4069),
lattice-Boltzmann code (#4108) and Barnes-Hut code (#4404).
* The `system.actors.clear()` method was broken and would only remove half
of the actors since 4.0.0. This is now fixed (#4037).
* The `ClusterStructure` feature did not properly handle box periodicity
since 4.0.0 and would under rare circumstances calculate a center of mass
to be outside a fully periodic simulation, and would incorrectly fold
coordinates in aperiodic systems. This is now fixed (#4363).
* Adding a LB thermostat when any other thermostat was already active would
silently fail since 4.0.0. This is now fixed (#4116).
* 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).
* The OpenGL visualizer no longer raises an exception when activating the
`LB_draw_boundaries` option without any other `LB_draw_*` option (#4479).
* The OpenGL visualizer now correctly updates bond information when the
collision detection and bond breakage features are used (#4502).
* It is no longer possible to accidentally set a non-cubic NpT integrator
with P3M (#4165).
* The NpT integrator used to work with `P3MGPU` even though it didn't
implement long-range energy calculation and therefore couldn't contribute
to the virial; now the long-range energy is calculated and added to the
virial (#4026, #4506).
* Illegal LB node access is now properly caught by exceptions (#3978).
* EK node access no longer accepts floating-point values for node indices
(#4228), and always requires exactly three integers (#4482).
* Accessing the flux property of EK species no longer throws an error
(#4106).
* Accessing the `boundary` field of LB nodes from a `LBFluid` actor when
`LB_BOUNDARIES` is not compiled in now returns 0 instead of a random
integer (#4479).
* The LB grid in the GPU implementation is now automatically resized when
the simulation box size changes (#4191).
* The LB code now throws an error when adding a LB boundary to the
`LBFluid` actor when `LB_BOUNDARIES` is not compiled in, or to the
`LBFluidGPU` actor when `LB_BOUNDARIES_GPU` is not compiled in (#4472).
* The lattice-Boltzmann Python interface no longer ignores runtime errors,
nor converts them to cryptic system errors (#4355).
* The script interface no longer silently ignores runtime errors when
converting Python objects to C++ data types (#4387, #4492).
* The system now throws an error when a non-bonded interaction cutoff is
too large for the local box size in MPI-parallel simulations; in older
releases the error was queued and deferred to the integration loop (#4479).
* The system now throws an error when a virtual site tracks a real particle
too far away for the local box size in MPI-parallel simulations; in older
releases the error was queued and deferred to the integration loop (#4479).
* It is no longer possible for a virtual site to track itself (#4479).
* It is no longer possible for a particle to exclude itself (#4493).
* It is no longer possible to accidentally add the same bond twice on the
same particles (#4058).
* Fatal errors triggered by stale references in virtual sites, invalid
particle ids and null quaternions have become runtime exceptions (#4479).
* Virtual sites now contribute to the rotational kinetic energy of the
system (#4198).
* Particle creation no longer raises `numpy.VisibleDeprecationWarning`
(#4493).
* The EK feature now generates VTK files that are compliant with the VTK 2.0
standard (#4106).
* The `ELC` and `DLC` actors now throw an error when a particle enters the
gap region (#4051).
* The `ELC` actor is now updated when the box size changes in the
z-direction (#4231).
* The `DLC` actor now raises an exception when tuning fails instead of
causing a fatal error (#4238).
* The `MMM1D` actor now raises an exception for incorrect periodicity or
cell system instead of causing a segfault (#4064).
* The `DipolarP3M` checkpointing mechanism was fixed (#3879).
* The `DipolarP3M` method now recalculates the energy correction when the
box length changes (#4506).
* P3M-based actors now sanitize the user-provided `alpha` and `accuracy`
parameters and no longer allow constraining the `alpha` parameter during
tuning (`alpha` was always derived from the other parameters at the end
of tuning) (#4118).
* 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).
* Providing incorrect parameters to the ScaFaCoS actors no longer cause
ESPResSo to crash (#4068).
* FENE, harmonic and quartic bonds now throw an error when the bond length
is zero and the equilibrium bond length is non-zero, since the direction
of the force cannot be determined (#4471).
* Immutable parameters `default_scale`, `particle_scales` and `gamma` of
coupling-based fields `PotentialField`, `ForceField`, `FlowField` and
`HomogeneousFlowField` now throw an error when an attempt is made to
change their value via the class setter, instead of silently ignoring
the new value (#4121).
* The `CylindricalLBFluxDensityProfileAtParticlePositions` observable now
measures the correct quantity (#4152).
* The Boost 1.74 bug was patched (#3978).
* A bug involving an access out of bounds was fixed in the structure factor
code (#4205).
* A bug in the collision detection feature that lead to a harmless warning
being printed to the terminal upon collision was fixed (#4484).
* Calling `collision_detection.set_params()` with invalid arguments no
longer leaves the collision detection feature in an indeterminate state;
the previous state is automatically rolled back (#4484).
* Setting the collision detection mode `glue_to_surface` or
`bind_at_point_of_collision` when feature `VIRTUAL_SITES_RELATIVE`
is not compiled in now generates the correct error message (#4484).
* Passing a particle chain-based observable object (`ParticleDistances`,
`BondAngles`, `BondDihedrals`, `CosPersistenceAngles`) that doesn't have
enough particle ids for the calculation (e.g. only 1 particle id when 2
are needed for the bond distance calculation) to a `Correlator` object
no longer causes a memory overflow (#4255).
* Calculating the energy of the system when an IBM object is present no
longer terminates ESPResSo, instead a warning is issued (#4286).
* The `Sphere` shape no longer returns NaN values in the distance vector
for particles located exactly in its center (#4384).
* Runtime errors raised when the maximal bonded interaction range becomes
larger than the simulation box are no longer ignored when dihedral bonds
are added to the list of interactions (#4383).
* Runtime errors about incorrectly initialized electrostatic/magnetostatic
methods are no longer silently ignored at integration start (#4383).
* Runtime errors about incorrectly initialized GPU dipolar direct sum and
Barnes-Hut are no longer silently ignored when the actors are instantiated
(#4404).
* A bug that could potentially lead to stale references in the script
interface was fixed (#4476).
* `TabulatedNonBonded.is_active()` now returns `False` instead of `None`
when the interaction is inactive (#3586).
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 CMakeLists.txt files are now formatted automatically with
`cmake-format` (#3622).
* The Python code and C++ code were checked with LGTM to detect and fix
coding errors and anti-patterns (#3851, #3856, #4300).
* Compiler warnings and diagnostics from GCC 11, 12, from Clang 10, 12, 13, 14
and from Intel 19.0.4 were addressed (#4084, #4426, #4510, #4526).
* 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 into 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).
* The LB coupling for the regular decomposition scheme was rewritten (#4470).
* Thermostats are now fully object-oriented in the core to reduce code
duplication (#3438, #3444, #3461).
* Bonded interactions are now fully object-oriented in the core to
facilitate the development of new interactions (#4161).
* Bonded interactions are now communicated between MPI processes
automatically and transparently by the script interface (#4350).
* The custom `MpiCallbacks` framework has been simplified and the callbacks
made more homogeneous (#4383).
* The custom `MpiCallbacks` framework is being progressively replaced by
`boost::mpi` communication (#4506, #4511).
* 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` framework was rewritten (#3794).
* The `ScriptInterface` framework is now the preferred way to implement
new features. Existing features were converted to `ScriptInterface`
objects: bonded interactions (#4350), bond breakage (#4464), collision
detection (#4484), reaction methods (#4451), MPI-IO (#4455), H5MD (#4480),
cell system (#4511), actors, scafacos, electrostatics and magnetostatics
(#4506). The corresponding Cython files were converted to Python files.
* It is now possible to extend the list of available specifications in the
H5MD feature at the C++ level (#4480).
* 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.
* Parameters can be passed to CTest at configuration time via the new
`CTEST_ARGS` CMake option (#3862). This replaces the deprecated and
non-portable `ARGS` Makefile variable expansion.
* A superfluous and non-portable CMake `target_compile_options()` statement
was removed (#3852).
ESPResSo 4.1.4
==============
This release provides a number of corrections for the ESPResSo 4.1 line.
We recommend that this release be used for all production simulations.
The interface has not been changed between ESPResSo 4.1.3 and 4.1.4.
However, some bugs were discovered which can affect simulation results.
Please find the list of changes below. The numbers in brackets refer to
ticket numbers on https://github.com/espressomd/espresso
General corrections and improvements:
* Fix a bug in the LB CPU implementation that lead to incorrect
LB shear stress tensors in thermalized fluids since 4.1.0 (#3847)
* Fix a bug in the LB CPU and GPU implementations that lead to
`gamma_bulk` being used in place of `gamma_shear` in the second
order term for forces in all previous ESPResSo versions (#3885)
* Fix a bug that always set the epsilon value to zero in `P3M` and
`P3MGPU` actors since 4.0.0 (#3869)
* Fix an issue in the Python script interface that rejected integer
epsilon values in the `P3M` and `P3MGPU` actors, and the `'metallic'`
epsilon value in the `P3M` actor (#3869)
* Fix the exception mechanism in the `P3M`, `P3MGPU` and `DipolarP3M`
code to forward errors to the Python interface instead of silencing
them or running infinite loops (#3869)
* Fix range checks in the OIF code that failed to raise `TypeError`
exceptions (#3846)
Documentation and tutorials corrections and improvements:
* Explain the discrepancy between the Gay-Berne formula from the user
guide and from the original paper (#3839)
* Add note explaining the P3M algorithm works with non-metallic epsilon
values only when the box is cubic (#3869)
Build system and platform-related corrections and improvements:
* Fix several CMake warnings raised by CMake 3.17 and above (#3830, #3859)
Improved testing:
* Add a test to check the off-diagonal elements of the LB stress tensor
in long simulations of thermalized fluids (#3847)
Under the hood changes:
* Remove unnecessary memory allocation on GPU from MPI worker nodes (#3911)
ESPResSo 4.1.3
==============
This release provides a number of corrections for the ESPResSo 4.1 line.
We recommend that this release be used for all production simulations.
The interface has not been changed between ESPResSo 4.1.2 and 4.1.3.
However, some bugs were discovered which can affect simulation results.
Please find the list of changes below. The numbers in brackets refer to
ticket numbers on https://github.com/espressomd/espresso
Feature configuration at compile time
* The number of features which need to be defined at compile time in
myconfig.hpp has been reduced. Features without performance impact
are now always present. These are:
* ``OIF_LOCAL_FORCES``
* ``OIF_GLOBAL_FORCES``
General corrections and improvements:
* Many bonded interactions were not considered in the bond cutoff calculation:
umbrella, OIF local, OIF global, IBM tribend, IBM volcons, angle harmonic,
angle cosine, angle cossquare, tabulated angle, bonded Coulomb, subtracted
bonded Coulomb, subtracted LJ, quartic, harmonic dumbbell. This can lead
to sub-optimal skin values when such bonds are used with an inter-particle
distance that is longer than other bonded (FENE, harmonic bond, rigid bond,
thermalized distance, tabulated bond, tabulated dihedral, dihedral, IBM
triel), non-bonded (LJ, Morse, Buckingham, etc.) and long-range
(electrostatics, magnetostatics) interactions in the same system. All
bonded interactions are now considered in the cutoff calculation (#3443).
* Fix a bug in a rotation function that resulted in improper treatment of
rotation vectors with norm different from unity (#3559); all observable
classes inheriting from `CylindricalProfile` are affected
* Fix a bug in the LB GPU implementation that lead to incorrect velocity
interpolation near LB boundaries (#3593)
* Fix a bug in the LB CPU implementation that lead to incorrect grid sizes
(#3678)
* Object-in-fluid bugfixes have been backported from the OIF development
branch; in particular, the bending force between two triangles is now
torque-free (#3385)
* Rewrite the linear polymer position generator, which was inefficient and
frequently rejected valid positions (#3402, #3484, #3491)
* Fix an error in the distance calculation of the `SpheroCylinder`
shape (#3629)
* Fix a sign flip in the surface normal calculation of the `Torus`
shape (#3728)
* Fix an `IndexError` when running `system.number_of_particles()` without a
value for the argument `type` (#3496, #3494) and fix the range check (#3536)
* Fix a `NameError` when running `system.analysis.rdf()` without a value for
the argument `r_max` (#3496, #3494)
* Fix a `NameError` raised by the OpenGL visualizer when drawing bonds in
periodic images of the unit cell (#3511)
* Correctly calculate the orientation of bonds cut by the faces of the
simulation box in the OpenGL visualizer (#3511)
* Fix a memory leak in the OpenGL visualizer when drawing shapes containing
cylindrical elements (`Cylinder`, `SpheroCylinder`, `SimplePore`,
`Slitpore`) and drawing bonds between particles (#3533)
* Fix an issue in the OpenGL visualizer that drew the channel of the
`Slitpore` shape at the center of the box, instead of using the
`dividing_plane` attribute (#3728)
* Fix a bug in the ELC algorithm that ignored the Coulomb prefactor (#3731).
The same bug is also present in MMM2D but could not be fixed.
* Correctly check the P3M parameter `mesh` (#3676)
* The LB checkpointing argument `binary` now takes a boolean value (#3541);
integers values 0 and 1 are still accepted (integers are implicitly cast
to boolean values)
* Reinitialize the P3M and dipolar P3M solvers when the box size or skin
changes (#3717)
* Clarify error messages in the Steepest Descent integrator (#3763)
* Fix an incorrect formula in the `tensor_product` mode of the `Correlator`
class that always returned an array of 0's since 4.1.0 (#3781)
* Fix a runtime error when calling the `get_params()` method of a
ScaFaCoS-based actor (#3784)
Documentation and tutorials corrections and improvements:
* Fix paragraph formatting in Jupyter notebooks and update Sphinx
bibliography (#3395).
* The Sphinx documentation generation doesn't run in parallel any longer
due to plugin `sphinxcontrib.bibtex` throwing a warning when executed
with more than one thread in Sphinx v2.3.1 (#3393). The slowdown is not
significant (less than a second).
* Fix compatibility issues with Sphinx 2.4.0 (#3480), 3.0.1 (#3642, #3659)
and 1.6.7 (#3743)
* Clarify the quaternion formalism used in ESPResSo (#3392, #3748)
* The `p3m.py` sample showcased an incorrect usage of the ELC actor
(the gap region was missing). The actor was removed and a new,
stand-alone sample `visualization_elc.py` was created (#3468)
* The `visualization_constraints.py` sample showcased an incorrect
usage of the `Slitpore` and `Wall` shapes that lead to a discontinuous
potential; this is now fixed (#3728)
* Correct errors in the documentation of the constructor parameters for
shape classes `Cylinder`, `SpheroCylinder`, `Rhomboid` (#3567), for
class `System` (#3542) and for cylindrical observables (#3569)
* Correct an error in the formula of the electrostatic prefactor in the
electrostatics documentation, give the full expression of the
electrostatic prefactor in tutorials and samples (#3673)
* Improve documentation of the `Slitpore` shape and document the
`Torus` shape (#3728)
* Improve installation instructions (#3673, #3699, #3732)
* Document `BoxGeometry`-related functions (#3747)
* Explain release workflow and how to obtain released versions of
ESPResSo (#3745)
* Improve citation instructions with examples (#3745)
* General improvements (#3740, #3743)
Build system and platform-related corrections and improvements:
* The benchmarks can now be run with any MPI library supported by
ESPResSo (#3412)
* The CMake logic was simplified (#3574, parts of #3582). The minimal
required Cython version is now checked. CMake now generates an error
message if `WITH_CLANG_TIDY` is `ON` but no Clang-Tidy can be found
with a version matching the Clang version. The CUDA library installed
via the Ubuntu package `nvidia-cuda-toolkit` is now correctly detected.
* Add support for ROCm versions 3.0 (#3386), 3.1 (#3574) and 3.3 (#3623)
* Fix compiler errors with HDF5 > 1.10.2 (#3604)