ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
dipoles.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010-2022 The ESPResSo project
3 *
4 * This file is part of ESPResSo.
5 *
6 * ESPResSo is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * ESPResSo is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22#include "config/config.hpp"
23
24#ifdef DIPOLES
25
26#include "actor/traits.hpp"
27
29
35
36#include <cstddef>
37#include <functional>
38#include <memory>
39#include <optional>
40#include <stdexcept>
41#include <type_traits>
42#include <variant>
43
44namespace Dipoles {
45
47 std::variant<std::shared_ptr<DipolarDirectSum>,
48#ifdef DIPOLAR_DIRECT_SUM
49 std::shared_ptr<DipolarDirectSumGpu>,
50#endif
51#ifdef DP3M
52 std::shared_ptr<DipolarP3M>,
53#endif
54#ifdef SCAFACOS_DIPOLES
55 std::shared_ptr<DipolarScafacos>,
56#endif
57 std::shared_ptr<DipolarLayerCorrection>>;
58
60 /// @brief Main electrostatics solver.
61 std::optional<MagnetostaticsActor> solver;
63};
64
65namespace traits {
66
67/** @brief Whether an actor is a solver. */
68template <typename T>
69using is_solver = std::is_convertible<std::shared_ptr<T>, MagnetostaticsActor>;
70
71/** @brief The dipolar method supports dipole fields calculation. */
72template <class T> struct has_dipole_fields : std::false_type {};
73#ifdef DIPOLE_FIELD_TRACKING
74template <> struct has_dipole_fields<DipolarDirectSum> : std::true_type {};
75#endif // DIPOLE_FIELD_TRACKING
76
77} // namespace traits
78} // namespace Dipoles
79
80#endif // DIPOLES
This file contains the defaults for ESPResSo.
P3M algorithm for long-range magnetic dipole-dipole interaction.
std::is_convertible< std::shared_ptr< T >, MagnetostaticsActor > is_solver
Whether an actor is a solver.
Definition dipoles.hpp:69
std::variant< std::shared_ptr< DipolarDirectSum >, std::shared_ptr< DipolarDirectSumGpu >, std::shared_ptr< DipolarP3M >, std::shared_ptr< DipolarScafacos >, std::shared_ptr< DipolarLayerCorrection > > MagnetostaticsActor
Definition dipoles.hpp:57
Dipolar all with all and no replica.
std::optional< MagnetostaticsActor > solver
Main electrostatics solver.
Definition dipoles.hpp:61
The dipolar method supports dipole fields calculation.
Definition dipoles.hpp:72