ExaDG
Loading...
Searching...
No Matches
application_base.h
1/* ______________________________________________________________________
2 *
3 * ExaDG - High-Order Discontinuous Galerkin for the Exa-Scale
4 *
5 * Copyright (C) 2023 by the ExaDG authors
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 * ______________________________________________________________________
20 */
21
22#ifndef EXADG_AERO_ACOUSTIC_USER_INTERFACE_APPLICATION_BASE_H_
23#define EXADG_AERO_ACOUSTIC_USER_INTERFACE_APPLICATION_BASE_H_
24
25// deal.II
26#include <deal.II/distributed/fully_distributed_tria.h>
27#include <deal.II/distributed/tria.h>
28#include <deal.II/grid/grid_generator.h>
29#include <deal.II/grid/grid_tools.h>
30#include <deal.II/grid/manifold_lib.h>
31
32// ExaDG
33#include <exadg/acoustic_conservation_equations/postprocessor/postprocessor.h>
34#include <exadg/acoustic_conservation_equations/user_interface/boundary_descriptor.h>
35#include <exadg/acoustic_conservation_equations/user_interface/field_functions.h>
36#include <exadg/acoustic_conservation_equations/user_interface/parameters.h>
37#include <exadg/aero_acoustic/user_interface/field_functions.h>
38#include <exadg/aero_acoustic/user_interface/parameters.h>
39#include <exadg/grid/grid.h>
40#include <exadg/grid/grid_utilities.h>
41#include <exadg/incompressible_navier_stokes/postprocessor/postprocessor.h>
42#include <exadg/incompressible_navier_stokes/user_interface/boundary_descriptor.h>
43#include <exadg/incompressible_navier_stokes/user_interface/field_functions.h>
44#include <exadg/incompressible_navier_stokes/user_interface/parameters.h>
45#include <exadg/operators/resolution_parameters.h>
46#include <exadg/postprocessor/output_parameters.h>
47
48namespace ExaDG
49{
50namespace AcousticsAeroAcoustic
51{
52template<int dim, typename Number>
53class ApplicationBase
54{
55public:
56 ApplicationBase(std::string parameter_file, MPI_Comm const & comm)
57 : mpi_comm(comm),
58 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
59 parameter_file(parameter_file)
60 {
61 }
62
63 virtual ~ApplicationBase() = default;
64
65 virtual void
66 add_parameters(dealii::ParameterHandler & prm)
67 {
68 resolution.add_parameters(prm, "SpatialResolutionAcoustics");
69 output_parameters.add_parameters(prm, "Output");
70 }
71
72 void
73 parse_parameters()
74 {
75 dealii::ParameterHandler prm;
76 this->add_parameters(prm);
77 prm.parse_input(parameter_file, "", true, true);
78 }
79
80 void
81 setup(std::shared_ptr<Grid<dim>> & grid, std::shared_ptr<dealii::Mapping<dim>> & mapping)
82 {
83 parse_parameters();
84
85 set_resolution_parameters();
86
87 // parameters
88 set_parameters();
89 param.check();
90
91 // Some AeroAcoustic specific Asserts
92 AssertThrow(param.adaptive_time_stepping == true,
93 dealii::ExcMessage("Adaptive timestepping has to be enabled for aero-acoustics."));
94
95 AssertThrow(param.aero_acoustic_source_term,
96 dealii::ExcMessage(
97 "aero_acoustic_source_term has to be set true for aero-acoustic computations."));
98
99 param.print(pcout, "List of parameters for acoustic conservation equations:");
100
101 // grid
102 grid = std::make_shared<Grid<dim>>();
103 create_grid(*grid, mapping);
104 print_grid_info(pcout, *grid);
105
106 // boundary conditions
107 boundary_descriptor = std::make_shared<Acoustics::BoundaryDescriptor<dim>>();
108 set_boundary_descriptor();
109 ExaDG::verify_boundary_conditions(*boundary_descriptor, *grid);
110
111 // field functions
112 field_functions = std::make_shared<Acoustics::FieldFunctions<dim>>();
113 set_field_functions();
114 }
115
117 get_parameters() const
118 {
119 return param;
120 }
121
122 std::shared_ptr<Acoustics::BoundaryDescriptor<dim> const>
123 get_boundary_descriptor() const
124 {
125 return boundary_descriptor;
126 }
127
128 std::shared_ptr<Acoustics::FieldFunctions<dim> const>
129 get_field_functions() const
130 {
131 return field_functions;
132 }
133
134 virtual std::shared_ptr<Acoustics::PostProcessorBase<dim, Number>>
135 create_postprocessor() = 0;
136
137protected:
138 MPI_Comm const mpi_comm;
139
140 dealii::ConditionalOStream pcout;
141
143
144 std::shared_ptr<Acoustics::FieldFunctions<dim>> field_functions;
145 std::shared_ptr<Acoustics::BoundaryDescriptor<dim>> boundary_descriptor;
146
147 std::string parameter_file;
148
149 OutputParameters output_parameters;
150
151private:
152 void
153 set_resolution_parameters()
154 {
155 param.degree_u = resolution.degree;
156 param.grid.n_refine_global = resolution.refine_space;
157 }
158
159 virtual void
160 set_parameters() = 0;
161
162 virtual void
163 create_grid(Grid<dim> & grid, std::shared_ptr<dealii::Mapping<dim>> & mapping) = 0;
164
165 virtual void
166 set_boundary_descriptor() = 0;
167
168 virtual void
169 set_field_functions() = 0;
170
172};
173
174} // namespace AcousticsAeroAcoustic
175
176namespace FluidAeroAcoustic
177{
178template<int dim, typename Number>
179class ApplicationBase
180{
181public:
182 ApplicationBase(std::string parameter_file, MPI_Comm const & comm)
183 : mpi_comm(comm),
184 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
185 parameter_file(parameter_file)
186 {
187 }
188
189 virtual ~ApplicationBase() = default;
190
191 virtual void
192 add_parameters(dealii::ParameterHandler & prm)
193 {
194 resolution.add_parameters(prm, "SpatialResolutionFluid");
195 output_parameters.add_parameters(prm, "Output");
196 }
197
198 void
199 parse_parameters()
200 {
201 dealii::ParameterHandler prm;
202 this->add_parameters(prm);
203 prm.parse_input(parameter_file, "", true, true);
204 }
205
206 void
207 setup(std::shared_ptr<Grid<dim>> & grid,
208 std::shared_ptr<dealii::Mapping<dim>> & mapping,
209 std::shared_ptr<MultigridMappings<dim, Number>> & multigrid_mappings)
210 {
211 parse_parameters();
212
213 set_resolution_parameters();
214
215 // parameters
216 set_parameters();
217 param.check(pcout);
218 param.print(pcout, "List of parameters for incompressible flow solver:");
219
220 // Some AeroAcoustic specific Asserts
221 AssertThrow(param.problem_type == IncNS::ProblemType::Unsteady,
222 dealii::ExcMessage("Invalid parameter in context of aero-acoustic."));
223 AssertThrow(param.ale_formulation == false,
224 dealii::ExcMessage("ALE not yet implemented for aero-acoustic."));
225
226 // grid
227 grid = std::make_shared<Grid<dim>>();
228 create_grid(*grid, mapping, multigrid_mappings);
229 print_grid_info(pcout, *grid);
230
231 // boundary conditions
232 boundary_descriptor = std::make_shared<IncNS::BoundaryDescriptor<dim>>();
233 set_boundary_descriptor();
234 IncNS::verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
235
236 // field functions
237 field_functions = std::make_shared<IncNS::FieldFunctions<dim>>();
238 set_field_functions();
239 }
240
241 IncNS::Parameters const &
242 get_parameters() const
243 {
244 return param;
245 }
246
247 std::shared_ptr<IncNS::BoundaryDescriptor<dim> const>
248 get_boundary_descriptor() const
249 {
250 return boundary_descriptor;
251 }
252
253 std::shared_ptr<IncNS::FieldFunctions<dim> const>
254 get_field_functions() const
255 {
256 return field_functions;
257 }
258
259 virtual std::shared_ptr<IncNS::PostProcessorBase<dim, Number>>
260 create_postprocessor() = 0;
261
262protected:
263 MPI_Comm const mpi_comm;
264
265 dealii::ConditionalOStream pcout;
266
267 // fluid
268 IncNS::Parameters param;
269 std::shared_ptr<IncNS::FieldFunctions<dim>> field_functions;
270 std::shared_ptr<IncNS::BoundaryDescriptor<dim>> boundary_descriptor;
271
272 std::string parameter_file;
273
274 OutputParameters output_parameters;
275
276private:
277 void
278 set_resolution_parameters()
279 {
280 param.degree_u = resolution.degree;
281 param.grid.n_refine_global = resolution.refine_space;
282 }
283
284 // fluid
285 virtual void
286 set_parameters() = 0;
287
288 virtual void
289 create_grid(Grid<dim> & grid,
290 std::shared_ptr<dealii::Mapping<dim>> & mapping,
291 std::shared_ptr<MultigridMappings<dim, Number>> & multigrid_mappings) = 0;
292
293 virtual void
294 set_boundary_descriptor() = 0;
295
296 virtual void
297 set_field_functions() = 0;
298
300};
301} // namespace FluidAeroAcoustic
302
303namespace AeroAcoustic
304{
305template<int dim, typename Number>
306class ApplicationBase
307{
308public:
309 ApplicationBase(std::string const & input_file, MPI_Comm const & comm)
310 : parameter_file(input_file),
311 mpi_comm(comm),
312 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
313 {
314 }
315
316 virtual ~ApplicationBase() = default;
317
318 void
319 setup()
320 {
321 parse_parameters();
322 parameters.check();
323 parameters.print(pcout, "List of parameters for aero-acoustic solver");
324
325 // field functions
326 field_functions = std::make_shared<FieldFunctions<dim>>();
327 set_field_functions();
328 }
329
330 virtual void
331 add_parameters(dealii::ParameterHandler & prm)
332 {
333 parameters.add_parameters(prm, "AeroAcoustic");
334
335 acoustic->add_parameters(prm);
336 fluid->add_parameters(prm);
337 }
338
339 Parameters parameters;
340
341 std::shared_ptr<AcousticsAeroAcoustic::ApplicationBase<dim, Number>> acoustic;
342 std::shared_ptr<FluidAeroAcoustic::ApplicationBase<dim, Number>> fluid;
343
344 std::shared_ptr<FieldFunctions<dim>> field_functions;
345
346private:
347 virtual void
348 set_field_functions() = 0;
349
350 void
351 parse_parameters()
352 {
353 dealii::ParameterHandler prm;
354 add_parameters(prm);
355 prm.parse_input(parameter_file, "", true, true);
356 }
357
358 std::string const parameter_file;
359 MPI_Comm const mpi_comm;
360 dealii::ConditionalOStream pcout;
361};
362
363} // namespace AeroAcoustic
364} // namespace ExaDG
365
366#endif /* EXADG_AERO_ACOUSTIC_USER_INTERFACE_APPLICATION_BASE_H_ */
Definition parameters.h:41
Definition parameters.h:55
Definition grid.h:40
Definition parameters.h:46
Definition grid.h:84
Definition driver.cpp:33
Definition output_parameters.h:34
Definition resolution_parameters.h:83