Peano
curvilinear.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 os, sys
6 import subprocess
7 
8 import CurvilinearElastic
9 
10 sys.path.insert(0, os.path.abspath("../ExaSeis_core"))
11 import Scenario
12 
13 available_scenarios = {
14  "LOH1": Scenario.LOH1(),
15  "Zugspitze": Scenario.Zugspitze()
16 }
17 
18 scenario = "LOH1"
19 precision = "fp64"
20 use_tracers = True
21 order = 5
22 min_level = 3
23 plot_dt = 0.0
24 
25 scenario_string = scenario.lower()
26 my_scenario = available_scenarios[scenario]
27 
28 unknowns = {"v": 3, "sigma": 6}
29 auxiliary_variables = {
30  "rho": 1, "cp": 1, "cs": 1,
31  "jacobian": 1, "metric_derivative": 9,
32  "curve_grid": 3,
33 }
34 
35 offset = my_scenario.domain_offset
36 size = my_scenario.domain_size
37 end_time = my_scenario.end_time
38 
39 max_depth = 0
40 max_h = 1.1 * min(size) / (3.0**min_level)
41 min_h = max_h / (3.0**max_depth)
42 
43 my_scenario.generate_required_files(order)
44 
45 theSolver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
46  name="ElasticSolver",
47  order=order,
48  unknowns=unknowns,
49  auxiliary_variables=auxiliary_variables,
50  min_cell_h=min_h,
51  max_cell_h=max_h,
52  time_step_relaxation=0.9
53 )
54 
55 theSolver.add_kernel_optimisations(
56  is_linear=True,
57  polynomials=Polynomials.Gauss_Lobatto,
58  initialise_patches=True,
59  precision = precision
60 )
61 
62 theSolver.set_implementation(
63  initial_conditions = CurvilinearElastic.initial(my_scenario.initial_conditions()),
64  boundary_conditions = CurvilinearElastic.boundary(),
65  max_eigenvalue = CurvilinearElastic.eigenvalue(),
66  refinement_criterion = CurvilinearElastic.refinement_criterion(),
71  number_of_point_sources = 1,
72  point_source = my_scenario.point_source(),
73  init_point_source_location = my_scenario.init_point_source()
74 )
75 
76 theSolver._abstract_solver_user_declarations += CurvilinearElastic.abstractDeclarations()
77 theSolver._abstract_solver_user_definitions += CurvilinearElastic.abstractUserDefinitions()
78 theSolver._start_grid_initialisation_implementation += CurvilinearElastic.init_grid_step_implementation(scenario_string)
79 theSolver.add_user_solver_includes(CurvilinearElastic.userIncludes())
80 
81 filename = scenario+"_l"+str(min_level)+"_o"+str(order)+"_pr_"+precision
82 project = exahype2.Project(["exahype2", "elastic"], "curvi", executable="LOH1")
83 
84 project.add_solver(theSolver)
85 
86 if use_tracers:
87  project.add_action_set_to_timestepping(
88  exahype2.tracer.NewDGTracer(
89  coordinates=my_scenario.tracer_coordinates,
90  solver=theSolver,
91  filename=filename,
92  data_delta_between_two_snapshots=1e16, time_delta_between_two_snapshots=0.01,
93  output_precision=10, clear_database_after_flush=False
94  ))
95 
96 project.set_global_simulation_parameters(
97  dimensions=3,
98  offset=offset,
99  size=size,
100  min_end_time=end_time,
101  max_end_time=end_time,
102  first_plot_time_stamp=0.0,
103  time_in_between_plots=0.0,
104  periodic_BC=[False, False, False],
105 )
106 
107 project.set_load_balancer("new ::exahype2::LoadBalancingConfiguration()")
108 project.set_Peano4_installation( "../../../../", peano4.output.CompileMode.Release )
109 peano4_project = project.generate_Peano4_project(verbose=False)
110 peano4_project.build(make_clean_first=True)
111 
112 os.rename("LOH1", filename)
113 subprocess.run("make distclean", shell = True, executable="/bin/bash")
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 initial(pointwise_initial_conditions)
def init_grid_step_implementation(scenario_string)
static double min(double const x, double const y)
str
Definition: ccz4.py:55