# OpFlow **Repository Path**: OpFlow-dev/OpFlow ## Basic Information - **Project Name**: OpFlow - **Description**: EDSL for PDE solver composing - **Primary Language**: C++ - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 0 - **Created**: 2022-03-16 - **Last Updated**: 2023-05-28 ## Categories & Tags **Categories**: mathlibs **Tags**: None ## README
[](https://github.com/OpFlow-dev/OpFlow/releases/latest) [](https://github.com/OpFlow-dev/OpFlow/blob/master/LICENSE) [](https://github.com/OpFlow-dev/OpFlow/releases/latest) [](https://github.com/OpFlow-dev/OpFlow/actions/workflows/AutoFormat.yml) [](https://github.com/OpFlow-dev/OpFlow/actions/workflows/Build.yml) ## Overview **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. ## Examples [