3 import peano4, exahype2
5 from FWave
import fWave, rusanov
7 project = exahype2.Project(
8 [
"tests",
"exahype2",
"aderdg"],
".", executable=
"ADERDG-Limiting"
21 max_h = 1.1 *
min(size) / (3.0**min_level)
22 min_h = max_h / (3.0**max_depth)
24 initial_conditions =
"""
25 static tarch::reader::TopologyParser topologyParser(
26 \"tohoku_gebco_ucsb3_2000m_hawaii_bath.nc\",
27 \"tohoku_gebco_ucsb3_2000m_hawaii_displ.nc\",
28 7000000,//DomainSize(0),
29 4000000,//DomainSize(1),
34 const double bathymetryBeforeEarthquake = topologyParser.sampleBathymetry(x(0), x(1));
35 const double displacement = topologyParser.sampleDisplacement(x(0), x(1));
36 const double bathymetryAfterEarthquake = bathymetryBeforeEarthquake + displacement;
38 Q[0] = -1*std::min(bathymetryBeforeEarthquake, 0.0);
41 Q[3] = bathymetryAfterEarthquake;
44 boundary_conditions =
"""
51 double ih = 1.0 / Q[0];
54 F[1] = Q[1 + normal] * Q[1] * ih;
55 F[2] = Q[1 + normal] * Q[2] * ih;
60 std::fill_n(BTimesDeltaQ, NumberOfUnknowns, 0.0);
62 constexpr double grav = 9.81;
63 BTimesDeltaQ[normal+1] = grav * Q[0] * (deltaQ[0] + deltaQ[3]);
67 constexpr double grav = 9.81;
69 const double u = Q[1 + normal] / Q[0];
70 const double c = std::sqrt(grav * Q[0]);
72 return std::max(std::abs(u + c), std::abs(u - c));
75 limiting_criterion =
"""
76 if(x[0]<=0.5*DomainSize[0]){
84 aderdg_solver = exahype2.solvers.aderdg.GlobalAdaptiveTimeStep(
88 auxiliary_variables=0,
91 time_step_relaxation=0.9,
94 initial_conditions=initial_conditions,
95 boundary_conditions=boundary_conditions,
97 aderdg_solver.add_kernel_optimisations(
98 polynomials=exahype2.solvers.aderdg.Polynomials.Gauss_Lobatto,
99 riemann_solver_implementation = rusanov,
102 aderdg_solver.add_user_solver_includes(
"""
103 #include "tarch/reader/TopologyParser.h"
105 project.add_solver(aderdg_solver)
144 fv_solver = exahype2.solvers.fv.godunov.GlobalAdaptiveTimeStep(
146 patch_size=2 * order + 1,
147 unknowns={
"h": 1,
"hu": 1,
"hv": 1},
148 auxiliary_variables={
"b": 1},
151 time_step_relaxation=0.9,
154 fv_solver.set_implementation(
157 max_eigenvalue=max_eval,
158 initial_conditions=initial_conditions,
159 boundary_conditions=boundary_conditions,
162 fv_solver.add_user_solver_includes(
"""
163 #include "tarch/reader/TopologyParser.h"
165 project.add_solver(fv_solver)
169 limiter = exahype2.solvers.limiting.StaticLimiting(
170 name=
"LimitingSolver",
171 regular_solver=aderdg_solver,
172 limiting_solver=fv_solver,
173 limiting_criterion_implementation=limiting_criterion,
175 project.add_solver(limiter)
196 project.set_output_path(
"solutions")
198 build_mode = peano4.output.CompileMode.Release
200 project.set_global_simulation_parameters(
201 dimensions=dimensions,
202 offset=offset[0:dimensions],
203 size=size[0:dimensions],
204 min_end_time=end_time,
205 max_end_time=end_time,
206 first_plot_time_stamp=0.0,
207 time_in_between_plots=plot_interval,
208 periodic_BC=[
False,
False,
False][0:dimensions],
211 project.set_load_balancing(
212 "toolbox::loadbalancing::strategies::SpreadOut",
213 "new ::exahype2::LoadBalancingConfiguration()",
215 project.set_Peano4_installation(
"../../../", build_mode)
216 project = project.generate_Peano4_project(verbose=
False)
218 project.build(make_clean_first=
True)
static double min(double const x, double const y)