Peano
Loading...
Searching...
No Matches
test.py
Go to the documentation of this file.
1import peano4, exahype2
2import os, sys
3import argparse
4import subprocess
5import mpmath as mp
6
7sys.path.insert(0, os.path.abspath("../aderdg/"))
8sys.path.insert(0, os.path.abspath("../aderdg/scenarios"))
9import scenarios
10
11modes = {
12 "release": peano4.output.CompileMode.Release,
13 "trace": peano4.output.CompileMode.Trace,
14 "assert": peano4.output.CompileMode.Asserts,
15 "debug": peano4.output.CompileMode.Debug,
16}
17
18available_prec = {
19 "bf16", "fp16", "fp32", "fp64"
20}
21
22available_scenarios = {
23 "AcousticPlanarWaves": scenarios.AcousticPlanarWaves(dimensions=2),
24 "AdvectionLinear": scenarios.AdvectionLinear(),
25 "ElasticPlanarWaves": scenarios.ElasticPlanarWaves(dimensions=2),
26 "EulerGaussianBell": scenarios.EulerGaussianBell(),
27 "EulerIsotropicVortex": scenarios.EulerIsotropicVortex(),
28 "SWERadialDamBreak": scenarios.SWERadialDamBreak(),
29 "SWERestingLake": scenarios.SWERestingLake(),
30}
31
32parser = argparse.ArgumentParser(description="ExaHyPE 2 - ADER testing script")
33
34parser.add_argument(
35 "-md",
36 "--mesh-depth",
37 dest="md",
38 type=int,
39 default=3,
40 help="Depth of coarsest mesh level, i.e if 2 is specified there will be 9 cells per dimension",
41)
42parser.add_argument(
43 "-amr",
44 "--adaptive-levels",
45 dest="adaptivity_levels",
46 type=int,
47 default=0,
48 help="Number of AMR grid levels on top of hmax (0 by default)",
49)
50parser.add_argument("-o", "--order", dest="order", type=int, default=3, help="DG Order")
51parser.add_argument(
52 "-p",
53 "--p",
54 dest="polynomials",
55 type=int,
56 default=1,
57 help="Polynomial type, 0 is Gauss-Legendre, 1 is Gauss-Lobatto",
58)
59parser.add_argument(
60 "-m", "--mode", dest="mode", default="release", help="|".join(modes.keys())
61)
62parser.add_argument(
63 "-pr", "--precision", dest="precision", default="fp64", help="|".join(available_prec)
64)
65parser.add_argument(
66 "-s",
67 "--scenario",
68 dest="s",
69 default=None,
70 help="|".join(available_scenarios.keys()),
71)
72
73args = parser.parse_args()
74
75if args.s is None:
76 while True:
77 try:
78 s = input(
79 "Which of the following scenarios would you like to try out?\n"
80 + " - ".join(available_scenarios.keys())
81 + "\n"
82 )
83 scenario = available_scenarios[s]
84 except KeyError:
85 continue
86 else:
87 # User has specified a valid scenario
88 break
89else:
90 scenario = available_scenarios[args.s]
91
92order = args.order
93max_h = 1.1 * scenario._domain_size / (3.0**args.md)
94min_h = max_h * 3.0 ** (-args.adaptivity_levels)
95
96polynomials = (
97 exahype2.solvers.aderdg.Polynomials.Gauss_Legendre
98 if args.polynomials == 0
99 else exahype2.solvers.aderdg.Polynomials.Gauss_Lobatto
100)
101
102project = exahype2.Project(
103 ["tests", "exahype2", "aderdg"],
104 ".",
105 executable=scenario.__class__.__name__,
106)
107
108solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
109 name=scenario.__class__.__name__,
110 order=order,
111 min_cell_h=min_h,
112 max_cell_h=max_h,
113 time_step_relaxation=0.9,
114 unknowns=scenario._equation.num_unknowns,
115 auxiliary_variables=scenario._equation.num_auxiliary_variables
116)
117
118solver.add_kernel_optimisations(
119 polynomials=polynomials, is_linear=scenario._equation.is_linear,
120 precision = args.precision
121)
122
123solver.set_implementation(
124 initial_conditions=scenario.initial_conditions(),
125 boundary_conditions=scenario.boundary_conditions(),
126 max_eigenvalue=scenario._equation.eigenvalues(),
127 flux=scenario._equation.flux(),
128 ncp=scenario._equation.ncp(),
129 riemann_solver=scenario._equation.riemann_solver(),
130)
131
132project.add_solver(solver)
133
134
135
136solver2 = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
137 name=scenario.__class__.__name__+"2",
138 order=order,
139 min_cell_h=min_h,
140 max_cell_h=max_h,
141 time_step_relaxation=0.9,
142 unknowns=scenario._equation.num_unknowns,
143 auxiliary_variables=scenario._equation.num_auxiliary_variables
144)
145
146solver2.add_kernel_optimisations(
147 polynomials=polynomials, is_linear=scenario._equation.is_linear,
148 precision = args.precision
149)
150
151solver2.set_implementation(
152 initial_conditions=scenario.initial_conditions(),
153 boundary_conditions=scenario.boundary_conditions(),
154 max_eigenvalue=scenario._equation.eigenvalues(),
155 flux=scenario._equation.flux(),
156 ncp=scenario._equation.ncp(),
157 riemann_solver=scenario._equation.riemann_solver(),
158)
159
160
161
162project.add_solver(solver2)
163
164from fuseADERSolvers import fuseADERSolvers
165
166fuseADERSolvers(
167 solver, solver2,
168 "\nmarker.getX()[0]<=(DomainOffset[0]+0.5*DomainSize[0]+0.51*marker.getH()[0])\n",
169 "\nmarker.getX()[0]>=(DomainOffset[0]+0.5*DomainSize[0]+0.49*marker.getH()[0])\n"
170)
171
172if scenario.analytical_solution() != exahype2.solvers.PDETerms.None_Implementation:
173 exahype2.solvers.aderdg.ErrorMeasurement(
174 solver,
175 error_measurement_implementation=scenario.analytical_solution(),
176 output_file_name="Error_" + scenario.__class__.__name__,
177 )
178 exahype2.solvers.aderdg.ErrorMeasurement(
179 solver2,
180 error_measurement_implementation=scenario.analytical_solution(),
181 output_file_name="Error2_" + scenario.__class__.__name__,
182 )
183
184
185
186project.set_output_path("solutions")
187scenario.set_global_simulation_parameters(project)
188
189project.set_build_mode(modes[args.mode])
190project = project.generate_Peano4_project(verbose=False)
191project.build(make_clean_first=True)
Scenario reproduced from Dumbser & Käser, https://doi.org/10.1111/j.1365-246X.2006....
Very simple scenario in which the initial value of x is shifted in each spatial dimension.
Scenario reproduced from Dumbser & Käser, https://doi.org/10.1111/j.1365-246X.2006....
Scenario reproduced from Ioratti, Dumbser & Loubère, https://doi.org/10.1007/s10915-020-01209-w (p.
Classic radial dam break SWE equations, with constant initial water height but a bump in the bathymet...
Resting lake scenario for the shallow water equations.