9parser = argparse.ArgumentParser(
10 description=
"ExaHyPE 2 - Shallow Water Finite Volume MUSCL-Hancock Kernel Benchmarking Script"
15 choices=peano4.api.output.CompileModes,
16 default=peano4.api.output.CompileModes[0],
17 help=
"|".join(peano4.api.output.CompileModes),
24 help=
"Number of launching threads",
31 help=
"Number of finite volumes per axis (dimension) per patch.",
37 default=[32, 64, 128, 256],
39 help=
"Number of patches to study",
46 help=
"Number of samples per measurement",
53 help=
"Floating point accuracy to which the different kernel variants have to match (absolute). Pass in 0 to disable correctness check. Pass in values < 0 to use machine epsilon (default).",
59 help=
"Evaluate max. eigenvalue",
65 help=
"Assess host kernels",
71 help=
"Assess device kernels",
77 help=
"Enable a floating-point exception handler.",
85 help=
"Number of dimensions to use: 2 or 3",
91 help=
"Number of parallel builds to use",
94args = parser.parse_args()
96fv_muscl_solver = exahype2.solvers.fv.musclhancock.GlobalAdaptiveTimeStep(
97 name=
"FVMUSCLHancock",
98 patch_size=args.patch_size,
99 unknowns={
"rho": 1,
"u": 1,
"v": 1,
"e": 1}
if args.dimensions == 2
else {
"rho": 1,
"u": 1,
"v": 1,
"w": 1,
"e": 1},
100 auxiliary_variables = {},
103 time_step_relaxation=0.5,
104 pde_terms_without_state=
True,
107fv_muscl_solver.set_implementation(
108 initial_conditions=
"",
109 boundary_conditions=exahype2.solvers.PDETerms.Empty_Implementation,
110 refinement_criterion=exahype2.solvers.PDETerms.Empty_Implementation,
111 flux=
"applications::exahype2::euler::flux(Q, faceCentre, volumeH, t, dt, normal, F);",
113 eigenvalues=
"applications::exahype2::euler::maxEigenvalue(Q, faceCentre, volumeH, t, dt, normal, maxEigenvalue);",
116fv_muscl_solver.add_user_solver_includes(
118 #include "../../../../applications/exahype2/euler/Euler.h"
122project = exahype2.Project(
123 namespace=[
"benchmarks",
"exahype2",
"kernelbenchmarks"],
124 project_name=
"KernelBenchmarksFVMUSCLHancockDSL",
126 executable=f
"KernelBenchmarksFVMUSCLHancockDSL.{args.build_mode}",
128project.add_solver(fv_muscl_solver)
130project.set_global_simulation_parameters(
131 dimensions=args.dimensions,
132 size=[1.0] * args.dimensions,
133 offset=[0.0] * args.dimensions,
136 first_plot_time_stamp=0.0,
137 time_in_between_plots=0.0,
138 periodic_BC=[
False] * args.dimensions
141project.set_Peano4_installation(
"../../../../", mode=peano4.api.output.string_to_mode(args.build_mode))
142project = project.generate_Peano4_project(verbose=
True)
144accuracy = args.accuracy
147 accuracy = default = numpy.finfo(float).eps
148project.constants.export_constexpr_with_type(
"Accuracy", str(accuracy),
"double")
150project.constants.export_constexpr_with_type(
"NumberOfSamples", str(args.samples),
"int")
152formatted_num_patches =
"{{{}}}".format(
", ".join(str(val)
for val
in args.num_patches))
153project.constants.export_const_with_type(
"NumberOfPatchesToStudy", str(formatted_num_patches),
"tarch::la::Vector<%s, int>" % len(args.num_patches))
155project.constants.export_constexpr_with_type(
"NumberOfLaunchingThreads", str(args.num_threads),
"int")
158 project.constants.export_boolean(
"EnableFPE",
True)
160 project.constants.export_boolean(
"EnableFPE",
False)
162if args.cpu ==
False and args.gpu ==
False:
163 project.constants.export_boolean(
"AssessHostKernels",
True)
164 project.constants.export_boolean(
"AssessDeviceKernels",
True)
166 project.constants.export_boolean(
"AssessHostKernels",
True if args.cpu
else False)
167 project.constants.export_boolean(
"AssessDeviceKernels",
True if args.gpu
else False)
169project.constants.export_boolean(
"EvaluateFlux",
True)
170project.constants.export_boolean(
"EvaluateNonconservativeProduct",
True)
171project.constants.export_boolean(
"EvaluateSource",
False)
172project.constants.export_boolean(
"EvaluateMaximumEigenvalueAfterTimeStep",
True if args.eval_eig
else False)
174project.constants.define_value(
"GAMMA", str(1.0))
176benchmark_main_file =
"../../kernel-benchmarks/KernelBenchmarksFVMUSCLHancockDSL-main.cpp"
177os.system(
"cp {} KernelBenchmarksFVMUSCLHancockDSL-main.cpp".format(benchmark_main_file))
179project.output.makefile.add_CXX_flag(
"-DGRAV=9.81")
181project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)
184print(fv_muscl_solver)