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.0.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.0-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.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: mfem-4.5.2.0.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.0.tar.gz
Algorithm Hash digest
SHA256 73785c7086e1908f647ab4ad066a94761ff6da856799ebd89c4a78709c0f5022
MD5 cbc26bcf0bdfa7e1ed83bfc608834878
BLAKE2b-256 461a55bd1cd5f7dc9e02e5fcd3ba81f1b3444ba41894b9d3e7f24dacc1310e66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.2.0-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 0f69ce9690d73f91d634e3d938f179256a94aff50c3ef52b30993362cef3c7ce
MD5 6379d37ef93870911ef994cfd0aa8b44
BLAKE2b-256 f0dd81b8349ad0e0e2caccc33a26edd26ee54c813da934169115115ce680c7b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d920a1fc7507cafcffa375f1f06cf7a9cd3dcaf78ef7fefc86690500c6801175
MD5 927249fc90d5c2be7dfcfdfa7d40923b
BLAKE2b-256 5a55d5ad9b9f55a18755b945f41797cddbb09ec022adeb1666b4ea48552b1285

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18369728efdc3f332552dbb7cf29c628e315e024cf443fd050f84a9bd660bc09
MD5 4233ae27f7f9cc9c7d877a0ad4454b75
BLAKE2b-256 519d1f75c78fe93dca93d02c020b5b8fa87ad17609c7ac25dc199d98ab55f3d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.5.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3040c2edffe89784f1a0a3fc09dfe820ed700979627d5cd727db26122712c616
MD5 77a2a2aa9d6339c99fd15921473e318c
BLAKE2b-256 2950446a26d5338f9b17091014f33a548a3caeb06a05a1fcff443b5c108c525a

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