From beec6d3e4fe078fea83b55815445de73ad1c6f5e Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Sat, 27 Apr 2019 18:09:14 +0200 Subject: [PATCH] Adapted README --- README.md | 38 +++++++++++++++++++++++++++++++++++--- doc/img/logo_no_text.png | Bin 0 -> 5554 bytes 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 doc/img/logo_no_text.png diff --git a/README.md b/README.md index bd3680317..e864251cd 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,47 @@ pystencils ========== +[](https://i10git.cs.fau.de/pycodegen/pystencils/commits/master) +[](https://i10git.cs.fau.de/pycodegen/pystencils/commits/master) +[coverage report](http://pycodegen.pages.walberla.net/pystencils/coverage_report) + Run blazingly fast stencil codes on numpy arrays. - +*pystencils* uses sympy to define stencil operations, that can be executed on numpy array. +It runs faster than normal numpy code and even as Cython and numba. + +Here is a code snippet that computes the average of neighboring cells: +```python +import pystencils as ps +import numpy as np + +f, g = ps.fields("f, g : [2D]") +stencil = ps.Assignment(g[0, 0], + (f[1, 0] + f[-1, 0] + f[0, 1] + f[0, -1]) / 4) +kernel = ps.create_kernel(stencil).compile() + +f_arr = np.random.rand(1000, 1000) +g_arr = np.empty_like(f_arr) +kernel(f=f_arr, g=g_arr) +``` + +*pystencils* is mostly used for numerical simulations using finite difference or finite volume methods. +It comes with automatic finite difference discretization for PDEs: + +```python +c, v = ps.fields("c, v(2): [2D]") +adv_diff_pde = ps.fd.transient(c) - ps.fd.diffusion(c, sp.symbols("D")) + ps.fd.advection(c, v) +discretize = ps.fd.Discretization2ndOrder(dx=1, dt=0.01) +discretization = discretize(adv_diff_pde) +``` + +Look at the [documentation](http://pycodegen.pages.walberla.net/pystencils) to learn more. Installation ------------ ```bash -export PIP_EXTRA_INDEX_URL=https://www.walberla.net/pip pip install pystencils[interactive] ``` @@ -32,4 +63,5 @@ pip install pystencils[interactive,gpu,doc] Documentation ------------- -Read the docs [here](http://software.pages.walberla.net/pystencils/pystencils) \ No newline at end of file +Read the docs [here](http://pycodegen.pages.walberla.net/pystencils) and +check out the Jupyter notebooks in `doc/notebooks`. diff --git a/doc/img/logo_no_text.png b/doc/img/logo_no_text.png new file mode 100644 index 0000000000000000000000000000000000000000..a214a13cbe271cca7c890430a1cb0da44ccadf71 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 -- GitLab