Skip to main content

Finite volume discretizations for Python

Project description

pyfvm

PyPi Version PyPI pyversions GitHub stars PyPi downloads

Discord

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 meshplex
import meshzoo
import numpy as np
from scipy.sparse import linalg

import pyfvm
from pyfvm.form_language import Boundary, dS, dV, integrate, n_dot_grad


class Poisson:
    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_tri(
    np.linspace(0.0, 2.0, 401), np.linspace(0.0, 1.0, 201)
)
mesh = meshplex.Mesh(vertices, cells)

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

u = linalg.spsolve(matrix, rhs)

mesh.write("out.vtk", 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 = meshplex.read("pacman.e")

Likewise, PyAMG is a much faster solver for this problem

import pyamg

ml = pyamg.smoothed_aggregation_solver(matrix)
u = ml.solve(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 as np
from sympy import exp
import meshplex


class Bratu:
    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_tri(
    np.linspace(0.0, 2.0, 101), np.linspace(0.0, 1.0, 51)
)
mesh = meshplex.Mesh(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 = np.zeros(len(vertices))
u = pyfvm.newton(f.eval, jacobian_solver, u0)

mesh.write("out.vtk", 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)

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyfvm-0.5.1-cp314-none-any.whl (64.2 kB view details)

Uploaded CPython 3.14

pyfvm-0.5.1-cp313-none-any.whl (62.2 kB view details)

Uploaded CPython 3.13

pyfvm-0.5.1-cp312-none-any.whl (61.8 kB view details)

Uploaded CPython 3.12

pyfvm-0.5.1-cp311-none-any.whl (68.8 kB view details)

Uploaded CPython 3.11

pyfvm-0.5.1-cp310-none-any.whl (33.0 kB view details)

Uploaded CPython 3.10

File details

Details for the file pyfvm-0.5.1-cp314-none-any.whl.

File metadata

  • Download URL: pyfvm-0.5.1-cp314-none-any.whl
  • Upload date:
  • Size: 64.2 kB
  • Tags: CPython 3.14
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfvm-0.5.1-cp314-none-any.whl
Algorithm Hash digest
SHA256 34932e37cb1ad69650cc703aaabb515a9c9f38173adb7211da73852349cd8776
MD5 deaab0adc43dc2b8cff13eecf12be226
BLAKE2b-256 2ef588c8634db8658d53d3c562b4bc64937b8e8760c28bdae0be46ebf6d85b00

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfvm-0.5.1-cp314-none-any.whl:

Publisher: release.yml on meshpro/pyfvm-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfvm-0.5.1-cp313-none-any.whl.

File metadata

  • Download URL: pyfvm-0.5.1-cp313-none-any.whl
  • Upload date:
  • Size: 62.2 kB
  • Tags: CPython 3.13
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfvm-0.5.1-cp313-none-any.whl
Algorithm Hash digest
SHA256 6c9e57d2d8987e47f5129d8f5348a76fb4c597fd67b52b84cd78940277f76ac9
MD5 e86f486155fc2187927c2975e02cf1ff
BLAKE2b-256 6e8e4ce593eddd77591c5d74343147ded513a0b976171b0d124c99e329bd9c1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfvm-0.5.1-cp313-none-any.whl:

Publisher: release.yml on meshpro/pyfvm-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfvm-0.5.1-cp312-none-any.whl.

File metadata

  • Download URL: pyfvm-0.5.1-cp312-none-any.whl
  • Upload date:
  • Size: 61.8 kB
  • Tags: CPython 3.12
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfvm-0.5.1-cp312-none-any.whl
Algorithm Hash digest
SHA256 3f8b996d873d0a5dfd3dca856a7fa1008b40c3a4dd206bd581c4c7f5f4113d86
MD5 0e45465cc2bae46aa8f82587c87cbf40
BLAKE2b-256 0c9807664522871f9e79889029c4a7a9437025b3ea48bbc865cc560d3d3690b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfvm-0.5.1-cp312-none-any.whl:

Publisher: release.yml on meshpro/pyfvm-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfvm-0.5.1-cp311-none-any.whl.

File metadata

  • Download URL: pyfvm-0.5.1-cp311-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: CPython 3.11
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfvm-0.5.1-cp311-none-any.whl
Algorithm Hash digest
SHA256 d2aa592a79200458f6aa9e53a2aeaf25dc351eae428027b813b560abf3a6fe03
MD5 0b65d69085543b2d0494a38b88e3f74c
BLAKE2b-256 7d16e1f1919524b9b2e6d721c8163c0fa2a32961238cf469a2c39262bc510b4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfvm-0.5.1-cp311-none-any.whl:

Publisher: release.yml on meshpro/pyfvm-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfvm-0.5.1-cp310-none-any.whl.

File metadata

  • Download URL: pyfvm-0.5.1-cp310-none-any.whl
  • Upload date:
  • Size: 33.0 kB
  • Tags: CPython 3.10
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfvm-0.5.1-cp310-none-any.whl
Algorithm Hash digest
SHA256 e34c70486797ba09a78772e2032e96bdc0d837d727d7f204a871af73dd18cbb9
MD5 25dcd516f3b45c38859a7215689e80af
BLAKE2b-256 2a08b2edd4b344c76066e625112209b2b0676fb74f270a9fa6768b1d9a5f1bc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfvm-0.5.1-cp310-none-any.whl:

Publisher: release.yml on meshpro/pyfvm-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page