Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

PyMFEM (MFEM Python wrapper)

This package (PyMFEM) is Python wrapper for the MFEM high performance parallel finite element method library.(http://mfem.org/).

Installer downloads a couple of external libraries and build them. By default, "pip install mfem" downloads and builds the serial version of MFEM and PyMFEM. See more detail below for other configurations

Install

pip install mfem                    # binary install is available only on linux platforms (Py36-39) 
pip install mfem --no-binary mfem   # install serial MFEM + wrapper

The setup script accept various options. TO use it, please download the package and run the script manually. For example, this below download and build parallel version of MFEM library (linked with Metis and Hypre) and install under /mfem

$ pip3 download mfem
(expand tar.gz file and move to the downloaded directory)
$ python setup.py install --with-parallel # it download and build metis/hypre/mfem

Choosing compiler

$ python setup.py install --with-parallel --CC=icc --CXX=icpc --MPICC=mpiicc --MPICXX=mpiicpc

For other configurations, see docs/install.txt or help

$ python setup.py install --help

Usage

Here is an example to solve div(grad(f)) = 1 in a square and to plot the result with matplotlib (modified from ex1.cpp)

import mfem.ser as mfem

# create sample mesh for square shape
mesh = mfem.Mesh(10, 10, "TRIANGLE")

# create finite element function space
fec = mfem.H1_FECollection(1, mesh.Dimension())   # H1 order=1
fespace = mfem.FiniteElementSpace(mesh, fec)      

# 
ess_tdof_list = mfem.intArray()
ess_bdr = mfem.intArray([1]*mesh.bdr_attributes.Size())
fespace.GetEssentialTrueDofs(ess_bdr, ess_tdof_list)

# constant coefficient 
one = mfem.ConstantCoefficient(1.0)

# define Bilinear and Linear operator
a = mfem.BilinearForm(fespace)
a.AddDomainIntegrator(mfem.DiffusionIntegrator(one))
a.Assemble()
b = mfem.LinearForm(fespace)
b.AddDomainIntegrator(mfem.DomainLFIntegrator(one))
b.Assemble()

# create gridfunction, which is where the solution vector is stored
x = mfem.GridFunction(fespace);
x.Assign(0.0)

# form linear equation (AX=B)
A = mfem.OperatorPtr()
B = mfem.Vector()
X = mfem.Vector()
a.FormLinearSystem(ess_tdof_list, x, b, A, X, B);
print("Size of linear system: " + str(A.Height()))

# solve it using PCG solver and store the solution to x
AA = mfem.OperatorHandle2SparseMatrix(A)
M = mfem.GSSmoother(AA)
mfem.PCG(AA, M, B, X, 1, 200, 1e-12, 0.0)
a.RecoverFEMSolution(X, b, x)

# extract vertices and solution as numpy array
verts = mesh.GetVertexArray()
sol = x.GetDataArray()

# plot solution using Matplotlib

import matplotlib.pyplot as plt
import matplotlib.tri as tri

triang = tri.Triangulation(verts[:,0], verts[:,1])

fig1, ax1 = plt.subplots()
ax1.set_aspect('equal')
tpc = ax1.tripcolor(triang, sol, shading='gouraud')
fig1.colorbar(tpc)
plt.show()

License

PyMFEM is licensed under BSD-3. Please refer the developers' web sites for the external libraries

Project details


Download files

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

Source Distribution

mfem-4.2.0.7.tar.gz (6.1 MB view details)

Uploaded Source

Built Distributions

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

mfem-4.2.0.7-cp39-cp39-manylinux2010_x86_64.whl (35.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

mfem-4.2.0.7-cp38-cp38-manylinux2010_x86_64.whl (35.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

mfem-4.2.0.7-cp37-cp37m-manylinux2010_x86_64.whl (35.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

mfem-4.2.0.7-cp36-cp36m-manylinux2010_x86_64.whl (35.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

File details

Details for the file mfem-4.2.0.7.tar.gz.

File metadata

  • Download URL: mfem-4.2.0.7.tar.gz
  • Upload date:
  • Size: 6.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.6.12

File hashes

Hashes for mfem-4.2.0.7.tar.gz
Algorithm Hash digest
SHA256 f5534c40b65d5a1891cb49e25ee7a84b7195318c6412040e2832a6aaed2fdbb6
MD5 b4f3c1f0e2ffcf363c4b7260c4f2f98c
BLAKE2b-256 8041f3e1ed7744f22d29542f14485c3200bfd136841ca8278e535cc048ea507a

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.7-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.7-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.1 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for mfem-4.2.0.7-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c9ab8e35efad02be1631f54390d2fab61b95656ee9e442f634774c1fc7fe8b23
MD5 3b1ee20bf16d067152e3bce38a1bf4b9
BLAKE2b-256 c3bf631f2d7f7fa3e327d69068780612ce82914d8511f3c1dad5862794ccd394

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.7-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.7-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.1 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7

File hashes

Hashes for mfem-4.2.0.7-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b273d24833d8f606cd930e4bfbaa34fe670548c70fbd4b8436f42613634c22be
MD5 7dcccb5dd988fe749f838b185cf00b84
BLAKE2b-256 96e35a6a330947cf19a661870e10d6b8e41c25f15f5776d64ee6bf4b019726a6

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.7-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.7-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.0 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.9

File hashes

Hashes for mfem-4.2.0.7-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 180e8934289b3ff1ca276442c23d2818c4a4dc69452b2cc969a17a9a1f31efc7
MD5 77be8c64fe1e04d2d3ac469b1e8de4ab
BLAKE2b-256 91f2675a74636a3234aa98ca44c1d3c7032fdf2e3bdf1891ab0d13bfe57ad771

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.7-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.7-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.0 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.6.12

File hashes

Hashes for mfem-4.2.0.7-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 02ce208945eac40c3d1fcf4b37f7983215b554cacca043b1a9aee3bf101a420b
MD5 b46779bd2b2d9106451d0a429121893f
BLAKE2b-256 0091e306139cb97d41661aa4b04e4024709d2ac5c0ef0bc7828c49abe645e6d2

See more details on using hashes here.

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