@@ -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
8242end
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)
153110end
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)
178137end
179138
180139function Base. show (io:: IO , semi:: SemidiscretizationHyperbolicParabolic )
0 commit comments