Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
pySPHKernels.cpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
20
21namespace {
22 // this is a container to store the string for the lifetime of the code
23 std::vector<std::string> names = {};
24
25 template<typename Kernel>
26 void bind_sph_kernel(py::module &m, const std::string &name) {
27
28 // yeah this looks weird, the idea is to first store the string for the lifetime of the code
29 // and return its c_str pointer, which is then garanteed to be valid until shutdown
30
31 auto get_name = [&](std::string suffix) -> const char * {
32 return names.emplace_back(name + suffix).c_str();
33 };
34
35 m.def(get_name("_norm_1d"), []() {
36 return Kernel::Generator::norm_1d;
37 });
38 m.def(get_name("_norm_2d"), []() {
39 return Kernel::Generator::norm_2d;
40 });
41 m.def(get_name("_norm_3d"), []() {
42 return Kernel::Generator::norm_3d;
43 });
44 m.def(get_name("_Rkern"), []() {
45 return Kernel::Rkern;
46 });
47 m.def(get_name("_f"), &Kernel::f);
48 m.def(get_name("_df"), &Kernel::df);
49 m.def(get_name("_ddf"), &Kernel::ddf);
50 m.def(get_name("_phi_tilde_3d"), &Kernel::phi_tilde_3d);
51 m.def(get_name("_phi_tilde_3d_prime"), &Kernel::phi_tilde_3d_prime);
52 m.def(get_name("_W1d"), &Kernel::W_1d);
53 m.def(get_name("_W2d"), &Kernel::W_2d);
54 m.def(get_name("_W3d"), &Kernel::W_3d);
55 m.def(get_name("_dW3d"), &Kernel::dW_3d);
56 m.def(get_name("_ddW3d"), &Kernel::ddW_3d);
57 m.def(get_name("_dhW3d"), &Kernel::dhW_3d);
58 m.def(get_name("_f3d_integ_z"), &Kernel::f3d_integ_z);
59 }
60
61} // namespace
62
63namespace shampylib {
64
65 void init_shamrock_math_sphkernels(py::module &m) {
66
67 py::module sphkernel_module = m.def_submodule("sphkernel", "Shamrock sph kernels math lib");
68
69 bind_sph_kernel<shammath::M4<f64>>(sphkernel_module, "M4");
70 bind_sph_kernel<shammath::M5<f64>>(sphkernel_module, "M5");
71 bind_sph_kernel<shammath::M6<f64>>(sphkernel_module, "M6");
72 bind_sph_kernel<shammath::M7<f64>>(sphkernel_module, "M7");
73 bind_sph_kernel<shammath::M8<f64>>(sphkernel_module, "M8");
74 bind_sph_kernel<shammath::M9<f64>>(sphkernel_module, "M9");
75 bind_sph_kernel<shammath::M10<f64>>(sphkernel_module, "M10");
76 bind_sph_kernel<shammath::C2<f64>>(sphkernel_module, "C2");
77 bind_sph_kernel<shammath::C4<f64>>(sphkernel_module, "C4");
78 bind_sph_kernel<shammath::C6<f64>>(sphkernel_module, "C6");
79 bind_sph_kernel<shammath::M4DH<f64>>(sphkernel_module, "M4DH");
80 bind_sph_kernel<shammath::M4DH3<f64>>(sphkernel_module, "M4DH3");
81 bind_sph_kernel<shammath::M4DH5<f64>>(sphkernel_module, "M4DH5");
82 bind_sph_kernel<shammath::M4DH7<f64>>(sphkernel_module, "M4DH7");
83 bind_sph_kernel<shammath::M4Shift2<f64>>(sphkernel_module, "M4Shift2");
84 bind_sph_kernel<shammath::M4Shift4<f64>>(sphkernel_module, "M4Shift4");
85 bind_sph_kernel<shammath::M4Shift8<f64>>(sphkernel_module, "M4Shift8");
86 bind_sph_kernel<shammath::M4Shift16<f64>>(sphkernel_module, "M4Shift16");
87 bind_sph_kernel<shammath::TGauss3<f64>>(sphkernel_module, "TGauss3");
88 bind_sph_kernel<shammath::TGauss5<f64>>(sphkernel_module, "TGauss5");
89 }
90
91} // namespace shampylib
Pybind11 include and definitions.
sph kernels