Accepting request 1080211 from devel:languages:python:numeric
- Update to 4.2.1: This release provides a number of corrections for the ESPResSo 4.2 line. We recommend that this release be used for all production simulations. The interface has not been changed between ESPResSo 4.2.0 and 4.2.1. However, some bugs were discovered which can affect simulation results. No further bug fix releases will be provided for the 4.2 line. Added functionality ------------------- * P3M and DipolarP3M can now be used with the hybrid decomposition cell system with 1 MPI rank (#4678). * Lattice-Boltzmann can now be used with the N-square and hybrid decomposition cell systems with 2 or more MPI ranks (#4676). Changed requirements -------------------- * The nbconvert version requirement was bumped to 6.5.1 to patch an XSS vulnerability (#4658). Improved documentation ---------------------- * The user guide now documents how to improve the reproducibility of simulations that have checkpointing enabled (#4677). * The user guide now reflects that the lattice-Boltzmann profile observables can be used in parallel (#4583). * The active matter tutorial now uses an adequate engine dipole for the swimmer particle (#4585). * The error analysis tutorials have been improved (#4597). * The tutorials can now be used in VS Code Jupyter (both the desktop and web versions) and the mathematical formula are now correctly displayed (#4531). * All ESPResSo-specific CMake options are now documented in the installation chapter of the user guide (#4608). * Python package installation instructions no longer feature package version numbers; instead, `requirements.txt` is used as a constraint file (#4638). * MMM1D algorithms now properly document their parameter names (#4677). * Reaction methods now cite the relevant literature (#4681). * Caveats for chain analysis methods are now documented (#4698). * Minor formatting issues in Sphinx and typos in Python docstrings were addressed (#4608). Interface changes ----------------- * A new boolean property `System.virtual_sites.override_cutoff_check` was introduced to allow disabling the cutoff range checks from virtual sites (#4623). Removed functionality --------------------- * The unused and untested `Analysis.v_kappa()` method was removed (#4534). Improved testing ---------------- * Improve unit testing of core functionality: P3M, MMM1D, OIF, virtual sites, script interface factory (#4631). Bug fixes --------- * The checkpointing mechanism now properly restores the particle quaternion and all derived quantities (#4637). Release 4.2.0 introduced a regression that caused checkpoint files to overwrite the particle quaternion/director by a unit vector pointing along the z direction, when the `DIPOLES` feature was part of the myconfig file. This lead to incorrect trajectories when reloading a simulation from a checkpoint file, if the particle director played a role in the simulation (ex: relative virtual sites, Gay-Berne potential, anisotropic particles, active particles, etc.). In addition, the angular velocity in body frame was restored with the wrong orientation. Since the default myconfig file contains `DIPOLES`, most ESPResSo users were affected. * The checkpointing mechanism now properly restores LB boundaries (#4649). Release 4.2.0 introduced a regression where reloading LB populations would accidentally reset LB boundary flags. * The checkpointing mechanism now restores P3M and DipolarP3M solvers without triggering a re-tune (#4677). In previous releases, the checkpointing code would automatically re-tune these algorithms during a reload, causing tiny deviations in the forces that were problematic for trajectory reproducibility. * Brownian dynamics now integrates the rotational dynamics of rotatable particles whose position is fixed in 3D space (#4548). * Langevin dynamics now properly integrates particles with anisotropic friction (#4683, #4690). * A regression that caused virtual sites to incorrectly count their image box when crossing a periodic boundary has been fixed (#4564, #4707). * Particles can no longer be created or updated with a negative mass or a null mass (#4679). * Particles created without a user-specified type can now participate in reactions (#4589). * When a Monte Carlo displacement move is rejected, the original particle velocity is now restored (#4589). * Reaction methods now raise an exception when accidentally calling `method.reaction(steps=20)` instead of `method.reaction(reaction_steps=20)` (#4666). Since 4.2.0 the `steps` argument was ignored, in which case the default value `reaction_steps=1` would used by the core. Note that in the next minor release of ESPResSo, the `reaction_steps` argument will be renamed to `steps`. * Reaction methods now rebuild the list of free particle ids every time `WidomInsertion::calculate_particle_insertion_potential_energy()` and `ReactionAlgorithm::do_reaction()` are called (#4609). This was needed to allow multiple concurrent reactions, as well as avoiding subtle bugs when both the user and a reaction method tried to create a new particle with an id that used to belong to a deleted particle. * When all particles are cleared, the reaction methods type map is now also cleared (#4645). In the past, it was possible to attempt a reaction on particles that had just been cleared from the system, which would raise an exception. This bug affected all ESPResSo releases since 4.0. * The `System.part.pairs()` method now returns the correct particle pairs when particle ids aren't both contiguous and starting from 0 (#4628). The regression was introduced in release 4.2.0. * The auto-exclusions feature no longer adds spurious exclusions to particle ids in the range [1, distance] (#4654). This bug would potentially break the physics of the system and potentially raise an exception in a system with non-contiguous particle ids. This regression was introduced in release 2.2.0b. * The structure factor analysis code no longer double-counts particles when the same particle type is provided twice (#4534). * The minimal distance distribution analysis code no longer has an arbitrary cutoff distance when the simulation box is aperiodic (open boundaries); this would cause spurious artifacts to appear in the histogram at `r = np.sum(system.box_l)` when particles were further apart than this arbitrary distance (#4534). * The cluster analysis functions are now disabled for systems with Lees-Edwards periodic boundaries, since the cluster analysis position wrapping code doesn't properly handle the shear offset (#4698). * The chain analysis methods now raise an error when the number of chains or beads per chain is invalid (#4708). * The observable tests now longer rely on deprecated numpy options that were removed in numpy 1.24 (#4635). * The visualizer `*_arrows_type_materials` options now have an effect on arrow materials (#4686). * The visualizer exception handling mechanism has been made less brittle (#4686). * The visualizer no longer raises exception when the optional dependency `freeglut` isn't installed (#4691). * The visualizer can randomly freeze when using collision detection or bond breakage; a temporary workaround has been introduced that fixes the issue for simulations that use only 1 MPI rank (#4686). * The `__dir__()` method of script interface objects no longer raises an exception (#4674). * Compilation and testsuite issues involving missing or incorrect feature guards were addressed (#4562, #4648). * The build system no longer silently ignores invalid external feature definitions in `myconfig.hpp` and CMake files (#4608). This issue would only affect feature developers, as well as users of very old compilers, and would lead to ESPResSo builds missing features. Under the hood changes ---------------------- * The Clang 14 and AppleClang 14 compilers are now supported (#4601). * Several Clang 14 compiler diagnostics have been addressed (#4606). * Boost 1.81 and later versions are now supported (#4655). * Compiler errors on non-x86 architectures were addressed (#4538). * Test tolerances were adjusted for non-x86 architectures (#4708). * The pypresso script now prints a warning when running with MCA binding policy "numa" on NUMA architectures that are not supported in singleton mode by Open MPI 4.x (#4607). * The config file generator has been rewritten to properly handle external features and compiler errors (#4608). * Security hardening for GitHub Workflows (#4577, #4638) and Codecov (#4600). * Deployment of the user guide to GitHub Pages now relies on cloud providers to fetch JavaScript dependencies (#4656). - Removed upstreamed patches: - fix-broken-fft-check.patch - boost-1.74.patch - numpy-1.24.patch - rpath.patch - missing_size_t.patch - hdf5.patch - setuptools.patch OBS-URL: https://build.opensuse.org/request/show/1080211 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python3-espressomd?expand=0&rev=17
This commit is contained in:
commit
0e7dbdaa22
@ -1,34 +0,0 @@
|
||||
From a392907978506408482d0bdd388534455ba8dfba Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= <jgrad@icp.uni-stuttgart.de>
|
||||
Date: Wed, 28 Oct 2020 21:22:39 +0100
|
||||
Subject: [PATCH] core: Add guard for boost 1.74.0
|
||||
|
||||
This <boost/serialization/version.hpp> include guards against an issue
|
||||
in boost::serialization from boost 1.74.0 that leads to compiler error
|
||||
"explicit specialization of undeclared template struct 'version'" when
|
||||
including <boost/serialization/optional.hpp>. More details in tickets:
|
||||
https://github.com/boostorg/serialization/issues/210
|
||||
https://github.com/boostorg/serialization/issues/217
|
||||
|
||||
---
|
||||
src/core/grid_based_algorithms/lb_particle_coupling.hpp | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/src/core/grid_based_algorithms/lb_particle_coupling.hpp
|
||||
+++ b/src/core/grid_based_algorithms/lb_particle_coupling.hpp
|
||||
@@ -25,6 +25,15 @@
|
||||
|
||||
#include <boost/serialization/access.hpp>
|
||||
|
||||
+/* This <boost/serialization/version.hpp> include guards against an issue
|
||||
+ * in boost::serialization from boost 1.74.0 that leads to compiler error
|
||||
+ * "explicit specialization of undeclared template struct 'version'" when
|
||||
+ * including <boost/serialization/optional.hpp>. More details in tickets:
|
||||
+ * https://github.com/boostorg/serialization/issues/210
|
||||
+ * https://github.com/boostorg/serialization/issues/217
|
||||
+ */
|
||||
+#include <boost/serialization/version.hpp>
|
||||
+
|
||||
#include <cstdint>
|
||||
#include <unordered_set>
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:080bbf6bec5456192ce4e1bc0ddebb9e8735db723d3062ec87154f1ac411aaab
|
||||
size 14000445
|
3
espresso-4.2.1.tar.gz
Normal file
3
espresso-4.2.1.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d74b46438b0d013cac35602e28f3530686446a3a307f6771baf15395066bdad5
|
||||
size 13458982
|
@ -1,260 +0,0 @@
|
||||
From 12b1c3a77060a0d402984ce88b230744fa31c79d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= <jgrad@icp.uni-stuttgart.de>
|
||||
Date: Thu, 1 Sep 2022 13:37:40 +0200
|
||||
Subject: [PATCH] core: Fix broken FFT check
|
||||
|
||||
Properly check the magnitude of complex residuals. Add a parameter
|
||||
to disable the check for debugging purposes.
|
||||
---
|
||||
src/core/electrostatics/p3m.cpp | 8 +++++---
|
||||
src/core/electrostatics/p3m.hpp | 3 ++-
|
||||
src/core/p3m/fft.cpp | 2 +-
|
||||
.../unit_tests/EspressoSystemStandAlone_test.cpp | 2 +-
|
||||
src/python/espressomd/electrostatics.py | 7 +++++++
|
||||
src/script_interface/electrostatics/CoulombP3M.hpp | 6 ++++--
|
||||
.../electrostatics/CoulombP3MGPU.hpp | 6 ++++--
|
||||
testsuite/python/coulomb_interface.py | 6 ++++--
|
||||
testsuite/python/icc_interface.py | 14 ++++++++++----
|
||||
testsuite/python/save_checkpoint.py | 1 +
|
||||
testsuite/python/test_checkpoint.py | 2 ++
|
||||
11 files changed, 41 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/core/electrostatics/p3m.cpp b/src/core/electrostatics/p3m.cpp
|
||||
index d0d059157f1..b06300fed9e 100644
|
||||
--- a/src/core/electrostatics/p3m.cpp
|
||||
+++ b/src/core/electrostatics/p3m.cpp
|
||||
@@ -270,9 +270,11 @@ void CoulombP3M::init() {
|
||||
}
|
||||
|
||||
CoulombP3M::CoulombP3M(P3MParameters &¶meters, double prefactor,
|
||||
- int tune_timings, bool tune_verbose)
|
||||
+ int tune_timings, bool tune_verbose,
|
||||
+ bool check_complex_residuals)
|
||||
: p3m{std::move(parameters)}, tune_timings{tune_timings},
|
||||
- tune_verbose{tune_verbose} {
|
||||
+ tune_verbose{tune_verbose}, check_complex_residuals{
|
||||
+ check_complex_residuals} {
|
||||
|
||||
m_is_tuned = !p3m.params.tuning;
|
||||
p3m.params.tuning = false;
|
||||
@@ -490,7 +492,7 @@ double CoulombP3M::long_range_kernel(bool force_flag, bool energy_flag,
|
||||
}
|
||||
|
||||
/* Back FFT force component mesh */
|
||||
- auto const check_complex = !p3m.params.tuning;
|
||||
+ auto const check_complex = !p3m.params.tuning and check_complex_residuals;
|
||||
for (int d = 0; d < 3; d++) {
|
||||
fft_perform_back(p3m.E_mesh[d].data(), check_complex, p3m.fft, comm_cart);
|
||||
}
|
||||
diff --git a/src/core/electrostatics/p3m.hpp b/src/core/electrostatics/p3m.hpp
|
||||
index 4f682bf7fa8..a8d02b055b4 100644
|
||||
--- a/src/core/electrostatics/p3m.hpp
|
||||
+++ b/src/core/electrostatics/p3m.hpp
|
||||
@@ -89,13 +89,14 @@ struct CoulombP3M : public Coulomb::Actor<CoulombP3M> {
|
||||
|
||||
int tune_timings;
|
||||
bool tune_verbose;
|
||||
+ bool check_complex_residuals;
|
||||
|
||||
private:
|
||||
bool m_is_tuned;
|
||||
|
||||
public:
|
||||
CoulombP3M(P3MParameters &¶meters, double prefactor, int tune_timings,
|
||||
- bool tune_verbose);
|
||||
+ bool tune_verbose, bool check_complex_residuals);
|
||||
|
||||
bool is_tuned() const { return m_is_tuned; }
|
||||
|
||||
diff --git a/src/core/p3m/fft.cpp b/src/core/p3m/fft.cpp
|
||||
index 55ff03c66d3..2c1d193155c 100644
|
||||
--- a/src/core/p3m/fft.cpp
|
||||
+++ b/src/core/p3m/fft.cpp
|
||||
@@ -738,7 +738,7 @@ void fft_perform_back(double *data, bool check_complex, fft_data_struct &fft,
|
||||
for (int i = 0; i < fft.plan[1].new_size; i++) {
|
||||
fft.data_buf[i] = data[2 * i]; /* real value */
|
||||
// Vincent:
|
||||
- if (check_complex && (data[2 * i + 1] > 1e-5)) {
|
||||
+ if (check_complex and std::abs(data[2 * i + 1]) > 1e-5) {
|
||||
printf("Complex value is not zero (i=%d,data=%g)!!!\n", i,
|
||||
data[2 * i + 1]);
|
||||
if (i > 100)
|
||||
diff --git a/src/core/unit_tests/EspressoSystemStandAlone_test.cpp b/src/core/unit_tests/EspressoSystemStandAlone_test.cpp
|
||||
index 94cbc51a24d..ddf19a283ed 100644
|
||||
--- a/src/core/unit_tests/EspressoSystemStandAlone_test.cpp
|
||||
+++ b/src/core/unit_tests/EspressoSystemStandAlone_test.cpp
|
||||
@@ -115,7 +115,7 @@ static void mpi_set_tuned_p3m_local(double prefactor) {
|
||||
0.654,
|
||||
1e-3};
|
||||
auto solver =
|
||||
- std::make_shared<CoulombP3M>(std::move(p3m), prefactor, 1, false);
|
||||
+ std::make_shared<CoulombP3M>(std::move(p3m), prefactor, 1, false, true);
|
||||
::Coulomb::add_actor(solver);
|
||||
}
|
||||
|
||||
diff --git a/src/python/espressomd/electrostatics.py b/src/python/espressomd/electrostatics.py
|
||||
index 6b91ec6d355..60a12cc4483 100644
|
||||
--- a/src/python/espressomd/electrostatics.py
|
||||
+++ b/src/python/espressomd/electrostatics.py
|
||||
@@ -155,6 +155,7 @@ def default_params(self):
|
||||
"mesh_off": [-1., -1., -1.],
|
||||
"prefactor": 0.,
|
||||
"check_neutrality": True,
|
||||
+ "check_complex_residuals": True,
|
||||
"tune": True,
|
||||
"timings": 10,
|
||||
"verbose": True}
|
||||
@@ -231,6 +232,9 @@ class P3M(_P3MBase):
|
||||
check_neutrality : :obj:`bool`, optional
|
||||
Raise a warning if the system is not electrically neutral when
|
||||
set to ``True`` (default).
|
||||
+ check_complex_residuals: :obj:`bool`, optional
|
||||
+ Raise a warning if the backward Fourier transform has non-zero
|
||||
+ complex residuals when set to ``True`` (default).
|
||||
|
||||
"""
|
||||
_so_name = "Coulomb::CoulombP3M"
|
||||
@@ -281,6 +285,9 @@ class P3MGPU(_P3MBase):
|
||||
check_neutrality : :obj:`bool`, optional
|
||||
Raise a warning if the system is not electrically neutral when
|
||||
set to ``True`` (default).
|
||||
+ check_complex_residuals: :obj:`bool`, optional
|
||||
+ Raise a warning if the backward Fourier transform has non-zero
|
||||
+ complex residuals when set to ``True`` (default).
|
||||
|
||||
"""
|
||||
_so_name = "Coulomb::CoulombP3MGPU"
|
||||
diff --git a/src/script_interface/electrostatics/CoulombP3M.hpp b/src/script_interface/electrostatics/CoulombP3M.hpp
|
||||
index 147ee7d0af7..0f167cfa442 100644
|
||||
--- a/src/script_interface/electrostatics/CoulombP3M.hpp
|
||||
+++ b/src/script_interface/electrostatics/CoulombP3M.hpp
|
||||
@@ -69,6 +69,8 @@ class CoulombP3M : public Actor<CoulombP3M, ::CoulombP3M> {
|
||||
{"timings", AutoParameter::read_only,
|
||||
[this]() { return actor()->tune_timings; }},
|
||||
{"tune", AutoParameter::read_only, [this]() { return m_tune; }},
|
||||
+ {"check_complex_residuals", AutoParameter::read_only,
|
||||
+ [this]() { return actor()->check_complex_residuals; }},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -85,8 +87,8 @@ class CoulombP3M : public Actor<CoulombP3M, ::CoulombP3M> {
|
||||
get_value<double>(params, "accuracy")};
|
||||
m_actor = std::make_shared<CoreActorClass>(
|
||||
std::move(p3m), get_value<double>(params, "prefactor"),
|
||||
- get_value<int>(params, "timings"),
|
||||
- get_value<bool>(params, "verbose"));
|
||||
+ get_value<int>(params, "timings"), get_value<bool>(params, "verbose"),
|
||||
+ get_value<bool>(params, "check_complex_residuals"));
|
||||
});
|
||||
set_charge_neutrality_tolerance(params);
|
||||
}
|
||||
diff --git a/src/script_interface/electrostatics/CoulombP3MGPU.hpp b/src/script_interface/electrostatics/CoulombP3MGPU.hpp
|
||||
index d212a5e671f..3fe11a9de85 100644
|
||||
--- a/src/script_interface/electrostatics/CoulombP3MGPU.hpp
|
||||
+++ b/src/script_interface/electrostatics/CoulombP3MGPU.hpp
|
||||
@@ -70,6 +70,8 @@ class CoulombP3MGPU : public Actor<CoulombP3MGPU, ::CoulombP3MGPU> {
|
||||
{"timings", AutoParameter::read_only,
|
||||
[this]() { return actor()->tune_timings; }},
|
||||
{"tune", AutoParameter::read_only, [this]() { return m_tune; }},
|
||||
+ {"check_complex_residuals", AutoParameter::read_only,
|
||||
+ [this]() { return actor()->check_complex_residuals; }},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -86,8 +88,8 @@ class CoulombP3MGPU : public Actor<CoulombP3MGPU, ::CoulombP3MGPU> {
|
||||
get_value<double>(params, "accuracy")};
|
||||
m_actor = std::make_shared<CoreActorClass>(
|
||||
std::move(p3m), get_value<double>(params, "prefactor"),
|
||||
- get_value<int>(params, "timings"),
|
||||
- get_value<bool>(params, "verbose"));
|
||||
+ get_value<int>(params, "timings"), get_value<bool>(params, "verbose"),
|
||||
+ get_value<bool>(params, "check_complex_residuals"));
|
||||
});
|
||||
m_actor->request_gpu();
|
||||
set_charge_neutrality_tolerance(params);
|
||||
diff --git a/testsuite/python/coulomb_interface.py b/testsuite/python/coulomb_interface.py
|
||||
index eff174e6e08..a5a1dc6b828 100644
|
||||
--- a/testsuite/python/coulomb_interface.py
|
||||
+++ b/testsuite/python/coulomb_interface.py
|
||||
@@ -59,7 +59,8 @@ def tearDown(self):
|
||||
system, espressomd.electrostatics.P3M,
|
||||
dict(prefactor=2., epsilon=0., mesh_off=[0.6, 0.7, 0.8], r_cut=1.5,
|
||||
cao=2, mesh=[8, 10, 8], alpha=12., accuracy=0.01, tune=False,
|
||||
- check_neutrality=True, charge_neutrality_tolerance=7e-12))
|
||||
+ check_neutrality=True, charge_neutrality_tolerance=7e-12,
|
||||
+ check_complex_residuals=False))
|
||||
test_p3m_cpu_non_metallic = tests_common.generate_test_for_actor_class(
|
||||
system, espressomd.electrostatics.P3M,
|
||||
dict(prefactor=2., epsilon=3., mesh_off=[0.6, 0.7, 0.8], r_cut=1.5,
|
||||
@@ -78,7 +79,8 @@ def tearDown(self):
|
||||
system, espressomd.electrostatics.P3MGPU,
|
||||
dict(prefactor=2., epsilon=0., mesh_off=[0.6, 0.7, 0.8], r_cut=1.5,
|
||||
cao=2, mesh=[8, 10, 8], alpha=12., accuracy=0.01, tune=False,
|
||||
- check_neutrality=True, charge_neutrality_tolerance=7e-12))
|
||||
+ check_neutrality=True, charge_neutrality_tolerance=7e-12,
|
||||
+ check_complex_residuals=False))
|
||||
test_p3m_gpu_non_metallic = tests_common.generate_test_for_actor_class(
|
||||
system, espressomd.electrostatics.P3MGPU,
|
||||
dict(prefactor=2., epsilon=3., mesh_off=[0.6, 0.7, 0.8], r_cut=1.5,
|
||||
diff --git a/testsuite/python/icc_interface.py b/testsuite/python/icc_interface.py
|
||||
index 2b968d2432b..6eadca2d0e7 100644
|
||||
--- a/testsuite/python/icc_interface.py
|
||||
+++ b/testsuite/python/icc_interface.py
|
||||
@@ -121,15 +121,21 @@ def test_exceptions_small_r_cut(self):
|
||||
|
||||
@utx.skipIfMissingFeatures(["P3M"])
|
||||
def test_exceptions_large_r_cut(self):
|
||||
- icc, (_, p) = self.setup_icc_particles_and_solver(max_iterations=1)
|
||||
- p3m = espressomd.electrostatics.P3M(**self.valid_p3m_parameters())
|
||||
+ icc, (_, p) = self.setup_icc_particles_and_solver(
|
||||
+ max_iterations=1, convergence=10.)
|
||||
+ p3m = espressomd.electrostatics.P3M(
|
||||
+ check_complex_residuals=False, **self.valid_p3m_parameters())
|
||||
|
||||
self.system.actors.add(p3m)
|
||||
self.system.actors.add(icc)
|
||||
-
|
||||
with self.assertRaisesRegex(Exception, f"Particle with id {p.id} has a charge .+ that is too large for the ICC algorithm"):
|
||||
- p.q = 1e9
|
||||
+ p.q = 1e8
|
||||
self.system.integrator.run(0)
|
||||
+
|
||||
+ self.system.actors.remove(icc)
|
||||
+ self.system.part.clear()
|
||||
+ icc, (_, p) = self.setup_icc_particles_and_solver(max_iterations=1)
|
||||
+ self.system.actors.add(icc)
|
||||
with self.assertRaisesRegex(Exception, "ICC failed to converge in the given number of maximal steps"):
|
||||
p.q = 0.
|
||||
self.system.integrator.run(0)
|
||||
diff --git a/testsuite/python/save_checkpoint.py b/testsuite/python/save_checkpoint.py
|
||||
index 09ebda6f002..55ab1b37b82 100644
|
||||
--- a/testsuite/python/save_checkpoint.py
|
||||
+++ b/testsuite/python/save_checkpoint.py
|
||||
@@ -125,6 +125,7 @@
|
||||
cao=1,
|
||||
alpha=1.0,
|
||||
r_cut=1.0,
|
||||
+ check_complex_residuals=False,
|
||||
timings=15,
|
||||
tune=False)
|
||||
if 'ELC' in modes:
|
||||
diff --git a/testsuite/python/test_checkpoint.py b/testsuite/python/test_checkpoint.py
|
||||
index 17363085c3f..98f9959f68f 100644
|
||||
--- a/testsuite/python/test_checkpoint.py
|
||||
+++ b/testsuite/python/test_checkpoint.py
|
||||
@@ -504,6 +504,7 @@ def test_p3m(self):
|
||||
reference = {'prefactor': 1.0, 'accuracy': 0.1, 'mesh': 3 * [10],
|
||||
'cao': 1, 'alpha': 1.0, 'r_cut': 1.0, 'tune': False,
|
||||
'timings': 15, 'check_neutrality': True,
|
||||
+ 'check_complex_residuals': False,
|
||||
'charge_neutrality_tolerance': 1e-12}
|
||||
for key in reference:
|
||||
self.assertIn(key, state)
|
||||
@@ -519,6 +520,7 @@ def test_elc(self):
|
||||
p3m_reference = {'prefactor': 1.0, 'accuracy': 0.1, 'mesh': 3 * [10],
|
||||
'cao': 1, 'alpha': 1.0, 'r_cut': 1.0, 'tune': False,
|
||||
'timings': 15, 'check_neutrality': True,
|
||||
+ 'check_complex_residuals': False,
|
||||
'charge_neutrality_tolerance': 7e-12}
|
||||
elc_reference = {'gap_size': 6.0, 'maxPWerror': 0.1,
|
||||
'delta_mid_top': 0.9, 'delta_mid_bot': 0.1,
|
17
hdf5.patch
17
hdf5.patch
@ -1,17 +0,0 @@
|
||||
---
|
||||
src/core/CMakeLists.txt | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/src/core/CMakeLists.txt
|
||||
+++ b/src/core/CMakeLists.txt
|
||||
@@ -127,6 +127,10 @@ add_subdirectory(reaction_methods)
|
||||
add_subdirectory(scafacos)
|
||||
add_subdirectory(virtual_sites)
|
||||
|
||||
+if(H5MD)
|
||||
+ target_link_libraries(EspressoCore PUBLIC ${HDF5_LIBRARIES})
|
||||
+endif(H5MD)
|
||||
+
|
||||
if(WITH_TESTS)
|
||||
add_subdirectory(unit_tests)
|
||||
endif(WITH_TESTS)
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
src/config/config.hpp | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/src/config/config.hpp
|
||||
+++ b/src/config/config.hpp
|
||||
@@ -37,6 +37,8 @@
|
||||
#define MPICH_SKIP_MPICXX
|
||||
#endif
|
||||
|
||||
+#include <cstddef>
|
||||
+
|
||||
#include "config-features.hpp"
|
||||
|
||||
/** P3M: Default for offset of first mesh point from the origin (left
|
@ -1,36 +0,0 @@
|
||||
commit bff5e2703d4371f06f281d48181431558066d566
|
||||
Author: Jean-Noël Grad <jgrad@icp.uni-stuttgart.de>
|
||||
Date: Tue Dec 20 19:36:34 2022 +0100
|
||||
|
||||
tests: Replace deprecated numpy option
|
||||
|
||||
Option 'normed' in numpy.histogramdd was deprecated since 1.15 and
|
||||
removed in 1.24.
|
||||
|
||||
---
|
||||
testsuite/python/observable_profile.py | 2 +-
|
||||
testsuite/python/observable_profileLB.py | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/testsuite/python/observable_profile.py
|
||||
+++ b/testsuite/python/observable_profile.py
|
||||
@@ -51,7 +51,7 @@ def test_density_profile(self):
|
||||
obs_bin_centers = density_profile.bin_centers()
|
||||
np_hist, np_edges = tests_common.get_histogram(
|
||||
np.copy(self.system.part.all().pos), self.kwargs, 'cartesian',
|
||||
- normed=True)
|
||||
+ density=True)
|
||||
np_hist *= len(self.system.part)
|
||||
np.testing.assert_array_almost_equal(obs_data, np_hist)
|
||||
for i in range(3):
|
||||
--- a/testsuite/python/observable_profileLB.py
|
||||
+++ b/testsuite/python/observable_profileLB.py
|
||||
@@ -91,7 +91,7 @@ def test_velocity_profile(self):
|
||||
obs_edges = obs.call_method("edges")
|
||||
_, np_edges = tests_common.get_histogram(
|
||||
np.zeros([1, 3]), LB_VELOCITY_PROFILE_PARAMS, 'cartesian',
|
||||
- normed=True)
|
||||
+ density=True)
|
||||
for i in range(3):
|
||||
np.testing.assert_array_almost_equal(obs_edges[i], np_edges[i])
|
||||
for x in range(obs_data.shape[0]):
|
@ -1,3 +1,206 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Apr 18 10:43:03 UTC 2023 - Jean-Noel Grad <jgrad@icp.uni-stuttgart.de>
|
||||
|
||||
- Update to 4.2.1:
|
||||
This release provides a number of corrections for the ESPResSo
|
||||
4.2 line. We recommend that this release be used for all
|
||||
production simulations. The interface has not been changed
|
||||
between ESPResSo 4.2.0 and 4.2.1. However, some bugs were
|
||||
discovered which can affect simulation results. No further bug
|
||||
fix releases will be provided for the 4.2 line.
|
||||
|
||||
Added functionality
|
||||
-------------------
|
||||
|
||||
* P3M and DipolarP3M can now be used with the hybrid
|
||||
decomposition cell system with 1 MPI rank (#4678).
|
||||
* Lattice-Boltzmann can now be used with the N-square and
|
||||
hybrid decomposition cell systems with 2 or more MPI ranks
|
||||
(#4676).
|
||||
|
||||
Changed requirements
|
||||
--------------------
|
||||
* The nbconvert version requirement was bumped to 6.5.1 to
|
||||
patch an XSS vulnerability (#4658).
|
||||
|
||||
Improved documentation
|
||||
----------------------
|
||||
* The user guide now documents how to improve the
|
||||
reproducibility of simulations that have checkpointing
|
||||
enabled (#4677).
|
||||
* The user guide now reflects that the lattice-Boltzmann
|
||||
profile observables can be used in parallel (#4583).
|
||||
* The active matter tutorial now uses an adequate engine
|
||||
dipole for the swimmer particle (#4585).
|
||||
* The error analysis tutorials have been improved (#4597).
|
||||
* The tutorials can now be used in VS Code Jupyter (both the
|
||||
desktop and web versions) and the mathematical formula are
|
||||
now correctly displayed (#4531).
|
||||
* All ESPResSo-specific CMake options are now documented in
|
||||
the installation chapter of the user guide (#4608).
|
||||
* Python package installation instructions no longer feature
|
||||
package version numbers; instead, `requirements.txt` is used
|
||||
as a constraint file (#4638).
|
||||
* MMM1D algorithms now properly document their parameter names
|
||||
(#4677).
|
||||
* Reaction methods now cite the relevant literature (#4681).
|
||||
* Caveats for chain analysis methods are now documented
|
||||
(#4698).
|
||||
* Minor formatting issues in Sphinx and typos in Python
|
||||
docstrings were addressed (#4608).
|
||||
|
||||
Interface changes
|
||||
-----------------
|
||||
* A new boolean property
|
||||
`System.virtual_sites.override_cutoff_check` was introduced
|
||||
to allow disabling the cutoff range checks from virtual
|
||||
sites (#4623).
|
||||
|
||||
Removed functionality
|
||||
---------------------
|
||||
* The unused and untested `Analysis.v_kappa()` method was
|
||||
removed (#4534).
|
||||
|
||||
Improved testing
|
||||
----------------
|
||||
* Improve unit testing of core functionality: P3M, MMM1D, OIF,
|
||||
virtual sites, script interface factory (#4631).
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
* The checkpointing mechanism now properly restores the
|
||||
particle quaternion and all derived quantities (#4637).
|
||||
Release 4.2.0 introduced a regression that caused checkpoint
|
||||
files to overwrite the particle quaternion/director by a
|
||||
unit vector pointing along the z direction, when the
|
||||
`DIPOLES` feature was part of the myconfig file. This lead
|
||||
to incorrect trajectories when reloading a simulation from
|
||||
a checkpoint file, if the particle director played a role in
|
||||
the simulation (ex: relative virtual sites, Gay-Berne
|
||||
potential, anisotropic particles, active particles, etc.).
|
||||
In addition, the angular velocity in body frame was restored
|
||||
with the wrong orientation. Since the default myconfig file
|
||||
contains `DIPOLES`, most ESPResSo users were affected.
|
||||
* The checkpointing mechanism now properly restores LB
|
||||
boundaries (#4649). Release 4.2.0 introduced a regression
|
||||
where reloading LB populations would accidentally reset LB
|
||||
boundary flags.
|
||||
* The checkpointing mechanism now restores P3M and DipolarP3M
|
||||
solvers without triggering a re-tune (#4677). In previous
|
||||
releases, the checkpointing code would automatically re-tune
|
||||
these algorithms during a reload, causing tiny deviations in
|
||||
the forces that were problematic for trajectory
|
||||
reproducibility.
|
||||
* Brownian dynamics now integrates the rotational dynamics of
|
||||
rotatable particles whose position is fixed in 3D space
|
||||
(#4548).
|
||||
* Langevin dynamics now properly integrates particles with
|
||||
anisotropic friction (#4683, #4690).
|
||||
* A regression that caused virtual sites to incorrectly count
|
||||
their image box when crossing a periodic boundary has been
|
||||
fixed (#4564, #4707).
|
||||
* Particles can no longer be created or updated with a
|
||||
negative mass or a null mass (#4679).
|
||||
* Particles created without a user-specified type can now
|
||||
participate in reactions (#4589).
|
||||
* When a Monte Carlo displacement move is rejected, the
|
||||
original particle velocity is now restored (#4589).
|
||||
* Reaction methods now raise an exception when accidentally
|
||||
calling `method.reaction(steps=20)` instead of
|
||||
`method.reaction(reaction_steps=20)` (#4666). Since 4.2.0
|
||||
the `steps` argument was ignored, in which case the default
|
||||
value `reaction_steps=1` would used by the core. Note that
|
||||
in the next minor release of ESPResSo, the `reaction_steps`
|
||||
argument will be renamed to `steps`.
|
||||
* Reaction methods now rebuild the list of free particle ids
|
||||
every time `WidomInsertion::calculate_particle_insertion_potential_energy()`
|
||||
and `ReactionAlgorithm::do_reaction()` are called (#4609).
|
||||
This was needed to allow multiple concurrent reactions, as
|
||||
well as avoiding subtle bugs when both the user and a
|
||||
reaction method tried to create a new particle with an id
|
||||
that used to belong to a deleted particle.
|
||||
* When all particles are cleared, the reaction methods type
|
||||
map is now also cleared (#4645). In the past, it was
|
||||
possible to attempt a reaction on particles that had just
|
||||
been cleared from the system, which would raise an
|
||||
exception. This bug affected all ESPResSo releases since
|
||||
4.0.
|
||||
* The `System.part.pairs()` method now returns the correct
|
||||
particle pairs when particle ids aren't both contiguous and
|
||||
starting from 0 (#4628). The regression was introduced in
|
||||
release 4.2.0.
|
||||
* The auto-exclusions feature no longer adds spurious
|
||||
exclusions to particle ids in the range [1, distance]
|
||||
(#4654). This bug would potentially break the physics of the
|
||||
system and potentially raise an exception in a system with
|
||||
non-contiguous particle ids. This regression was introduced
|
||||
in release 2.2.0b.
|
||||
* The structure factor analysis code no longer double-counts
|
||||
particles when the same particle type is provided twice
|
||||
(#4534).
|
||||
* The minimal distance distribution analysis code no longer
|
||||
has an arbitrary cutoff distance when the simulation box is
|
||||
aperiodic (open boundaries); this would cause spurious
|
||||
artifacts to appear in the histogram at
|
||||
`r = np.sum(system.box_l)` when particles were further apart
|
||||
than this arbitrary distance (#4534).
|
||||
* The cluster analysis functions are now disabled for systems
|
||||
with Lees-Edwards periodic boundaries, since the cluster
|
||||
analysis position wrapping code doesn't properly handle the
|
||||
shear offset (#4698).
|
||||
* The chain analysis methods now raise an error when the
|
||||
number of chains or beads per chain is invalid (#4708).
|
||||
* The observable tests now longer rely on deprecated numpy
|
||||
options that were removed in numpy 1.24 (#4635).
|
||||
* The visualizer `*_arrows_type_materials` options now have an
|
||||
effect on arrow materials (#4686).
|
||||
* The visualizer exception handling mechanism has been made
|
||||
less brittle (#4686).
|
||||
* The visualizer no longer raises exception when the optional
|
||||
dependency `freeglut` isn't installed (#4691).
|
||||
* The visualizer can randomly freeze when using collision
|
||||
detection or bond breakage; a temporary workaround has been
|
||||
introduced that fixes the issue for simulations that use
|
||||
only 1 MPI rank (#4686).
|
||||
* The `__dir__()` method of script interface objects no longer
|
||||
raises an exception (#4674).
|
||||
* Compilation and testsuite issues involving missing or
|
||||
incorrect feature guards were addressed (#4562, #4648).
|
||||
* The build system no longer silently ignores invalid external
|
||||
feature definitions in `myconfig.hpp` and CMake files
|
||||
(#4608). This issue would only affect feature developers,
|
||||
as well as users of very old compilers, and would lead to
|
||||
ESPResSo builds missing features.
|
||||
|
||||
Under the hood changes
|
||||
----------------------
|
||||
* The Clang 14 and AppleClang 14 compilers are now supported
|
||||
(#4601).
|
||||
* Several Clang 14 compiler diagnostics have been addressed
|
||||
(#4606).
|
||||
* Boost 1.81 and later versions are now supported (#4655).
|
||||
* Compiler errors on non-x86 architectures were addressed
|
||||
(#4538).
|
||||
* Test tolerances were adjusted for non-x86 architectures
|
||||
(#4708).
|
||||
* The pypresso script now prints a warning when running with
|
||||
MCA binding policy "numa" on NUMA architectures that are not
|
||||
supported in singleton mode by Open MPI 4.x (#4607).
|
||||
* The config file generator has been rewritten to properly
|
||||
handle external features and compiler errors (#4608).
|
||||
* Security hardening for GitHub Workflows (#4577, #4638) and
|
||||
Codecov (#4600).
|
||||
* Deployment of the user guide to GitHub Pages now relies on
|
||||
cloud providers to fetch JavaScript dependencies (#4656).
|
||||
- Removed upstreamed patches:
|
||||
- fix-broken-fft-check.patch
|
||||
- boost-1.74.patch
|
||||
- numpy-1.24.patch
|
||||
- rpath.patch
|
||||
- missing_size_t.patch
|
||||
- hdf5.patch
|
||||
- setuptools.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 26 19:46:39 UTC 2023 - Jean-Noel Grad <jgrad@icp.uni-stuttgart.de>
|
||||
|
||||
|
@ -35,25 +35,15 @@
|
||||
%define pkgname espresso
|
||||
%define modname %{pkgname}md
|
||||
Name: python3-%{modname}
|
||||
Version: 4.2.0
|
||||
Version: 4.2.1
|
||||
Release: 0
|
||||
Summary: Parallel simulation software for soft matter research
|
||||
License: GPL-3.0-or-later
|
||||
Group: Productivity/Scientific/Chemistry
|
||||
URL: http://espressomd.org
|
||||
Source: https://github.com/%{modname}/%{pkgname}/releases/download/%{version}/%{pkgname}-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM boost-1.74.patch gh#espressomd/espresso#3864
|
||||
Patch0: boost-1.74.patch
|
||||
# PATCH-FIX-OPENSUSE missing_size_t.patch gh#espressomd/espresso#4274
|
||||
Patch1: missing_size_t.patch
|
||||
# PATCH-FIX-OPENSUSE hdf5.patch gh#espressomd/espresso#3543
|
||||
Patch2: hdf5.patch
|
||||
# PATCH-FIX-OPENSUSE rpath.patch boo#1198352
|
||||
Patch3: rpath.patch
|
||||
# PATCH-FIX-UPSTREAM fix-broken-fft-check.patch gh#espressomd/espresso#4567
|
||||
Patch4: fix-broken-fft-check.patch
|
||||
# PATCH-FIX-UPSTREAM numpy-1.24.patch gh#espressomd/espresso#4635
|
||||
Patch5: numpy-1.24.patch
|
||||
# PATCH-FIX-UPSTREAM setuptools.patch gh#espressomd/espresso#4709
|
||||
Patch0: setuptools.patch
|
||||
# According to gh#espressomd/espresso#4537 32bit architectures are not supported any more
|
||||
ExcludeArch: %{ix86}
|
||||
BuildRequires: cmake
|
||||
@ -112,6 +102,7 @@ export HDF5_USE_SHLIB=yes
|
||||
# we don't install {i,}pypresso scripts as they aren't needed when installing in /usr
|
||||
%cmake \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--as-needed -Wl,-z,now' \
|
||||
-DCMAKE_SKIP_RPATH=ON \
|
||||
-DLIBDIR=%{_libdir} \
|
||||
-DPYTHON_EXECUTABLE=%{_bindir}/python3 \
|
||||
-DPYTHON_INSTDIR=%{python3_sitearch} \
|
||||
@ -124,10 +115,6 @@ find %{buildroot}%{python3_sitearch} -name \*.so \
|
||||
-exec chrpath -r %{python3_sitearch} '{}' \;
|
||||
|
||||
%check
|
||||
# gh#espressomd/espresso#3315
|
||||
%ifarch i586
|
||||
%define testargs ARGS='-E collision_detection'
|
||||
%endif
|
||||
LD_LIBRARY_PATH='%{buildroot}/%{python3_sitearch}/espressomd::%{_libdir}/mpi/gcc/%{mpiver}/%{_lib}' make -C build check CTEST_OUTPUT_ON_FAILURE=1 %{?testargs:%{testargs}}
|
||||
|
||||
%files
|
||||
|
15
rpath.patch
15
rpath.patch
@ -1,15 +0,0 @@
|
||||
---
|
||||
CMakeLists.txt | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
||||
+set(CMAKE_SKIP_RPATH ON)
|
||||
+
|
||||
if(POLICY CMP0076)
|
||||
# make target_sources() convert relative paths to absolute
|
||||
cmake_policy(SET CMP0076 NEW)
|
18
setuptools.patch
Normal file
18
setuptools.patch
Normal file
@ -0,0 +1,18 @@
|
||||
diff --git a/testsuite/python/unittest_decorators.py b/testsuite/python/unittest_decorators.py
|
||||
index 109f89cc8..a9a0e5200 100644
|
||||
--- a/testsuite/python/unittest_decorators.py
|
||||
+++ b/testsuite/python/unittest_decorators.py
|
||||
@@ -20,5 +20,5 @@
|
||||
import sys
|
||||
import importlib
|
||||
-import setuptools
|
||||
+import pkg_resources
|
||||
import unittest
|
||||
|
||||
@@ -75,5 +75,5 @@ def skipIfUnmetModuleVersionRequirement(module, version_requirement):
|
||||
except ImportError:
|
||||
return skipIfMissingModules(module)
|
||||
- if not setuptools.version.pkg_resources.packaging.specifiers.SpecifierSet(
|
||||
+ if not pkg_resources.packaging.specifiers.SpecifierSet(
|
||||
version_requirement).contains(_module.__version__):
|
||||
return unittest.skip(
|
Loading…
Reference in New Issue
Block a user