Skip to content

Commit

Permalink
added a new system test in/out + collapse post-processing solution + …
Browse files Browse the repository at this point in the history
…new sub_function attribute
  • Loading branch information
RemDelaporteMathurin committed Feb 27, 2025
1 parent a8e8c1c commit 0efc1ac
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/festim/exports/vtx.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def get_functions(self) -> list[_Function]:
legacy_output = True
break
if legacy_output:
return [field.post_processing_solution for field in self._field]
return [field.sub_function for field in self._field]
else:
if self._subdomain is None:
raise ValueError("Subdomain must be specified")
Expand Down
1 change: 1 addition & 0 deletions src/festim/hydrogen_transport_problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,7 @@ def assign_functions_to_species(self):
sub_test_functions = [ufl.TestFunction(self.function_space)]
self.species[0].sub_function_space = self.function_space
self.species[0].post_processing_solution = self.u
self.species[0].sub_function = self.u
else:
sub_solutions = list(ufl.split(self.u))
sub_prev_solution = list(ufl.split(self.u_n))
Expand Down
1 change: 1 addition & 0 deletions src/festim/species.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ def __init__(self, name: str = None, mobile=True, subdomains=None) -> None:
self.sub_function_space = None
self.post_processing_solution = None
self.collapsed_function_space = None
self.sub_function = None

self.subdomains = subdomains
self.subdomain_to_solution = {}
Expand Down
55 changes: 37 additions & 18 deletions test/system_tests/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import mpi4py.MPI as MPI


def test():
def test_out_in():
mesh = dolfinx.mesh.create_unit_square(
MPI.COMM_WORLD, nx=10, ny=10, cell_type=dolfinx.cpp.mesh.CellType.quadrilateral
)
Expand All @@ -13,7 +13,7 @@ def test():

my_mat = F.Material(name="mat", D_0=1, E_D=0)
vol = F.VolumeSubdomain(id=0, material=my_mat)
surf = F.SurfaceSubdomain(id=0)
surf = F.SurfaceSubdomain(id=1)
my_model.subdomains = [vol, surf]

H = F.Species("H")
Expand All @@ -32,44 +32,63 @@ def test():
]

my_model.settings = F.Settings(
atol=1e-12, rtol=1e-12, transient=True, final_time=100
atol=1e-12, rtol=1e-12, transient=True, final_time=10
)
my_model.settings.stepsize = F.Stepsize(1)

my_model.exports = [
F.VTXSpeciesExport(
filename="H.bp",
field=[H],
filename="out_checkpoint.bp",
field=[H, D],
checkpoint=True,
),
F.VTXSpeciesExport(
filename="model_1_out_h.bp",
field=[H],
),
]

my_model.initialise()
my_model.run()

my_model2 = F.HydrogenTransportProblem()
my_model2.mesh = F.Mesh(mesh)
my_model.subdomains = [vol, surf]
my_model2.subdomains = [vol, surf]

H = F.Species("H")
D = F.Species("D")
my_model.species = [H, D]
my_model2.species = [H, D]

my_model.temperature = 500
my_model2.temperature = 500

my_model.initial_conditions = [
my_model2.initial_conditions = [
F.InitialConcentrationFromFile(
filename="out_checkpoint.bp", species=H, name="H", timestamp=10
),
F.InitialConcentrationFromFile(
filename="H.bp", species=H, name="H", timestamp=100
filename="out_checkpoint.bp", species=D, name="D", timestamp=10
),
# F.InitialConcentrationFromFile(
# filename="H.bp", species=D, name="D", timestamp=100
# ),
]

my_model.settings = F.Settings(
atol=1e-12, rtol=1e-12, transient=True, final_time=100
my_model2.settings = F.Settings(
atol=1e-10, rtol=1e-10, transient=True, final_time=10
)
my_model.settings.stepsize = F.Stepsize(1)
my_model2.settings.stepsize = F.Stepsize(0.1)

my_model.initialise()
my_model.run()
my_model2.exports = [
F.VTXSpeciesExport(
filename="model_2_out_h.bp",
field=[H],
),
]

my_model2.initialise()
my_model2.run()

import numpy as np

np.testing.assert_allclose(
H.post_processing_solution.x.array,
1.5,
atol=1e-10,
)
6 changes: 3 additions & 3 deletions test/test_vtx.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_vtx_export_one_function(tmpdir):
"""Test can add one function to a vtx export"""
u = dolfinx.fem.Function(V)
sp = F.Species("H")
sp.post_processing_solution = u
sp.sub_function = u
filename = str(tmpdir.join("my_export.bp"))
my_export = F.VTXSpeciesExport(filename, field=sp)

Expand All @@ -30,8 +30,8 @@ def test_vtx_export_two_functions(tmpdir):

sp1 = F.Species("1")
sp2 = F.Species("2")
sp1.post_processing_solution = u
sp2.post_processing_solution = v
sp1.sub_function = u
sp2.sub_function = v
filename = str(tmpdir.join("my_export.bp"))
my_export = F.VTXSpeciesExport(filename, field=[sp1, sp2])

Expand Down

0 comments on commit 0efc1ac

Please sign in to comment.