8import peano4.toolbox.particles
12from CCZ4Solver
import CCZ4Solver_FV_GlobalAdaptiveTimeStep
13from CCZ4Solver
import CCZ4Solver_FV_GlobalAdaptiveTimeStepWithEnclaveTasking
14from CCZ4Solver
import CCZ4Solver_FD4_GlobalAdaptiveTimeStep
15from CCZ4Solver
import CCZ4Solver_FD4_GlobalAdaptiveTimeStepWithEnclaveTasking
16from CCZ4Solver
import CCZ4Solver_RKDG_GlobalAdaptiveTimeStep
17from CCZ4Solver
import CCZ4Solver_RKDG_GlobalAdaptiveTimeStepWithEnclaveTasking
18from CCZ4Solver
import (
19 CCZ4Solver_FD4_SecondOrderFormulation_GlobalAdaptiveTimeStepWithEnclaveTasking,
22from ComputeFirstDerivatives
import ComputeFirstDerivativesFD4RK
25 "CallStack": exahype2.solvers.Storage.CallStack,
26 "Heap": exahype2.solvers.Storage.Heap,
27 "SmartPointers": exahype2.solvers.Storage.SmartPointers,
31parser = 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)",
111parser.add_argument(
"-m",
"--mode", dest=
"mode", choices=peano4.output.CompileModes, default=peano4.output.CompileModes[0], help=
"|".join(peano4.output.CompileModes) )
118 help=
"Activate tracer",
121args = parser.parse_args()
123project = exahype2.Project(
124 [
"benchmarks",
"exahype2",
"ccz4"],
126 executable=args.solver +
"-" + str(args.cell_size),
138if 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);
152if 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);
166if "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);
195if "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);
224my_solver.switch_storage_scheme(
225 cell_data_storage=storage_types[args.storage],
226 face_data_storage=storage_types[args.storage],
230assert my_solver !=
None
232my_solver.add_all_solver_constants()
233project.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
260if peano4.output.string_to_mode(args.mode)==peano4.output.CompileMode.Asserts:
261 delta_plot = 1.0 / 100
263 delta_plot = 1.0 / 20
266offset = [-0.5, -0.5, -0.5]
267domain_size = [1, 1, 1]
269periodic_boundary_conditions = [
True,
True,
True]
271project.set_global_simulation_parameters(
278 periodic_boundary_conditions,
282probe_point = [-12,-12,0.0]
283project.add_plot_filter( probe_point,[24.0,24.0,0.01],1 )
285project.set_Peano4_installation(args.peanodir, peano4.output.string_to_mode(args.mode))
287peano4_project = project.generate_Peano4_project(verbose=args.verbose)
289if "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" )
321my_solver.add_makefile_parameters(
322 peano4_project,
"../../../../applications/exahype2/ccz4"
325peano4_project.generate(throw_away_data_after_generation=
False)
326peano4_project.build(make_clean_first=
True, number_of_parallel_builds=args.j)
CCZ4 solver using fourth-order finite differences and global adaptive time stepping incl enclave task...
CCZ4 solver using fourth-order finite differences and global adaptive time stepping without enclave t...
CCZ4 solver using finite volumes and global adaptive time stepping incl enclave tasking.
CCZ4 solver using finite volumes and global adaptive time stepping incl enclave tasking.
CCZ4 solver using Runge-Kutta Discontinuous Galerkin and global adaptive time stepping incl enclave t...
CCZ4 solver using Runge-Kutta Discontinuous Galerkin and global adaptive time stepping incl enclave t...
Explicit reconstruction of first derivatives for FD4 discretisation.