6parser = exahype2.ArgumentParser(
7 "ExaHyPE 2 - Finite Volumes Particle Tracing Testing Script"
9available_precisions = [
"float",
"double"]
11 "-pr",
"--precision", default=
"double", help=
"|".join(available_precisions)
15 degrees_of_freedom=16,
16 number_of_snapshots=0,
17 periodic_boundary_conditions_x=
False,
18 periodic_boundary_conditions_y=
False,
19 periodic_boundary_conditions_z=
False,
21args = parser.parse_args()
23max_h = 1.1 / 3.0**args.min_depth
24min_h = max_h * 3.0 ** (-args.amr_levels)
26initial_conditions =
"""
27 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
28 Q[i] = std::sin(x(0) * tarch::la::PI) * std::sin(x(1) * tarch::la::PI)
30 * std::sin(x(2) * tarch::la::PI)
36boundary_conditions =
"""
37 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
38 Qoutside[i] = Qinside[i];
42refinement_criterion =
"""
43 auto result = ::exahype2::RefinementCommand::Keep;
46 result = ::exahype2::RefinementCommand::Refine;
48 result = ::exahype2::RefinementCommand::Erase;
54fv_solver = exahype2.solvers.fv.godunov.GlobalAdaptiveTimeStep(
56 patch_size=args.degrees_of_freedom,
57 unknowns={
"v": args.dimensions},
58 auxiliary_variables=0,
61 time_step_relaxation=0.5,
64fv_solver.set_implementation(
65 initial_conditions=initial_conditions,
66 boundary_conditions=boundary_conditions,
67 refinement_criterion=refinement_criterion,
69 for (int i = 0; i < NumberOfUnknowns; i++) {
72 F[normal] = Q[normal];
74 max_eigenvalue=
"return 1.0;",
77fv_solver.set_solver_precisions(
78 storage_precision=args.precision, compute_precision=args.precision
81project = exahype2.Project(
82 namespace=[
"tests",
"exahype2",
"fv"],
87project.add_solver(fv_solver)
89if args.number_of_snapshots <= 0:
90 time_in_between_plots = 0.0
92 time_in_between_plots = args.end_time / args.number_of_snapshots
93 project.set_output_path(
97tracers = project.add_tracer(
113 if args.dimensions == 3
127init_tracers = exahype2.tracer.InsertParticlesFromFile(
128 particle_set=tracers,
129 filename=
"InitTracers.dat",
133init_tracers.descend_invocation_order = 0
134project.add_action_set_to_initialisation(
140tracing_action_set = exahype2.tracer.FiniteVolumesTracing(
143 project_on_tracer_properties_kernel=
"::exahype2::fv::updateParticleState<0, 1, 2>",
144 projection_kernel_arguments=
""" // TODO: Also way too complicated!
146 fineGridCell{{SOLVER_NAME}}CellLabel.getTimeStepSize(),
149 {{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}},
150 fineGridCell{{SOLVER_NAME}}Q.value,
156tracing_action_set.descend_invocation_order = (
157 fv_solver._action_set_update_patch.descend_invocation_order
161project.add_action_set_to_initialisation(tracing_action_set)
162project.add_action_set_to_timestepping(tracing_action_set)
164project.set_global_simulation_parameters(
165 dimensions=args.dimensions,
166 size=[1.0, 1.0, 1.0][0 : args.dimensions],
167 offset=[0.0, 0.0, 0.0][0 : args.dimensions],
168 min_end_time=args.end_time,
169 max_end_time=args.end_time,
170 first_plot_time_stamp=0.0,
171 time_in_between_plots=time_in_between_plots,
173 args.periodic_boundary_conditions_x,
174 args.periodic_boundary_conditions_y,
175 args.periodic_boundary_conditions_z,
179project.set_load_balancer(
"new ::exahype2::LoadBalancingConfiguration")
180project.set_Peano4_installation(
181 "../../../", mode=peano4.output.string_to_mode(args.build_mode)
183project = project.generate_Peano4_project(verbose=
False)
184project.set_fenv_handler(args.fpe)
185project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)