Peano
Loading...
Searching...
No Matches
pml.py
Go to the documentation of this file.
1import os, sys, peano4, exahype2
2
3from exahype2.solvers.aderdg.ADERDG import Polynomials
4
5import PMLElastic
6
7sys.path.insert(0, os.path.abspath("../ExaSeis_core"))
8import Scenario
9
10available_scenarios = {
11 "LOH1": Scenario.LOH1(),
12 "Zugspitze": Scenario.Zugspitze()
13}
14
15scenario = "LOH1"
16
17scenario_string = scenario.lower()
18my_scenario = available_scenarios[scenario]
19
20unknowns = {"v": 3, "sigma": 6, "pml": 27}
21auxiliary_variables = {
22 "rho": 1, "cp": 1, "cs": 1,
23 "dmp_pml": 3, "jacobian": 1,
24 "metric_derivative": 9,
25 "curve_grid": 3,
26}
27
28offset = my_scenario.domain_offset
29size = my_scenario.domain_size
30
31end_time = my_scenario.end_time
32plot_dt = 0.0
33
34order = 5
35
36min_level = 3
37max_depth = 0
38max_h = 1.1 * min(size) / (3.0**min_level)
39min_h = max_h / (3.0**max_depth)
40
41precision = "fp64"
42use_tracers = True
43
44my_scenario.generate_required_files(order)
45
46theSolver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
47 name="ElasticSolver",
48 order=order,
49 unknowns=unknowns,
50 auxiliary_variables=auxiliary_variables,
51 min_cell_h=min_h,
52 max_cell_h=max_h,
53 time_step_relaxation=0.9
54)
55
56theSolver.add_kernel_optimisations(
57 is_linear=True,
58 polynomials=Polynomials.Gauss_Lobatto,
59 initialise_patches=True,
60 precision = precision
61)
62
63theSolver.set_implementation(
64 initial_conditions = PMLElastic.initial(my_scenario.initial_conditions()),
65 boundary_conditions = PMLElastic.boundary(),
66 max_eigenvalue = PMLElastic.eigenvalue(),
67 refinement_criterion = PMLElastic.refinement_criterion(),
71 riemann_solver = PMLElastic.riemann_solver(),
73 number_of_point_sources = 1,
74 point_source = my_scenario.point_source(),
75 init_point_source_location = my_scenario.init_point_source()
76)
77
78theSolver._abstract_solver_user_definitions += PMLElastic.abstractUserDefinitions()
79theSolver._abstract_solver_user_declarations += PMLElastic.abstractDeclarations()
80theSolver._start_grid_initialisation_implementation += PMLElastic.init_grid_step_implementation(scenario_string)
81theSolver._destructor_implementation += PMLElastic.abstractDestructor()
82theSolver.add_user_solver_includes(PMLElastic.userIncludes())
83
84project = exahype2.Project(["exahype2", "elastic"], "pml", executable=scenario+"_l_"+str(min_level)+"_o_"+str(order)+"_pr_"+precision)
85project.add_solver(theSolver)
86
87if use_tracers:
88 project.add_action_set_to_timestepping(
89 exahype2.tracer.CurviTracer(
90 coordinates=my_scenario.tracer_coordinates,
91 solver=theSolver,
92 filename=scenario+"_level_"+str(min_level)+"-order-"+str(order)+"-precision-"+str(precision),
93 data_delta_between_two_snapshots=1e16, time_delta_between_two_snapshots=0.01,
94 output_precision=10, clear_database_after_flush=False
95 ))
96
97if plot_dt > 0.0:
98 project.set_output_path("solutions")
99
100project.set_global_simulation_parameters(
101 dimensions=3,
102 offset=offset,
103 size=size,
104 min_end_time=end_time,
105 max_end_time=end_time,
106 first_plot_time_stamp=0.0,
107 time_in_between_plots=plot_dt,
108 periodic_BC=[False, False, False]
109)
110
111project.set_load_balancer("new ::exahype2::LoadBalancingConfiguration()")
112project.set_Peano4_installation("../../../../", peano4.output.CompileMode.Release)
113peano4_project = project.generate_Peano4_project(verbose=False)
114peano4_project.build(make_clean_first=True)
Part of a series of benchmarks by the SeISmic MOdeling Web INterfacE (Sismowine)
Definition LOH1.py:7
Benchmark representing a rectangular area of 80x80km around the Zugspitze.
Definition Zugspitze.py:7
multiplyMaterialParameterMatrix()
abstractDestructor()
init_grid_step_implementation(scenario_string)
initial(pointwise_initial_conditions)
Definition PMLElastic.py:3
abstractDeclarations()
refinement_criterion()
abstractUserDefinitions()