6 available_precisions = [
"float",
"double"]
8 parser = exahype2.ArgumentParser(
"ExaHyPE 2 - Finite Volumes Testing Script")
10 "-pr",
"--precision", default=
"double", help=
"|".join(available_precisions)
14 degrees_of_freedom=16,
15 periodic_boundary_conditions_x=
False,
16 periodic_boundary_conditions_y=
False,
17 periodic_boundary_conditions_z=
False,
19 args = parser.parse_args()
21 initial_conditions =
"""
22 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
23 Q[i] = std::sin(x(0) * tarch::la::PI) * std::sin(x(1) * tarch::la::PI)
25 * std::sin(x(2) * tarch::la::PI)
31 boundary_conditions =
"""
32 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
33 Qoutside[i] = Qinside[i];
37 refinement_criterion =
"""
38 auto result = ::exahype2::RefinementCommand::Keep;
41 result = ::exahype2::RefinementCommand::Refine;
43 result = ::exahype2::RefinementCommand::Erase;
49 max_h = 1.1 / 3.0**args.min_depth
50 min_h = max_h * 3.0 ** (-args.amr_levels)
52 fv_solver = exahype2.solvers.fv.godunov.GlobalAdaptiveTimeStep(
54 patch_size=args.degrees_of_freedom,
55 unknowns={
"v": args.dimensions},
56 auxiliary_variables=0,
59 time_step_relaxation=0.5,
62 fv_solver.set_implementation(
63 initial_conditions=initial_conditions,
64 boundary_conditions=boundary_conditions,
65 refinement_criterion=refinement_criterion,
67 for (int i = 0; i < NumberOfUnknowns; i++) {
70 F[normal] = Q[normal];
72 max_eigenvalue=
"return 1.0;",
75 fv_solver.set_solver_precisions(
76 storage_precision=args.precision, compute_precision=args.precision
79 project = exahype2.Project(
80 namespace=[
"tests",
"exahype2",
"fv"],
81 project_name=
"FVTest",
85 project.add_solver(fv_solver)
87 particle_attributes = {
101 if args.dimensions == 3
114 tracer_particles = project.add_tracer(
115 name=
"Tracers", particle_attributes=particle_attributes
118 init_action_set = exahype2.tracer.InsertParticlesFromFile(
119 particle_set=tracer_particles,
120 filename=
"ICParticles.dat",
124 init_action_set.descend_invocation_order = 0
125 project.add_action_set_to_initialisation(init_action_set)
127 tracing_action_set = exahype2.tracer.FiniteVolumesTracing(
130 project_on_tracer_properties_kernel=
"::exahype2::fv::updateParticleState<0, 1, 2>",
131 projection_kernel_arguments=
"""
133 fineGridCell{{SOLVER_NAME}}CellLabel.getTimeStepSize(),
136 {{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}},
137 fineGridCell{{SOLVER_NAME}}Q.value,
144 tracing_action_set.descend_invocation_order = (
145 fv_solver._action_set_update_patch.descend_invocation_order + 1
147 project.add_action_set_to_initialisation(tracing_action_set)
150 if args.number_of_snapshots <= 0:
151 time_in_between_plots = 0.0
153 time_in_between_plots = args.end_time / args.number_of_snapshots
154 project.set_output_path(args.output)
156 project.set_global_simulation_parameters(
157 dimensions=args.dimensions,
158 size=[1.0, 1.0, 1.0][0 : args.dimensions],
159 offset=[0.0, 0.0, 0.0][0 : args.dimensions],
160 min_end_time=args.end_time,
161 max_end_time=args.end_time,
162 first_plot_time_stamp=0.0,
163 time_in_between_plots=time_in_between_plots,
165 args.periodic_boundary_conditions_x,
166 args.periodic_boundary_conditions_y,
167 args.periodic_boundary_conditions_z,
171 project.set_load_balancer(
"new ::exahype2::LoadBalancingConfiguration")
172 project.set_Peano4_installation(
173 "../../../", mode=peano4.output.string_to_mode(args.build_mode)
175 project = project.generate_Peano4_project(verbose=
False)
176 project.set_fenv_handler(args.fpe)
177 project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)