11auto main(
int argc,
char** argv) ->
int
13 auto is_failed =
false;
17 MPI_Init(&argc, &argv);
18 MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
19 MPI_Comm_rank(MPI_COMM_WORLD, &num_rank);
22 auto app = std::unique_ptr<R3B::Neuland::Application>{};
25 auto program_options = CLI::App{
"Neuland command line interface" };
27 auto instantiate_app = [&app, &program_options](std::size_t)
29 if (program_options.got_subcommand(
"sim"))
31 app = std::make_unique<R3B::Neuland::SimulationApplication>();
32 app->setup_options(*program_options.get_subcommand(
"sim"));
34 if (program_options.got_subcommand(
"ana"))
36 app = std::make_unique<R3B::Neuland::AnalysisApplication>();
37 app->setup_options(*program_options.get_subcommand(
"ana"));
41 program_options.require_subcommand(1, 1);
42 program_options.add_subcommand(
"sim",
"Run simulation application.")->preparse_callback(instantiate_app);
43 program_options.add_subcommand(
"ana",
"Run analysis application.")->preparse_callback(instantiate_app);
45 CLI11_PARSE(program_options, argc, argv);
52 if (app->has_print_default_options())
63 app->set_rank_num(num_rank);
64 app->set_num_of_procs(num_proc);
68 catch (
const std::exception& ex)
71 R3BLOG(error, fmt::format(
"Exception ocurred: \n\n{}\n", ex.what()));
73 app->set_fail(is_failed);