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.8.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.8-cp39-cp39-manylinux2010_x86_64.whl (35.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

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

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

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

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

mfem-4.2.0.8-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.8.tar.gz.

File metadata

  • Download URL: mfem-4.2.0.8.tar.gz
  • Upload date:
  • Size: 6.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.6.12

File hashes

Hashes for mfem-4.2.0.8.tar.gz
Algorithm Hash digest
SHA256 93c17919128aecfe4dd129e91c229c1e0ab03db82a84493c00da4ad7b39a4e93
MD5 15587638af1bc7917eb9cbed81a5af0c
BLAKE2b-256 3be8619d9ad81fdbf9099998e1f7686515b62a240e0be5866a06ddc1ee3c9b57

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.8-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.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1

File hashes

Hashes for mfem-4.2.0.8-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4a0f6661ed6d75e5e036171a26c8e67f5dc5d7b4787f8947d98095cc3e9d48a9
MD5 f5e8ece8e7a97c91aa771b0abafe5ea6
BLAKE2b-256 82a44f5a82f8322f099b8e4b7b6e0f2e619b6ad5029ba5c72bb6949af5bc44ba

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.8-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.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.7

File hashes

Hashes for mfem-4.2.0.8-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 6f097fa455a49a1ac60124800db9c9e5d3567c9c8bf4d286a28bf1a6496ecb71
MD5 2736635c96c640743a7d952b5bb8449c
BLAKE2b-256 d16c7c2862d79b6fbe1ef89c30d96149dba3401bdb4315ba07b37a1f70d06484

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.8-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.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.7.9

File hashes

Hashes for mfem-4.2.0.8-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 625be237a3407f02ea01b9b559e9a9c7991ab93f98fc07ca239dbe9a9bdea84a
MD5 f1fdde517ade56ba7062553d1e60444b
BLAKE2b-256 3b48b76751b7b9319614e6ac0fe17b88330c8b23605fe974b03973bf12f06120

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.2.0.8-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.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.6.12

File hashes

Hashes for mfem-4.2.0.8-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5818f7a8c3c113dffda469606b2a9829450138c87413bc6d5543a0d5a2c7d84c
MD5 4149136af1a3f68d57ff13545e019c21
BLAKE2b-256 d5de11cb9d7228c766ee02ad3d5178b382fbb0cc8974bb61f054066286c4c307

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