Skip to main content

License: MIT PyPI - Python Version PyPI - Version Tests Binder DOI

Documentation · Examples · Changelog

torch-fem

torch-fem is a simple GPU-accelerated differentiable finite element solver for solid mechanics built on PyTorch. Automatic differentiation provides exact sensitivities of simulation results with respect to material parameters, geometry, loads, etc. without hand-derived adjoint formulations. It is aimed at researchers in computational mechanics who need gradients through FEM solvers for tasks such as optimization, inverse problems, and machine-learning-augmented simulation.

Features

  • Elements

    • 1D: Bar1, Bar2
    • 2D: Quad1, Quad2, Tria1, Tria2
    • 3D: Hexa1, Hexa2, Tetra1, Tetra2
    • Shell: Flat-facet triangle (linear only)
  • Material models

    • Isotropic linear elasticity
    • Orthotropic linear elasticity
    • Isotropic small strain plasticity
    • Isotropic small strain damage
    • Hyperelasticity (via automatic differentiation of their energy function)
    • Isotropic thermal conductivity
    • Orthotropic thermal conductivity
    • Custom user material interface
  • Utilities

    • Homogenization of orthotropic elasticity for composites
    • Composite laminates for shells
    • Simple structured meshing
    • I/O to and from other mesh formats via meshio

Installation

You may install torch-fem via pip with

pip install torch-fem

To run the example notebooks, install with the notebook extra (pip install torch-fem[notebook]). For GPU acceleration, install PyTorch with CUDA support and the matching CuPy version - see the installation guide for details.

Minimal example

This is a minimal example of how to use torch-fem to solve a very simple planar cantilever problem.

import torch
from torchfem import Planar
from torchfem.materials import IsotropicElasticityPlaneStress

torch.set_default_dtype(torch.float64)

# Material
material = IsotropicElasticityPlaneStress(E=1000.0, nu=0.3)

# Nodes and elements
nodes = torch.tensor([[0., 0.], [1., 0.], [2., 0.], [0., 1.], [1., 1.], [2., 1.]])
elements = torch.tensor([[0, 1, 4, 3], [1, 2, 5, 4]])

# Create model
cantilever = Planar(nodes, elements, material)

# Load at tip [Node_ID, DOF]
cantilever.forces[5, 1] = -1.0

# Constrained displacement at left end [Node_IDs, DOFs]
cantilever.constraints[[0, 3], :] = True

# Show model
cantilever.plot(node_markers="o", node_labels=True)

This creates a minimal planar FEM model:

minimal

# Solve
u, f, σ, F, α = cantilever.solve()

# Plot displacement magnitude on deformed state
cantilever.plot(u, node_property=torch.norm(u, dim=1))

This solves the model and plots the result:

minimal

If we want to compute gradients through the FEM model, we simply need to define the variables that require gradients. Automatic differentiation is performed through the entire FE solver. Rather than differentiating through individual solver iterations or Newton iterations (this would explode in memory and autograd graph size) though, the implicit function theorem is used to formulate an adjoint backward for solve().

# Enable automatic differentiation
cantilever.thickness.requires_grad = True
u, f, _, _, _ = cantilever.solve(differentiable_parameters=cantilever.thickness)

# Compute sensitivity of compliance w.r.t. element thicknesses
compliance = torch.inner(f.ravel(), u.ravel())
torch.autograd.grad(compliance, cantilever.thickness)[0]

Basic examples

The subdirectory examples/basic contains a couple of Jupyter notebooks demonstrating the use of torch-fem for trusses, planar problems, shells, and solids. You may click on the examples to check out the notebooks online.

Planar plate with a hole plasticity example
Plasticity in a plate with hole: Isotropic linear hardening model for plane-stress or plane-strain.
Finite-strain cantilever example
Finite strain cantilever: Hyperelastic model in Total Lagrangian Formulation.

Optimization examples

The subdirectory examples/optimization demonstrates the use of torch-fem for optimization of structures (e.g. topology optimization, composite orientation optimization). You may click on the examples to check out the notebooks online.

Truss shape optimization example Planar fillet shape optimization example
Shape optimization of a truss: The top nodes are moved and MMA + autograd is used to minimize the compliance. Shape optimization of a fillet: The shape is morphed with shape basis vectors and MMA + autograd is used to minimize the maximum stress.
MBB beam topology optimization example 3D jet engine bracket topology optimization result
Topology optimization of a MBB beam: You can switch between analytical and autograd sensitivities. Topology optimization of a jet engine bracket: The 3D model is exported to Paraview for visualization.
Combined topology and orientation optimization example Fiber orientation optimization example
Combined topology and orientation optimization: Compliance is minimized by optimizing fiber orientation and density of an anisotropic material using automatic differentiation. Fiber orientation optimization of a plate with a hole Compliance is minimized by optimizing the fiber orientation of an anisotropic material using automatic differentiation w.r.t. element-wise fiber angles.

Performance

torch-fem solves problems with millions of degrees of freedom: a linear elastic hexahedral cube model with 1.5 million DOFs assembles and solves in about four seconds on a consumer GPU (RTX 4090, float64). Detailed CPU and GPU benchmarks for timing and memory are reported in the performance documentation and can be reproduced with the scripts in benchmarks/.

Citing torch-fem

If you use torch-fem in your research, please cite it as follows:

@software{torchfem,
    author = {Meyer, Nils},
    title  = {torch-fem: GPU accelerated differentiable finite elements for solid mechanics with PyTorch},
    doi    = {10.5281/zenodo.20306384},
    url    = {https://github.com/meyer-nils/torch-fem},
}

Contributing

Contributions are welcome! Please check out the contributing guide for the development workflow. Bug reports, feature requests, and usage questions are all welcome in the issue tracker - see the support guide for what to include.

Alternatives

There are many alternative Python FEM tools that you may also consider, depending on your needs:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torch_fem-0.7.2.tar.gz (3.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torch_fem-0.7.2-py3-none-any.whl (3.0 MB view details)

Uploaded Python 3

File details

Details for the file torch_fem-0.7.2.tar.gz.

File metadata

  • Download URL: torch_fem-0.7.2.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torch_fem-0.7.2.tar.gz
Algorithm Hash digest
SHA256 df81282fca52b3b8d0c92f155adc6928c256e118f1a87244f0bb8550d6afd0de
MD5 5bdb1635995bc6c5f5a66ffe4704be75
BLAKE2b-256 750025ba1c2b98c5d4be42d2e1c5940f81bbde1cade5e2e276845f66f4411184

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_fem-0.7.2.tar.gz:

Publisher: publish-to-pypi.yml on meyer-nils/torch-fem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torch_fem-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: torch_fem-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torch_fem-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8d3eb1298c7f90827604ffac7a9f0915f773b20d754e54ef01431de46b9f1187
MD5 b6bac8c7c5d8f7035d23549ecc337f77
BLAKE2b-256 0796f44a8baa4b973390df39f0b655831a358871c03d9413bbbc2660442815b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_fem-0.7.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on meyer-nils/torch-fem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.5

2 files

0.7.4

2 files

0.7.3

2 files

This release

0.7.2 This release

2 files

0.7.1

2 files

0.7.0

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.0

2 files

0.3.8

2 files

0.3.7

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page