13from Probe_file_gene
import tracer_seeds_generate
14from ComputeFirstDerivatives
import ComputeFirstDerivativesFD4RK
20 "release": peano4.output.CompileMode.Release,
21 "trace": peano4.output.CompileMode.Trace,
22 "assert": peano4.output.CompileMode.Asserts,
23 "stats": peano4.output.CompileMode.Stats,
24 "debug": peano4.output.CompileMode.Debug,
28 "GLMc0":1.5,
"GLMc":1.2,
"GLMd":2.0,
"GLMepsA":1.0,
"GLMepsP":1.0,
30 "itau":1.0,
"k1":0.1,
"k2":0.0,
"k3":0.5,
"eta":1.0,
31 "f":0.75,
"g":0.0,
"xi":1.0,
"e":1.0,
"c":1.0,
"mu":0.2,
"ds":1.0,
33 "domain_r":0.5,
"smoothing":0.0,
"KOSigma":8.0
36intparams = {
"BBHType":2,
"LapseType":1,
"tp_grid_setup":0,
"swi":99,
"ReSwi":0,
"SO":0}
38if __name__ ==
"__main__":
39 parser = argparse.ArgumentParser(description=
'ExaHyPE 2 - CCZ4 script')
40 parser.add_argument(
"-maxh",
"--max-h", dest=
"max_h", type=float, required=
"True", help=
"upper limit for refinement. Refers to volume/meshcell size, i.e. not to patch size" )
41 parser.add_argument(
"-minh",
"--min-h", dest=
"min_h", type=float, default=0, help=
"lower limit for refinement (set to 0 to make it equal to max_h - default). Refers to volume/meshcell size, i.e. not to patch size" )
42 parser.add_argument(
"-ps",
"--patch-size", dest=
"patch_size", type=int, default=6, help=
"Patch size, i.e. number of volumes per patch per direction" )
43 parser.add_argument(
"-plt",
"--plot-step-size", dest=
"plot_step_size", type=float, default=0.04, help=
"Plot step size (0 to switch it off)" )
44 parser.add_argument(
"-m",
"--mode", dest=
"mode", default=
"release", help=
"|".join(modes.keys()) )
45 parser.add_argument(
"--gpu", dest=
"GPU", default=
False, action=
"store_true", help=
"Run with accelerator support" )
46 parser.add_argument(
"-ext",
"--extension", dest=
"extension", choices=[
"none",
"adm",
"Psi4"], default=
"none", help=
"Pick extension, i.e. what should be plotted on top of the evolving solution. Default is none" )
47 parser.add_argument(
"-impl",
"--implementation", dest=
"implementation", choices=[
"fv-adaptive",
"fd4-rk1-adaptive",
"fd4-rk1-adaptive-enclave",
"fd4-rk1-fixed",
"fd4-rk4-adaptive",
"fd4-rk2-adaptive",
"RKDG"], required=
"True", help=
"Pick solver type" )
48 parser.add_argument(
"-no-pbc",
"--no-periodic-boundary-conditions", dest=
"periodic_bc", action=
"store_false", default=
True, help=
"switch on or off the periodic BC" )
49 parser.add_argument(
"-sommerfeld",
"--sommerfeld-boundary-conditions", dest=
"sommerfeld_bc", action=
"store_true", default=
False, help=
"switch on or off the Sommerfeld radiative BC" )
50 parser.add_argument(
"-et",
"--end-time", dest=
"end_time", type=float, default=1.0, help=
"End (terminal) time" )
51 parser.add_argument(
"-pst",
"--plot-start-time", dest=
"plot_start_time", type=float, default=0.0, help=
"start time for plot" )
52 parser.add_argument(
"-s",
"--scenario", dest=
"scenario", choices=[
"gauge",
"dia_gauge",
"linear",
"single-puncture",
"two-punctures",
"flat"], required=
"True", help=
"Scenario" )
53 parser.add_argument(
"-cfl",
"--CFL-ratio", dest=
"cfl", type=float, default=0.1, help=
"Set CFL ratio" )
54 parser.add_argument(
"-tracer",
"--add-tracer", dest=
"add_tracer", type=int, default=0, help=
"Add tracers and specify the seeds. 0-switch off, 1-static point tracer, 2-moving point tracer" )
55 parser.add_argument(
"-tn",
"--tracer-name", dest=
"tra_name", type=str, default=
"de", help=
"name of output tracer file (temporary)" )
56 parser.add_argument(
"-exn",
"--exe-name", dest=
"exe_name", type=str, default=
"", help=
"name of output executable file" )
57 parser.add_argument(
"-outdir",
"--output-directory", dest=
"path", type=str, default=
"./", help=
"specify the output directory, include the patch file and tracer file" )
58 parser.add_argument(
"-so",
"--second-order", dest=
"SO_flag", default=
False, action=
"store_true", help=
"enable double communication per timestep, used in the soccz4 formulation.")
59 parser.add_argument(
"-interp",
"--interpolation", dest=
"interpolation", choices=[
"constant",
"order-2",
"linear-constant-extrap",
"linear-linear-extrap",
"linear-con-extrap-lin-normal-interp",
"linear-lin-extrap-lin-normal-interp",
"matrix",
"second_order"], default=
"linear-lin-extrap-lin-normal-interp", help=
"interpolation scheme for AMR" )
60 parser.add_argument(
"-restrict",
"--restriction", dest=
"restriction", choices=[
"average",
"inject",
"matrix",
"second_order" ], default=
"average", help=
"restriction scheme for AMR" )
61 parser.add_argument(
"-restart",
"--restart-timestamp", dest=
"restart_timestamp", default=0.0, type=float, help=
"specify the timestamp you would like to restart. The first checkpointed timestamp will be used to restart the simulation. Default is 0.0 (switch off)" )
62 parser.add_argument(
"-checkdir",
"--checkpoint-directory", dest=
"checkpoint_path", type=str, default=
"./", help=
"specify where the code read the checkpoint files FROM, default is the same directory of output above." )
63 parser.add_argument(
"-clt",
"--checkpoint-step-size", dest=
"checkpoint_step_size", type=float, default=1.0, help=
"checkpoint step size (0 to switch it off)" )
66 for k, v
in floatparams.items(): parser.add_argument(
"--{}".format(k), dest=
"CCZ4{}".format(k), type=float, default=v, help=
"default: %(default)s")
67 for k, v
in intparams.items():
69 parser.add_argument(
"--{}".format(k), dest=
"CCZ4{}".format(k), type=int, default=v, help=
"default: %(default)s, choose refinement criterion.")
70 else: parser.add_argument(
"--{}".format(k), dest=
"CCZ4{}".format(k), type=int, default=v, help=
"default: %(default)s")
72 args = parser.parse_args()
76 print(args.implementation)
77 if args.implementation==
"fv-adaptive":
79 if args.implementation==
"fd4-rk1-adaptive" or args.implementation==
"fd4-rk4-adaptive" or args.implementation==
"fd4-rk2-adaptive":
81 if args.implementation==
"fd4-rk1-adaptive-enclave":
83 if args.implementation==
"RKDG":
88 def __init__(self, name, patch_size, min_mesh_unit_h, max_mesh_unit_h, cfl, domain_r, KOSig):
110 number_of_unknowns = sum(unknowns.values())
113#include "../CCZ4Kernels.h"
118 name=name, patch_size=patch_size,
119 unknowns=number_of_unknowns,
120 auxiliary_variables=0,
121 min_volume_h=min_mesh_unit_h, max_volume_h=max_mesh_unit_h,
122 time_step_relaxation=cfl
125 if args.implementation==
"fd4-rk1-adaptive":
127 elif args.implementation==
"fd4-rk2-adaptive":
133 name=name, patch_size=patch_size, rk_order=rk_order,
134 unknowns=number_of_unknowns,
135 auxiliary_variables=0,
136 min_meshcell_h=min_mesh_unit_h, max_meshcell_h=max_mesh_unit_h,
137 time_step_relaxation=cfl,
139 reconstruction_with_rk=args.SO_flag
142 if args.implementation==
"fd4-rk1-adaptive-enclave":
148 name=name, patch_size=patch_size, rk_order=rk_order,
149 unknowns=number_of_unknowns,
150 auxiliary_variables=0,
151 min_meshcell_h=min_mesh_unit_h, max_meshcell_h=max_mesh_unit_h,
152 time_step_relaxation=cfl,
154 pde_terms_without_state=
True
162 face_projections = exahype2.solvers.rkdg.FaceProjections.Solution,
163 unknowns=number_of_unknowns,
164 auxiliary_variables=0,
165 min_cell_h=min_mesh_unit_h, max_cell_h=max_mesh_unit_h,
166 time_step_relaxation=cfl
172 self.set_implementation(
173 boundary_conditions=exahype2.solvers.PDETerms.User_Defined_Implementation,
174 ncp=exahype2.solvers.PDETerms.User_Defined_Implementation,
175 flux=exahype2.solvers.PDETerms.None_Implementation,
176 source_term=exahype2.solvers.PDETerms.User_Defined_Implementation,
177 refinement_criterion = exahype2.solvers.PDETerms.User_Defined_Implementation,
178 eigenvalues = exahype2.solvers.PDETerms.User_Defined_Implementation
196 compute_max_eigenvalue_of_next_time_step =
True,
197 solver_variant = exahype2.solvers.rkfd.kernels.SolverVariant.Multicore,
198 kernel_variant = exahype2.solvers.rkfd.kernels.KernelVariant.BatchedAoSHeap,
199 KOSigma = self._KO_Sigma
205 constexpr int itmax = {{NUMBER_OF_VOLUMES_PER_AXIS}} * {{NUMBER_OF_VOLUMES_PER_AXIS}};
209 constexpr int itmax = {{NUMBER_OF_VOLUMES_PER_AXIS}} * {{NUMBER_OF_VOLUMES_PER_AXIS}} * {{NUMBER_OF_VOLUMES_PER_AXIS}};
213 for (int i=0;i<itmax;i++)
215 applications::exahype2::ccz4::enforceCCZ4constraints( newQ+index );
216 index += {{NUMBER_OF_UNKNOWNS}} + {{NUMBER_OF_AUXILIARY_VARIABLES}};
228 SuperClass.create_action_sets(self)
229 self._action_set_couple_resolution_transitions_and_handle_dynamic_mesh_refinement.additional_includes +=
"""
230#include "../CCZ4Kernels.h"
235 We take this routine to add a few additional include statements.
241 @add adm constriants (Hamilton and Momentum)
246 #include "../CCZ4Kernels.h"
252 self.create_data_structures()
262 #include "../libtwopunctures/TP_PunctureTracker.h"
263 #include "../CCZ4Kernels.h"
269 self.create_data_structures()
278 if args.exe_name!=
"":
281 if not args.tra_name==
"de":
282 exe +=
"_" + args.tra_name
292 if SuperClass==exahype2.solvers.aderdg.NonFusedGenericRusanovFixedTimeStepSize:
296 time_step_size = 0.001
297 except Exception
as e:
299 msg =
"Warning: ADER-DG no supported on this machine"
301 userinfo.append((msg,e))
306 except Exception
as e:
308 msg =
"Warning: RKDG not supported on this machine"
310 userinfo.append((msg,e))
313 solver_name =
"ADERDG" + solver_name
315 solver_name =
"RKDG" + solver_name
317 solver_name = solver_name
324 print(
"No minimal mesh size chosen. Set it to max mesh size (regular grid)" )
328 my_solver = exahype2.solvers.aderdg.NonFusedGenericRusanovFixedTimeStepSize(
329 solver_name, order, unknowns, 0,
330 exahype2.solvers.aderdg.Polynomials.Gauss_Legendre,
331 min_h, args.max_h, time_step_size,
333 ncp = exahype2.solvers.PDETerms.User_Defined_Implementation,
334 sources = exahype2.solvers.PDETerms.User_Defined_Implementation
337 my_solver =
CCZ4Solver(solver_name, args.patch_size, min_h, args.max_h, args.cfl, args.CCZ4domain_r,args.CCZ4KOSigma)
338 userinfo.append((
"CFL ratio set as "+str(args.cfl),
None))
340 userinfo.append((
"The solver is "+args.implementation,
None))
351 tem_interp=[
"TP_constant",
"TP_linear_with_linear_extrap_normal_interp"]
352 tem_restrict=[
"TP_inject_normal_extrap",
"TP_average_normal_extrap"]
353 if (
"fd4-rk" in args.implementation):
354 if args.interpolation ==
"matrix":
355 exahype2.solvers.rkfd.fd4.switch_to_FD4_matrix_interpolation( my_solver )
356 elif args.interpolation ==
"second_order":
357 exahype2.solvers.rkfd.fd4.switch_to_FD4_second_order_interpolation( my_solver )
359 exahype2.solvers.rkfd.fd4.switch_to_FD4_tensor_product_interpolation( my_solver, tem_interp[1] )
360 userinfo.append((
"FD4 Interpolation: " + tem_interp[1],
None))
362 if args.restriction ==
"matrix":
363 exahype2.solvers.rkfd.fd4.switch_to_FD4_matrix_restriction( my_solver )
364 elif args.interpolation ==
"second_order":
365 exahype2.solvers.rkfd.fd4.switch_to_FD4_second_order_restriction( my_solver )
367 exahype2.solvers.rkfd.fd4.switch_to_FD4_tensor_product_restriction( my_solver, tem_restrict[1] )
368 userinfo.append((
"FD4 Restriction: " + tem_restrict[1],
None))
373 if args.extension==
"adm":
374 my_solver.add_adm_constriants()
375 if args.extension==
"Psi4":
376 my_solver.add_Psi4W()
381 for k, v
in intparams.items():
382 intparams.update({k:eval(
"args.CCZ4{}".format(k))})
383 for k, v
in floatparams.items():
384 floatparams.update({k:eval(
"args.CCZ4{}".format(k))})
386 if args.SO_flag==
True:
387 intparams.update({
"SO":1})
389 if args.scenario==
"two-punctures":
390 msg =
"Periodic BC deactivated because you pick Puncture scenario\nInitialize binary black holes"
392 periodic_boundary_conditions = [
False,
False,
False]
393 intparams.update({
"swi":2})
395 userinfo.append((msg,
None))
396 elif args.scenario==
"single-puncture":
397 msg =
"Periodic BC deactivated because you pick Puncture scenario\nInitialize single black hole"
399 periodic_boundary_conditions = [
False,
False,
False]
400 intparams.update({
"swi":0})
401 userinfo.append((msg,
None))
402 elif args.periodic_bc==
True:
403 msg =
"Periodic BC set"
405 periodic_boundary_conditions = [
True,
True,
True]
406 userinfo.append((msg,
None))
408 msg =
"WARNING: Periodic BC deactivated by hand"
410 periodic_boundary_conditions = [
False,
False,
False]
411 userinfo.append((msg,
None))
413 if args.sommerfeld_bc==
True:
414 msg =
"set Sommerfeld boundary condition"
415 userinfo.append((msg,
None))
416 periodic_boundary_conditions = [
False,
False,
False]
420 my_solver._auxiliary_variables,
421 args.restart_timestamp)
425 if args.scenario==
"gauge":
426 solverconstants+=
"static constexpr int Scenario=0; /* Gauge wave */ \n "
427 userinfo.append((
"picking gauge wave scenario",
None))
428 floatparams.update({
"sk":0.0}); floatparams.update({
"bs":0.0})
429 intparams.update({
"LapseType":0})
430 elif args.scenario==
"dia_gauge":
431 solverconstants+=
"static constexpr int Scenario=3; /* Diagonal Gauge wave */ \n "
432 userinfo.append((
"picking diagonal gauge wave scenario",
None))
433 floatparams.update({
"sk":0.0}); floatparams.update({
"bs":0.0})
434 intparams.update({
"LapseType":0})
435 elif args.scenario==
"linear":
436 solverconstants+=
"static constexpr int Scenario=1; /* Linear wave */ \n "
437 userinfo.append((
"picking linear wave scenario",
None))
438 floatparams.update({
"sk":0.0}); floatparams.update({
"bs":0.0})
439 intparams.update({
"LapseType":0})
440 elif args.scenario==
"flat":
441 solverconstants+=
"static constexpr int Scenario=4; /* flat spacetime */ \n "
442 userinfo.append((
"picking flat scenario",
None))
443 elif (args.scenario==
"two-punctures")
or (args.scenario==
"single-puncture"):
444 solverconstants+=
"static constexpr int Scenario=2; /* Two-puncture */ \n"
445 userinfo.append((
"picking black hole scenario",
None))
447 raise Exception(
"Scenario " + args.scenario +
" is now unknown")
449 for k, v
in floatparams.items(): solverconstants+=
"static constexpr double {} = {};\n".format(
"CCZ4{}".format(k), v)
450 for k, v
in intparams.items(): solverconstants+=
"static constexpr int {} = {};\n".format(
"CCZ4{}".format(k), v)
451 my_solver.add_solver_constants(solverconstants)
453 project.add_solver(my_solver)
455 build_mode = modes[args.mode]
462 floatparams.update({
"domain_r":args.CCZ4domain_r})
463 dr=floatparams[
"domain_r"]
464 offset=[-dr, -dr, -dr]; domain_size=[2*dr, 2*dr, 2*dr]
465 msg =
"domain set as "+str(offset)+
" and "+str(domain_size)
467 userinfo.append((msg,
None))
469 project.set_global_simulation_parameters(
473 args.plot_start_time, args.plot_step_size,
474 periodic_boundary_conditions,
476 first_checkpoint_time_stamp=0,
477 time_in_between_checkpoints=args.checkpoint_step_size
480 if not args.restart_timestamp==0.0:
481 if not args.checkpoint_path==
"./":
482 cpath=args.checkpoint_path
483 elif not args.path==
"./":
487 project.set_restart_from_checkpoint(expected_restart_timestamp=args.restart_timestamp, checkpoint_path=cpath)
489 userinfo.append((
"plot start time: "+str(args.plot_start_time)+
", plot step size: "+str(args.plot_step_size),
None))
490 userinfo.append((
"Terminal time: "+str(args.end_time),
None))
492 project.set_Peano4_installation(
"../../..", build_mode)
498 if not args.path==
"./":
502 project.set_output_path(path)
503 if not os.path.exists(path):
506 probe_point = [-100, -100, 0.0]
507 project.add_plot_filter( probe_point,[200.0, 200.0, 0.01], 1 )
517 project.set_load_balancing(
"toolbox::loadbalancing::strategies::SpreadOutHierarchically",
"(new ::exahype2::LoadBalancingConfiguration(0.95))" )
530 if args.add_tracer==1:
531 tracer_particles = project.add_tracer( name=
"Tracer",attribute_count=59 )
534 particle_set=tracer_particles, coordinates=[[-0.1,0,0],[0.1,0,0],[0,0.1,0],[0,-0.1,0]])
538 init_action_set.descend_invocation_order = 0
539 project.add_action_set_to_initialisation( init_action_set )
543 project_on_tracer_properties_kernel=
"::exahype2::fv::projectAllValuesOntoParticle_piecewiseLinear",
545 tracer_action_set.descend_invocation_order = my_solver._action_set_update_cell.descend_invocation_order+1
546 project.add_action_set_to_timestepping(tracer_action_set)
547 project.add_action_set_to_initialisation(tracer_action_set)
550 particle_set=tracer_particles,
552 filename=args.path+
"Tracer-test",
553 number_of_entries_between_two_db_flushes=1000,
555 data_delta_between_two_snapsots=1e16,
556 position_delta_between_two_snapsots=1e16,
557 time_delta_between_two_snapsots=0.02,
558 clear_database_after_flush =
True
560 dump_action_set.descend_invocation_order = my_solver._action_set_update_cell.descend_invocation_order+2
561 project.add_action_set_to_timestepping(dump_action_set)
563 if args.add_tracer==2:
564 tracer_particles = project.add_tracer( name=
"Tracer",attribute_count=59 )
566 particle_set=tracer_particles, coordinates=[[0.2,0,0],[-0.2,0,0]])
567 init_action_set.descend_invocation_order = 0
568 project.add_action_set_to_initialisation( init_action_set )
572 project_on_tracer_properties_kernel=
"::exahype2::fv::projectAllValuesOntoParticle_piecewiseLinear_explicit_Euler",
573 projection_kernel_arguments=
"""marker,
575 {{NUMBER_OF_UNKNOWNS}}+{{NUMBER_OF_AUXILIARY_VARIABLES}},
576 fineGridCell{{SOLVER_NAME}}Q.value,
577 fineGridCell{{SOLVER_NAME}}CellLabel.getTimeStepSize(),
583 tracer_action_set.descend_invocation_order = my_solver._action_set_compute_final_linear_combination.descend_invocation_order+1
584 project.add_action_set_to_timestepping(tracer_action_set)
585 project.add_action_set_to_initialisation(tracer_action_set)
588 particle_set=tracer_particles,
590 filename=args.path+
"Tracer-BHTracker",
591 number_of_entries_between_two_db_flushes=1000,
593 data_delta_between_two_snapsots=1e16,
594 position_delta_between_two_snapsots=1e16,
595 time_delta_between_two_snapsots=0.02,
596 clear_database_after_flush =
True
598 dump_action_set.descend_invocation_order = my_solver._action_set_compute_final_linear_combination.descend_invocation_order+2
599 project.add_action_set_to_timestepping(dump_action_set)
604 peano4_project = project.generate_Peano4_project(verbose=
True)
606 if args.scenario==
"gauge" or args.scenario==
"linear" or args.scenario==
"dia_gauge" or args.scenario==
"flat":
608 elif args.scenario==
"two-punctures" or args.scenario==
"single-puncture":
615 peano4_project.output.makefile.add_linker_flag(
"-lm -lgsl -lgslcblas" )
616 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/TP_Utilities.cpp" )
617 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/TP_Parameters.cpp" )
618 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/TP_Logging.cpp" )
619 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/TwoPunctures.cpp" )
620 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/CoordTransf.cpp" )
621 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/Equations.cpp" )
622 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/FuncAndJacobian.cpp" )
623 peano4_project.output.makefile.add_cpp_file(
"libtwopunctures/Newton.cpp" )
624 peano4_project.output.makefile.add_CXX_flag(
"-DIncludeTwoPunctures" )
626 raise Exception(
"Scenario " + args.scenario +
" is now unknown")
628 peano4_project.output.makefile.add_CXX_flag(
"-DCCZ4EINSTEIN" )
629 peano4_project.output.makefile.add_cpp_file(
"InitialValues.cpp" )
630 peano4_project.output.makefile.add_cpp_file(
"CCZ4Kernels.cpp" )
632 if args.SO_flag==
True:
633 userinfo.append((
"Enable double communication, make sure you are using the Second formulism.",
None))
635 add_user_defined_actions=
False,
638 project_patch_onto_faces.guards = [
"false" for x
in range(0,my_solver.number_of_Runge_Kutta_steps()+1) ]
639 project_patch_onto_faces.guards[-1] = my_solver._store_cell_data_default_guard()
642 my_solver._store_face_data_default_guard(),
647 interpolation=my_solver.interpolation,
648 restriction=my_solver.restriction,
652 is_enclave_solver = (
"enclave" in args.implementation),
654 additional_mesh_traversal.add_action_set( project_patch_onto_faces )
655 additional_mesh_traversal.add_action_set( roll_over_projected_faces )
656 additional_mesh_traversal.add_action_set( dynamic_AMR )
663 peano4_project.generate( throw_away_data_after_generation=
False )
664 peano4_project.build( make_clean_first =
True )
667 userinfo.append((
"the executable file name: "+exe,
None))
668 userinfo.append((
"output directory: "+path,
None))
669 print(
"=========================================================")
670 if not args.add_tracer==0:
671 userinfo.append((
"tracer output file: "+args.path+
"Tracer-test",
None))
672 if not args.restart_timestamp==0.0:
673 userinfo.append((
"the code will restart from the first checkpoint after timestamp "+str(args.restart_timestamp),
None))
675 print(
"The building information:")
676 for msg, exception
in userinfo:
677 if exception
is None:
679 else: print(msg,
"Exception: {}".format(exception))
682 print(
"=========================================================")
Explicit reconstruction of first derivatives for FD4 discretisation.
postprocess_updated_patch
get_user_action_set_includes(self)
We take this routine to add a few additional include statements.
_source_term_implementation
add_adm_constriants(self)
@add adm constriants (Hamilton and Momentum)
__init__(self, name, patch_size, min_mesh_unit_h, max_mesh_unit_h, cfl, domain_r, KOSig)
_preprocess_reconstructed_patch
add_Psi4W(self)
add psi4 writer
_fused_compute_kernel_call_cpu
The Gauss-Legendre Basis is by construction the only basis which yields diagonal mass matrices.
RKDG solver with global adaptive time step.
RKDG solver with Rusanov Riemann solver employing global adaptive time stepping.
The handling of (dynamically) adaptive meshes for finite differences.
Project patch data onto faces, so the faces hold valid data which can feed into the subsequent Runge-...
Roll over QUpdate data on face into QNew.
Dump the tracer data into a csv database.
Particle tracing over the Finite Volumes solver.
Basically superclass, though we add these numbers.
get_body_of_adm_constraints(patch_size, number_of_output_variable, so_flag)
get_body_of_SommerfeldCondition(scenario, unknowns, auxiliary_variables, restart_time=-1)
get_body_of_enforceCCZ4constraint()
get_body_of_Psi_Calc(patch_size, number_of_output_variable, so_flag)
create_compute_kernel_for_FD4(flux_implementation, ncp_implementation, source_implementation, compute_max_eigenvalue_of_next_time_step, solver_variant, kernel_variant, KOSigma)
I return only the unqualified function call, i.e.