6parser = exahype2.ArgumentParser(
"ExaHyPE 2 - Finite Volumes Dynamic AMR Testing Script")
7available_precisions = [
"float",
"double"]
9 "-pr",
"--precision", default=
"double", help=
"|".join(available_precisions)
16 number_of_snapshots=0,
18args = parser.parse_args()
20max_h = 1.1 / 3.0**args.min_depth
21min_h = max_h * 3.0 ** (-args.amr_levels)
23initial_conditions =
"""
24 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
25 Q[i] = std::sin(x(0) * tarch::la::PI) * std::sin(x(1) * tarch::la::PI)
27 * std::sin(x(2) * tarch::la::PI)
33boundary_conditions =
"""
34 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
35 Qoutside[i] = Qinside[i];
39refinement_criterion =
"""
40 auto result = ::exahype2::RefinementCommand::Keep;
43 tarch::la::Vector<DIMENSIONS, double> circleCentre = {0.5, 0.5, 0.5};
45 tarch::la::Vector<DIMENSIONS, double> circleCentre = {0.5, 0.5};
48 if (tarch::la::equals(t, 0.0)) {
49 if (tarch::la::norm2(x - circleCentre) < 0.1) {
50 result = ::exahype2::RefinementCommand::Refine;
54 if (tarch::la::greater(t, 0.1) /*and h[0] <= MinAdmissibleVolumeH*/) {
55 if (tarch::la::norm2(x - circleCentre) < 0.1) {
56 result = ::exahype2::RefinementCommand::Erase;
63fv_solver = exahype2.solvers.fv.godunov.GlobalAdaptiveTimeStep(
65 patch_size=args.degrees_of_freedom,
66 unknowns={
"rho": 1,
"rhoU": args.dimensions,
"rhoE": 1},
67 auxiliary_variables=0,
70 time_step_relaxation=0.5,
71 use_enclave_tasking=args.enclave_tasking,
72 number_of_enclave_tasks=args.ntasks,
75fv_solver.set_implementation(
76 initial_conditions=initial_conditions,
77 boundary_conditions=boundary_conditions,
78 refinement_criterion=refinement_criterion,
80 for (int i = 0; i < NumberOfUnknowns; i++) {
83 F[normal] = Q[normal];
85 max_eigenvalue=
"return 1.0;",
88fv_solver.set_solver_precisions(
89 storage_precision=args.precision, compute_precision=args.precision
92project = exahype2.Project(
93 namespace=[
"tests",
"exahype2",
"fv"],
98project.add_solver(fv_solver)
100if args.number_of_snapshots <= 0:
101 time_in_between_plots = 0.0
103 time_in_between_plots = args.end_time / args.number_of_snapshots
104 project.set_output_path(args.output)
106project.set_global_simulation_parameters(
107 dimensions=args.dimensions,
108 size=[1.0, 1.0, 1.0][0 : args.dimensions],
109 offset=[0.0, 0.0, 0.0][0 : args.dimensions],
110 min_end_time=args.end_time,
111 max_end_time=args.end_time,
112 first_plot_time_stamp=0.0,
113 time_in_between_plots=time_in_between_plots,
115 args.periodic_boundary_conditions_x,
116 args.periodic_boundary_conditions_y,
117 args.periodic_boundary_conditions_z,
121project.set_load_balancer(
"new ::exahype2::LoadBalancingConfiguration")
122project.set_Peano4_installation(
123 "../../../", mode=peano4.output.string_to_mode(args.build_mode)
125project = project.generate_Peano4_project(verbose=
False)
126project.set_fenv_handler(args.fpe)
127project.output.makefile.set_target_device(args.target_device)
128project.output.makefile.add_CXX_flag(
"-DGAMMA=1.4")
129project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)