OpFlow (运筹) is an embedded domain specific language (EDSL) for partial differential equation (PDE) solver composing. It adopts the meta programming facilities provided by modern C++ extensively to provide an expressive front-end user interface. With expression templates and stencil auto-generation, OpFlow is able to perform both explicit expression evaluation and implicit linear system solving. With isolated expression, operator & evaluation engine's implementation, OpFlow makes the algorithm, data structure and execution scheduler fully decoupled. OpFlow's advantages are:
- Fully static. No dynamic dispatching on the critical path
- Zero-cost abstraction. All operations are well-defined at compile time and force inlined
- Automatic parallelization. Partition & evaluation of expressions are automatically parallelized by user defined strategies
- Implicit equation solving. OpFlow can solve arbitrary user provided implicit equations as long as they are well-defined
- Header only & C++ embedded. OpFlow itself is header-only and embedded in C++. It's straight forward to integrate OpFlow into existing numerical codes
- Mathematical API notations. The front-end interface of OpFlow is very similar to mathematical notations. Little language noise will occur while writing equations
- Proper level of abstraction. OpFlow tries to eliminate the need to write bare schemes while keeping all the transformations & operations performed at the front-end. It's straight forward to see how each term is discretized, while keeping all expressions in a unified fashion. This is different from packing all things into modules, or looping over each element on the front stage.
- Install all dependencies:
- Linux: (Ubuntu for example)
sudo apt install -y gcc-10 g++-10
- macOS: (using Homebrew)
brew install gcc
- Configure
mkdir build && cd build && cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DOPFLOW_BUILD_EXAMPLES=ON ..
- Build & Run
cmake --build . -t CONV1D && ./examples/CONV1D/CONV1D
Please refer to the documentation for installation instructions.
I specially thank the JetBrains company to provide a free Open Source development license to support the development of OpFlow. CLion is a great cross-platform IDE for C/C++ development. I highly recommend you to try OpFlow out with it.