+/* Pick the right models for CPU, net and host, and call their model_init_preparse */
+static void surf_config_models_setup()
+{
+ std::string host_model_name = simgrid::config::get_value<std::string>("host/model");
+ std::string network_model_name = simgrid::config::get_value<std::string>("network/model");
+ std::string cpu_model_name = simgrid::config::get_value<std::string>("cpu/model");
+ std::string disk_model_name = simgrid::config::get_value<std::string>("disk/model");
+
+ /* The compound host model is needed when using non-default net/cpu models */
+ if ((not simgrid::config::is_default("network/model") || not simgrid::config::is_default("cpu/model")) &&
+ simgrid::config::is_default("host/model")) {
+ host_model_name = "compound";
+ simgrid::config::set_value("host/model", host_model_name);
+ }
+
+ XBT_DEBUG("host model: %s", host_model_name.c_str());
+ if (host_model_name == "compound") {
+ xbt_assert(not cpu_model_name.empty(), "Set a cpu model to use with the 'compound' host model");
+ xbt_assert(not network_model_name.empty(), "Set a network model to use with the 'compound' host model");
+
+ const auto* cpu_model = find_model_description(surf_cpu_model_description, cpu_model_name);
+ cpu_model->model_init_preparse();
+
+ const auto* network_model = find_model_description(surf_network_model_description, network_model_name);
+ network_model->model_init_preparse();
+ }