22#ifndef INCLUDE_EXADG_CONVECTION_DIFFUSION_SOLVER_H_
23#define INCLUDE_EXADG_CONVECTION_DIFFUSION_SOLVER_H_
26#include <deal.II/base/exceptions.h>
27#include <deal.II/base/parameter_handler.h>
30#include <exadg/convection_diffusion/driver.h>
33#include <exadg/operators/resolution_parameters.h>
34#include <exadg/time_integration/resolution_parameters.h>
35#include <exadg/utilities/enum_patterns.h>
36#include <exadg/utilities/general_parameters.h>
39#include <exadg/convection_diffusion/user_interface/declare_get_application.h>
44create_input_file(std::string
const & input_file)
46 dealii::ParameterHandler prm;
49 general.add_parameters(prm);
52 spatial.add_parameters(prm);
55 temporal.add_parameters(prm);
59 unsigned int const Dim = 2;
60 typedef double Number;
61 ConvDiff::get_application<Dim, Number>(input_file, MPI_COMM_WORLD)->add_parameters(prm);
63 prm.print_parameters(input_file,
64 dealii::ParameterHandler::Short |
65 dealii::ParameterHandler::KeepDeclarationOrder);
68template<
int dim,
typename Number>
70run(std::string
const & input_file,
71 unsigned int const degree,
72 unsigned int const refine_space,
73 unsigned int const refine_time,
74 MPI_Comm
const & mpi_comm,
80 std::shared_ptr<ConvDiff::ApplicationBase<dim, Number>> application =
81 ConvDiff::get_application<dim, Number>(input_file, mpi_comm);
83 application->set_parameters_convergence_study(degree, refine_space, refine_time);
85 std::shared_ptr<ConvDiff::Driver<dim, Number>> driver =
86 std::make_shared<ConvDiff::Driver<dim, Number>>(mpi_comm, application, is_test,
false);
93 driver->print_performance_results(timer.wall_time());
99main(
int argc,
char ** argv)
101 dealii::Utilities::MPI::MPI_InitFinalize mpi(argc, argv, 1);
103 MPI_Comm mpi_comm(MPI_COMM_WORLD);
105 std::string input_file;
109 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
112 std::cout <<
"To run the program, use: ./solver input_file" << std::endl
113 <<
"To setup the input file, use: ./solver input_file --help" << std::endl;
121 input_file = std::string(argv[1]);
123 if(argc == 3 and std::string(argv[2]) ==
"--help")
125 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
126 ExaDG::create_input_file(input_file);
137 for(
unsigned int degree = spatial.degree_min; degree <= spatial.degree_max; ++degree)
140 for(
unsigned int refine_space = spatial.refine_space_min;
141 refine_space <= spatial.refine_space_max;
145 for(
unsigned int refine_time = temporal.refine_time_min;
146 refine_time <= temporal.refine_time_max;
150 if(general.dim == 2 and general.precision ==
"float")
152 ExaDG::run<2, float>(
153 input_file, degree, refine_space, refine_time, mpi_comm, general.is_test);
155 else if(general.dim == 2 and general.precision ==
"double")
157 ExaDG::run<2, double>(
158 input_file, degree, refine_space, refine_time, mpi_comm, general.is_test);
160 else if(general.dim == 3 and general.precision ==
"float")
162 ExaDG::run<3, float>(
163 input_file, degree, refine_space, refine_time, mpi_comm, general.is_test);
165 else if(general.dim == 3 and general.precision ==
"double")
167 ExaDG::run<3, double>(
168 input_file, degree, refine_space, refine_time, mpi_comm, general.is_test);
173 dealii::ExcMessage(
"Only dim = 2|3 and precision=float|double implemented."));
Definition general_parameters.h:32
Definition resolution_parameters.h:32
Definition resolution_parameters.h:32