8 import peano4.toolbox.particles
12 from CCZ4Solver
import CCZ4Solver_FV_GlobalAdaptiveTimeStep
13 from CCZ4Solver
import CCZ4Solver_FV_GlobalAdaptiveTimeStepWithEnclaveTasking
14 from CCZ4Solver
import CCZ4Solver_FD4_GlobalAdaptiveTimeStep
15 from CCZ4Solver
import CCZ4Solver_FD4_GlobalAdaptiveTimeStepWithEnclaveTasking
16 from CCZ4Solver
import CCZ4Solver_RKDG_GlobalAdaptiveTimeStep
17 from CCZ4Solver
import CCZ4Solver_RKDG_GlobalAdaptiveTimeStepWithEnclaveTasking
18 from CCZ4Solver
import (
19 CCZ4Solver_FD4_SecondOrderFormulation_GlobalAdaptiveTimeStepWithEnclaveTasking,
22 from ComputeFirstDerivatives
import ComputeFirstDerivativesFD4RK
25 "CallStack": exahype2.solvers.Storage.CallStack,
26 "Heap": exahype2.solvers.Storage.Heap,
27 "SmartPointers": exahype2.solvers.Storage.SmartPointers,
31 parser = argparse.ArgumentParser(
32 description=
"ExaHyPE 2 - CCZ4-GaugeWave benchmarking script"
35 "-j",
"--parallel-builds", dest=
"j", type=int, default=-1, help=
"Parallel builds"
41 choices=storage_types.keys(),
43 help=
"|".join(storage_types.keys()),
49 default=
"../../../../",
50 help=
"Peano4 directory",
66 "fd4-rk1",
"sofd4-rk1",
67 "fd4-rk2",
"sofd4-rk2",
68 "fd4-rk3",
"sofd4-rk3",
69 "fd4-rk4",
"sofd4-rk4",
85 help=
"Pick solver type",
93 help=
"switch on the enclave tasking solver",
101 help=
"End of simulation",
109 help=
"Cell size (default 0.3)",
111 parser.add_argument(
"-m",
"--mode", dest=
"mode", choices=peano4.output.CompileModes, default=peano4.output.CompileModes[0], help=
"|".join(peano4.output.CompileModes) )
118 help=
"Activate tracer",
121 args = parser.parse_args()
123 project = exahype2.Project(
124 [
"benchmarks",
"exahype2",
"ccz4"],
126 executable=args.solver +
"-" +
str(args.cell_size),
138 if args.solver ==
"fv" and args.enclave:
142 min_volume_h=args.cell_size / 5,
143 max_volume_h=args.cell_size / 5,
144 pde_terms_without_state=
True,
146 my_solver.set_implementation(
147 initial_conditions=
"""
148 for (int i=0; i<NumberOfUnknowns+NumberOfAuxiliaryVariables; i++) Q[i] = 0.0;
149 ::applications::exahype2::ccz4::gaugeWave(Q, volumeCentre, 0);
152 if args.solver ==
"fv" and not args.enclave:
156 min_volume_h=args.cell_size / 5,
157 max_volume_h=args.cell_size / 5,
158 pde_terms_without_state=
True,
160 my_solver.set_implementation(
161 initial_conditions=
"""
162 for (int i=0; i<NumberOfUnknowns+NumberOfAuxiliaryVariables; i++) Q[i] = 0.0;
163 ::applications::exahype2::ccz4::gaugeWave(Q, volumeCentre, 0);
166 if "fd4-rk" in args.solver
or "sofd4-rk" in args.solver:
167 order =
int(args.solver[-1])
168 second_order_formulation =
"sofd4" in args.solver
169 if args.enclave==
True:
171 name=
"CCZ4FD4RK" +
str(order) +
"Enclave",
174 min_meshcell_h=args.cell_size / 3,
175 max_meshcell_h=args.cell_size / 3,
176 second_order = second_order_formulation,
177 pde_terms_without_state=
False
181 name=
"CCZ4FD4RK" +
str(order),
184 min_meshcell_h=args.cell_size / 3,
185 max_meshcell_h=args.cell_size / 3,
186 second_order = second_order_formulation
188 my_solver.set_implementation(
189 initial_conditions=
"""
190 for (int i=0; i<NumberOfUnknowns+NumberOfAuxiliaryVariables; i++) Q[i] = 0.0;
191 ::applications::exahype2::ccz4::gaugeWave(Q, meshCellCentre, 0);
195 if "rk" in args.solver
and "dg" in args.solver:
196 space_order =
int(args.solver[2])
197 time_order =
int(args.solver[6])
200 name=
"CCZ4DG" +
str(space_order) +
"RK" +
str(time_order),
201 polynomials=exahype2.solvers.GaussLegendreBasis(space_order),
203 min_cell_h=args.cell_size * space_order,
204 max_cell_h=args.cell_size * space_order,
205 pde_terms_without_state=
True,
209 name=
"CCZ4DG" +
str(space_order) +
"RK" +
str(time_order),
210 polynomials=exahype2.solvers.GaussLegendreBasis(space_order),
212 min_cell_h=args.cell_size * space_order,
213 max_cell_h=args.cell_size * space_order,
214 pde_terms_without_state=
True,
216 my_solver.set_implementation(
217 initial_conditions=
"""
218 for (int i=0; i<NumberOfUnknowns+NumberOfAuxiliaryVariables; i++) Q[i] = 0.0;
219 ::applications::exahype2::ccz4::gaugeWave(Q, x, 0);
224 my_solver.switch_storage_scheme(
225 cell_data_storage=storage_types[args.storage],
226 face_data_storage=storage_types[args.storage],
230 assert my_solver !=
None
232 my_solver.add_all_solver_constants()
233 project.add_solver(my_solver)
239 if peano4.output.string_to_mode(args.mode)==peano4.output.CompileMode.Asserts:
240 time_delta_between_two_snapsots = 1e-4
242 time_delta_between_two_snapsots = 0.1
243 my_solver.add_tracer(
245 coordinates=[[0, 0, 0]],
247 number_of_entries_between_two_db_flushes = 100,
248 data_delta_between_two_snapsots = 1e-8,
249 time_delta_between_two_snapsots = time_delta_between_two_snapsots,
250 clear_database_after_flush =
False,
251 tracer_unknowns =
None
260 if peano4.output.string_to_mode(args.mode)==peano4.output.CompileMode.Asserts:
261 delta_plot = 1.0 / 100
263 delta_plot = 1.0 / 20
266 offset = [-0.5, -0.5, -0.5]
267 domain_size = [1, 1, 1]
269 periodic_boundary_conditions = [
True,
True,
True]
271 project.set_global_simulation_parameters(
278 periodic_boundary_conditions,
282 probe_point = [-12,-12,0.0]
283 project.add_plot_filter( probe_point,[24.0,24.0,0.01],1 )
285 project.set_Peano4_installation(args.peanodir, peano4.output.string_to_mode(args.mode))
287 peano4_project = project.generate_Peano4_project(verbose=args.verbose)
289 if "sofd4" in args.solver:
290 additional_mesh_traversal = peano4.solversteps.Step( name =
"AdditionalMeshTraversal",
291 add_user_defined_actions=
False,
297 project_patch_onto_faces = exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces(my_solver)
298 project_patch_onto_faces.guards = [
"false" for x
in range(0,my_solver.number_of_Runge_Kutta_steps()+1) ]
299 project_patch_onto_faces.guards[-1] = my_solver._store_cell_data_default_guard()
301 roll_over_projected_faces = exahype2.solvers.rkfd.actionsets.RollOverUpdatedFace(my_solver,
302 my_solver._store_face_data_default_guard(),
306 is_enclave_solver = args.enclave,
308 additional_mesh_traversal.add_action_set( project_patch_onto_faces )
309 additional_mesh_traversal.add_action_set( roll_over_projected_faces )
311 project.init_new_user_defined_algorithmic_step( additional_mesh_traversal )
317 peano4_project.solversteps.add_step( additional_mesh_traversal )
318 peano4_project.constants.define(
"USE_ADDITIONAL_MESH_TRAVERSAL" )
321 my_solver.add_makefile_parameters(
322 peano4_project,
"../../../../applications/exahype2/ccz4"
325 peano4_project.generate(throw_away_data_after_generation=
False)
326 peano4_project.build(make_clean_first=
True, number_of_parallel_builds=args.j)