From 6fca6fcacf9476b2ce2133decc53f98186887d8c Mon Sep 17 00:00:00 2001 From: Stefan Jeske Date: Mon, 17 Nov 2025 17:07:38 +0100 Subject: [PATCH] Add new python bindings to enhance parameter introspection --- pySPlisHSPlasH/CMakeLists.txt | 5 +++-- pySPlisHSPlasH/Embedded.cpp | 4 ++++ pySPlisHSPlasH/FluidModelModule.cpp | 9 ++++----- pySPlisHSPlasH/SimulationModule.cpp | 26 +++++++++++++++++++++----- pySPlisHSPlasH/main.cpp | 4 ++++ 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/pySPlisHSPlasH/CMakeLists.txt b/pySPlisHSPlasH/CMakeLists.txt index da976bc2..e9dfd5db 100644 --- a/pySPlisHSPlasH/CMakeLists.txt +++ b/pySPlisHSPlasH/CMakeLists.txt @@ -41,8 +41,8 @@ target_link_libraries(pysplishsplash PRIVATE SimulatorBase) add_dependencies(pysplishsplash SimulatorBase) add_custom_target(pysplishsplash_install - ${PYTHON_EXECUTABLE} setup.py bdist_wheel - COMMAND ${PYTHON_EXECUTABLE} -m pip install -I build/dist/py*.whl + ${Python_EXECUTABLE} setup.py bdist_wheel + COMMAND ${Python_EXECUTABLE} -m pip install -I build/dist/py*.whl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) OPTION(USE_EMBEDDED_PYTHON "Enable embedded Python support" OFF) @@ -80,6 +80,7 @@ if (USE_EMBEDDED_PYTHON) ExporterModule.cpp ExtrasModule.cpp PBDModule.cpp + XSPHModule.cpp ) target_compile_definitions(pysplishsplash_embed PUBLIC -DUSE_EMBEDDED_PYTHON) diff --git a/pySPlisHSPlasH/Embedded.cpp b/pySPlisHSPlasH/Embedded.cpp index c7d4e14b..41bfdb5d 100644 --- a/pySPlisHSPlasH/Embedded.cpp +++ b/pySPlisHSPlasH/Embedded.cpp @@ -69,6 +69,7 @@ void DFSPHModule(py::module); void DragModule(py::module); void ElasticityModule(py::module); void IISPHModule(py::module); +void ICSPHModule(py::module); void PBFModule(py::module); void PCISPHModule(py::module); void PFModule(py::module); @@ -76,6 +77,7 @@ void SurfaceTensionModule(py::module); void ViscosityModule(py::module); void VorticityModule(py::module); void WCSPHModule(py::module); +void XSPHModule(py::module); void ExtrasModule(py::module); @@ -98,6 +100,7 @@ PYBIND11_EMBEDDED_MODULE(splishsplash, m) { DragModule(m); ElasticityModule(m); IISPHModule(m); + ICSPHModule(m); PBFModule(m); PCISPHModule(m); PFModule(m); @@ -107,6 +110,7 @@ PYBIND11_EMBEDDED_MODULE(splishsplash, m) { WCSPHModule(m); GUIModule(m); ExporterModule(m); + XSPHModule(m); ExtrasModule(m); } diff --git a/pySPlisHSPlasH/FluidModelModule.cpp b/pySPlisHSPlasH/FluidModelModule.cpp index 7093cebb..c99a696b 100644 --- a/pySPlisHSPlasH/FluidModelModule.cpp +++ b/pySPlisHSPlasH/FluidModelModule.cpp @@ -4,15 +4,13 @@ #include "common.h" #include +#include #include -#include -#include -#include -#include -#include +#include #include #include +#include #include #include @@ -158,6 +156,7 @@ void FluidModelModule(py::module m_sub){ .def("getVorticityBase", &SPH::FluidModel::getVorticityBase, py::return_value_policy::reference_internal) .def("getDragBase", &SPH::FluidModel::getDragBase, py::return_value_policy::reference_internal) .def("getElasticityBase", &SPH::FluidModel::getElasticityBase, py::return_value_policy::reference_internal) + .def("getXSPH", &SPH::FluidModel::getXSPH, py::return_value_policy::reference_internal) .def("setDragMethodChangedCallback", &SPH::FluidModel::setDragMethodChangedCallback) .def("setSurfaceMethodChangedCallback", &SPH::FluidModel::setSurfaceMethodChangedCallback) diff --git a/pySPlisHSPlasH/SimulationModule.cpp b/pySPlisHSPlasH/SimulationModule.cpp index 3ea52415..276f5a89 100644 --- a/pySPlisHSPlasH/SimulationModule.cpp +++ b/pySPlisHSPlasH/SimulationModule.cpp @@ -72,6 +72,7 @@ void SimulationModule(py::module m_sub){ .value("IISPH", SPH::SimulationMethods::IISPH) .value("DFSPH", SPH::SimulationMethods::DFSPH) .value("PF", SPH::SimulationMethods::PF) + .value("ICSPH", SPH::SimulationMethods::ICSPH) .value("NumSimulationMethods", SPH::SimulationMethods::NumSimulationMethods); // --------------------------------------- @@ -83,10 +84,12 @@ void SimulationModule(py::module m_sub){ .value("Bender2019", SPH::BoundaryHandlingMethods::Bender2019) .value("NumSimulationMethods", SPH::BoundaryHandlingMethods::NumSimulationMethods); + + // --------------------------------------- // Class Simulation // --------------------------------------- - py::class_(m_sub, "Simulation") + auto sim = py::class_(m_sub, "Simulation") .def_readwrite_static("SIM_2D", &SPH::Simulation::SIM_2D) .def_readwrite_static("PARTICLE_RADIUS", &SPH::Simulation::PARTICLE_RADIUS) .def_readwrite_static("GRAVITATION", &SPH::Simulation::GRAVITATION) @@ -189,18 +192,29 @@ void SimulationModule(py::module m_sub){ .def("getNeighborhoodSearch", &SPH::Simulation::getNeighborhoodSearch, py::return_value_policy::reference_internal) .def("saveState", &SPH::Simulation::saveState) .def("loadState", &SPH::Simulation::loadState) + .def("addDragMethod", &SPH::Simulation::addDragMethod) + .def("getDragMethods", &SPH::Simulation::getDragMethods) + .def("addElasticityMethod", &SPH::Simulation::addElasticityMethod) + .def("getElasticityMethods", &SPH::Simulation::getElasticityMethods) + .def("addSurfaceTensionMethod", &SPH::Simulation::addSurfaceTensionMethod) + .def("getSurfaceTensionMethods", &SPH::Simulation::getSurfaceTensionMethods) .def("addViscosityMethod", &SPH::Simulation::addViscosityMethod) .def("getViscosityMethods", &SPH::Simulation::getViscosityMethods) .def("addVorticityMethod", &SPH::Simulation::addVorticityMethod) .def("getVorticityMethods", &SPH::Simulation::getVorticityMethods) - .def("addDragMethod", &SPH::Simulation::addDragMethod) - .def("getDragMethods", &SPH::Simulation::getDragMethods) .def("numberOfPointSets", &SPH::Simulation::numberOfPointSets) .def("numberOfNeighbors", &SPH::Simulation::numberOfNeighbors) .def("getNeighbor", &SPH::Simulation::getNeighbor) .def("getNeighborList", &SPH::Simulation::getNeighborList); // TODO: Might not work because of array pointer + // --------------------------------------- + // Class Non Pressure Force Method + // --------------------------------------- + py::class_(sim, "NonPressureForceMethod") + .def_readonly("id", &SPH::Simulation::NonPressureForceMethod::m_id) + .def_readonly("name", &SPH::Simulation::NonPressureForceMethod::m_name); + // --------------------------------------- // EXEC SUBMODULE @@ -267,7 +281,8 @@ void SimulationModule(py::module m_sub){ "stopAt"_a = -1.0, "param"_a = "") .def("initSimulation", &SPH::SimulatorBase::initSimulation) - .def("runSimulation", &SPH::SimulatorBase::runSimulation) + .def("initParameters", &SPH::SimulatorBase::initParameters) + .def("runSimulation", &SPH::SimulatorBase::runSimulation) .def("cleanup", &SPH::SimulatorBase::cleanup) .def("reset", &SPH::SimulatorBase::reset) @@ -336,8 +351,9 @@ void SimulationModule(py::module m_sub){ .def("getRigidBodyExporters", &SPH::SimulatorBase::getRigidBodyExporters) .def("activateExporter", &SPH::SimulatorBase::activateExporter) + .def("createExporters", &SPH::SimulatorBase::createExporters) - .def("setTimeStepCB", &SPH::SimulatorBase::setTimeStepCB) + .def("setTimeStepCB", &SPH::SimulatorBase::setTimeStepCB) .def("setResetCB", &SPH::SimulatorBase::setResetCB); // --------------------------------------- diff --git a/pySPlisHSPlasH/main.cpp b/pySPlisHSPlasH/main.cpp index 3cca7469..cc86f124 100644 --- a/pySPlisHSPlasH/main.cpp +++ b/pySPlisHSPlasH/main.cpp @@ -33,6 +33,7 @@ void DFSPHModule(py::module); void DragModule(py::module); void ElasticityModule(py::module); void IISPHModule(py::module); +void ICSPHModule(py::module); void PBFModule(py::module); void PCISPHModule(py::module); void PFModule(py::module); @@ -40,6 +41,7 @@ void SurfaceTensionModule(py::module); void ViscosityModule(py::module); void VorticityModule(py::module); void WCSPHModule(py::module); +void XSPHModule(py::module); void ExtrasModule(py::module); @@ -62,6 +64,7 @@ PYBIND11_MODULE(pysplishsplash, m) { DragModule(m); ElasticityModule(m); IISPHModule(m); + ICSPHModule(m); PBFModule(m); PCISPHModule(m); PFModule(m); @@ -71,6 +74,7 @@ PYBIND11_MODULE(pysplishsplash, m) { WCSPHModule(m); GUIModule(m); ExporterModule(m); + XSPHModule(m); ExtrasModule(m); } \ No newline at end of file