17auto main(
int argc,
char** argv) ->
int
19 auto is_failed =
false;
24 MPI_Init(&argc, &argv);
25 MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
26 MPI_Comm_rank(MPI_COMM_WORLD, &num_rank);
29 auto app = std::unique_ptr<R3B::Neuland::CLIAbstract>{};
32 auto program_options = CLI::App{
"Neuland command line interface" };
34 auto instantiate_app = [&app, &program_options](std::size_t)
36 if (program_options.got_subcommand(
"sim"))
38 app = std::make_unique<R3B::Neuland::SimulationApplication>();
39 app->setup_options(*program_options.get_subcommand(
"sim"));
42 if (program_options.got_subcommand(
"ana"))
44 app = std::make_unique<R3B::Neuland::AnalysisApplication>();
45 app->setup_options(*program_options.get_subcommand(
"ana"));
50 program_options.require_subcommand(1, 1);
51 program_options.add_subcommand(
"sim",
"Run simulation application.")->preparse_callback(instantiate_app);
52 program_options.add_subcommand(
"ana",
"Run analysis application.")->preparse_callback(instantiate_app);
54 CLI11_PARSE(program_options, argc, argv);
63 if (app->has_print_default_options())
74 app->set_rank_num(num_rank);
75 app->set_num_of_procs(num_proc);
79 catch (
const std::exception& ex)
82 LOGP(error,
"Exception ocurred: \n\n{}\n", ex.what());
90 app->set_fail(is_failed);