Peano
Loading...
Searching...
No Matches
dynamic-rupture.py
Go to the documentation of this file.
1import os, sys, peano4, exahype2
2
3from exahype2.solvers.aderdg.ADERDG import Polynomials
4
5sys.path.insert(0, os.path.abspath("../pml"))
6
7import PMLElastic
8import DynamicRuptureElastic
9
10#sys.path.insert(0, os.path.abspath("../ExaSeis_core/Scenario"))
11#import TPV5, TPV26, TPV28, TPV29
12
13sys.path.insert(0, os.path.abspath("../ExaSeis_core"))
14import Scenario
15
16
17available_scenarios = {
18 "TPV5": Scenario.TPV5(),
19 "TPV6": Scenario.TPV6(),
20 "TPV16": Scenario.TPV16(),
21 "TPV26": Scenario.TPV26(),
22 "TPV28": Scenario.TPV28(),
23 "TPV29": Scenario.TPV29(),
24 "TPV34": Scenario.TPV34(),
25 "Husavik": Scenario.Husavik()
26}
27
28
29scenario = "TPV5"
30scenario_string = scenario.lower()
31my_scenario = available_scenarios[scenario]
32
33unknowns = {"v": 3, "sigma": 6, "u": 3}
34auxiliary_variables = {
35 "rho": 1, "cp": 1, "cs": 1, "jacobian": 1,
36 "metric_derivative": 9,
37 "curve_grid": 3,
38}
39
40offset = my_scenario.domain_offset
41size = my_scenario.domain_size
42
43plot_dt = 1.0
44end_time = my_scenario.end_time
45
46order = 5
47min_level = 3
48max_depth = 0
49max_h = 1.1 * min(size) / (3.0**min_level)
50min_h = max_h / (3.0**max_depth)
51
52precision = "fp32"
53
54my_scenario.generate_required_files(order)
55
56theSolver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
57 name="ElasticSolver",
58 order=order,
59 unknowns=unknowns,
60 auxiliary_variables=auxiliary_variables,
61 min_cell_h=min_h,
62 max_cell_h=max_h,
63 time_step_relaxation=0.9
64)
65
66theSolver.add_kernel_optimisations(
67 is_linear=True,
68 polynomials=Polynomials.Gauss_Lobatto,
69 initialise_patches=True,
70 precision=precision
71)
72
73theSolver.set_implementation(
74 initial_conditions = DynamicRuptureElastic.initial(my_scenario.initial_conditions()), #same as curvi, which still need to be templated for initial conditions
75 boundary_conditions = PMLElastic.boundary(),
76 max_eigenvalue = PMLElastic.eigenvalue(),
77 flux = DynamicRuptureElastic.flux(), #same as curvi
78 ncp = DynamicRuptureElastic.ncp(), # same as curvi
79 material_parameters = DynamicRuptureElastic.multiplyMaterialParameterMatrix(), #same as curvi +u term
82)
83
84theSolver._abstract_solver_user_declarations += DynamicRuptureElastic.abstractDeclarations()
85theSolver._abstract_solver_user_definitions += DynamicRuptureElastic.abstractUserDefinitions()
86theSolver._start_grid_initialisation_implementation += DynamicRuptureElastic.init_grid_step_implementation(scenario_string)
87theSolver._destructor_implementation += DynamicRuptureElastic.abstractDestructor()
88theSolver.add_user_solver_includes(DynamicRuptureElastic.userIncludes())
89
90filename=scenario+"_l_"+str(min_level)+"_o_"+str(order)+"_pr_"+str(precision)
91project = exahype2.Project(["applications", "exahype2", "exaseis"], "dynamicRupture", executable=filename)
92project.add_solver(theSolver)
93
94project.add_action_set_to_timestepping(
95 exahype2.tracer.CurviTracer(
96 coordinates= my_scenario.tracer_coordinates,
97 fault_coordinates=my_scenario.fault_coordinates,
98 solver=theSolver,
99 filename=filename,
100 data_delta_between_two_snapshots=1e16, time_delta_between_two_snapshots=0.01,
101 output_precision=10, clear_database_after_flush=False,
102 number_of_entries_between_two_db_flushes=100
103))
104
105if plot_dt > 0.0:
106 project.set_output_path("solutions"+filename)
107
108 theSolver.set_face_plotter(peano4.plotter.HDF5FaceNodalPlotter, """
109 ((marker.getSelectedFaceNumber() % DIMENSIONS) == 2-repositories::""" + theSolver.get_name_of_global_instance() + """.context->fault_normal) and
110 std::abs(marker.getX()[2-repositories::""" + theSolver.get_name_of_global_instance() + """.context->fault_normal]-repositories::""" \
111 + theSolver.get_name_of_global_instance() + """.context->fault_position)< 0.5*marker.getH()[2-repositories::""" \
112 + theSolver.get_name_of_global_instance() + """.context->fault_normal]
113 """)
114
115project.set_global_simulation_parameters(
116 dimensions=3,
117 offset=offset,
118 size=size,
119 min_end_time=end_time,
120 max_end_time=end_time,
121 first_plot_time_stamp=0.0,
122 time_in_between_plots = plot_dt,
123 periodic_BC=[False, False, False]
124)
125
126project.set_load_balancer("new ::exahype2::LoadBalancingConfiguration")
127project.set_build_mode(peano4.output.CompileMode.Release)
128peano4_project = project.generate_Peano4_project(verbose=False)
129peano4_project.build(make_clean_first=True)
Simulates an earthquake in the north Iceland region, around the Húsavı́k-Flatey fault.
Definition Husavik.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV16.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV26.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV28.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV29.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV34.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV5.py:7
Part of a series of benchmarks by the Statewide California Earthquake Center (SCEC)
Definition TPV6.py:7
init_grid_step_implementation(scenario_string)
initial(pointwise_initial_conditions)