From 16c0ddbe29431eb11e43ce177af8e9212d3b5a8d Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Tue, 28 Apr 2026 13:53:48 -0400 Subject: [PATCH 1/3] added test that catches the bug --- test/system_tests/test_misc.py | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/system_tests/test_misc.py b/test/system_tests/test_misc.py index 5b9152017..709cd515f 100644 --- a/test/system_tests/test_misc.py +++ b/test/system_tests/test_misc.py @@ -1,3 +1,5 @@ +from mpi4py import MPI + import dolfinx import numpy as np import pytest @@ -353,3 +355,38 @@ def test_timesteps(): expected_timesteps = np.linspace(0, 10, num=10, endpoint=False) assert np.allclose(my_model.timesteps, expected_timesteps) + + +def test_sub_temperature_as_function_mixed_domain_not_updated(): + + my_model = F.HydrogenTransportProblemDiscontinuous() + + n = 8 + mesh = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, n, n) + my_model.mesh = F.Mesh(mesh) + + surface_1 = F.SurfaceSubdomain(id=1) + + material_1 = F.Material(D_0=1, E_D=0, name="material_1") + volume_1 = F.VolumeSubdomain(id=2, material=material_1) + + my_model.subdomains = [surface_1, volume_1] + + H = F.Species(name="H", subdomains=my_model.volume_subdomains) + my_model.species = [H] + + my_model.boundary_conditions = [ + F.FixedConcentrationBC(species=H, subdomain=surface_1, value=lambda T: 2 * T) + ] + + my_model.temperature = lambda t, x: 1 + x[0] + x[1] + t + + my_model.settings = F.Settings(final_time=1, atol=1e-9, rtol=1e-9, stepsize=0.1) + + avg_surf = F.AverageSurface(field=H, surface=surface_1) + my_model.exports = [avg_surf] + + my_model.initialise() + my_model.run() + + assert not np.allclose(avg_surf.data, 4.0) From 3e49987c1b26784e7ea99b8a9e26ddb968e75960 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Tue, 28 Apr 2026 13:53:56 -0400 Subject: [PATCH 2/3] comment/noet --- src/festim/hydrogen_transport_problem.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/festim/hydrogen_transport_problem.py b/src/festim/hydrogen_transport_problem.py index 2491da42c..7c0f47d67 100644 --- a/src/festim/hydrogen_transport_problem.py +++ b/src/festim/hydrogen_transport_problem.py @@ -1241,6 +1241,12 @@ def initialise(self): def define_temperature(self): super().define_temperature() + # NOTE this won't be needed anymore when https://github.com/FEniCS/dolfinx/pull/4140 + # is released + + # because dolfinx.fem.Expressions cannot work with submeshes + # (ie. mixing parent and submesh), + # we need to create "sub" temperature functions for each subdomain # pass temperature function to each subdomain if isinstance(self.temperature_fenics, fem.Function): for subdomain in self.volume_subdomains: From 747c64f5c45ce9cc9b51ade666c59e00db487e1d Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Tue, 28 Apr 2026 13:57:55 -0400 Subject: [PATCH 3/3] fix --- src/festim/hydrogen_transport_problem.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/festim/hydrogen_transport_problem.py b/src/festim/hydrogen_transport_problem.py index 7c0f47d67..9b8c51053 100644 --- a/src/festim/hydrogen_transport_problem.py +++ b/src/festim/hydrogen_transport_problem.py @@ -1875,6 +1875,19 @@ def post_processing(self): export.data.append(c) export.t.append(float(self.t)) + def update_time_dependent_values(self): + super().update_time_dependent_values() + + # update sub_T if temperature is given as a function + if self.temperature_time_dependent: + if isinstance(self.temperature_fenics, fem.Function): + for subdomain in self.volume_subdomains: + temp = self.temperature_fenics + sub_T = subdomain.sub_T + from festim.helpers import nmm_interpolate + + nmm_interpolate(f_out=sub_T, f_in=temp) + def iterate(self): """Iterates the model for a given time step""" if self.show_progress_bar: