ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
ek_poisson_fft_init_cuda.cu
Go to the documentation of this file.
1/*
2 * Copyright (C) 2025-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#if defined(__NVCC__)
21#define RESTRICT __restrict__
22#if defined(__NVCC_DIAG_PRAGMA_SUPPORT__)
23#pragma nv_diagnostic push
24#pragma nv_diag_suppress 554 // no implicit or explicit cast
25#else
26#pragma push
27#pragma diag_suppress 554 // no implicit or explicit cast
28#endif
29#endif
30
31#include "PoissonSolverFFT.hpp"
32
36
37#include <waLBerlaDefinitions.h>
38
39#if __has_include(<heffte.h>)
40#define HAS_HEFFTE
41#endif
42
43#include <memory>
44#include <stdexcept>
45
46namespace walberla {
47
48std::shared_ptr<walberla::PoissonSolver>
49new_ek_poisson_fft_cuda(std::shared_ptr<LatticeWalberla> const &lattice,
50 double permittivity, bool single_precision) {
51#if not defined(WALBERLA_BUILD_WITH_CUDA)
52 throw std::runtime_error("waLBerla was compiled without CUDA support");
53#elif not defined(WALBERLA_BUILD_WITH_FFT) and not defined(HAS_HEFFTE)
54 throw std::runtime_error("software was compiled without FFT support");
55#else
56 if (single_precision) {
57 return std::make_shared<
60 }
61 return std::make_shared<walberla::PoissonSolverFFT<double, lbmpy::Arch::GPU>>(
62 lattice, permittivity);
63#endif
64}
65
66} // namespace walberla
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
\file PackInfoPdfDoublePrecision.cpp \author pystencils
std::shared_ptr< walberla::PoissonSolver > new_ek_poisson_fft_cuda(std::shared_ptr< LatticeWalberla > const &lattice, double permittivity, bool single_precision)