Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

Binder badge badge

MFEM + PyMFEM (FEM library)

This repository provides Python binding for MFEM. MFEM is a high performance parallel finite element method (FEM) library (http://mfem.org/).

Installer (setup.py) builds both MFEM and binding together. By default, "pip install mfem" downloads and builds the serial version of MFEM and PyMFEM. Additionally, the installer supports building MFEM with specific options together with other external libraries, including MPI version.

Requirement

six, numpy, swig
mpi4py (for --with-parallel)

Install

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

Using additional features (MPI, GPU, GPU-Hypre, GSLIB, SuiteSparse)

The setup script accept various options. TO use it, one can either use --install-option flag with pip, or download the package manually and run the script. For example, this below download and build parallel version of MFEM library (linked with Metis and Hypre) and install under /mfem. See also, docs/install.txt

### Using pip
$ pip install mfem --install-option="--with-parallel" [--verbose]

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

### Verbose output
$ python setup.py install --vv # SWIG output and CMAKE_VERBOSE_MAKEFILE is on

### Cleaning
$ python setup.py clean --all # clean external dependencies + wrapper code

Build with MFEM master in Github

$ pip install mfem --install-option="--with-parallel" --install-option="mfem-branch=master"[--verbose]
(or)
$ python setup.py install  --with-parallel --mfem-branch='master'

Choosing compiler

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

### Other options

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

$ python setup.py install --help

Install from github source

git clone https://github.com/mfem/PyMFEM.git
cd PyMFEM
python setup.py install # build both MFEM and PyMFEM
cd test
python test_examples.py -serial

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.4.0.1.tar.gz (401.2 kB view details)

Uploaded Source

Built Distributions

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

mfem-4.4.0.1-cp310-cp310-manylinux_2_24_x86_64.whl (32.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64

mfem-4.4.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.4.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.4.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mfem-4.4.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.1 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.4.0.1.tar.gz
  • Upload date:
  • Size: 401.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.0 urllib3/1.26.12 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.15

File hashes

Hashes for mfem-4.4.0.1.tar.gz
Algorithm Hash digest
SHA256 f5a7fcc9dd3cd870a2479211c5358ced6978abd63cf17ace548ea93b1d9225bb
MD5 b4f647ffe17d3b2165152b8e4971a276
BLAKE2b-256 0a233f17039ef08513c149eaf00511cf51a1154fdfef3f23b101a03cef6a36df

See more details on using hashes here.

File details

Details for the file mfem-4.4.0.1-cp310-cp310-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.4.0.1-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 7b7802a4668fb601a1b63c5252f71a467453b3b0d371334e21e5680bf685417a
MD5 67b7f81cc99750aea906943132e2cf29
BLAKE2b-256 51d50599cd10933d8f022b152caea0fb1f8b0c57ed11994dd32188a8e660e78a

See more details on using hashes here.

File details

Details for the file mfem-4.4.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.4.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 22082148857101fa41e518d1898864c9f7ce9c6b3679257e3cb370d85c57fdf2
MD5 c5a6d027300979b8b29b3d89b3dd3862
BLAKE2b-256 84483346e96b0fb7f7396f694dc4250e32d3fa993124fa34b5e129a55590d860

See more details on using hashes here.

File details

Details for the file mfem-4.4.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.4.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 970ea78bff50218b3c35127fd960cf21a8a88dfd7441991f2bb994dc1ca9b1ab
MD5 557bfdd3e1951b7907c5561ad660c3a6
BLAKE2b-256 46b82602da3c05e5d048b8a9d5fa442691feef7fd060a3a5d704a92cfa2c2980

See more details on using hashes here.

File details

Details for the file mfem-4.4.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.4.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fc53e5466c0cade7e6c0b1486c13a3a88ea10078f7d04c81f320f757a071fdf3
MD5 2d4aa4c47f338335dc40549921239f6e
BLAKE2b-256 86424fc27133101c157c80b2edc4c6d6887c014601a12b4e26a8dedc0cf36648

See more details on using hashes here.

File details

Details for the file mfem-4.4.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: mfem-4.4.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 45.1 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.0 urllib3/1.26.12 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.15

File hashes

Hashes for mfem-4.4.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b886d930515723b686bdc7b41d63661edea4e615845d450b1a431c2b71f7f4a
MD5 a39ce0edf84b8cadb0350099d06fe1c1
BLAKE2b-256 178304aeb664a32b96516b395ae84255ba8e61c65c45dc2dc3d2101920484c0c

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