Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

badge badge

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). Use the badge above to open this in Binder.

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.10.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.10-cp39-cp39-manylinux2010_x86_64.whl (35.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

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

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

mfem-4.2.0.10-cp37-cp37m-manylinux2010_x86_64.whl (35.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

mfem-4.2.0.10-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.10.tar.gz.

File metadata

  • Download URL: mfem-4.2.0.10.tar.gz
  • Upload date:
  • Size: 6.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.13

File hashes

Hashes for mfem-4.2.0.10.tar.gz
Algorithm Hash digest
SHA256 7100eeaac9a9fc30397edaee4e20aff511f2477333fd745e5f62ded6685148ed
MD5 a057f415fa9da412968bde0963a80494
BLAKE2b-256 e7c3ae3a2aea976e82cafc340ba8d33224dc98b8ebda8ee752571f0015085908

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.10-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.2 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.9.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for mfem-4.2.0.10-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 52c771b6a7ea98cf7b5b72ada433756114b99d882a8bb825436f42f4e7d69882
MD5 bcd264fb42cd206afc374a1c9b3ee110
BLAKE2b-256 7807452a14d874d0e2ee2d93ff81fa856d6ae3be7f811106f55d3050fe393f7c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.10-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.4.1 importlib_metadata/3.9.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for mfem-4.2.0.10-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f9671fde071fda4bdedf48efdfe2b09c4e299f1cfcd994dfc660aa85d1cf2eef
MD5 226d12b449566e9e0c91393ccf0c4ebc
BLAKE2b-256 50a2d4953f05c3ecc9efc6b6d88c87b0b9b9fb9b0363ef11069903e5938fd759

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.10-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.1 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.7.10

File hashes

Hashes for mfem-4.2.0.10-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9c69d3ee05ccdc6570272e0935fe4884521484a81a188cc3d258734547c56af8
MD5 13270aebf287e1694343b39e28007400
BLAKE2b-256 230b54d2253219c8637b88b7ba4ef34498fad78209bbfb596e3d3140c4a19919

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.10-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.4.1 importlib_metadata/3.7.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.13

File hashes

Hashes for mfem-4.2.0.10-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2d325e2233282e8871edd2aacaedfbd165430e91a629800249d1c2692fd53105
MD5 d9b2e6f49447f738165e4e59b9b652e9
BLAKE2b-256 cc16d30aca90254206379d9da33f7bd29177c2ea4f4a347c6c72a36a64c90c0e

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