18auto main(
int argc,
char** argv) ->
int
20 auto is_failed =
false;
25 MPI_Init(&argc, &argv);
26 MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
27 MPI_Comm_rank(MPI_COMM_WORLD, &num_rank);
30 auto app = std::unique_ptr<R3B::Neuland::CLIAbstract>{};
33 auto program_options = CLI::App{
"Neuland command line interface" };
35 auto instantiate_app = [&app, &program_options](std::size_t)
37 if (program_options.got_subcommand(
"sim"))
39 app = std::make_unique<R3B::Neuland::SimulationApplication>();
40 app->setup_options(*program_options.get_subcommand(
"sim"));
43 if (program_options.got_subcommand(
"ana"))
45 app = std::make_unique<R3B::Neuland::AnalysisApplication>();
46 app->setup_options(*program_options.get_subcommand(
"ana"));
49 if (program_options.got_subcommand(
"basepar"))
51 app = std::make_unique<R3B::Neuland::BaseParCreator>();
52 app->setup_options(*program_options.get_subcommand(
"basepar"));
57 program_options.require_subcommand(1, 1);
58 program_options.add_subcommand(
"sim",
"Run simulation application.")->preparse_callback(instantiate_app);
59 program_options.add_subcommand(
"ana",
"Run analysis application.")->preparse_callback(instantiate_app);
60 program_options.add_subcommand(
"basepar",
"Create a base parameter for an experiment.")
61 ->preparse_callback(instantiate_app);
63 CLI11_PARSE(program_options, argc, argv);
72 if (app->has_print_default_options())
83 app->set_rank_num(num_rank);
84 app->set_num_of_procs(num_proc);
88 catch (
const std::exception& ex)
91 LOGP(error,
"Exception ocurred: \n\n{}\n", ex.what());
99 app->set_fail(is_failed);