Peano
Loading...
Searching...
No Matches
test_rkfd4_data_structures.py
Go to the documentation of this file.
1import pytest
2
3import peano4.api
5
6import exahype2.api
7
8
9def _scheme(patch_size=5, rk_order=3, time_step_size=None):
10 solver = exahype2.api.Solver("Probe", 4, 2)
12 solver, patch_size=patch_size, rk_order=rk_order, time_step_size=time_step_size
13 )
14 solver.numerical_scheme = scheme
15 return solver, scheme
16
17
19 solver, scheme = _scheme()
20 assert scheme.overlap == 2
21 assert solver._patch.dim == (5, 5, 5)
22 assert solver._patch.no_of_unknowns == 6
23 assert solver._stage_input.dim == (5, 5, 5)
24 assert solver._stage_input.no_of_unknowns == 6
25 assert solver._patch_with_halo.dim == (9, 9, 9)
26 assert solver._patch_with_halo.no_of_unknowns == 6
27 for overlap in (
28 solver._patch_overlap_current_time_step,
29 solver._patch_overlap_update,
30 ):
31 assert overlap.dim == (4, 5, 5)
32 assert overlap.no_of_unknowns == 6
33
34
36 solver, scheme = _scheme(rk_order=3)
37 assert scheme.rk_order == 3
38 assert solver._rhs_estimates.dim == (15, 5, 5)
39 # Auxiliary variables do not evolve in time, so there is no estimate for them
40 assert solver._rhs_estimates.no_of_unknowns == 4
41
42
44 solver, _ = _scheme()
45 assert [
46 data.name
47 for data in [
48 solver._patch,
49 solver._stage_input,
50 solver._patch_with_halo,
51 solver._rhs_estimates,
52 solver._patch_overlap_current_time_step,
53 solver._patch_overlap_update,
54 solver._max_eigenvalue,
55 ]
56 ] == [
57 "ProbeQ",
58 "ProbeQStageInput",
59 "ProbeQWithHalo",
60 "ProbeQRhsEstimates",
61 "ProbeQCurrentTimeStep",
62 "ProbeQUpdate",
63 "ProbeMaxEigenvalue",
64 ]
65
66
68 solver, scheme = _scheme(time_step_size=0.01)
69 assert not scheme.has_adaptive_time_step_size
70 assert solver._max_eigenvalue is None
71
72
74 solver, scheme = _scheme()
75 project = peano4.api.Project(["probe"], "probe", ".")
76 scheme._CentralDifferencesWithRungeKutta__add_data_to_repository(project)
77
78 for patch in scheme._patches():
79 assert isinstance(
81 )
82 face_guard = solver.grid_selector.createFaceGuard()
83 assert (
84 solver._patch_overlap_current_time_step.generator.send_condition == face_guard
85 )
86 assert solver._patch_overlap_update.generator.send_condition == "false"
87 assert solver._patch_overlap_update.generator.receive_and_merge_condition == "false"
88
89
90@pytest.mark.parametrize("patch_size", [1])
92 with pytest.raises(ValueError):
93 _scheme(patch_size=patch_size)
94
95
96@pytest.mark.parametrize("rk_order", [0, 5])
98 with pytest.raises(ValueError):
99 _scheme(rk_order=rk_order)
100
101
102@pytest.mark.parametrize(
103 "arguments",
104 [
105 {"time_step_size": 0.0},
106 {"cfl_constant": 0.0},
107 ],
108)
110 solver = exahype2.api.Solver("Probe", 1, 0)
111 with pytest.raises(ValueError):
113 solver, patch_size=5, rk_order=2, **arguments
114 )
Abstract base class for all ExaHyPE 2 solvers.
Definition Solver.py:17
Fourth-order central Finite Differences with explicit Runge-Kutta time stepping, realised over a bloc...
Represents a Peano 4 project.
Definition Project.py:23
_scheme(patch_size=5, rk_order=3, time_step_size=None)