Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

Binder 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.15.tar.gz (6.2 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.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.2.0.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.2.0.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mfem-4.2.0.15-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.2 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.2.0.15.tar.gz
  • Upload date:
  • Size: 6.2 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.60.0 CPython/3.6.13

File hashes

Hashes for mfem-4.2.0.15.tar.gz
Algorithm Hash digest
SHA256 1c0af75d483ec3cc338b462c94a6786c10080bd047264d0d1b09f46af2f2c903
MD5 19b756a68d3dad778c02a0605c3156bf
BLAKE2b-256 11e2280df7b8f8f1a40a1bc115ca2fe801dce2ff131be464c9f0686efd79b42e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.2.0.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f0604c61154670af6553a625ed84c93ae489f7b996d3f3b7811b875730a1904
MD5 53dcc90cefd0b49a782ae66fbb909a7d
BLAKE2b-256 a5a346268ac896ec925c6c213cfab12885feb674effe272168036a07293a45c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.2.0.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63b8e55dd895478061d46d832c1a08625d741cbc101cff2ced7ffb8d1de9c5c9
MD5 e80aab94c6c113a9ba1158e4a2bd5fe8
BLAKE2b-256 f53dd238cb51be688eafcc2e9b2e335dd8ff9b38914ff37d7c368025f677bbe8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.2.0.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a6c25804fa51a06e64faed20015633fd437fe2647f4d18c59ef2f4477fe9c2ae
MD5 72ae13f3c4b71d2e4ca5fd0a69994d0d
BLAKE2b-256 c4c7616dc2941ddb8cc4c6dd0b6cb260372884d27ff24b2d0e1700b84b46925f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.2.0.15-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da7c1b75733d6ec964d317c667b2ca4ca0c4a4b9e4ed3a186d50baa0e61da482
MD5 a3bd09300ff38740eea2595954551ea1
BLAKE2b-256 786a0b81319e49f0d233949111dce749bebcea71e566a647487c867515461011

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