Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

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.11.tar.gz (6.1 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.11-cp39-cp39-manylinux2010_x86_64.whl (35.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

mfem-4.2.0.11-cp38-cp38-manylinux2010_x86_64.whl (35.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

mfem-4.2.0.11-cp37-cp37m-manylinux2010_x86_64.whl (35.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

mfem-4.2.0.11-cp36-cp36m-manylinux2010_x86_64.whl (35.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.2.0.11.tar.gz
  • Upload date:
  • Size: 6.1 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.11.tar.gz
Algorithm Hash digest
SHA256 abaca9da0a6a4743d139405e9d78c3e0112af185ae3055012723d3e13cac55d4
MD5 2ffda0f3adc088ca5b9b12f1b57e2fe3
BLAKE2b-256 b7a68a51ec77bf1619dff6d740396d88acd5f93c3117561ffe7eef549f8e3983

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.11-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.11-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.2 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for mfem-4.2.0.11-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1efc58cf0557ecc237601e45b6e5c82ad2c3a93d6e0d883a4a39032b270d365b
MD5 3e66749f6d98d4168f459f8170b14c12
BLAKE2b-256 c2a768ef2a7f65f2d4bd0bca898a22ca354c229ea3c09a9c27cd8d8b1bab58e2

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.11-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.11-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.1 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.9

File hashes

Hashes for mfem-4.2.0.11-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ca94d76421fc01d4fdc0865fc52c4db4786abe7800021f3e810d1201c7d9857a
MD5 78b4a06d9a8fc82ad12f54fd579474a6
BLAKE2b-256 3a00638fa52f561fff279833490278f347f6fd6a47904cd43826e0e8dbe1f9aa

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.11-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.11-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.1 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • 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.7.10

File hashes

Hashes for mfem-4.2.0.11-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ae656d712f38565410beebdadc2fb0d5dd4a8dc3e951e6595b9f71c36e7aa741
MD5 03e8944cde255496bcb6493f6dd62bc9
BLAKE2b-256 0b85cd4705e7a0ab614a862515ad4673b37f08da2c45a9e1a2559923f2d7e3e9

See more details on using hashes here.

File details

Details for the file mfem-4.2.0.11-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: mfem-4.2.0.11-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 35.0 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • 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.11-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d3ec094008b7dabc982d3b64378e094620a3e621ed72dc9576e4955edba70671
MD5 24b414796f652e28fcb7c6a81f5288a3
BLAKE2b-256 c80839d6155c4617912f700cbb8fd85270959ce999c7be1512c0c431d7d3f368

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