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 periodic_boundary_conditions_x=
False,
17 periodic_boundary_conditions_y=
False,
18 periodic_boundary_conditions_z=
False,
20args = parser.parse_args()
22max_h = 1.1 / 3.0**args.min_depth
23min_h = max_h * 3.0 ** (-args.amr_levels)
25initial_conditions =
"""
26 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
27 Q[i] = std::sin(x(0) * tarch::la::PI) * std::sin(x(1) * tarch::la::PI)
29 * std::sin(x(2) * tarch::la::PI)
35boundary_conditions =
"""
36 for (int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
37 Qoutside[i] = Qinside[i];
41refinement_criterion =
"""
42 auto result = ::exahype2::RefinementCommand::Keep;
45 result = ::exahype2::RefinementCommand::Refine;
47 result = ::exahype2::RefinementCommand::Erase;
53fv_solver = exahype2.solvers.fv.godunov.GlobalAdaptiveTimeStep(
55 patch_size=args.degrees_of_freedom,
56 unknowns={
"v": args.dimensions},
57 auxiliary_variables=0,
60 time_step_relaxation=0.5,
63fv_solver.set_implementation(
64 initial_conditions=initial_conditions,
65 boundary_conditions=boundary_conditions,
66 refinement_criterion=refinement_criterion,
68 for (int i = 0; i < NumberOfUnknowns; i++) {
71 F[normal] = Q[normal];
73 max_eigenvalue=
"return 1.0;",
76fv_solver.set_solver_precisions(
77 storage_precision=args.precision, compute_precision=args.precision
80project = exahype2.Project(
81 namespace=[
"tests",
"exahype2",
"fv"],
86project.add_solver(fv_solver)
88if args.number_of_snapshots <= 0:
89 time_in_between_plots = 0.0
91 time_in_between_plots = args.end_time / args.number_of_snapshots
92 project.set_output_path(
96tracers = project.add_tracer(
112 if args.dimensions == 3
126init_tracers = exahype2.tracer.InsertParticlesByCoordinates(
127 particle_set=tracers,
128 coordinates=[[0.25, 0.5, 0.5], [0.5, 0.5, 0.5], [0.75, 0.5, 0.5]],
131init_tracers.descend_invocation_order = 0
132project.add_action_set_to_initialisation(
138tracing_action_set = exahype2.tracer.FiniteVolumesTracing(
141 project_on_tracer_properties_kernel=
"::exahype2::fv::updateParticleState<0, 1, 2>",
142 projection_kernel_arguments=
""" // TODO: Also way too complicated!
144 fineGridCell{{SOLVER_NAME}}CellLabel.getTimeStepSize(),
147 {{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}},
148 fineGridCell{{SOLVER_NAME}}Q.data(),
154tracing_action_set.descend_invocation_order = (
155 fv_solver._action_set_update_patch.descend_invocation_order
159project.add_action_set_to_initialisation(tracing_action_set)
162project.set_global_simulation_parameters(
163 dimensions=args.dimensions,
164 size=[1.0, 1.0, 1.0][0 : args.dimensions],
165 offset=[0.0, 0.0, 0.0][0 : args.dimensions],
166 min_end_time=args.end_time,
167 max_end_time=args.end_time,
168 first_plot_time_stamp=0.0,
169 time_in_between_plots=time_in_between_plots,
171 args.periodic_boundary_conditions_x,
172 args.periodic_boundary_conditions_y,
173 args.periodic_boundary_conditions_z,
177project.set_load_balancer(
"new ::exahype2::LoadBalancingConfiguration")
178project.set_build_mode(mode=peano4.output.string_to_mode(args.build_mode))
179project = project.generate_Peano4_project(verbose=
False)
180project.build(make=
True, make_clean_first=
True, throw_away_data_after_build=
True)