From dab22ce658f63dc525494d1e4a0b0c711970f038 Mon Sep 17 00:00:00 2001 From: Henrik Finsberg Date: Mon, 1 Apr 2024 17:04:23 +0200 Subject: [PATCH 1/4] Use correct parameter in benchmark problems --- demo/benchmark/problem2.py | 2 +- demo/benchmark/problem3.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/benchmark/problem2.py b/demo/benchmark/problem2.py index 721b71be..5487c067 100644 --- a/demo/benchmark/problem2.py +++ b/demo/benchmark/problem2.py @@ -28,7 +28,7 @@ # Create the material material_parameters = pulse.Guccione.default_parameters() -material_parameters["CC"] = 10.0 +material_parameters["C"] = 10.0 material_parameters["bf"] = 1.0 material_parameters["bfs"] = 1.0 material_parameters["bt"] = 1.0 diff --git a/demo/benchmark/problem3.py b/demo/benchmark/problem3.py index cffcc9d7..36bad381 100644 --- a/demo/benchmark/problem3.py +++ b/demo/benchmark/problem3.py @@ -22,7 +22,7 @@ # Create the material material_parameters = pulse.Guccione.default_parameters() -material_parameters["CC"] = 2.0 +material_parameters["C"] = 2.0 material_parameters["bf"] = 8.0 material_parameters["bfs"] = 4.0 material_parameters["bt"] = 2.0 From de24ed54bf50bd667821cebb63de345a825f86a0 Mon Sep 17 00:00:00 2001 From: Henrik Finsberg Date: Tue, 2 Apr 2024 22:00:22 +0200 Subject: [PATCH 2/4] Create benchmark geometry using cardiac-geometries --- demo/benchmark/problem2.py | 16 +++++++++++----- demo/benchmark/problem3.py | 22 +++++++++++++++++----- pyproject.toml | 1 + 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/demo/benchmark/problem2.py b/demo/benchmark/problem2.py index 5487c067..3c5100d2 100644 --- a/demo/benchmark/problem2.py +++ b/demo/benchmark/problem2.py @@ -17,14 +17,20 @@ from dolfin import DirichletBC, Constant, interpolate, Mesh import pulse +import cardiac_geometries as cg from fenics_plotly import plot -here = Path(__file__).absolute().parent - - -geometry = pulse.HeartGeometry.from_file(pulse.mesh_paths["benchmark"]) -# geometry = pulse.geometries.benchmark_ellipsoid_geometry() +geo_path = Path("geometry") +if not geo_path.is_dir(): + cg.create_benchmark_geometry_land15(outdir=geo_path) +geo = cg.geometry.Geometry.from_folder(geo_path) +geometry = pulse.HeartGeometry( + mesh=geo.mesh, + markers=geo.markers, + marker_functions=pulse.MarkerFunctions(vfun=geo.vfun, ffun=geo.ffun), + microstructure=pulse.Microstructure(f0=geo.f0, s0=geo.s0, n0=geo.n0), +) # Create the material material_parameters = pulse.Guccione.default_parameters() diff --git a/demo/benchmark/problem3.py b/demo/benchmark/problem3.py index 36bad381..f3c1a092 100644 --- a/demo/benchmark/problem3.py +++ b/demo/benchmark/problem3.py @@ -6,7 +6,7 @@ # benchmark problems and solutions for testing active and passive material # behaviour. Proc. R. Soc. A. 2015 Dec 8;471(2184):20150641. # - +from pathlib import Path import dolfin try: @@ -15,10 +15,21 @@ from dolfin import DirichletBC, Constant, interpolate, Mesh import pulse +import cardiac_geometries as cg from fenics_plotly import plot -geometry = pulse.HeartGeometry.from_file(pulse.mesh_paths["benchmark"]) -# geometry = pulse.geometries.benchmark_ellipsoid_geometry() + +geo_path = Path("geometry") +if not geo_path.is_dir(): + cg.create_benchmark_geometry_land15(outdir=geo_path) +geo = cg.geometry.Geometry.from_folder(geo_path) +geometry = pulse.HeartGeometry( + mesh=geo.mesh, + markers=geo.markers, + marker_functions=pulse.MarkerFunctions(vfun=geo.vfun, ffun=geo.ffun), + microstructure=pulse.Microstructure(f0=geo.f0, s0=geo.s0, n0=geo.n0), +) + # Create the material material_parameters = pulse.Guccione.default_parameters() @@ -56,6 +67,7 @@ def dirichlet_bc(W): # Create problem problem = pulse.MechanicsProblem(geometry, material, bcs) + # Solve problem pulse.iterate.iterate(problem, lvp, 15.0, initial_number_of_steps=50) pulse.iterate.iterate(problem, activation, 60.0, initial_number_of_steps=50) @@ -64,7 +76,7 @@ def dirichlet_bc(W): u, p = problem.state.split(deepcopy=True) -endo_apex_marker = geometry.markers["APEX_ENDO"][0] +endo_apex_marker = geometry.markers["ENDOPT"][0] endo_apex_idx = geometry.vfun.array().tolist().index(endo_apex_marker) endo_apex = geometry.mesh.coordinates()[endo_apex_idx, :] endo_apex_pos = endo_apex + u(endo_apex) @@ -76,7 +88,7 @@ def dirichlet_bc(W): ) -epi_apex_marker = geometry.markers["APEX_EPI"][0] +epi_apex_marker = geometry.markers["EPIPT"][0] epi_apex_idx = geometry.vfun.array().tolist().index(epi_apex_marker) epi_apex = geometry.mesh.coordinates()[epi_apex_idx, :] epi_apex_pos = epi_apex + u(epi_apex) diff --git a/pyproject.toml b/pyproject.toml index ccb098e9..045695cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ test = [ "fenics-plotly", "pytest-cov", "pytest-env", + "cardiac-geometries>=1.1.2" ] all = [ "fenics-pulse[test]", From 34596df79ecbecea1fa4ddcaa94e856c35c41067 Mon Sep 17 00:00:00 2001 From: Henrik Finsberg Date: Tue, 2 Apr 2024 22:12:00 +0200 Subject: [PATCH 3/4] Add correct name for markers in problem2 --- demo/benchmark/problem2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/benchmark/problem2.py b/demo/benchmark/problem2.py index 3c5100d2..772a4970 100644 --- a/demo/benchmark/problem2.py +++ b/demo/benchmark/problem2.py @@ -69,7 +69,7 @@ def dirichlet_bc(W): # Get displacement and hydrostatic pressure u, p = problem.state.split(deepcopy=True) -endo_apex_marker = geometry.markers["APEX_ENDO"][0] +endo_apex_marker = geometry.markers["ENDOPT"][0] endo_apex_idx = geometry.vfun.array().tolist().index(endo_apex_marker) endo_apex = geometry.mesh.coordinates()[endo_apex_idx, :] endo_apex_pos = endo_apex + u(endo_apex) @@ -81,7 +81,7 @@ def dirichlet_bc(W): ) -epi_apex_marker = geometry.markers["APEX_EPI"][0] +epi_apex_marker = geometry.markers["EPIPT"][0] epi_apex_idx = geometry.vfun.array().tolist().index(epi_apex_marker) epi_apex = geometry.mesh.coordinates()[epi_apex_idx, :] epi_apex_pos = epi_apex + u(epi_apex) From 0a71c7911e89ed4022283c18b7a828a318b21b3d Mon Sep 17 00:00:00 2001 From: Henrik Finsberg Date: Wed, 3 Apr 2024 07:33:21 +0200 Subject: [PATCH 4/4] Update workflow for running tests --- .github/workflows/main.yml | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 684b3195..408fae7b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,23 +6,16 @@ jobs: test: name: Test runs-on: ubuntu-latest - strategy: - matrix: - container: - [ - "ghcr.io/scientificcomputing/fenics-gmsh:2023-08-16", - "finsberg/pyadjoint-extra", - ] container: - image: ${{ matrix.container }} + image: "ghcr.io/scientificcomputing/fenics-gmsh:2024-02-19" steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache id: cache-primes - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cache/instant @@ -40,9 +33,10 @@ jobs: - name: Test with pytest - uses: nick-invision/retry@v2 - with: - timeout_minutes: 120 - max_attempts: 5 - retry_on: error - command: python3 -m pytest + run: python3 -m pytest + + - name: Install dolfin-adjoint + run: python3 -m pip install dolfin-adjoint + + - name: Test with pyadjoint + run: python3 -m pytest