2 import peano4, exahype2
5 from exahype2.solvers.aderdg.ADERDG
import Polynomials
7 sys.path.insert(0, os.path.abspath(
"../../../applications/exahype2/exaseis/cartesian"))
10 sys.path.insert(0, os.path.abspath(
"./coupling"))
11 from coupling
import StaticCoupling
19 polynomials =
"legendre"
25 offset = [-2.025, 0.0, -2.025]
26 size = [12.15, 12.15, 12.15]
28 unknowns = {
"v": 3,
"sigma": 6}
29 auxiliary_variables = {
"rho":1,
"cp": 1,
"cs": 1}
31 max_h = 1.1 *
min(size) / (3.0**min_level)
32 min_h = max_h / (3.0**max_depth)
34 project = exahype2.Project( [
"applications",
"exahype2",
"elastic"],
".",
35 executable=
"LOH_level_"+
str(min_level)+
"_order_"+
str(order)+
"_"+polynomials )
37 hpSolver=exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
38 name=
"hpElastic", order=order,
39 unknowns=unknowns, auxiliary_variables=auxiliary_variables,
40 min_cell_h=min_h, max_cell_h=max_h, time_step_relaxation=0.9
43 hpSolver.add_kernel_optimisations(
47 lpSolver=exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
48 name=
"lpElastic", order=order,
49 unknowns=unknowns, auxiliary_variables=auxiliary_variables,
50 min_cell_h=min_h, max_cell_h=max_h, time_step_relaxation=0.9
53 lpSolver.add_kernel_optimisations(
57 for theSolver
in [hpSolver, lpSolver]:
59 theSolver.set_implementation(
66 number_of_point_sources = 1,
71 theSolver.add_kernel_optimisations(
72 is_linear=
True, polynomials=(Polynomials.Gauss_Lobatto
if polynomials==
"lobatto" else Polynomials.Gauss_Legendre)
75 theSolver.add_user_solver_includes(
"""
76 #include "../../../applications/exahype2/exaseis/ExaSeis_core/Numerics/cartesianRoutines.h"
77 #include "../../../applications/exahype2/exaseis/ExaSeis_core/Numerics/riemannsolverIsotropic.h"
80 project.add_solver(theSolver)
83 project.add_action_set_to_timestepping(
84 exahype2.tracer.NewDGTracer(
86 [0.000, 0., 0.693], [0.000, 0., 5.543], [0.000, 0., 10.392],
87 [0.490, 0., 0.490], [3.919, 0., 3.919], [7.348, 0., 7.3480],
88 [0.577, 0., 0.384], [4.612, 0., 3.075], [8.647, 0., 5.7640]
91 filename=
"tracers/Cartesian_level_"+
str(min_level)+
"_order_"+
str(order)+
"_"+polynomials+theSolver.get_name_of_global_instance(),
92 data_delta_between_two_snapshots=1e16, time_delta_between_two_snapshots=0.01,
93 output_precision=10, clear_database_after_flush=
False
96 if not os.path.exists(
"tracers"):
97 os.makedirs(
"tracers")
99 theSolver._abstract_solver_user_declarations +=
"double QuadraturePoints1d[Order+1];"
100 theSolver._constructor_implementation +=
"""
102 kernels::{{SOLVER_NAME}}::Quadrature<{{SOLUTION_STORAGE_PRECISION}}>::nodes,
109 name =
"limitingSolver",
110 regularSolver = hpSolver,
111 limitingSolver = lpSolver,
112 limiting_criterion_implementation =
"""
115 x[0] > -2.025 && x[0] < 2.025 &&
117 x[2] > -2.025 && x[2] <= 2.925
121 project.add_solver(limiter)
124 project.set_output_path(
"solutions")
126 project.set_global_simulation_parameters(
128 offset = offset[0:3],
131 first_plot_time_stamp = 0.0,
132 time_in_between_plots = plot_dt,
135 project.set_load_balancer(
"new ::exahype2::LoadBalancingConfiguration()")
136 project.set_Peano4_installation(
"../../../", peano4.output.CompileMode.Release )
137 peano4_project = project.generate_Peano4_project(
"False")
139 peano4_project.build(make_clean_first=
True)
def refinement_criterion()
static double min(double const x, double const y)