QIWU is a high-performance physics simulation solver designed for computational physics and engineering applications. The name "QIWU" (齐物) is derived from the ancient Chinese philosophical text "Zhuangzi's Discourse on the Equality of Things" (庄子·齐物论).
QIWU is based on C++20. The core principle of QIWU
- use C++/CUDA as a complete system, especially for parallel computing
- use python as fast prototyping and debugging and finally use C++ for performance critical parts
For I/O and GUI, C++/CUDA gives basic support, while python is used for advanced prototyping and debugging.
QIWU follows a hybrid C++/Python architecture designed for high-performance physics simulation with flexible development workflows.
The project is organized into two main layers:
- C++ Core Layer: High-performance computational kernels and solvers
- Python Interface Layer: User-friendly interfaces, data processing, and rapid prototyping
This separation allows developers to leverage the performance of C++/CUDA for compute-intensive operations while using Python for data manipulation, file I/O, and user interaction.
qiwu/ # Project Root Directory
├── qiwu/ # Main Source Code Directory
│ ├── core/ # C++ Core Computational Library
│ │ ├── solvers/ # Physics Solvers Implementation
│ │ │ ├── fem/ # Finite Element Method Solvers
│ │ │ ├── cloth/ # Cloth Simulation Solvers
│ │ │ ├── bdem/ # Bonded Discrete Element Method
│ │ │ └── collision/ # Collision Detection & Response
│ │ ├── base/ # Base Classes & Interfaces
│ │ │ ├── geometry_base.h # Geometry abstraction
│ │ │ ├── parameter_base.h # Parameter management
│ │ │ └── solver_base.h # Solver interface
│ │ ├── utils/ # Utility Functions
│ │ └── interfaces/ # Abstract Interfaces
│ ├── python/ # Python Implementation Layer
│ │ ├── core/ # Python Core Implementations
│ │ │ ├── solvers/ # Python Physics Solvers
│ │ │ ├── utils/ # Python utility functions
│ │ │ └── interfaces/ # Python interface definitions
│ │ ├── io/ # Data Input/Output
│ │ ├── bindings/ # C++ Python Bindings
│ │ │ ├── bindings.cpp # pybind11 binding code
│ │ │ └── CMakeLists.txt # Binding build configuration
│ │ └── examples/ # Python usage examples
│ ├── examples/ # C++ Example Applications
│ ├── tests/ # Test Suite
│ │ ├── cpp/ # C++ unit tests
│ │ └── python/ # Python unit tests
│ ├── io/ # C++ IO Module
│ │ ├── formats/ # File format handlers
│ │ ├── houdini/ # Houdini integration
│ │ ├── yaml/ # YAML configuration support
│ │ └── exporters/ # Data export functionality
│ └── cmake/ # CMake configuration files
├── external/ # Third-party Dependencies
├── resources/ # Resource Files
├── scripts/ # Build & Deployment Scripts
├── houdini/ # Houdini Project Files
├── build/ # Build Output Directory
├── output/ # Simulation Output Directory
├── CMakeLists.txt # Root CMake configuration
├── setup.py # Python package setup
├── pyproject.toml # Python project configuration
└── README.md # Project documentation
This project is licensed under the MIT License - see the LICENSE file for details.
This project uses several open-source libraries:
- Eigen: MPL2 License - Linear algebra library
- pybind11: BSD License - Python-C++ binding
- spdlog: MIT License - Fast logging library
- yaml-cpp: MIT License - YAML parser
- Catch2: Boost Software License - Testing framework
- oneTBB: Apache License 2.0 - Threading library
- Boost: Boost Software License - C++ utilities
- AMGCL: MIT License - Algebraic multigrid solver
- libigl: MPL2 License - Geometry processing library
- hougeo: Custom license - Houdini geometry library
Contributions are welcome! Please feel free to submit a Pull Request.