ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
DipolarDirectSum.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022-2026 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 ESPRESSO_DIPOLES
25
26#include "Actor.hpp"
27
29
32
33#include <memory>
34#include <string>
35#include <vector>
36
37namespace ScriptInterface {
38namespace Dipoles {
39
40class DipolarDirectSum : public Actor<DipolarDirectSum, ::DipolarDirectSum> {
41public:
44 {"n_replicas", AutoParameter::read_only,
45 [this]() { return actor()->n_replicas; }},
47 [this]() { return actor()->is_gpu(); }},
48 });
49 }
50
51 void do_construct(VariantMap const &params) override {
52 auto const gpu = get_value_or(params, "gpu", false);
53 context()->parallel_try_catch([this, &params, gpu]() {
54 if (gpu) {
55 std::vector<std::string> required_features;
56 required_features.emplace_back("CUDA");
58 }
59 m_actor = std::make_shared<CoreActorClass>(
60 get_value<double>(params, "prefactor"),
61 get_value<int>(params, "n_replicas"), gpu);
62 });
63 }
64};
65
66} // namespace Dipoles
67} // namespace ScriptInterface
68
69#endif // ESPRESSO_DIPOLES
void add_parameters(std::vector< AutoParameter > &&params)
virtual void parallel_try_catch(std::function< void()> const &cb) const =0
Common interface for magnetostatic actors.
void do_construct(VariantMap const &params) override
Context * context() const
Responsible context.
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
void check_features(std::vector< std::string > const &features)
Throw an exception when a feature is missing or not recognized.
Definition CodeInfo.cpp:119
std::unordered_map< std::string, Variant > VariantMap
Definition Variant.hpp:133
T get_value_or(VariantMap const &vals, std::string const &name, T const &default_)
Get a value from a VariantMap by name, or return a default value if it does not exist.
static constexpr const ReadOnly read_only