Next generation cardiac mechanics solver based on FEniCSx
Project description
fenicsx-pulse
fenicsx-pulse is a cardiac mechanics solver based on FEniCSx. It is a successor of pulse which is a cardiac mechanics solver based on FEniCS.
Notice
This repo is a complete rewrite of pulse to work with FEniCSx. The package is not yet ready for release.
If you are using FEniCS please check out pulse instead
- Documentation: https://finsberg.github.io/fenicsx-pulse/
- Source code: https://github.com/finsberg/fenicsx-pulse
Install
To install fenicsx_pulse you need to first install FEniCSx. Next you can install fenicsx_pulse via pip
python3 -m pip install fenicsx-pulse
We also provide a pre-built docker image with FEniCSx and fenicsx_pulse installed. You pull this image using the command
docker pull ghcr.io/finsberg/fenicsx-pulse:v0.1.4
Simple Example
import dolfinx
import numpy as np
import fenicsx_pulse
from mpi4py import MPI
from petsc4py import PETSc
# Create unit cube mesh
mesh = dolfinx.mesh.create_unit_cube(MPI.COMM_WORLD, 3, 3, 3)
# Specific list of boundary markers
boundaries = [
fenicsx_pulse.Marker(marker=1, dim=2, locator=lambda x: np.isclose(x[0], 0)),
fenicsx_pulse.Marker(marker=2, dim=2, locator=lambda x: np.isclose(x[0], 1)),
]
# Create geometry
geo = fenicsx_pulse.Geometry(
mesh=mesh,
boundaries=boundaries,
metadata={"quadrature_degree": 4},
)
# Create passive material model
material_params = fenicsx_pulse.HolzapfelOgden.transversely_isotropic_parameters()
f0 = dolfinx.fem.Constant(mesh, PETSc.ScalarType((1.0, 0.0, 0.0)))
s0 = dolfinx.fem.Constant(mesh, PETSc.ScalarType((0.0, 1.0, 0.0)))
material = fenicsx_pulse.HolzapfelOgden(f0=f0, s0=s0, **material_params)
# Create model for active contraction
Ta = dolfinx.fem.Constant(mesh, PETSc.ScalarType(0.0))
active_model = fenicsx_pulse.ActiveStress(f0, activation=Ta)
# Create model for compressibility
comp_model = fenicsx_pulse.Incompressible()
# Create Cardiac Model
model = fenicsx_pulse.CardiacModel(
material=material,
active=active_model,
compressibility=comp_model,
)
# Specific dirichlet boundary conditions on the boundary
def dirichlet_bc(
state_space: dolfinx.fem.FunctionSpace,
) -> list[dolfinx.fem.bcs.DirichletBCMetaClass]:
V, _ = state_space.sub(0).collapse()
facets = geo.facet_tags.find(1) # Specify the marker used on the boundary
dofs = dolfinx.fem.locate_dofs_topological((state_space.sub(0), V), 2, facets)
u_fixed = dolfinx.fem.Function(V)
u_fixed.x.set(0.0)
return [dolfinx.fem.dirichletbc(u_fixed, dofs, state_space.sub(0))]
# Use a traction on the opposite boundary
traction = dolfinx.fem.Constant(mesh, PETSc.ScalarType(-1.0))
neumann = fenicsx_pulse.NeumannBC(traction=traction, marker=2)
# Collect all boundary conditions
bcs = fenicsx_pulse.BoundaryConditions(dirichlet=(dirichlet_bc,), neumann=(neumann,))
# Create mechanics problem
problem = fenicsx_pulse.MechanicsProblem(model=model, geometry=geo, bcs=bcs)
# Set a value for the active stress
Ta.value = 2.0
# Solve the problem
problem.solve()
# Get the solution
u, p = problem.state.split()
# And save to XDMF
xdmf = dolfinx.io.XDMFFile(mesh.comm, "results.xdmf", "w")
xdmf.write_mesh(mesh)
xdmf.write_function(u, 0.0)
xdmf.write_function(p, 0.0)
Contributing
See https://finsberg.github.io/fenicsx-pulse/CONTRIBUTING.html
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 fenicsx-pulse-0.1.4.tar.gz.
File metadata
- Download URL: fenicsx-pulse-0.1.4.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8dd3194692e1fefc71234c0e5b4ad7f91c737319e8dd138399f24af70a4d5e2e
|
|
| MD5 |
54db76d00ae98395ab6f091caa4809ab
|
|
| BLAKE2b-256 |
7817be2632a530a04dafaffdcd966d21fa4b8d3baa28790f6eb285c3315ee6c0
|
File details
Details for the file fenicsx_pulse-0.1.4-py3-none-any.whl.
File metadata
- Download URL: fenicsx_pulse-0.1.4-py3-none-any.whl
- Upload date:
- Size: 19.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70dc9a6026d63a4d0b62f559a5e41ab33bcea5fa364c3bce4e9f33e1e90367e5
|
|
| MD5 |
05f8c302073c75182e2c36164fc89168
|
|
| BLAKE2b-256 |
3cd64436a118997d190efbabd4ece1ec04d426a1281fab45bf9bc57bc6d4ff9d
|