Create meshes from segmented imaging data for finite element simulations using Gmsh.
Project description
biomesh
:rocket: Installation
biomesh can be installed via pip as
pip install biomesh
If you want to generate a mesh with Gmsh, you also need to install the gmsh python library as
pip install gmsh
:book: Usage
biomesh is composed of multiple utilities for working with complex biomechanical geometries. Below
are some common workflows
Generate a mesh from colored STL files
Colored STL-files (e.g., exported from Materialise 3-matic) can be used to generate a volume mesh.
Although STL color encoding is not standardized, some software packages embed surface IDs in unused
byte fields. biomesh leverages this to extract surface information.
:point_right: Generating a mesh from stl-files requires the gmsh Python package.
import biomesh
mesh = biomesh.mesh_colored_stl_files(
"path/to/part1.stl",
"path/to/part2.stl",
"path/to/part3.stl",
mesh_size=2.0
)
Alternatively, you can load the meshes from any format supported by meshio:
import meshio
meshio.read("path/to/mesh.vtu")
Convert linear to quadratic elements
Convert linear elements in your mesh to quadratic ones:
mesh = biomesh.lin_to_quad(mesh)
Reorder mesh nodes
Finite element solvers often benefit from reducing bandwidth in the system matrix. biomesh provides
a node reordering algorithm based on Cuthill-McKee's algorithm to improve efficiency:
mesh = biomesh.reorder(mesh)
Merge multiple meshes
Combine several meshes into a single mesh object:
mesh_all = biomesh.merge(mesh1, mesh2, mesh3)
:warning: Overlapping points are not automatically merged.
Filter a mesh
Extract a subset of a mesh using flexible filters. For example, filtering by cell type:
# keep only hexahedral cells
filter_hex = lambda block : block.type == 'hexahedron'
mesh_filtered = biomesh.filter.by_cellblock(mesh, filter_hex)
# Get point mapping from old -> new IDs
point_mapping = biomesh.filter.points_map_by_cellblock(mesh, filter_hex)
Solve simple Laplace problem
biomesh can also solve basic Laplace problems, commonly used to estimate fiber directions with
rule based methods.
dbc_nodes = np.array([0, 1, 2, 4])
dbc_values = np.array([0.0, 0.0, 1.0, 1.0])
phi = biomesh.solve(mesh, dbc_nodes, dbc_values)
# or equivalently
phi = biomesh.solve_onezero(mesh, np.array([2, 4]), np.array([0, 1]))
The result phi is the solution vector of the Laplace problem.
Finite Element Utilities
biomesh.fe provides helper functions for finite element analysis. For example, compute the nodal
averaged gradient of a scalar field:
grad_phi = biomesh.fe.grad(mesh, phi)
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file biomesh-0.5.1.tar.gz.
File metadata
- Download URL: biomesh-0.5.1.tar.gz
- Upload date:
- Size: 99.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
786ee32b57e67fdfa6f11462d41d6fd57576c5552aeedbca56fa9b8f437839b7
|
|
| MD5 |
3801992b79ae9cdf16b78a9b1fe4fc6b
|
|
| BLAKE2b-256 |
65dd591631408f164f8554d163d66a3875997574f4b2f0fb745697d07d6a24ea
|
File details
Details for the file biomesh-0.5.1-py3-none-any.whl.
File metadata
- Download URL: biomesh-0.5.1-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f42cd953dd5bd0e17a8c997cc8b6f50efd36f75245dcc759995a33bcb4154f0d
|
|
| MD5 |
94c7a82e86a7064d79c2e9d1715a06f2
|
|
| BLAKE2b-256 |
35ecb04a1e3e8e2ca0487b48688c4115899052e31ab9ce76457a570e45dda85b
|