Coverage for pySDC/projects/PinTSimE/discontinuous_test_ODE.py: 100%
26 statements
« prev ^ index » next coverage.py v7.6.9, created at 2024-12-20 14:51 +0000
« prev ^ index » next coverage.py v7.6.9, created at 2024-12-20 14:51 +0000
1import numpy as np
2from pathlib import Path
4from pySDC.helpers.stats_helper import get_sorted
5from pySDC.implementations.problem_classes.DiscontinuousTestODE import DiscontinuousTestODE
6from pySDC.implementations.sweeper_classes.generic_implicit import generic_implicit
7from pySDC.projects.PinTSimE.battery_model import runSimulation
9import pySDC.helpers.plot_helper as plt_helper
11from pySDC.core.hooks import Hooks
12from pySDC.implementations.hooks.log_errors import LogGlobalErrorPostStep
13from pySDC.implementations.hooks.log_solution import LogSolution
16class LogEventDiscontinuousTestODE(Hooks):
17 """
18 Logs the problem dependent state function of the discontinuous test ODE.
19 """
21 def post_step(self, step, level_number):
22 super().post_step(step, level_number)
24 L = step.levels[level_number]
26 L.sweep.compute_end_point()
28 self.add_to_stats(
29 process=step.status.slot,
30 time=L.time + L.dt,
31 level=L.level_index,
32 iter=0,
33 sweep=L.status.sweep,
34 type='state_function',
35 value=L.uend[0] - 5,
36 )
39def main():
40 r"""
41 Executes the simulation.
43 Note
44 ----
45 Hardcoded solutions for battery models in `pySDC.projects.PinTSimE.hardcoded_solutions` are only computed for
46 ``dt_list=[1e-2, 1e-3]`` and ``M_fix=4``. Hence changing ``dt_list`` and ``M_fix`` to different values could arise
47 an ``AssertionError``.
48 """
50 # --- defines parameters for the problem class ----
51 problem_params = {
52 'newton_maxiter': 50,
53 'newton_tol': 1e-11,
54 }
56 # --- defines parameters for sweeper ----
57 M_fix = 3
58 sweeper_params = {
59 'num_nodes': M_fix,
60 'quad_type': 'LOBATTO',
61 'QI': 'IE',
62 }
64 # --- defines parameters for event detection ----
65 handling_params = {
66 'restol': 1e-13,
67 'maxiter': 8,
68 'max_restarts': 50,
69 'recomputed': False,
70 'tol_event': 1e-12,
71 'alpha': 0.96,
72 'exact_event_time_avail': True,
73 'typeFD': 'backward',
74 }
76 # ---- all parameters are stored in this dictionary ----
77 all_params = {
78 'problem_params': problem_params,
79 'sweeper_params': sweeper_params,
80 'handling_params': handling_params,
81 }
83 hook_class = [LogEventDiscontinuousTestODE, LogSolution, LogGlobalErrorPostStep]
85 use_detection = [True, False]
86 use_adaptivity = [False]
88 _ = runSimulation(
89 problem=DiscontinuousTestODE,
90 sweeper=generic_implicit,
91 all_params=all_params,
92 use_adaptivity=use_adaptivity,
93 use_detection=use_detection,
94 hook_class=hook_class,
95 interval=(1.0, 2.0),
96 dt_list=[1e-2, 1e-3],
97 nnodes=[M_fix],
98 )
101if __name__ == "__main__":
102 main()