Peano
pml.py
Go to the documentation of this file.
1 import os, sys, peano4, exahype2
2 
3 from exahype2.solvers.aderdg.ADERDG import Polynomials
4 
5 import PMLElastic
6 
7 sys.path.insert(0, os.path.abspath("../ExaSeis_core"))
8 import Scenario
9 
10 available_scenarios = {
11  "LOH1": Scenario.LOH1(),
12  "Zugspitze": Scenario.Zugspitze()
13 }
14 
15 scenario = "LOH1"
16 
17 scenario_string = scenario.lower()
18 my_scenario = available_scenarios[scenario]
19 
20 unknowns = {"v": 3, "sigma": 6, "pml": 27}
21 auxiliary_variables = {
22  "rho": 1, "cp": 1, "cs": 1,
23  "dmp_pml": 3, "jacobian": 1,
24  "metric_derivative": 9,
25  "curve_grid": 3,
26 }
27 
28 offset = my_scenario.domain_offset
29 size = my_scenario.domain_size
30 
31 end_time = my_scenario.end_time
32 plot_dt = 0.0
33 
34 order = 5
35 
36 min_level = 3
37 max_depth = 0
38 max_h = 1.1 * min(size) / (3.0**min_level)
39 min_h = max_h / (3.0**max_depth)
40 
41 precision = "fp64"
42 use_tracers = True
43 
44 my_scenario.generate_required_files(order)
45 
46 theSolver = 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 
56 theSolver.add_kernel_optimisations(
57  is_linear=True,
58  polynomials=Polynomials.Gauss_Lobatto,
59  initialise_patches=True,
60  precision = precision
61 )
62 
63 theSolver.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(),
68  flux = PMLElastic.flux(),
69  ncp = PMLElastic.ncp(),
71  riemann_solver = PMLElastic.riemann_solver(),
72  source_term = PMLElastic.algebraic_source(),
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 
78 theSolver._abstract_solver_user_definitions += PMLElastic.abstractUserDefinitions()
79 theSolver._abstract_solver_user_declarations += PMLElastic.abstractDeclarations()
80 theSolver._start_grid_initialisation_implementation += PMLElastic.init_grid_step_implementation(scenario_string)
81 theSolver._destructor_implementation += PMLElastic.abstractDestructor()
82 theSolver.add_user_solver_includes(PMLElastic.userIncludes())
83 
84 project = exahype2.Project(["exahype2", "elastic"], "pml", executable=scenario+"_l_"+str(min_level)+"_o_"+str(order)+"_pr_"+precision)
85 project.add_solver(theSolver)
86 
87 if use_tracers:
88  project.add_action_set_to_timestepping(
89  exahype2.tracer.NewDGTracer(
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 
97 if plot_dt > 0.0:
98  project.set_output_path("solutions")
99 
100 project.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 
111 project.set_load_balancer("new ::exahype2::LoadBalancingConfiguration()")
112 project.set_Peano4_installation("../../../../", peano4.output.CompileMode.Release)
113 peano4_project = project.generate_Peano4_project(verbose=False)
114 peano4_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
def userIncludes()
Definition: PMLElastic.py:366
def boundary()
Definition: PMLElastic.py:92
def flux()
Definition: PMLElastic.py:134
def riemann_solver()
Definition: PMLElastic.py:359
def ncp()
Definition: PMLElastic.py:189
def algebraic_source()
Definition: PMLElastic.py:272
def initial(pointwise_initial_conditions)
Definition: PMLElastic.py:3
def abstractUserDefinitions()
Definition: PMLElastic.py:376
def init_grid_step_implementation(scenario_string)
Definition: PMLElastic.py:399
def abstractDeclarations()
Definition: PMLElastic.py:384
def eigenvalue()
Definition: PMLElastic.py:99
def refinement_criterion()
Definition: PMLElastic.py:353
def abstractDestructor()
Definition: PMLElastic.py:454
def multiplyMaterialParameterMatrix()
Definition: PMLElastic.py:322
static double min(double const x, double const y)
str
Definition: ccz4.py:55