Skip to content

Commit ee73431

Browse files
Merge pull request festim-dev#1008 from RemDelaporteMathurin/dokken/test-updates
test fixes
2 parents be8533a + 73d77f8 commit ee73431

File tree

5 files changed

+87
-44
lines changed

5 files changed

+87
-44
lines changed

test/system_tests/test_io.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ def test_VTXExport_times_added_to_milestones(tmpdir):
136136
]
137137
my_model.temperature = 100
138138
my_model.settings = F.Settings(
139-
atol=1e0,
140-
rtol=1e0,
139+
atol=0.999,
140+
rtol=0.999,
141141
final_time=4,
142142
transient=True,
143143
stepsize=F.Stepsize(initial_value=3),

test/test_coupled_heat_hydrogen_problem.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ def test_initial_dt_values_are_the_same():
7979
test_heat_problem = F.HeatTransferProblem(
8080
mesh=test_mesh,
8181
subdomains=test_subdomains,
82-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=0.5, final_time=5),
82+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=0.5, final_time=5),
8383
)
8484

8585
test_hydrogen_problem = F.HydrogenTransportProblem(
8686
mesh=test_mesh,
8787
subdomains=test_subdomains,
8888
species=[test_H],
89-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=1.5, final_time=5),
89+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=1.5, final_time=5),
9090
)
9191

9292
test_coupled_problem = F.CoupledTransientHeatTransferHydrogenTransport(
@@ -112,7 +112,7 @@ def test_dts_always_the_same():
112112
test_heat_problem = F.HeatTransferProblem(
113113
mesh=test_mesh,
114114
subdomains=test_subdomains,
115-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=dt, final_time=1),
115+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=dt, final_time=1),
116116
initial_condition=F.InitialTemperature(500),
117117
)
118118

@@ -121,7 +121,7 @@ def test_dts_always_the_same():
121121
subdomains=test_subdomains,
122122
species=[test_H],
123123
initial_conditions=[F.InitialCondition(value=10, species=test_H)],
124-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=0.1, final_time=1),
124+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=0.1, final_time=1),
125125
)
126126

127127
test_coupled_problem = F.CoupledTransientHeatTransferHydrogenTransport(
@@ -145,14 +145,14 @@ def test_error_raised_when_final_times_not_the_same():
145145
test_heat_problem = F.HeatTransferProblem(
146146
mesh=test_mesh,
147147
subdomains=test_subdomains,
148-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=1, final_time=10),
148+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=1, final_time=10),
149149
)
150150

151151
test_hydrogen_problem = F.HydrogenTransportProblem(
152152
mesh=test_mesh,
153153
subdomains=test_subdomains,
154154
species=[test_H],
155-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=1, final_time=5),
155+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=1, final_time=5),
156156
)
157157

158158
test_coupled_problem = F.CoupledTransientHeatTransferHydrogenTransport(
@@ -173,11 +173,11 @@ def test_error_raised_when_both_problems_not_transient():
173173
set to transient"""
174174

175175
test_heat_problem = F.HeatTransferProblem(
176-
settings=F.Settings(atol=1, rtol=1, transient=False),
176+
settings=F.Settings(atol=1, rtol=0.9999, transient=False),
177177
)
178178

179179
test_hydrogen_problem = F.HydrogenTransportProblem(
180-
settings=F.Settings(atol=1, rtol=1, transient=True, stepsize=1, final_time=4),
180+
settings=F.Settings(atol=1, rtol=0.9999, transient=True, stepsize=1, final_time=4),
181181
)
182182

183183
with pytest.raises(

test/test_h_transport_problem.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import tqdm.autonotebook
77
import ufl
88
from dolfinx import default_scalar_type, fem, nls
9-
9+
from packaging.version import Version
1010
import festim as F
1111

1212
test_mesh = F.Mesh1D(vertices=np.array([0.0, 1.0, 2.0, 3.0, 4.0]))
@@ -161,8 +161,13 @@ def test_iterate():
161161
my_model.u - my_model.u_n
162162
) / my_model.dt * v * ufl.dx - source_value * v * ufl.dx
163163

164-
problem = fem.petsc.NonlinearProblem(form, my_model.u, bcs=[])
165-
my_model.solver = nls.petsc.NewtonSolver(MPI.COMM_WORLD, problem)
164+
165+
if Version(dolfinx.__version__) == Version("0.9.0"):
166+
problem = fem.petsc.NonlinearProblem(form, my_model.u, bcs=[])
167+
my_model.solver = nls.petsc.NewtonSolver(MPI.COMM_WORLD, problem)
168+
elif Version(dolfinx.__version__) > Version("0.9.0"):
169+
problem = fem.petsc.NonlinearProblem(form, my_model.u, bcs=[])
170+
my_model.solver = problem
166171

167172
my_model.t = fem.Constant(mesh, 0.0)
168173

@@ -818,7 +823,7 @@ def test_create_initial_conditions_ValueError_raised_when_not_transient():
818823
subdomains=[my_vol],
819824
species=[H],
820825
initial_conditions=[F.InitialCondition(value=1.0, species=H)],
821-
settings=F.Settings(atol=1, rtol=1, transient=False),
826+
settings=F.Settings(atol=1, rtol=0.9999, transient=False),
822827
)
823828

824829
with pytest.raises(
@@ -851,7 +856,7 @@ def test_create_initial_conditions_expr_fenics(input_value, expected_value):
851856
subdomains=[vol_subdomain],
852857
species=[H],
853858
initial_conditions=[F.InitialCondition(value=input_value, species=H)],
854-
settings=F.Settings(atol=1, rtol=1, final_time=2, stepsize=1),
859+
settings=F.Settings(atol=1, rtol=0.9999, final_time=2, stepsize=1),
855860
)
856861

857862
# RUN
@@ -881,7 +886,7 @@ def test_create_species_from_trap():
881886
n=1,
882887
volume=my_vol,
883888
)
884-
my_settings = F.Settings(atol=1, rtol=1, transient=False)
889+
my_settings = F.Settings(atol=1, rtol=0.9999, transient=False)
885890
my_model = F.HydrogenTransportProblem(
886891
mesh=test_mesh,
887892
subdomains=[my_vol],
@@ -932,7 +937,7 @@ def test_create_initial_conditions_value_fenics_multispecies(
932937
F.InitialCondition(value=input_value_2, species=D),
933938
F.InitialCondition(value=input_value_1, species=H),
934939
],
935-
settings=F.Settings(atol=1, rtol=1, final_time=2, stepsize=1),
940+
settings=F.Settings(atol=1, rtol=0.9999, final_time=2, stepsize=1),
936941
)
937942

938943
# RUN

test/test_multispecies_problem.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import numpy as np
44
from dolfinx.fem import Constant
55
from ufl import exp
6-
6+
from packaging.version import Version
77
import festim as F
8-
8+
import dolfinx
99

1010
def relative_error_computed_to_analytical(
1111
D, permeability, computed_flux, L, times, P_up
@@ -113,15 +113,26 @@ def test_multispecies_permeation_problem():
113113
]
114114
my_model.initialise()
115115

116-
my_model.solver.convergence_criterion = "incremental"
117-
ksp = my_model.solver.krylov_solver
118-
opts = PETSc.Options()
119-
option_prefix = ksp.getOptionsPrefix()
120-
opts[f"{option_prefix}ksp_type"] = "cg"
121-
opts[f"{option_prefix}pc_type"] = "gamg"
122-
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
123-
ksp.setFromOptions()
124-
116+
if Version(dolfinx.__version__) == Version("0.9.0"):
117+
my_model.solver.convergence_criterion = "incremental"
118+
ksp = my_model.solver.krylov_solver
119+
opts = PETSc.Options()
120+
option_prefix = ksp.getOptionsPrefix()
121+
opts[f"{option_prefix}ksp_type"] = "cg"
122+
opts[f"{option_prefix}pc_type"] = "gamg"
123+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
124+
ksp.setFromOptions()
125+
elif Version(dolfinx.__version__) > Version("0.9.0"):
126+
snes = my_model.solver.solver
127+
opts = PETSc.Options()
128+
option_prefix = snes.getOptionsPrefix()
129+
opts[f"{option_prefix}snes_atol"] = 0
130+
opts[f"{option_prefix}snes_rtol"] = 0
131+
opts[f"{option_prefix}snes_stol"] = 1e-8
132+
opts[f"{option_prefix}ksp_type"] = "cg"
133+
opts[f"{option_prefix}pc_type"] = "gamg"
134+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
135+
snes.setFromOptions()
125136
my_model.run()
126137

127138
times = outgassing_flux_spe_1.t

test/test_permeation_problem.py

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
import numpy as np
66
from dolfinx.fem import Constant
7+
from packaging.version import Version
8+
import dolfinx
79
from ufl import exp
810

911
import festim as F
@@ -92,13 +94,26 @@ def test_permeation_problem(mesh_size=1001):
9294
my_model.initialise()
9395

9496
my_model.solver.convergence_criterion = "incremental"
95-
ksp = my_model.solver.krylov_solver
96-
opts = PETSc.Options()
97-
option_prefix = ksp.getOptionsPrefix()
98-
opts[f"{option_prefix}ksp_type"] = "cg"
99-
opts[f"{option_prefix}pc_type"] = "gamg"
100-
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
101-
ksp.setFromOptions()
97+
if Version(dolfinx.__version__) == Version("0.9.0"):
98+
ksp = my_model.solver.krylov_solver
99+
opts = PETSc.Options()
100+
option_prefix = ksp.getOptionsPrefix()
101+
opts[f"{option_prefix}ksp_type"] = "cg"
102+
opts[f"{option_prefix}pc_type"] = "gamg"
103+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
104+
ksp.setFromOptions()
105+
elif Version(dolfinx.__version__) > Version("0.9.0"):
106+
snes = my_model.solver.solver
107+
opts = PETSc.Options()
108+
option_prefix = snes.getOptionsPrefix()
109+
opts[f"{option_prefix}snes_atol"] = 0
110+
opts[f"{option_prefix}snes_rtol"] = 0
111+
opts[f"{option_prefix}snes_stol"] = 1e-8
112+
opts[f"{option_prefix}ksp_type"] = "cg"
113+
opts[f"{option_prefix}pc_type"] = "gamg"
114+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
115+
snes.setFromOptions()
116+
102117

103118
my_model.run()
104119

@@ -193,15 +208,27 @@ def test_permeation_problem_multi_volume(tmp_path):
193208

194209
my_model.initialise()
195210

196-
my_model.solver.convergence_criterion = "incremental"
197-
ksp = my_model.solver.krylov_solver
198-
opts = PETSc.Options()
199-
option_prefix = ksp.getOptionsPrefix()
200-
opts[f"{option_prefix}ksp_type"] = "cg"
201-
opts[f"{option_prefix}pc_type"] = "gamg"
202-
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
203-
ksp.setFromOptions()
204-
211+
if Version(dolfinx.__version__) == Version("0.9.0"):
212+
ksp = my_model.solver.krylov_solver
213+
opts = PETSc.Options()
214+
option_prefix = ksp.getOptionsPrefix()
215+
opts[f"{option_prefix}ksp_type"] = "cg"
216+
opts[f"{option_prefix}pc_type"] = "gamg"
217+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
218+
ksp.setFromOptions()
219+
elif Version(dolfinx.__version__) > Version("0.9.0"):
220+
snes = my_model.solver.solver
221+
opts = PETSc.Options()
222+
option_prefix = snes.getOptionsPrefix()
223+
opts[f"{option_prefix}snes_atol"] = 0
224+
opts[f"{option_prefix}snes_rtol"] = 0
225+
opts[f"{option_prefix}snes_stol"] = 1e-8
226+
opts[f"{option_prefix}ksp_type"] = "cg"
227+
opts[f"{option_prefix}pc_type"] = "gamg"
228+
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
229+
snes.setFromOptions()
230+
231+
205232
my_model.run()
206233

207234
times = outgassing_flux.t

0 commit comments

Comments
 (0)