ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
magnetostatics/scafacos_impl.hpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2010-2022 The ESPResSo project
3
* Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010
4
* Max-Planck-Institute for Polymer Research, Theory Group
5
*
6
* This file is part of ESPResSo.
7
*
8
* ESPResSo is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* ESPResSo is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20
*/
21
22
#pragma once
23
24
#include "
config/config.hpp
"
25
26
#ifdef SCAFACOS_DIPOLES
27
28
#include "
magnetostatics/scafacos.hpp
"
29
30
#include "
scafacos/ScafacosContext.hpp
"
31
32
#include <
scafacos/Dipoles.hpp
>
33
34
#include <boost/range/numeric.hpp>
35
36
#include <vector>
37
38
#if !defined(FCS_ENABLE_DIPOLES)
39
#error \
40
"SCAFACOS_DIPOLES requires dipoles support in scafacos library (FCS_ENABLE_DIPOLES)."
41
#endif
42
43
struct
DipolarScafacosImpl
:
public
DipolarScafacos
,
44
public
ScafacosContext
<::Scafacos::Dipoles> {
45
using
ScafacosContext
=
ScafacosContext<::Scafacos::Dipoles>
;
46
using
DipolarScafacos::DipolarScafacos;
47
using
ScafacosContext::ScafacosContext;
48
49
void
update_particle_data
()
override
;
50
void
update_particle_forces
()
const override
;
51
52
double
long_range_energy
()
override
{
53
update_particle_data
();
54
run(dipoles, positions, fields, potentials);
55
return
-0.5 *
prefactor
* boost::inner_product(dipoles, potentials, 0.0);
56
}
57
58
void
add_long_range_forces
()
override
{
59
update_particle_data
();
60
run(dipoles, positions, fields, potentials);
61
update_particle_forces
();
62
}
63
64
private
:
65
/** Inputs */
66
std::vector<double> positions, dipoles;
67
/** Outputs */
68
std::vector<double> fields, potentials;
69
};
70
71
#endif
// SCAFACOS_DIPOLES
Dipoles.hpp
ScafacosContext.hpp
ScafacosContext implements the interface of the ScaFaCoS bridge.
Dipoles::Actor< DipolarScafacos >::prefactor
double prefactor
Magnetostatics prefactor.
Definition
magnetostatics/actor.hpp:37
config.hpp
This file contains the defaults for ESPResSo.
scafacos.hpp
DipolarScafacosImpl
Definition
magnetostatics/scafacos_impl.hpp:44
DipolarScafacosImpl::update_particle_data
void update_particle_data() override
Definition
magnetostatics/scafacos_impl.cpp:49
DipolarScafacosImpl::update_particle_forces
void update_particle_forces() const override
Definition
magnetostatics/scafacos_impl.cpp:69
DipolarScafacosImpl::add_long_range_forces
void add_long_range_forces() override
Definition
magnetostatics/scafacos_impl.hpp:58
DipolarScafacosImpl::long_range_energy
double long_range_energy() override
Definition
magnetostatics/scafacos_impl.hpp:52
DipolarScafacos
Definition
core/magnetostatics/scafacos.hpp:36
ScafacosContext
Definition
ScafacosContext.hpp:47
src
core
magnetostatics
scafacos_impl.hpp
Generated on Fri Nov 22 2024 02:13:54 for ESPResSo by
1.9.8