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

Install from github master

git clone https://github.com/mfem/PyMFEM.git
cd PyMFEM
python setup.py install --mfem-branch=master  # build both MFEM and PyMFEM
  
cd test
python test_examples.py -serial

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.3.0.5.tar.gz (8.3 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.3.0.5-cp310-cp310-manylinux_2_24_x86_64.whl (29.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64

mfem-4.3.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.3.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.3.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mfem-4.3.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.3.0.5.tar.gz
  • Upload date:
  • Size: 8.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for mfem-4.3.0.5.tar.gz
Algorithm Hash digest
SHA256 c8b34c0c7d00fcad23be7468d861edb23e584e5a9eadaaeb4ea82f90268d12fc
MD5 3c13f61a79596dfb3ae209a0f563b114
BLAKE2b-256 4d239c85300b194d1967fb0b1d206f6d8efa3a4d6cefc18edb839f638ea2ae4f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mfem-4.3.0.5-cp310-cp310-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 29.9 MB
  • Tags: CPython 3.10, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for mfem-4.3.0.5-cp310-cp310-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 93442d89bc1bb18402c8e9f7b863feaa2c5dba62f9a41b15508624ac733d2f0c
MD5 c6ad35af8d12429ee2aa3e523cac1105
BLAKE2b-256 6a499b8aa3860cda5c482350c044bb0bb5cd58fdc7865ce09e9c21ddb427be49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 22a1572b541a235146ddbf42871cb72f2bbbeff4b24efa109e1e747405ea9ca0
MD5 c354e0e786db9142874ca167f9c26868
BLAKE2b-256 8a62e515c802f7cb1dd55dc49f796384c67415517790c6b6e2cc61db3ed3d5ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1bdd79b5ddfc65e3fb09d1a7e0c5fabff9def430aba46a4b68df1e2b7fa51015
MD5 4a7e0630419d78c98b684f0722b1f206
BLAKE2b-256 59b2f752adcd0ce711c974a5fa4a4aa8af992af0b4a338b4b48fc89ce95b5092

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 acd65560f8199c960d5bab769073ab322ac93ffed350ae83de6fb32ce8f19427
MD5 d58b8df669f150426e38bb2b958a126b
BLAKE2b-256 a54855b942c733e72320f9bf3faa0df99e44ef43bc9e69a6674639b73e8bef19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2229dcd2ecc4a693e09f3d1e5568c69b09b212a93311c158e53d68f68ea00fd3
MD5 fd2613931180502ef9c031afbeff21a9
BLAKE2b-256 fc93b0910d965bec73b35f3045694a237c525bd026d9e9073c60384aad3f46fc

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