22#ifndef INCLUDE_EXADG_CONVECTION_DIFFUSION_THROUGHPUT_H_
23#define INCLUDE_EXADG_CONVECTION_DIFFUSION_THROUGHPUT_H_
26#ifdef EXADG_WITH_LIKWID
31#include <deal.II/base/exceptions.h>
32#include <deal.II/base/parameter_handler.h>
35#include <exadg/convection_diffusion/driver.h>
38#include <exadg/operators/finite_element.h>
39#include <exadg/operators/hypercube_resolution_parameters.h>
40#include <exadg/operators/throughput_parameters.h>
41#include <exadg/utilities/enum_patterns.h>
42#include <exadg/utilities/general_parameters.h>
45#include <exadg/convection_diffusion/user_interface/declare_get_application.h>
50create_input_file(std::string
const & input_file)
52 dealii::ParameterHandler prm;
55 general.add_parameters(prm);
58 resolution.add_parameters(prm);
61 throughput.add_parameters(prm);
67 unsigned int const Dim = 2;
68 typedef double Number;
69 ConvDiff::get_application<Dim, Number>(input_file, MPI_COMM_WORLD)->add_parameters(prm);
75 prm.print_parameters(input_file,
76 dealii::ParameterHandler::Short |
77 dealii::ParameterHandler::KeepDeclarationOrder);
81template<
int dim,
typename Number>
84 std::string
const & input_file,
85 unsigned int const degree,
86 unsigned int const refine_space,
87 unsigned int const n_cells_1d,
88 MPI_Comm
const & mpi_comm,
91 std::shared_ptr<ConvDiff::ApplicationBase<dim, Number>> application =
92 ConvDiff::get_application<dim, Number>(input_file, mpi_comm);
94 application->set_parameters_throughput_study(degree, refine_space, n_cells_1d);
96 std::shared_ptr<ConvDiff::Driver<dim, Number>> driver =
97 std::make_shared<ConvDiff::Driver<dim, Number>>(mpi_comm, application, is_test,
true);
101 std::tuple<unsigned int, dealii::types::global_dof_index, double> wall_time =
102 driver->apply_operator(throughput.operator_type,
103 throughput.n_repetitions_inner,
104 throughput.n_repetitions_outer);
106 throughput.wall_times.push_back(wall_time);
112main(
int argc,
char ** argv)
114#ifdef EXADG_WITH_LIKWID
118 dealii::Utilities::MPI::MPI_InitFinalize mpi(argc, argv, 1);
120 MPI_Comm mpi_comm(MPI_COMM_WORLD);
122 std::string input_file;
126 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
129 std::cout <<
"To run the program, use: ./throughput input_file" << std::endl
130 <<
"To setup the input file, use: ./throughput input_file --help" << std::endl;
138 input_file = std::string(argv[1]);
140 if(argc == 3 and std::string(argv[2]) ==
"--help")
142 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
143 ExaDG::create_input_file(input_file);
153 auto const lambda_get_dofs_per_element =
154 [&](
unsigned int const dim,
unsigned int const degree, ExaDG::ElementType
const element_type) {
155 return ExaDG::get_dofs_per_element(
156 element_type,
true , 1 , degree, dim);
160 resolution.fill_resolution_vector(lambda_get_dofs_per_element);
163 for(
auto iter = resolution.resolutions.begin(); iter != resolution.resolutions.end(); ++iter)
165 unsigned int const degree = std::get<0>(*iter);
166 unsigned int const refine_space = std::get<1>(*iter);
167 unsigned int const n_cells_1d = std::get<2>(*iter);
169 if(general.dim == 2 and general.precision ==
"float")
171 ExaDG::run<2, float>(
172 throughput, input_file, degree, refine_space, n_cells_1d, mpi_comm, general.is_test);
174 else if(general.dim == 2 and general.precision ==
"double")
176 ExaDG::run<2, double>(
177 throughput, input_file, degree, refine_space, n_cells_1d, mpi_comm, general.is_test);
179 else if(general.dim == 3 and general.precision ==
"float")
181 ExaDG::run<3, float>(
182 throughput, input_file, degree, refine_space, n_cells_1d, mpi_comm, general.is_test);
184 else if(general.dim == 3 and general.precision ==
"double")
186 ExaDG::run<3, double>(
187 throughput, input_file, degree, refine_space, n_cells_1d, mpi_comm, general.is_test);
192 dealii::ExcMessage(
"Only dim = 2|3 and precision=float|double implemented."));
196 if(not(general.is_test))
197 throughput.print_results(mpi_comm);
199#ifdef EXADG_WITH_LIKWID
Definition general_parameters.h:32
Definition hypercube_resolution_parameters.h:183
Definition throughput_parameters.h:92