Skip to content

Commit 0efc1ac

Browse files
added a new system test in/out + collapse post-processing solution + new sub_function attribute
1 parent a8e8c1c commit 0efc1ac

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

src/festim/exports/vtx.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def get_functions(self) -> list[_Function]:
109109
legacy_output = True
110110
break
111111
if legacy_output:
112-
return [field.post_processing_solution for field in self._field]
112+
return [field.sub_function for field in self._field]
113113
else:
114114
if self._subdomain is None:
115115
raise ValueError("Subdomain must be specified")

src/festim/hydrogen_transport_problem.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ def assign_functions_to_species(self):
523523
sub_test_functions = [ufl.TestFunction(self.function_space)]
524524
self.species[0].sub_function_space = self.function_space
525525
self.species[0].post_processing_solution = self.u
526+
self.species[0].sub_function = self.u
526527
else:
527528
sub_solutions = list(ufl.split(self.u))
528529
sub_prev_solution = list(ufl.split(self.u_n))

src/festim/species.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ def __init__(self, name: str = None, mobile=True, subdomains=None) -> None:
7575
self.sub_function_space = None
7676
self.post_processing_solution = None
7777
self.collapsed_function_space = None
78+
self.sub_function = None
7879

7980
self.subdomains = subdomains
8081
self.subdomain_to_solution = {}

test/system_tests/test_io.py

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import mpi4py.MPI as MPI
55

66

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

1414
my_mat = F.Material(name="mat", D_0=1, E_D=0)
1515
vol = F.VolumeSubdomain(id=0, material=my_mat)
16-
surf = F.SurfaceSubdomain(id=0)
16+
surf = F.SurfaceSubdomain(id=1)
1717
my_model.subdomains = [vol, surf]
1818

1919
H = F.Species("H")
@@ -32,44 +32,63 @@ def test():
3232
]
3333

3434
my_model.settings = F.Settings(
35-
atol=1e-12, rtol=1e-12, transient=True, final_time=100
35+
atol=1e-12, rtol=1e-12, transient=True, final_time=10
3636
)
3737
my_model.settings.stepsize = F.Stepsize(1)
3838

3939
my_model.exports = [
4040
F.VTXSpeciesExport(
41-
filename="H.bp",
42-
field=[H],
41+
filename="out_checkpoint.bp",
42+
field=[H, D],
4343
checkpoint=True,
4444
),
45+
F.VTXSpeciesExport(
46+
filename="model_1_out_h.bp",
47+
field=[H],
48+
),
4549
]
4650

4751
my_model.initialise()
4852
my_model.run()
4953

5054
my_model2 = F.HydrogenTransportProblem()
5155
my_model2.mesh = F.Mesh(mesh)
52-
my_model.subdomains = [vol, surf]
56+
my_model2.subdomains = [vol, surf]
5357

5458
H = F.Species("H")
5559
D = F.Species("D")
56-
my_model.species = [H, D]
60+
my_model2.species = [H, D]
5761

58-
my_model.temperature = 500
62+
my_model2.temperature = 500
5963

60-
my_model.initial_conditions = [
64+
my_model2.initial_conditions = [
65+
F.InitialConcentrationFromFile(
66+
filename="out_checkpoint.bp", species=H, name="H", timestamp=10
67+
),
6168
F.InitialConcentrationFromFile(
62-
filename="H.bp", species=H, name="H", timestamp=100
69+
filename="out_checkpoint.bp", species=D, name="D", timestamp=10
6370
),
64-
# F.InitialConcentrationFromFile(
65-
# filename="H.bp", species=D, name="D", timestamp=100
66-
# ),
6771
]
6872

69-
my_model.settings = F.Settings(
70-
atol=1e-12, rtol=1e-12, transient=True, final_time=100
73+
my_model2.settings = F.Settings(
74+
atol=1e-10, rtol=1e-10, transient=True, final_time=10
7175
)
72-
my_model.settings.stepsize = F.Stepsize(1)
76+
my_model2.settings.stepsize = F.Stepsize(0.1)
7377

74-
my_model.initialise()
75-
my_model.run()
78+
my_model2.exports = [
79+
F.VTXSpeciesExport(
80+
filename="model_2_out_h.bp",
81+
field=[H],
82+
),
83+
]
84+
85+
my_model2.initialise()
86+
my_model2.run()
87+
88+
import numpy as np
89+
90+
np.testing.assert_allclose(
91+
H.post_processing_solution.x.array,
92+
1.5,
93+
atol=1e-10,
94+
)

test/test_vtx.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_vtx_export_one_function(tmpdir):
1414
"""Test can add one function to a vtx export"""
1515
u = dolfinx.fem.Function(V)
1616
sp = F.Species("H")
17-
sp.post_processing_solution = u
17+
sp.sub_function = u
1818
filename = str(tmpdir.join("my_export.bp"))
1919
my_export = F.VTXSpeciesExport(filename, field=sp)
2020

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

3131
sp1 = F.Species("1")
3232
sp2 = F.Species("2")
33-
sp1.post_processing_solution = u
34-
sp2.post_processing_solution = v
33+
sp1.sub_function = u
34+
sp2.sub_function = v
3535
filename = str(tmpdir.join("my_export.bp"))
3636
my_export = F.VTXSpeciesExport(filename, field=[sp1, sp2])
3737

0 commit comments

Comments
 (0)