Skip to content

Commit d0708d9

Browse files
Remove boilerplate code SemidiscretizationHyperbolicParabolic (#2666)
* Remove boilerplate code `SemidiscretizationHyperbolicParabolic` * comment * Update src/semidiscretization/semidiscretization_hyperbolic_parabolic.jl * db * reamke * Update src/semidiscretization/semidiscretization_hyperbolic_parabolic.jl * fmt * fix
1 parent 031c8ba commit d0708d9

File tree

9 files changed

+60
-100
lines changed

9 files changed

+60
-100
lines changed

src/semidiscretization/semidiscretization_euler_gravity.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,11 @@ function remake(semi::SemidiscretizationEulerGravity;
168168
u_tmp2_ode = similar(u_ode)
169169
cache = (; u_ode, du_ode, u_tmp1_ode, u_tmp2_ode)
170170

171-
SemidiscretizationEulerGravity{typeof(semi_euler), typeof(semi_gravity),
172-
typeof(parameters), typeof(cache)}(semi_euler,
173-
semi_gravity,
174-
parameters, cache)
171+
return SemidiscretizationEulerGravity{typeof(semi_euler), typeof(semi_gravity),
172+
typeof(parameters), typeof(cache)}(semi_euler,
173+
semi_gravity,
174+
parameters,
175+
cache)
175176
end
176177

177178
function Base.show(io::IO, semi::SemidiscretizationEulerGravity)

src/semidiscretization/semidiscretization_hyperbolic.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ function remake(semi::SemidiscretizationHyperbolic; uEltype = real(semi.solver),
8383
# TODO: Which parts do we want to `remake`? At least the solver needs some
8484
# special care if shock-capturing volume integrals are used (because of
8585
# the indicators and their own caches...).
86-
SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;
87-
source_terms, boundary_conditions, uEltype)
86+
return SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;
87+
source_terms, boundary_conditions, uEltype)
8888
end
8989

9090
# general fallback

src/semidiscretization/semidiscretization_hyperbolic_parabolic.jl

Lines changed: 47 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -39,46 +39,6 @@ struct SemidiscretizationHyperbolicParabolic{Mesh, Equations, EquationsParabolic
3939
cache_parabolic::CacheParabolic
4040

4141
performance_counter::PerformanceCounterList{2}
42-
43-
function SemidiscretizationHyperbolicParabolic{Mesh, Equations, EquationsParabolic,
44-
InitialCondition, BoundaryConditions,
45-
BoundaryConditionsParabolic,
46-
SourceTerms, Solver,
47-
SolverParabolic, Cache,
48-
CacheParabolic}(mesh::Mesh,
49-
equations::Equations,
50-
equations_parabolic::EquationsParabolic,
51-
initial_condition::InitialCondition,
52-
boundary_conditions::BoundaryConditions,
53-
boundary_conditions_parabolic::BoundaryConditionsParabolic,
54-
source_terms::SourceTerms,
55-
solver::Solver,
56-
solver_parabolic::SolverParabolic,
57-
cache::Cache,
58-
cache_parabolic::CacheParabolic) where {
59-
Mesh,
60-
Equations,
61-
EquationsParabolic,
62-
InitialCondition,
63-
BoundaryConditions,
64-
BoundaryConditionsParabolic,
65-
SourceTerms,
66-
Solver,
67-
SolverParabolic,
68-
Cache,
69-
CacheParabolic
70-
}
71-
@assert ndims(mesh) == ndims(equations)
72-
73-
# Todo: assert nvariables(equations)==nvariables(equations_parabolic)
74-
75-
performance_counter = PerformanceCounterList{2}(false)
76-
77-
new(mesh, equations, equations_parabolic, initial_condition,
78-
boundary_conditions, boundary_conditions_parabolic,
79-
source_terms, solver, solver_parabolic, cache, cache_parabolic,
80-
performance_counter)
81-
end
8242
end
8343

8444
"""
@@ -100,56 +60,53 @@ function SemidiscretizationHyperbolicParabolic(mesh, equations::Tuple,
10060
# `RealT` is used as real type for node locations etc.
10161
# while `uEltype` is used as element type of solutions etc.
10262
RealT = real(solver), uEltype = RealT)
103-
equations_hyperbolic, equations_parabolic = equations
104-
boundary_conditions_hyperbolic, boundary_conditions_parabolic = boundary_conditions
63+
equations, equations_parabolic = equations
64+
boundary_conditions, boundary_conditions_parabolic = boundary_conditions
10565

106-
return SemidiscretizationHyperbolicParabolic(mesh, equations_hyperbolic,
107-
equations_parabolic,
108-
initial_condition, solver;
109-
solver_parabolic, source_terms,
110-
boundary_conditions = boundary_conditions_hyperbolic,
111-
boundary_conditions_parabolic = boundary_conditions_parabolic,
112-
RealT, uEltype)
113-
end
66+
@assert ndims(mesh) == ndims(equations)
67+
@assert ndims(mesh) == ndims(equations_parabolic)
11468

115-
function SemidiscretizationHyperbolicParabolic(mesh, equations, equations_parabolic,
116-
initial_condition, solver;
117-
solver_parabolic = default_parabolic_solver(),
118-
source_terms = nothing,
119-
boundary_conditions = boundary_condition_periodic,
120-
boundary_conditions_parabolic = boundary_condition_periodic,
121-
# `RealT` is used as real type for node locations etc.
122-
# while `uEltype` is used as element type of solutions etc.
123-
RealT = real(solver), uEltype = RealT)
124-
cache = create_cache(mesh, equations, solver, RealT, uEltype)
125-
_boundary_conditions = digest_boundary_conditions(boundary_conditions, mesh, solver,
126-
cache)
127-
_boundary_conditions_parabolic = digest_boundary_conditions(boundary_conditions_parabolic,
128-
mesh, solver, cache)
69+
if !(nvariables(equations) == nvariables(equations_parabolic))
70+
throw(ArgumentError("Current implementation of viscous terms requires the same number of conservative and gradient variables."))
71+
end
12972

73+
cache = create_cache(mesh, equations, solver, RealT, uEltype)
74+
_boundary_conditions = digest_boundary_conditions(boundary_conditions,
75+
mesh, solver, cache)
13076
check_periodicity_mesh_boundary_conditions(mesh, _boundary_conditions)
13177

13278
cache_parabolic = create_cache_parabolic(mesh, equations, equations_parabolic,
133-
solver, solver_parabolic, RealT,
134-
uEltype)
135-
136-
SemidiscretizationHyperbolicParabolic{typeof(mesh), typeof(equations),
137-
typeof(equations_parabolic),
138-
typeof(initial_condition),
139-
typeof(_boundary_conditions),
140-
typeof(_boundary_conditions_parabolic),
141-
typeof(source_terms), typeof(solver),
142-
typeof(solver_parabolic), typeof(cache),
143-
typeof(cache_parabolic)}(mesh, equations,
144-
equations_parabolic,
145-
initial_condition,
146-
_boundary_conditions,
147-
_boundary_conditions_parabolic,
148-
source_terms,
149-
solver,
150-
solver_parabolic,
151-
cache,
152-
cache_parabolic)
79+
solver, solver_parabolic,
80+
RealT, uEltype)
81+
82+
_boundary_conditions_parabolic = digest_boundary_conditions(boundary_conditions_parabolic,
83+
mesh, solver, cache)
84+
check_periodicity_mesh_boundary_conditions(mesh, _boundary_conditions_parabolic)
85+
86+
performance_counter = PerformanceCounterList{2}(false)
87+
88+
return SemidiscretizationHyperbolicParabolic{typeof(mesh),
89+
typeof(equations),
90+
typeof(equations_parabolic),
91+
typeof(initial_condition),
92+
typeof(_boundary_conditions),
93+
typeof(_boundary_conditions_parabolic),
94+
typeof(source_terms),
95+
typeof(solver),
96+
typeof(solver_parabolic),
97+
typeof(cache),
98+
typeof(cache_parabolic)}(mesh,
99+
equations,
100+
equations_parabolic,
101+
initial_condition,
102+
_boundary_conditions,
103+
_boundary_conditions_parabolic,
104+
source_terms,
105+
solver,
106+
solver_parabolic,
107+
cache,
108+
cache_parabolic,
109+
performance_counter)
153110
end
154111

155112
# Create a new semidiscretization but change some parameters compared to the input.
@@ -171,10 +128,12 @@ function remake(semi::SemidiscretizationHyperbolicParabolic;
171128
# TODO: Which parts do we want to `remake`? At least the solver needs some
172129
# special care if shock-capturing volume integrals are used (because of
173130
# the indicators and their own caches...).
174-
SemidiscretizationHyperbolicParabolic(mesh, equations, equations_parabolic,
175-
initial_condition, solver; solver_parabolic,
176-
source_terms, boundary_conditions,
177-
boundary_conditions_parabolic, uEltype)
131+
return SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),
132+
initial_condition, solver;
133+
solver_parabolic, source_terms,
134+
boundary_conditions = (boundary_conditions,
135+
boundary_conditions_parabolic),
136+
uEltype)
178137
end
179138

180139
function Base.show(io::IO, semi::SemidiscretizationHyperbolicParabolic)

src/solvers/dgsem_p4est/dg_2d_parabolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@muladd begin
66
#! format: noindent
77

8-
# This method is called when a SemidiscretizationHyperbolicParabolic is constructed.
8+
# This method is called when a `SemidiscretizationHyperbolicParabolic` is constructed.
99
# It constructs the basic `cache` used throughout the simulation to compute
1010
# the RHS etc.
1111
function create_cache_parabolic(mesh::P4estMesh{2},

src/solvers/dgsem_p4est/dg_3d_parabolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@muladd begin
66
#! format: noindent
77

8-
# This method is called when a SemidiscretizationHyperbolicParabolic is constructed.
8+
# This method is called when a `SemidiscretizationHyperbolicParabolic` is constructed.
99
# It constructs the basic `cache` used throughout the simulation to compute
1010
# the RHS etc.
1111
function create_cache_parabolic(mesh::P4estMesh{3},

src/solvers/dgsem_tree/dg_1d_parabolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ function calc_gradient!(gradients, u_transformed, t, mesh::TreeMesh{1},
562562
return nothing
563563
end
564564

565-
# This method is called when a SemidiscretizationHyperbolic is constructed.
565+
# This method is called when a `SemidiscretizationHyperbolicParabolic` is constructed.
566566
# It constructs the basic `cache` used throughout the simulation to compute
567567
# the RHS etc.
568568
function create_cache_parabolic(mesh::TreeMesh{1},

src/solvers/dgsem_tree/dg_2d_parabolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ function calc_gradient!(gradients, u_transformed, t,
975975
return nothing
976976
end
977977

978-
# This method is called when a SemidiscretizationHyperbolic is constructed.
978+
# This method is called when a `SemidiscretizationHyperbolicParabolic` is constructed.
979979
# It constructs the basic `cache` used throughout the simulation to compute
980980
# the RHS etc.
981981
function create_cache_parabolic(mesh::TreeMesh{2},

src/solvers/dgsem_tree/dg_3d_parabolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,7 @@ function calc_gradient!(gradients, u_transformed, t,
11641164
return nothing
11651165
end
11661166

1167-
# This method is called when a SemidiscretizationHyperbolic is constructed.
1167+
# This method is called when a `SemidiscretizationHyperbolicParabolic` is constructed.
11681168
# It constructs the basic `cache` used throughout the simulation to compute
11691169
# the RHS etc.
11701170
function create_cache_parabolic(mesh::TreeMesh{3},

test/test_parabolic_2d.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ isdir(outdir) && rm(outdir, recursive = true)
2929
equations = LinearScalarAdvectionEquation2D(1.0, 1.0)
3030
equations_parabolic = LaplaceDiffusion2D(1.0, equations)
3131

32-
semi = SemidiscretizationHyperbolicParabolic(mesh, equations, equations_parabolic,
32+
semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),
3333
initial_condition, dg)
3434
@trixi_test_nowarn show(stdout, semi)
3535
@trixi_test_nowarn show(stdout, MIME"text/plain"(), semi)

0 commit comments

Comments
 (0)