ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
magnetostatics/solver.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
#include "
actor/optional.hpp
"
25
#include "
actor/traits.hpp
"
26
27
#include "
Particle.hpp
"
28
29
#include <
utils/Vector.hpp
>
30
31
#include <functional>
32
#include <memory>
33
#include <optional>
34
#include <type_traits>
35
36
namespace
Dipoles
{
37
38
struct
Solver
{
39
#ifdef ESPRESSO_DIPOLES
40
struct
Implementation
;
41
/// @brief Pointer-to-implementation.
42
std::unique_ptr<Implementation>
impl
;
43
/// @brief Whether to reinitialize the solver on observable calculation.
44
bool
reinit_on_observable_calc
;
45
46
void
sanity_checks
()
const
;
47
double
cutoff
()
const
;
48
49
void
on_observable_calc
();
50
void
on_dipoles_change
();
51
void
on_boxl_change
();
52
void
on_node_grid_change
();
53
void
on_periodicity_change
();
54
void
on_cell_structure_change
();
55
void
on_particle_change
() {
reinit_on_observable_calc
=
true
; }
56
57
void
calc_pressure_long_range
()
const
;
58
void
calc_long_range_force
()
const
;
59
double
calc_energy_long_range
()
const
;
60
Solver
();
61
#else
// ESPRESSO_DIPOLES
62
Solver
() =
default
;
63
constexpr
double
cutoff
()
const
{
return
inactive_cutoff
; }
64
#endif
// ESPRESSO_DIPOLES
65
66
using
ShortRangeForceKernel
= std::function<
ParticleForce
(
67
double
,
Utils::Vector3d
const
&,
Utils::Vector3d
const
&,
68
Utils::Vector3d
const
&,
double
,
double
)>;
69
using
ShortRangeEnergyKernel
=
70
std::function<double(
Particle
const
&,
Particle
const
&,
71
Utils::Vector3d
const
&,
double
,
double
)>;
72
73
inline
std::optional<ShortRangeForceKernel>
pair_force_kernel
()
const
;
74
inline
std::optional<ShortRangeEnergyKernel>
pair_energy_kernel
()
const
;
75
};
76
77
}
// namespace Dipoles
Particle.hpp
Vector.hpp
Vector implementation and trait types for boost qvm interoperability.
Utils::Vector
Definition
Vector.hpp:50
config.hpp
inactive_cutoff
constexpr double inactive_cutoff
Special cutoff value for an inactive interaction.
Definition
config.hpp:44
optional.hpp
Dipoles
Definition
magnetostatics/actor.hpp:30
Dipoles::Solver::Implementation
Definition
dipoles.hpp:59
Dipoles::Solver
Definition
magnetostatics/solver.hpp:38
Dipoles::Solver::sanity_checks
void sanity_checks() const
Definition
dipoles.cpp:46
Dipoles::Solver::ShortRangeForceKernel
std::function< ParticleForce(double, Utils::Vector3d const &, Utils::Vector3d const &, Utils::Vector3d const &, double, double)> ShortRangeForceKernel
Definition
magnetostatics/solver.hpp:68
Dipoles::Solver::pair_force_kernel
std::optional< ShortRangeForceKernel > pair_force_kernel() const
Definition
dipoles_inline.hpp:101
Dipoles::Solver::cutoff
double cutoff() const
Definition
dipoles.cpp:85
Dipoles::Solver::on_cell_structure_change
void on_cell_structure_change()
Definition
dipoles.cpp:78
Dipoles::Solver::on_particle_change
void on_particle_change()
Definition
magnetostatics/solver.hpp:55
Dipoles::Solver::impl
std::unique_ptr< Implementation > impl
Pointer-to-implementation.
Definition
magnetostatics/solver.hpp:42
Dipoles::Solver::on_boxl_change
void on_boxl_change()
Definition
dipoles.cpp:59
Dipoles::Solver::on_periodicity_change
void on_periodicity_change()
Definition
dipoles.cpp:71
Dipoles::Solver::calc_pressure_long_range
void calc_pressure_long_range() const
Definition
dipoles.cpp:123
Dipoles::Solver::reinit_on_observable_calc
bool reinit_on_observable_calc
Whether to reinitialize the solver on observable calculation.
Definition
magnetostatics/solver.hpp:44
Dipoles::Solver::on_observable_calc
void on_observable_calc()
Definition
dipoles.cpp:96
Dipoles::Solver::ShortRangeEnergyKernel
std::function< double(Particle const &, Particle const &, Utils::Vector3d const &, double, double)> ShortRangeEnergyKernel
Definition
magnetostatics/solver.hpp:71
Dipoles::Solver::calc_long_range_force
void calc_long_range_force() const
Definition
dipoles.cpp:129
Dipoles::Solver::on_dipoles_change
void on_dipoles_change()
Definition
dipoles.cpp:52
Dipoles::Solver::pair_energy_kernel
std::optional< ShortRangeEnergyKernel > pair_energy_kernel() const
Definition
dipoles_inline.hpp:112
Dipoles::Solver::on_node_grid_change
void on_node_grid_change()
Definition
dipoles.cpp:65
Dipoles::Solver::calc_energy_long_range
double calc_energy_long_range() const
Definition
dipoles.cpp:135
Dipoles::Solver::Solver
Solver()
Definition
dipoles.cpp:41
ParticleForce
Force information on a particle.
Definition
Particle.hpp:345
Particle
Struct holding all information for one particle.
Definition
Particle.hpp:450
traits.hpp
src
core
magnetostatics
solver.hpp
Generated on Sun Jan 4 2026 02:32:22 for ESPResSo by
1.9.8