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 -serial

# 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.2.0rc0.tar.gz (381.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.5.2.0rc0-cp310-cp310-manylinux_2_24_x86_64.whl (44.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64

mfem-4.5.2.0rc0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.5.2.0rc0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.5.2.0rc0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

Details for the file mfem-4.5.2.0rc0.tar.gz.

File metadata

  • Download URL: mfem-4.5.2.0rc0.tar.gz
  • Upload date:
  • Size: 381.2 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.2.0rc0.tar.gz
Algorithm Hash digest
SHA256 73d62a354e8bed1ae04c7e8f2b4cd2d5b94a367935ebbb8b29be8ece328879b2
MD5 1b68483ea265dd0b13475f74903b9116
BLAKE2b-256 2fc9f860dc7832d6f2a7219ed4de288265d07b15436f9cb70093f29bb5776c7b

See more details on using hashes here.

File details

Details for the file mfem-4.5.2.0rc0-cp310-cp310-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.5.2.0rc0-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 01b0bb74e2776bdf1c040e42522fa73188963769b91f9a6cab1fddf74c75fb53
MD5 5085bc67442d3d407b6a6a2999aafc46
BLAKE2b-256 f122e206ecbad3d4b1f19a63c776f3760a9a91de543b04d6e96246fe034e5c14

See more details on using hashes here.

File details

Details for the file mfem-4.5.2.0rc0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.5.2.0rc0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 db0b50b2915f8e8143e8514da180f555b9379610df66156f8791ba8ac8112be4
MD5 54bcaf392fb324ca3db09b40f235c65f
BLAKE2b-256 089cb083a4eef29472066a5b2866b8e7362bd83f32f1a69f456865738fc1c240

See more details on using hashes here.

File details

Details for the file mfem-4.5.2.0rc0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mfem-4.5.2.0rc0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f9dd524f345ef75b54ad65d36ac9aea983722110b78ffb26e0fa00f5b90eaa6
MD5 cc6e64cc8a0ba6a8bcb629cccd68b2c4
BLAKE2b-256 4db6b02d039a80e51929735e41baa40f52cd0b1196523fe3f4b0c9b81431b109

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.2.0rc0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cf46c2acd18df5ed5de95b8da1891e39121bd5ce4e3a4f8b36b5e5bc7ca5980
MD5 c6664976659913efa52a1429f24bd6b9
BLAKE2b-256 982b2a08470bbd30c5fa9314373485d02dfdad4ac4b552b6526dd18d09d6946c

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