Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Finite Volume Discretizations for Python

Project Description

Creating finite volume equation systems with ease.

PyFVM provides everything that is needed for setting up finite volume equation systems. The user needs to specify the finite volume formulation in a configuration file, and PyFVM will create the matrix/right-hand side or the nonlinear system for it. This package is for everyone who wants to quickly construct FVM systems.

Examples

Linear equation systems

PyFVM works by specifying the residuals, so for solving Poisson’s equation with Dirichlet boundary conditions, simply do

import pyfvm
from pyfvm.form_language import *
import meshzoo
from scipy.sparse import linalg
import voropy

class Poisson(object):
    def apply(self, u):
        return integrate(lambda x: -n_dot_grad(u(x)), dS) \
             - integrate(lambda x: 1.0, dV)

    def dirichlet(self, u):
        return [(lambda x: u(x) - 0.0, Boundary())]

# Create mesh using meshzoo
vertices, cells = meshzoo.rectangle(0.0, 2.0, 0.0, 1.0, 401, 201)
mesh = voropy.mesh_tri.MeshTri(vertices, cells)

matrix, rhs = pyfvm.discretize_linear(Poisson(), mesh)

u = linalg.spsolve(matrix, rhs)

mesh.write('out.vtu', point_data={'u': u})

This example uses meshzoo for creating a simple mesh, but anything else that provides vertices and cells works as well. For example, reading from a wide variety of mesh files is supported (via meshio):

mesh, _, _ = pyfvm.reader.read('pacman.e')

Likewise, PyAMG is a much faster solver for this problem

import pyamg
ml = pyamg.smoothed_aggregation_solver(linear_system.matrix)
u = ml.solve(linear_system.rhs, tol=1e-10)

More examples are contained in the examples directory.

Nonlinear equation systems

Nonlinear systems are treated almost equally; only the discretization and obviously the solver call is different. For Bratu’s problem:

import pyfvm
from pyfvm.form_language import *
import meshzoo
import numpy
from sympy import exp
import voropy

class Bratu(object):
    def apply(self, u):
        return integrate(lambda x: -n_dot_grad(u(x)), dS) \
             - integrate(lambda x: 2.0 * exp(u(x)), dV)

    def dirichlet(self, u):
        return [(u, Boundary())]

vertices, cells = meshzoo.rectangle(0.0, 2.0, 0.0, 1.0, 101, 51)
mesh = voropy.mesh_tri.MeshTri(vertices, cells)

f, jacobian = pyfvm.discretize(Bratu(), mesh)

def jacobian_solver(u0, rhs):
    from scipy.sparse import linalg
    jac = jacobian.get_linear_operator(u0)
    return linalg.spsolve(jac, rhs)

u0 = numpy.zeros(len(vertices))
u = pyfvm.newton(f.eval, jacobian_solver, u0)

mesh.write('out.vtu', point_data={'u': u})

Note that the Jacobian is computed symbolically from the Bratu class.

Instead of pyfvm.newton, you can use any solver that accepts the residual computation f.eval, e.g.,

import scipy.optimize
u = scipy.optimize.newton_krylov(f.eval, u0)

Installation

PyFVM is available from the Python Package Index, so simply type

pip install -U pyfvm

to install or upgrade.

Testing

To run the tests, check out this repository and type

pytest

Distribution

To create a new release

  1. bump the __version__ number,

  2. publish to PyPi and GitHub:

    make publish
    

License

PyFVM is published under the MIT license.

Release History

Release History

This version
History Node

0.2.3

History Node

0.2.2

History Node

0.2.1

History Node

0.2.0

History Node

0.1.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
PyFVM-0.2.3-py2.py3-none-any.whl (17.5 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel May 29, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting