Simple finite element assemblers with torch.
Project description
torch-fem: differentiable linear elastic finite elements
Simple finite element assemblers for linear elasticity with PyTorch. The advantage of using PyTorch is the ability to efficiently compute sensitivities and use them in structural optimization.
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.
Simple cantilever beam: There are examples with linear and quadratic triangles and quads.
Optimization examples
The subdirectory examples->optimization
demonstrates the use of torch-fem for optimization of structures (e.g. topology optimization, composite orientation optimization).
Simple topology optimization of a MBB beam: You can switch between analytical sensitivities and autograd sensitivities.
Simple topology optimization of a 3D beam: The model is exported to Paraview for visualization.
Simple shape optimization of a fillet: The shape is morphed with shape basis vectors and MMA + autograd is used to minimize the maximum stress.
Simple 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.
Installation
Your may install torch-fem via pip with
pip install torch-fem
Minimal code
This is a minimal example of how to use torch-fem to solve a simple cantilever problem.
from torchfem import Planar
from torchfem.materials import IsotropicPlaneStress
# Define a (minimal) mesh
nodes = torch.tensor([[0.0, 0.0], [1.0, 0.0], [2.0, 0.0], [0.0, 1.0], [1.0, 1.0], [2.0, 1.0]])
elements = torch.tensor([[0, 1, 4, 3], [1, 2, 5, 4]])
# Apply a load at the tip
tip = (nodes[:, 0] == 2.0) & (nodes[:, 1] == 1.0)
forces = torch.zeros_like(nodes)
forces[tip, 1] = -1.0
# Constrained displacement at left end
left = nodes[:, 0] == 0.0
displacements = torch.zeros_like(nodes)
constraints = torch.zeros_like(nodes, dtype=bool)
constraints[left, :] = True
# Thickness
thickness = torch.ones(len(elements))
# Material model (plane stress)
material = IsotropicPlaneStress(E=1000.0, nu=0.3)
# Create model
cantilever = Planar(nodes, elements, forces, displacements, constraints, thickness, material.C())
This creates a minimal planar FEM model:
# Solve
u, f = cantilever.solve()
# Plot
cantilever.plot(u, node_property=torch.norm(u, dim=1), node_markers=True)
This solves the model and plots the result:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file torch_fem-0.1.13.tar.gz
.
File metadata
- Download URL: torch_fem-0.1.13.tar.gz
- Upload date:
- Size: 48.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d511bfd20196fd2e945a71d91c6fdcb4e15ec4839b3c8d3f90a5749dc77d32b9 |
|
MD5 | e28fddc993a495169fecc6a376dd7d22 |
|
BLAKE2b-256 | ab66f9d9a2bbdcfb276058fe0e81c732150a02b25b0432d33055754284b267cb |
File details
Details for the file torch_fem-0.1.13-py3-none-any.whl
.
File metadata
- Download URL: torch_fem-0.1.13-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 795e2727c395efca2008b37c893c8c68ae6daaf91a77c062c9a5b9b35525135f |
|
MD5 | ca576e60add49fa443e7090b81f5aff2 |
|
BLAKE2b-256 | 80ba1b230923be61853e9b7827f9e0f214e76103123cbeb934aa6830e1d7da52 |