#
# Copyright (C) 2013-2022 The ESPResSo project
# Copyright (C) 2012 Olaf Lenz
#
# 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/>.
#

# Feature definitions
#
# The definitions are used for
# * generation of src/config-features.hpp, which checks the sanity of
#   the various features and their combinations
# * generation of myconfig-sample.hpp
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.  This file is offered as-is,
# without any warranty.
#
# Lines commented with '/* ... */' or '//' are copied to myconfig-sample.hpp
# Lines commented with '#' are ignored

/* Generic features */
EXTERNAL_FORCES
MASS
EXCLUSIONS
BOND_CONSTRAINT
THERMOSTAT_PER_PARTICLE
COLLISION_DETECTION
NPT
ENGINE                          implies ROTATION, EXTERNAL_FORCES
PARTICLE_ANISOTROPY             implies ROTATION
STOKESIAN_DYNAMICS              implies ROTATION

/* Rotation */
ROTATION
ROTATIONAL_INERTIA              implies ROTATION

/* Electrostatics */
ELECTROSTATICS
P3M                             equals ELECTROSTATICS and FFTW
MMM1D_GPU                       requires CUDA and ELECTROSTATICS
MMM1D_MACHINE_PREC              requires ELECTROSTATICS

/* Magnetostatics */
DIPOLES                         implies ROTATION
DP3M                            equals DIPOLES and FFTW
DIPOLAR_DIRECT_SUM              requires CUDA
DIPOLAR_DIRECT_SUM              equals DIPOLES and ROTATION and CUDA
DIPOLAR_BARNES_HUT              requires CUDA
DIPOLAR_BARNES_HUT              equals DIPOLES and ROTATION and CUDA

/* Virtual sites features */
VIRTUAL_SITES
VIRTUAL_SITES_RELATIVE          implies VIRTUAL_SITES
VIRTUAL_SITES_RELATIVE          implies ROTATION
VIRTUAL_SITES_INERTIALESS_TRACERS implies VIRTUAL_SITES

/* DPD features */
DPD

/* Lattice-Boltzmann features */
LB_BOUNDARIES
LB_BOUNDARIES_GPU               requires CUDA
LB_ELECTROHYDRODYNAMICS
ELECTROKINETICS                 implies EXTERNAL_FORCES, ELECTROSTATICS
ELECTROKINETICS                 requires CUDA
EK_BOUNDARIES                   implies ELECTROKINETICS, LB_BOUNDARIES_GPU, EXTERNAL_FORCES, ELECTROSTATICS
EK_BOUNDARIES                   requires CUDA
EK_DEBUG                        requires ELECTROKINETICS

/* Interaction features */
TABULATED
LENNARD_JONES
WCA
LENNARD_JONES_GENERIC           implies LENNARD_JONES
LJCOS
LJCOS2
LJGEN_SOFTCORE                  implies LENNARD_JONES_GENERIC
SMOOTH_STEP
HERTZIAN
GAUSSIAN
BMHTF_NACL
MORSE
BUCKINGHAM
SOFT_SPHERE
HAT
GAY_BERNE                       implies ROTATION
THOLE                           requires ELECTROSTATICS

/* ScaFaCoS */
SCAFACOS_DIPOLES                requires SCAFACOS
SCAFACOS_DIPOLES                implies DIPOLES
SCAFACOS                        requires ELECTROSTATICS

/* Debugging */
ADDITIONAL_CHECKS

# External switches
# Switches that are set by configure or gcc, not to be set manually
# All these switches must also be present in cmake/cmake_config.cmakein
CUDA external
FFTW external
H5MD external
SCAFACOS external
GSL external
STOKESIAN_DYNAMICS external
