All Projects → OpFlow-dev → OpFlow

OpFlow-dev / OpFlow

Licence: MPL-2.0 license
EDSL for PDE solver composing

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to OpFlow

seamless
Seamless is a framework to set up reproducible computations (and visualizations) that respond to changes in cells. Cells contain the input data as well as the source code of the computations, and all cells can be edited interactively.
Stars: ✭ 19 (-58.7%)
Mutual labels:  scientific-computing
hiperc
High Performance Computing Strategies for Boundary Value Problems
Stars: ✭ 36 (-21.74%)
Mutual labels:  scientific-computing
Julia-data-science
Data science and numerical computing with Julia
Stars: ✭ 54 (+17.39%)
Mutual labels:  scientific-computing
spark3D
Spark extension for processing large-scale 3D data sets: Astrophysics, High Energy Physics, Meteorology, …
Stars: ✭ 23 (-50%)
Mutual labels:  scientific-computing
mmtf-spark
Methods for the parallel and distributed analysis and mining of the Protein Data Bank using MMTF and Apache Spark.
Stars: ✭ 20 (-56.52%)
Mutual labels:  scientific-computing
ForTrilinos
ForTrilinos provides portable object-oriented Fortran interfaces to Trilinos C++ packages.
Stars: ✭ 24 (-47.83%)
Mutual labels:  scientific-computing
Roger
Golang RServe client. Use R from Go
Stars: ✭ 248 (+439.13%)
Mutual labels:  scientific-computing
SciLean
Scientific computing in Lean 4
Stars: ✭ 86 (+86.96%)
Mutual labels:  scientific-computing
Benzina
Benzina is an image-loader package that greatly accelerates image loading onto GPUs using their built-in hardware codecs.
Stars: ✭ 36 (-21.74%)
Mutual labels:  scientific-computing
jigsaw-matlab
MATLAB bindings for JIGSAW: a Delaunay-based unstructured mesh generator.
Stars: ✭ 57 (+23.91%)
Mutual labels:  scientific-computing
PyCannyEdge
Educational Python implementation of the Canny Edge Detector
Stars: ✭ 31 (-32.61%)
Mutual labels:  scientific-computing
NAGPythonExamples
Examples and demos showing how to call functions from the NAG Library for Python
Stars: ✭ 46 (+0%)
Mutual labels:  scientific-computing
yt astro analysis
yt astrophysical analysis modules
Stars: ✭ 18 (-60.87%)
Mutual labels:  scientific-computing
gis4wrf
QGIS toolkit 🧰 for pre- and post-processing 🔨, visualizing 🔍, and running simulations 💻 in the Weather Research and Forecasting (WRF) model 🌀
Stars: ✭ 137 (+197.83%)
Mutual labels:  scientific-computing
sparse
Sparse matrix formats for linear algebra supporting scientific and machine learning applications
Stars: ✭ 136 (+195.65%)
Mutual labels:  scientific-computing
spinmob
Rapid and flexible acquisition, analysis, fitting, and plotting in Python. Designed for scientific laboratories.
Stars: ✭ 34 (-26.09%)
Mutual labels:  scientific-computing
nsd
Numerical Software Development
Stars: ✭ 77 (+67.39%)
Mutual labels:  scientific-computing
thread-pool
BS::thread_pool: a fast, lightweight, and easy-to-use C++17 thread pool library
Stars: ✭ 1,043 (+2167.39%)
Mutual labels:  scientific-computing
getfem
Mirror of GetFEM repository
Stars: ✭ 23 (-50%)
Mutual labels:  scientific-computing
sunrise
NumPy, SciPy, MRI and Music | Presented at ISMRM 2021 Sunrise Educational Session
Stars: ✭ 20 (-56.52%)
Mutual labels:  scientific-computing

Latest Release License Downloads Format Build

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

Quick start

  1. Install all dependencies:
  • Linux: (Ubuntu for example)
sudo apt install -y gcc-10 g++-10
  • macOS: (using Homebrew)
brew install gcc
  1. Configure
mkdir build && cd build && cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DOPFLOW_BUILD_EXAMPLES=ON ..
  1. Build & Run
cmake --build . -t CONV1D && ./examples/CONV1D/CONV1D

Installation

Please refer to the documentation for installation instructions.

Acknowledgement

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.

JetBrains Logo (Main) logo.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].