forked from pool/python3-espressomd
Accepting request 1080111 from home:jngrad:branches:devel:languages:python:numeric
ESPResSo 4.2.1 OBS-URL: https://build.opensuse.org/request/show/1080111 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python3-espressomd?expand=0&rev=44
This commit is contained in:
parent
7f52a710bb
commit
d4a88a2e75
@ -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,198 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
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).
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jan 26 19:46:39 UTC 2023 - Jean-Noel Grad <jgrad@icp.uni-stuttgart.de>
|
Thu Jan 26 19:46:39 UTC 2023 - Jean-Noel Grad <jgrad@icp.uni-stuttgart.de>
|
||||||
|
|
||||||
|
@ -35,25 +35,15 @@
|
|||||||
%define pkgname espresso
|
%define pkgname espresso
|
||||||
%define modname %{pkgname}md
|
%define modname %{pkgname}md
|
||||||
Name: python3-%{modname}
|
Name: python3-%{modname}
|
||||||
Version: 4.2.0
|
Version: 4.2.1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Parallel simulation software for soft matter research
|
Summary: Parallel simulation software for soft matter research
|
||||||
License: GPL-3.0-or-later
|
License: GPL-3.0-or-later
|
||||||
Group: Productivity/Scientific/Chemistry
|
Group: Productivity/Scientific/Chemistry
|
||||||
URL: http://espressomd.org
|
URL: http://espressomd.org
|
||||||
Source: https://github.com/%{modname}/%{pkgname}/releases/download/%{version}/%{pkgname}-%{version}.tar.gz
|
Source: https://github.com/%{modname}/%{pkgname}/releases/download/%{version}/%{pkgname}-%{version}.tar.gz
|
||||||
# PATCH-FIX-UPSTREAM boost-1.74.patch gh#espressomd/espresso#3864
|
# PATCH-FIX-UPSTREAM setuptools.patch gh#espressomd/espresso#4709
|
||||||
Patch0: boost-1.74.patch
|
Patch0: setuptools.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
|
|
||||||
# According to gh#espressomd/espresso#4537 32bit architectures are not supported any more
|
# According to gh#espressomd/espresso#4537 32bit architectures are not supported any more
|
||||||
ExcludeArch: %{ix86}
|
ExcludeArch: %{ix86}
|
||||||
BuildRequires: cmake
|
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
|
# we don't install {i,}pypresso scripts as they aren't needed when installing in /usr
|
||||||
%cmake \
|
%cmake \
|
||||||
-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--as-needed -Wl,-z,now' \
|
-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--as-needed -Wl,-z,now' \
|
||||||
|
-DCMAKE_SKIP_RPATH=ON \
|
||||||
-DLIBDIR=%{_libdir} \
|
-DLIBDIR=%{_libdir} \
|
||||||
-DPYTHON_EXECUTABLE=%{_bindir}/python3 \
|
-DPYTHON_EXECUTABLE=%{_bindir}/python3 \
|
||||||
-DPYTHON_INSTDIR=%{python3_sitearch} \
|
-DPYTHON_INSTDIR=%{python3_sitearch} \
|
||||||
@ -124,10 +115,6 @@ find %{buildroot}%{python3_sitearch} -name \*.so \
|
|||||||
-exec chrpath -r %{python3_sitearch} '{}' \;
|
-exec chrpath -r %{python3_sitearch} '{}' \;
|
||||||
|
|
||||||
%check
|
%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}}
|
LD_LIBRARY_PATH='%{buildroot}/%{python3_sitearch}/espressomd::%{_libdir}/mpi/gcc/%{mpiver}/%{_lib}' make -C build check CTEST_OUTPUT_ON_FAILURE=1 %{?testargs:%{testargs}}
|
||||||
|
|
||||||
%files
|
%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