Permalink
Browse files

Merge branch 'python' of https://github.com/espressomd/espresso into …

…opengl
  • Loading branch information...
KaiSzuttor committed Oct 5, 2018
2 parents b2115a8 + dfd792c commit 6b326f39c8ee302f56a2a7ac21cba219358243fc
Showing with 1,028 additions and 206 deletions.
  1. +34 −0 doc/sphinx/inter_non-bonded.rst
  2. +1 −1 doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb
  3. BIN doc/tutorials/06-active_matter/06-active_matter.pdf
  4. +3 −3 maintainer/CI/build_cmake.sh
  5. +0 −2 src/core/cuda_interface.hpp
  6. +5 −0 src/core/energy_inline.hpp
  7. +5 −0 src/core/forces_inline.hpp
  8. +1 −0 src/core/nonbonded_interactions/CMakeLists.txt
  9. +4 −0 src/core/nonbonded_interactions/nonbonded_interaction_data.cpp
  10. +6 −0 src/core/nonbonded_interactions/nonbonded_interaction_data.hpp
  11. +40 −0 src/core/nonbonded_interactions/wca.cpp
  12. +59 −0 src/core/nonbonded_interactions/wca.hpp
  13. +1 −0 src/features.def
  14. +1 −1 src/python/espressomd/electrostatics.pyx
  15. +8 −0 src/python/espressomd/interactions.pxd
  16. +82 −1 src/python/espressomd/interactions.pyx
  17. +1 −1 src/python/pypresso.cmakein
  18. +2 −194 testsuite/CMakeLists.txt
  19. +432 −0 testsuite/cmake/BashUnitTests.sh
  20. +39 −0 testsuite/cmake/CMakeLists.txt
  21. +20 −0 testsuite/cmake/test_install.sh
  22. +14 −0 testsuite/cmake/test_install_destdir.sh
  23. +14 −0 testsuite/cmake/test_install_prefix.sh
  24. +19 −0 testsuite/cmake/test_python_bindings.sh
  25. +194 −0 testsuite/python/CMakeLists.txt
  26. 0 testsuite/{ → python}/accumulator.py
  27. 0 testsuite/{ → python}/actor.py
  28. 0 testsuite/{ → python}/analyze_chains.py
  29. 0 testsuite/{ → python}/analyze_distance.py
  30. 0 testsuite/{ → python}/analyze_distribution.py
  31. 0 testsuite/{ → python}/analyze_energy.py
  32. 0 testsuite/{ → python}/analyze_gyration_tensor.py
  33. 0 testsuite/{ → python}/analyze_itensor.py
  34. 0 testsuite/{ → python}/array_properties.py
  35. 0 testsuite/{ → python}/auto_exclusions.py
  36. 0 testsuite/{ → python}/cellsystem.py
  37. 0 testsuite/{ → python}/cluster_analysis.py
  38. 0 testsuite/{ → python}/collision_detection.py
  39. 0 testsuite/{ → python}/comfixed.py
  40. 0 testsuite/{ → python}/constant_pH.py
  41. 0 testsuite/{ → python}/constraint_homogeneous_magnetic_field.py
  42. 0 testsuite/{ → python}/constraint_shape_based.py
  43. 0 testsuite/{ → python}/correlation.py
  44. 0 testsuite/{ → python}/coulomb_cloud_wall.py
  45. 0 testsuite/{ → python}/coulomb_cloud_wall_duplicated.py
  46. 0 testsuite/{ → python}/coulomb_mixed_periodicity.py
  47. 0 testsuite/{ → python}/coulomb_tuning.py
  48. 0 testsuite/{ → python}/data/coulomb_cloud_wall_duplicated_system.data
  49. 0 testsuite/{ → python}/data/coulomb_cloud_wall_system.data
  50. 0 testsuite/{ → python}/data/coulomb_mixed_periodicity_system.data
  51. BIN testsuite/{ → python}/data/coulomb_tuning_system.npz
  52. 0 testsuite/{ → python}/data/engine_lb.vtk
  53. 0 testsuite/{ → python}/data/engine_lbgpu_2pt.vtk
  54. 0 testsuite/{ → python}/data/engine_lbgpu_3pt.vtk
  55. 0 testsuite/{ → python}/data/gen_coulomb_2d_ref_data.py
  56. 0 testsuite/{ → python}/data/lj_system.dat
  57. 0 testsuite/{ → python}/data/mdlc_reference_data.dat
  58. 0 testsuite/{ → python}/data/mdlc_reference_data_energy.dat
  59. 0 testsuite/{ → python}/data/mdlc_reference_data_forces_torques.dat
  60. 0 testsuite/{ → python}/data/npt_lj_system.data
  61. 0 testsuite/{ → python}/data/p3m_magnetostatics_expected.data
  62. 0 testsuite/{ → python}/data/p3m_magnetostatics_system.data
  63. 0 testsuite/{ → python}/data/scafacos_dipoles_1d_reference_data_energy.dat
  64. 0 testsuite/{ → python}/data/scafacos_dipoles_1d_reference_data_forces_torques.dat
  65. 0 testsuite/{ → python}/data/sphere393nodes.dat
  66. 0 testsuite/{ → python}/data/sphere393triangles.dat
  67. 0 testsuite/{ → python}/dawaanr-and-bh-gpu.py
  68. 0 testsuite/{ → python}/dawaanr-and-dds-gpu.py
  69. 0 testsuite/{ → python}/dds-and-bh-gpu-perf.py
  70. 0 testsuite/{ → python}/dipolar_mdlc_p3m_scafacos_p2nfft.py
  71. 0 testsuite/{ → python}/domain_decomposition.py
  72. 0 testsuite/{ → python}/dpd.py
  73. 0 testsuite/{ → python}/drude.py
  74. 0 testsuite/{ → python}/ek_common.py
  75. 0 testsuite/{ → python}/ek_eof_one_species_base.py
  76. 0 testsuite/{ → python}/ek_eof_one_species_x.py
  77. 0 testsuite/{ → python}/ek_eof_one_species_x_nonlinear.py
  78. 0 testsuite/{ → python}/ek_eof_one_species_y.py
  79. 0 testsuite/{ → python}/ek_eof_one_species_y_nonlinear.py
  80. 0 testsuite/{ → python}/ek_eof_one_species_z.py
  81. 0 testsuite/{ → python}/ek_eof_one_species_z_nonlinear.py
  82. 0 testsuite/{ → python}/elc_vs_mmm2d_neutral.py
  83. 0 testsuite/{ → python}/elc_vs_mmm2d_nonneutral.py
  84. 0 testsuite/{ → python}/electrostaticInteractions.py
  85. 0 testsuite/{ → python}/engine_langevin.py
  86. 0 testsuite/{ → python}/engine_lb.py
  87. 0 testsuite/{ → python}/engine_lbgpu.py
  88. 0 testsuite/{ → python}/exclusions.py
  89. 0 testsuite/{ → python}/field_test.py
  90. 0 testsuite/{ → python}/force_cap.py
  91. 0 testsuite/{ → python}/h5md.py
  92. 0 testsuite/{ → python}/hat.py
  93. 0 testsuite/{ → python}/icc.py
  94. 0 testsuite/{ → python}/interactions_bond_angle.py
  95. 0 testsuite/{ → python}/interactions_bonded.py
  96. 0 testsuite/{ → python}/interactions_bonded_interface.py
  97. 0 testsuite/{ → python}/interactions_dihedral.py
  98. +43 −3 testsuite/{ → python}/interactions_non-bonded.py
  99. 0 testsuite/{ → python}/interactions_non-bonded_interface.py
  100. 0 testsuite/{ → python}/langevin_thermostat.py
  101. 0 testsuite/{ → python}/layered.py
  102. 0 testsuite/{ → python}/lb.py
  103. 0 testsuite/{ → python}/lb_boundary.py
  104. 0 testsuite/{ → python}/lb_boundary_velocity.py
  105. 0 testsuite/{ → python}/lb_electrohydrodynamics.py
  106. 0 testsuite/{ → python}/lb_get_u_at_pos.py
  107. 0 testsuite/{ → python}/lb_gpu_viscous.py
  108. 0 testsuite/{ → python}/lb_interpolation.py
  109. 0 testsuite/{ → python}/lb_poiseuille.py
  110. 0 testsuite/{ → python}/lb_shear.py
  111. 0 testsuite/{ → python}/lb_stokes_sphere_gpu.py
  112. 0 testsuite/{ → python}/lb_streaming.py
  113. 0 testsuite/{ → python}/lb_switch.py
  114. 0 testsuite/{ → python}/lb_thermo_virtual.py
  115. 0 testsuite/{ → python}/lbgpu_remove_total_momentum.py
  116. 0 testsuite/{ → python}/lj.py
  117. 0 testsuite/{ → python}/magnetostaticInteractions.py
  118. 0 testsuite/{ → python}/mass-and-rinertia_per_particle.py
  119. 0 testsuite/{ → python}/minimize_energy.py
  120. 0 testsuite/{ → python}/mmm1d.py
  121. 0 testsuite/{ → python}/npt.py
  122. 0 testsuite/{ → python}/nsquare.py
  123. 0 testsuite/{ → python}/observable_cylindrical.py
  124. 0 testsuite/{ → python}/observable_cylindricalLB.py
  125. 0 testsuite/{ → python}/observable_profile.py
  126. 0 testsuite/{ → python}/observable_profileLB.py
  127. 0 testsuite/{ → python}/observables.py
  128. 0 testsuite/{ → python}/oif_volume_conservation.py
  129. 0 testsuite/{ → python}/p3m_gpu.py
  130. 0 testsuite/{ → python}/pair_criteria.py
  131. 0 testsuite/{ → python}/pairs.py
  132. 0 testsuite/{ → python}/particle.py
  133. 0 testsuite/{ → python}/particle_slice.py
  134. 0 testsuite/{ → python}/polymer.py
  135. 0 testsuite/{ → python}/random_pairs.py
  136. 0 testsuite/{ → python}/rdf.py
  137. 0 testsuite/{ → python}/reaction_ensemble.py
  138. 0 testsuite/{ → python}/rescale.py
  139. 0 testsuite/{ → python}/rigid_bond.py
  140. 0 testsuite/{ → python}/rotate_system.py
  141. 0 testsuite/{ → python}/rotation_per_particle.py
  142. 0 testsuite/{ → python}/rotational_inertia.py
  143. 0 testsuite/{ → python}/save_checkpoint.py
  144. 0 testsuite/{ → python}/scafacos_dipoles_1d_2d.py
  145. 0 testsuite/{ → python}/script_interface_object_params.py
  146. 0 testsuite/{ → python}/simple_pore.py
  147. 0 testsuite/{ → python}/stress.py
  148. 0 testsuite/{ → python}/subt_lj.py
  149. 0 testsuite/{ → python}/swimmer_reaction.py
  150. 0 testsuite/{ → python}/tabulated.py
  151. 0 testsuite/{ → python}/test_checkpoint.py
  152. 0 testsuite/{ → python}/tests_common.py
  153. 0 testsuite/{ → python}/thermalized_bond.py
  154. 0 testsuite/{ → python}/thole.py
  155. 0 testsuite/{ → python}/unravel_index.py
  156. 0 testsuite/{ → python}/variant_conversion.py
  157. 0 testsuite/{ → python}/virtual_sites_relative.py
  158. 0 testsuite/{ → python}/virtual_sites_tracers.py
  159. 0 testsuite/{ → python}/virtual_sites_tracers_common.py
  160. 0 testsuite/{ → python}/virtual_sites_tracers_const_force.py
  161. 0 testsuite/{ → python}/virtual_sites_tracers_gpu.py
  162. 0 testsuite/{ → python}/wang_landau_reaction_ensemble.py
  163. 0 testsuite/{ → python}/writevtf.py
@@ -216,6 +216,40 @@ interaction, while :math:`\delta` varies how smoothly the potential goes to zero
alchemical transformations, where a group of atoms can be slowly turned
on/off during a simulation.
.. _Weeks-Chandler-Andersen interaction:
Weeks-Chandler-Andersen interaction
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. note::
Feature ``WCA`` required.
The interface for the Weeks-Chandler-Andersen interactions is implemented in
:class:`espressomd.interactions.WCAInteraction`. They
are configured via the syntax::
system.non_bonded_inter[type1, type2].wca.set_params(**kwargs)
This command defines a Weeks-Chandler-Andersen interaction between particles of the
types ``type1`` and ``type2``. The potential is defined by
.. math::
\label{eq:wca}
V_\mathrm{WCA}(r) =
\begin{cases}
4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12}
- \left(\frac{\sigma}{r}\right)^6 + \frac{1}{4} \right]
& \mathrm{if~} r < \sigma 2^{\frac{1}{6}}\\
0
& \mathrm{otherwise}
\end{cases}.
The net force on a particle can be capped by using
force capping ``system.non_bonded_inter.set_force_cap(max)``, see
section :ref:`Capping the force during warmup`
.. _Lennard-Jones cosine interaction:
Lennard-Jones cosine interaction
@@ -18,7 +18,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"One of the typical applications of **ESPResSo** is the simulation of polymer chains with a bead-spring-model. For this we need a repulsive interaction between all beads, for which one usually takes a shifted and truncated Lennard-Jones (so called Weeks-Chandler-Anderson) interaction, and additionally a bonded interaction between adjacent beads to hold the polymer together. You have already learned that the command"
"One of the typical applications of **ESPResSo** is the simulation of polymer chains with a bead-spring-model. For this we need a repulsive interaction between all beads, for which one usually takes a shifted and truncated Lennard-Jones (so called Weeks-Chandler-Andersen) interaction, and additionally a bonded interaction between adjacent beads to hold the polymer together. You have already learned that the command"
]
},
{
View
Binary file not shown.
@@ -86,6 +86,7 @@ fi
cmake_params="-DCMAKE_BUILD_TYPE=$build_type -DPYTHON_EXECUTABLE=$(which python$python_version) -DWARNINGS_ARE_ERRORS=ON -DTEST_NP:INT=$check_procs $cmake_params"
cmake_params="$cmake_params -DCMAKE_CXX_FLAGS=$cxx_flags"
cmake_params="$cmake_params -DCMAKE_INSTALL_PREFIX=/tmp/espresso-unit-tests"
if $with_ccache; then
cmake_params="$cmake_params -DWITH_CCACHE=ON"
fi
@@ -244,12 +245,13 @@ if $make_check; then
done
fi
cmd "make -j${build_procs} check_unit_tests $make_params" || exit 1
cmd "make check_cmake_install $make_params" || exit 1
end "TEST"
else
start "TEST"
cmd "mpiexec -n $check_procs ./pypresso $srcdir/testsuite/particle.py" || exit 1
cmd "mpiexec -n $check_procs ./pypresso $srcdir/testsuite/python/particle.py" || exit 1
end "TEST"
fi
@@ -259,8 +261,6 @@ if $with_coverage; then
lcov -q --directory . --capture --output-file coverage.info # capture coverage info
lcov -q --remove coverage.info '/usr/*' --output-file coverage.info # filter out system
lcov -q --remove coverage.info '*/doc/*' --output-file coverage.info # filter out docs
lcov -q --remove coverage.info '*/unit_tests/*' --output-file coverage.info # filter out unit test
# lcov --list coverage.info #debug info
# Uploading report to CodeCov
if [ -z "$CODECOV_TOKEN" ]; then
bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
@@ -94,8 +94,6 @@ struct CUDA_particle_data {
float mass;
#endif
unsigned int fixed;
#ifdef VIRTUAL_SITES
bool is_virtual;
#endif
@@ -58,6 +58,7 @@
#include "nonbonded_interactions/soft_sphere.hpp"
#include "nonbonded_interactions/steppot.hpp"
#include "nonbonded_interactions/thole.hpp"
#include "nonbonded_interactions/wca.hpp"
#ifdef ELECTROSTATICS
#include "bonded_interactions/bonded_coulomb.hpp"
#endif
@@ -100,6 +101,10 @@ inline double calc_non_bonded_pair_energy(const Particle *p1,
/* Lennard-Jones */
ret += lj_pair_energy(p1, p2, ia_params, d, dist);
#endif
#ifdef WCA
/* WCA */
ret += wca_pair_energy(p1, p2, ia_params, d, dist);
#endif
#ifdef LENNARD_JONES_GENERIC
/* Generic Lennard-Jones */
@@ -61,6 +61,7 @@
#include "nonbonded_interactions/soft_sphere.hpp"
#include "nonbonded_interactions/steppot.hpp"
#include "nonbonded_interactions/thole.hpp"
#include "nonbonded_interactions/wca.hpp"
#include "npt.hpp"
#include "object-in-fluid/affinity.hpp"
#include "object-in-fluid/membrane_collision.hpp"
@@ -185,6 +186,10 @@ inline void calc_non_bonded_pair_force_parts(
#ifdef LENNARD_JONES
add_lj_pair_force(p1, p2, ia_params, d, dist, force);
#endif
/* WCA */
#ifdef WCA
add_wca_pair_force(p1, p2, ia_params, d, dist, force);
#endif
/* Lennard-Jones generic */
#ifdef LENNARD_JONES_GENERIC
add_ljgen_pair_force(p1, p2, ia_params, d, dist, force);
@@ -17,6 +17,7 @@ add_library(nonbonded_interactions SHARED
soft_sphere.cpp
steppot.cpp
thole.cpp
wca.cpp
)
add_dependencies(nonbonded_interactions EspressoConfig)
@@ -255,6 +255,10 @@ static void recalc_maximal_cutoff_nonbonded() {
max_cut_current = (data->LJ_cut + data->LJ_offset);
#endif
#ifdef WCA
max_cut_current = std::max(max_cut_current, data->WCA_cut);
#endif
#ifdef DPD
max_cut_current = std::max(max_cut_current,
std::max(data->dpd_r_cut, data->dpd_tr_cut));
@@ -120,6 +120,12 @@ struct IA_parameters {
#endif
#ifdef WCA
double WCA_eps = 0.0;
double WCA_sig = 0.0;
double WCA_cut = INACTIVE_CUTOFF;
#endif
/** flag that tells whether there is any short-ranged interaction,
i.e. one that contributes to the "nonbonded" section of the
energy/pressure. Note that even if there is no short-ranged
@@ -0,0 +1,40 @@
/*
Copyright (C) 2018 The ESPResSo project
This file is part of ESPResSo.
ESPResSo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ESPResSo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.hpp"
#ifdef WCA
#include "wca.hpp"
#include "communication.hpp"
int wca_set_params(int part_type_a, int part_type_b, double eps, double sig) {
IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b);
data->WCA_eps = eps;
data->WCA_sig = sig;
data->WCA_cut = sig * std::pow(2., 1. / 6.);
/* broadcast interaction parameters */
mpi_bcast_ia_params(part_type_a, part_type_b);
return ES_OK;
}
#endif /* ifdef WCA */
@@ -0,0 +1,59 @@
/*
Copyright (C) 2018 The ESPResSo project
This file is part of ESPResSo.
ESPResSo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ESPResSo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef WCA_HPP
#define WCA_HPP
#include "config.hpp"
#ifdef WCA
#include "nonbonded_interaction_data.hpp"
#include "particle_data.hpp"
int wca_set_params(int part_type_a, int part_type_b, double eps, double sig);
/** Calculate WCA force between particle p1 and p2 */
inline void add_wca_pair_force(const Particle *const p1,
const Particle *const p2,
IA_parameters *ia_params, double const d[3],
double dist, double force[3]) {
if (dist < ia_params->WCA_cut) {
auto const frac2 = Utils::sqr(ia_params->WCA_sig / dist);
auto const frac6 = frac2 * frac2 * frac2;
auto const fac =
48.0 * ia_params->WCA_eps * frac6 * (frac6 - 0.5) / (dist * dist);
for (int j = 0; j < 3; j++)
force[j] += fac * d[j];
}
}
/** calculate WCA energy between particle p1 and p2. */
inline double wca_pair_energy(const Particle *p1, const Particle *p2,
const IA_parameters *ia_params, const double d[3],
double dist) {
if (dist < ia_params->WCA_cut) {
auto const frac2 = Utils::sqr(ia_params->WCA_sig / dist);
auto const frac6 = frac2 * frac2 * frac2;
return 4.0 * ia_params->WCA_eps * (Utils::sqr(frac6) - frac6 + .25);
}
return 0.0;
}
#endif /* ifdef WCA */
#endif
View
@@ -85,6 +85,7 @@ SHANCHEN requires not ELECTROKINETICS and EXPERIMENTAL_FE
/* Interaction features */
TABULATED
LENNARD_JONES
WCA
LJ_WARN_WHEN_CLOSE
LENNARD_JONES_GENERIC implies LENNARD_JONES
LJCOS
@@ -191,7 +191,7 @@ IF P3M == 1:
raise ValueError(
"P3M cao has to be an integer between -1 and 7")
if not (self._params["accuracy"] >= 0):
if self._params["tune"] and not (self._params["accuracy"] >= 0):
raise ValueError("P3M accuracy has to be positive")
if self._params["epsilon"] == "metallic":
@@ -47,6 +47,10 @@ cdef extern from "nonbonded_interactions/nonbonded_interaction_data.hpp":
double LJ_offset
double LJ_min
double WCA_eps
double WCA_sig
double WCA_cut
double LJCOS_eps
double LJCOS_sig
double LJCOS_cut
@@ -160,6 +164,10 @@ cdef extern from "nonbonded_interactions/lj.hpp":
double eps, double sig, double cut,
double shift, double offset,
double min)
cdef extern from "nonbonded_interactions/wca.hpp":
cdef int wca_set_params(int part_type_a, int part_type_b,
double eps, double sig)
IF LJCOS:
cdef extern from "nonbonded_interactions/ljcos.hpp":
cdef int ljcos_set_params(int part_type_a, int part_type_b,
@@ -324,8 +324,87 @@ IF LENNARD_JONES == 1:
"""
return "epsilon", "sigma", "cutoff", "shift"
# Generic Lennard-Jones
IF WCA == 1:
cdef class WCAInteraction(NonBondedInteraction):
def validate_params(self):
"""Check that parameters are valid.
Raises
------
ValueError
If not true.
"""
if self._params["epsilon"] < 0:
raise ValueError("WCA eps has to be >=0")
if self._params["sigma"] < 0:
raise ValueError("WCA sigma has to be >=0")
return True
def _get_params_from_es_core(self):
cdef IA_parameters * ia_params
ia_params = get_ia_param_safe(
self._part_types[0],
self._part_types[1])
return {
"epsilon": ia_params.WCA_eps,
"sigma": ia_params.WCA_sig,
"cutoff": ia_params.WCA_cut}
def is_active(self):
"""Check if interaction is active.
"""
return (self._params["epsilon"] > 0)
def set_params(self, **kwargs):
""" Set parameters for the WCA interaction.
Parameters
----------
epsilon : :obj:`float`
The magnitude of the interaction.
sigma : :obj:`float`
Determines the interaction length scale.
"""
super(WCAInteraction, self).set_params(**kwargs)
def _set_params_in_es_core(self):
if wca_set_params(
self._part_types[0], self._part_types[1],
self._params["epsilon"],
self._params["sigma"]):
raise Exception("Could not set WCA parameters")
def default_params(self):
"""Python dictionary of default parameters.
"""
return {
"epsilon": 0.,
"sigma": 0.}
def type_name(self):
"""Name of interaction type.
"""
return "WCA"
def valid_keys(self):
"""All parameters that can be set.
"""
return "epsilon", "sigma"
def required_keys(self):
"""Parameters that have to be set.
"""
return "epsilon", "sigma"
# Generic Lennard-Jones
IF LENNARD_JONES_GENERIC == 1:
cdef class GenericLennardJonesInteraction(NonBondedInteraction):
@@ -1672,6 +1751,8 @@ class NonBondedInteractionHandle(object):
# Here, add one line for each nonbonded ia
IF LENNARD_JONES:
self.lennard_jones = LennardJonesInteraction(_type1, _type2)
IF WCA:
self.wca = WCAInteraction(_type1, _type2)
IF MEMBRANE_COLLISION:
self.membrane_collision = MembraneCollisionInteraction(
_type1, _type2)
Oops, something went wrong.

0 comments on commit 6b326f3

Please sign in to comment.