Skip to main content

MFEM + PyMFEM (finite element method library)

Project description

Binder badge badge

MFEM + PyMFEM (FEM library)

This package provides MFEM and its Python wrapper (PyMFEM). MFEM is a high performance parallel finite element method (FEM) 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.3.0.0.tar.gz (6.7 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.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mfem-4.3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mfem-4.3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mfem-4.3.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: mfem-4.3.0.0.tar.gz
  • Upload date:
  • Size: 6.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.6.14

File hashes

Hashes for mfem-4.3.0.0.tar.gz
Algorithm Hash digest
SHA256 7e3e7f405b9be4b55ada346909b851aa9a1159a910ea1be59ccd719075d59603
MD5 1acc233ce5b5dc6d96d286741a4db355
BLAKE2b-256 e03904d99445d33d52a70f42057457d7a8cb43676fe1ff49e8e96badd757212c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8cfe4a72e525daa34b6ceb2b92770704af7f2116e8fdeb62f826eb355fa83f7d
MD5 5f0b8d390ba2a5645644418caaa8ac84
BLAKE2b-256 a429cde567cafbc7a713f502e26ddfdedc30ad78ca19b3632673f933ade6a136

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e69c5d6e4946ffeda43eca99995d0ca3791e588e7fd2db083b44f8276e4138a
MD5 9cad1de3c8f5a67ae27724bc545fd723
BLAKE2b-256 29b6fecc73f20c4c28fcfe132583d55bf312ae8bbab432554b99b43b7ca32ec4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f5e80c52906cac4eba9b0ce7ec80eff6c5c062ca22874303b0caa52aab65166
MD5 0fa2be46ea5d0c3127a69d6905bd7ec4
BLAKE2b-256 139519f2ba5d482efb9ec28239bcbcfd6e288a592afaf11df3d0b08fa9feb7ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mfem-4.3.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9ea9a06f3b44ea56cc85de3fb6259853c60a6e53052bb83e4d95e5f3ff16d16
MD5 53269e5628211b39d3bad7a5b1c25d52
BLAKE2b-256 2bbd7f28e4305bf3a408dcc2950c1ad5db885e698e28c72cc455dd501fa2d124

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