Skip to main content

A Finite-Difference PDE solver.

Project description

https://img.shields.io/pypi/v/pdepy.svg https://travis-ci.org/olivertso/pdepy.svg?branch=master https://coveralls.io/repos/github/olivertso/pdepy/badge.svg?branch=master

Overview

Disclaimer: Use at your own risk. I have a bachelor’s degree in applied and computational mathematics, but never worked professionally in the field.

A python 3 library for solving initial and boundary value problems of some linear partial differential equations using finite-difference methods:

  • Laplace
    • implicit central
  • Parabolic
    • explicit central
    • explicit upwind
    • implicit central
    • implicit upwind
  • Wave
    • explicit
    • implicit

Getting Started

Installing

pip install pdepy

Examples

Laplace’s Equation:

import numpy as np
from pdepy import laplace

xn, xf, yn, yf = 30, 3., 40, 4.

x = np.linspace(0, xf, xn+1)
y = np.linspace(0, yf, yn+1)

f = lambda x, y: (x-1)**2 - (y-2)**2
bound_x0 = f(0, y)
bound_xf = f(xf, y)
bound_y0 = f(x, 0)
bound_yf = f(x, yf)

axis  = (x, y)
conds = (bound_x0, bound_xf, bound_y0, bound_yf)

laplace.solve(axis, conds, method='ic')

Parabolic Equation:

import numpy as np
from pdepy import parabolic

xn, xf, yn, yf = 40, 4., 50, 0.5

x = np.linspace(0, xf, xn+1)
y = np.linspace(0, yf, yn+1)

init  = x**2 - 4*x + 5
bound = 5 * np.exp(-y)

p, q, r, s = 1, 1, -3, 3

axis   = (x, y)
conds  = (init, bound, bound)
params = (p, q, r, s)

parabolic.solve(axis, params, conds, method='iu')

Wave Equation:

import numpy as np
from pdepy import wave

xn, xf, yn, yf = 40, 1., 40, 1.

x = np.linspace(0, xf, xn+1)
y = np.linspace(0, yf, yn+1)

d_init = 1
init   = x * (1-x)
bound  = y * (1-y)

axis  = (x, y)
conds = (d_init, init, bound, bound)

wave.solve(axis, conds, method='i')

Developing and Testing

pip install tox
pip install -e .

# Testing.
tox

# Always remove .tox/ after changing the files in ./requirements.
rm -rf .tox/

Packaging and Distributing

Do not forget to update the version field in setup.py.

pip install twine

# Packaging.
python setup.py sdist
python setup.py bdist_wheel

# Distributing.
twine upload dist/*

More about packaging and distributing here.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pdepy, version 1.0.3
Filename, size File type Python version Upload date Hashes
Filename, size pdepy-1.0.3-py3-none-any.whl (9.5 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size pdepy-1.0.3.tar.gz (6.0 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page