1 import peano4, exahype2
7 sys.path.insert(0, os.path.abspath(
"../aderdg/"))
8 sys.path.insert(0, os.path.abspath(
"../aderdg/scenarios"))
12 "release": peano4.output.CompileMode.Release,
13 "trace": peano4.output.CompileMode.Trace,
14 "assert": peano4.output.CompileMode.Asserts,
15 "stats": peano4.output.CompileMode.Stats,
16 "debug": peano4.output.CompileMode.Debug,
20 "bf16",
"fp16",
"fp32",
"fp64"
23 available_scenarios = {
33 parser = argparse.ArgumentParser(description=
"ExaHyPE 2 - ADER testing script")
41 help=
"Depth of coarsest mesh level, i.e if 2 is specified there will be 9 cells per dimension",
46 dest=
"adaptivity_levels",
49 help=
"Number of AMR grid levels on top of hmax (0 by default)",
51 parser.add_argument(
"-o",
"--order", dest=
"order", type=int, default=3, help=
"DG Order")
58 help=
"Polynomial type, 0 is Gauss-Legendre, 1 is Gauss-Lobatto",
61 "-m",
"--mode", dest=
"mode", default=
"release", help=
"|".join(modes.keys())
64 "-pr",
"--precision", dest=
"precision", default=
"fp64", help=
"|".join(available_prec)
71 help=
"|".join(available_scenarios.keys()),
74 args = parser.parse_args()
80 "Which of the following scenarios would you like to try out?\n"
81 +
" - ".join(available_scenarios.keys())
84 scenario = available_scenarios[s]
91 scenario = available_scenarios[args.s]
94 max_h = 1.1 * scenario._domain_size / (3.0**args.md)
95 min_h = max_h * 3.0 ** (-args.adaptivity_levels)
98 exahype2.solvers.aderdg.Polynomials.Gauss_Legendre
99 if args.polynomials == 0
100 else exahype2.solvers.aderdg.Polynomials.Gauss_Lobatto
103 project = exahype2.Project(
104 [
"tests",
"exahype2",
"aderdg"],
106 executable=scenario.__class__.__name__,
109 solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
110 name=scenario.__class__.__name__,
114 time_step_relaxation=0.9,
115 unknowns=scenario._equation.num_unknowns,
116 auxiliary_variables=scenario._equation.num_auxiliary_variables
119 solver.add_kernel_optimisations(
120 polynomials=polynomials, is_linear=scenario._equation.is_linear,
121 precision = args.precision
124 solver.set_implementation(
125 initial_conditions=scenario.initial_conditions(),
126 boundary_conditions=scenario.boundary_conditions(),
127 max_eigenvalue=scenario._equation.eigenvalues(),
128 flux=scenario._equation.flux(),
129 ncp=scenario._equation.ncp(),
130 riemann_solver=scenario._equation.riemann_solver(),
133 project.add_solver(solver)
137 solver2 = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
138 name=scenario.__class__.__name__+
"2",
142 time_step_relaxation=0.9,
143 unknowns=scenario._equation.num_unknowns,
144 auxiliary_variables=scenario._equation.num_auxiliary_variables
147 solver2.add_kernel_optimisations(
148 polynomials=polynomials, is_linear=scenario._equation.is_linear,
149 precision = args.precision
152 solver2.set_implementation(
153 initial_conditions=scenario.initial_conditions(),
154 boundary_conditions=scenario.boundary_conditions(),
155 max_eigenvalue=scenario._equation.eigenvalues(),
156 flux=scenario._equation.flux(),
157 ncp=scenario._equation.ncp(),
158 riemann_solver=scenario._equation.riemann_solver(),
163 project.add_solver(solver2)
165 from fuseADERSolvers
import fuseADERSolvers
169 "\nmarker.x()[0]<=(DomainOffset[0]+0.5*DomainSize[0]+0.51*marker.h()[0])\n",
170 "\nmarker.x()[0]>=(DomainOffset[0]+0.5*DomainSize[0]+0.49*marker.h()[0])\n"
173 if scenario.analytical_solution() != exahype2.solvers.PDETerms.None_Implementation:
174 exahype2.solvers.aderdg.ErrorMeasurement(
176 error_measurement_implementation=scenario.analytical_solution(),
177 output_file_name=
"Error_" + scenario.__class__.__name__,
179 exahype2.solvers.aderdg.ErrorMeasurement(
181 error_measurement_implementation=scenario.analytical_solution(),
182 output_file_name=
"Error2_" + scenario.__class__.__name__,
187 project.set_output_path(
"solutions")
188 scenario.set_global_simulation_parameters(project)
190 project.set_Peano4_installation(
"../../../", modes[args.mode])
191 project = project.generate_Peano4_project(verbose=
False)
192 project.set_fenv_handler(
True)
194 project.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.
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.