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.

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

Build with additional features (MPI, GPU, GPU-Hypre, GSLIB, SuiteSparse, libCEED, LAPACK)

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, the one below downloads and build parallel version of MFEM library (linked with Metis and Hypre) and installs under /mfem. See also, docs/install.txt

Using pip

$ pip install mfem --install-option="--with-parallel" 

Build from local source file

# Download source and build
$ pip download mfem --no-binary mfem (expand tar.gz file and move to the downloaded directory)
or clone this repository
$ git clone https://github.com/mfem/PyMFEM.git

# Then, build it from local source
$ python -m pip install ./ --install-option="--with-parallel" --install-option="--mfem-branch=master"
or
$ python setup.py install --with-parallel # it download and build metis/hypre/mfem

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

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

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

# Run test
cd test
python test_examples.py -serila

# Other option
For other configurations, see docs/install.txt or help
$ python setup.py install --help

Usage

Here is an example to solve div(alpha grad(u)) = f 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 (diffusion coefficient and RHS)
alpha = mfem.ConstantCoefficient(1.0)
rhs = mfem.ConstantCoefficient(1.0)

# Note:
#    Diffusion coefficient can be variable. To use numba-JIT compiled
#    functio. Use the following, where x is numpy-like array.
# @mfem.jit.scalar
# def alpha(x):
#     return x+1.0
#

# define Bilinear and Linear operator
a = mfem.BilinearForm(fespace)
a.AddDomainIntegrator(mfem.DiffusionIntegrator(alpha))
a.Assemble()
b = mfem.LinearForm(fespace)
b.AddDomainIntegrator(mfem.DomainLFIntegrator(rhs))
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.5.0.1.tar.gz (380.8 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.5.0.1-cp310-cp310-manylinux_2_24_x86_64.whl (43.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64

mfem-4.5.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.5.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.5.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (57.9 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.5.0.1.tar.gz
  • Upload date:
  • Size: 380.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.16

File hashes

Hashes for mfem-4.5.0.1.tar.gz
Algorithm Hash digest
SHA256 e55ee46199ab575ac170ae5881698f08321389c118f3ab2e3cb520ac5b99fc18
MD5 a8d9021bde2b8878ad9d2ee3b6fb12ef
BLAKE2b-256 d016b4c4bdff6ac6e92816ba45bfae79283062e653a81f79f4675b86ee26d26d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.0.1-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 b260c774a32bb6f0d40e428d83240ee865a4a8004e385c4d4ba1b142a5e80a7c
MD5 421b2844370dd1b29938bab90d73add9
BLAKE2b-256 55fbb61c177c6c883593a4215b1a93e5ef7305b6f6d04754c8a11ddc0f4b5c12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 38a87a525d85494a436b8101d7b479eca7fee1d5ed8fbc78861103dc88ca0c5c
MD5 dcd26328f72a92f2bb5359397acc8d6a
BLAKE2b-256 7c92d98db6ede2631dfc5abc25eeb0169ef947e799ec9d8548faf4fd129e820e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc40b4a27766ca0ebf69e0cefc77ac1d19a74de90669684a5c7731579c9a9342
MD5 fd76e3a0e753520c40298fd887d76bf3
BLAKE2b-256 3fdbfddfaa9d77d36014ce1bfb7354ebedfee19486ee041dc2c7c4bc0ea75353

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f217368de1c58ab84b2376454525fe5d7ed78adfe6c739224c5e7ebaf22465b9
MD5 4058e21b14959872f25daae49f2226d2
BLAKE2b-256 1b8a8408fca545e35a8ce515c8aa1a8d80f0ec1e242f8a47ca52373144d3b0de

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