@@ -148,7 +148,11 @@ get_coarser_by_name(const ConfigParser &, const boost::property_tree::ptree &coa
148148 if (auto params_opt = coarser_algorithm.get_child_optional (" parameters" )) {
149149 const auto ¶ms_pt = params_opt.get ();
150150 params.commCost = params_pt.get_optional <v_workw_t <Graph_t_in>>(" commCost" ).value_or (params.commCost );
151+ params.maxWeight = params_pt.get_optional <v_workw_t <Graph_t_in>>(" maxWeight" ).value_or (params.maxWeight );
152+ params.smallWeightThreshold = params_pt.get_optional <v_workw_t <Graph_t_in>>(" smallWeightThreshold" ).value_or (params.smallWeightThreshold );
151153 params.useTopPoset = params_pt.get_optional <bool >(" useTopPoset" ).value_or (params.useTopPoset );
154+ params.geomDecay = params_pt.get_optional <double >(" geomDecay" ).value_or (params.geomDecay );
155+ params.leniency = params_pt.get_optional <double >(" leniency" ).value_or (params.leniency );
152156
153157 if (auto mode_str_opt = params_pt.get_optional <std::string>(" mode" )) {
154158 const std::string &mode_str = mode_str_opt.get ();
@@ -161,8 +165,9 @@ get_coarser_by_name(const ConfigParser &, const boost::property_tree::ptree &coa
161165 else if (mode_str == " LEVEL_ODD" ) params.mode = SarkarParams::Mode::LEVEL_ODD;
162166 else if (mode_str == " FAN_IN_BUFFER" ) params.mode = SarkarParams::Mode::FAN_IN_BUFFER;
163167 else if (mode_str == " FAN_OUT_BUFFER" ) params.mode = SarkarParams::Mode::FAN_OUT_BUFFER;
168+ else if (mode_str == " HOMOGENEOUS_BUFFER" ) params.mode = SarkarParams::Mode::HOMOGENEOUS_BUFFER;
164169 else throw std::invalid_argument (" Invalid Sarkar mode: " + mode_str
165- + " !\n Choose from: LINES, FAN_IN_FULL, FAN_IN_PARTIAL, FAN_OUT_FULL, FAN_OUT_PARTIAL, LEVEL_EVEN, LEVEL_ODD, FAN_IN_BUFFER, FAN_OUT_BUFFER." );
170+ + " !\n Choose from: LINES, FAN_IN_FULL, FAN_IN_PARTIAL, FAN_OUT_FULL, FAN_OUT_PARTIAL, LEVEL_EVEN, LEVEL_ODD, FAN_IN_BUFFER, FAN_OUT_BUFFER, HOMOGENEOUS_BUFFER ." );
166171 }
167172 }
168173 return std::make_unique<Sarkar<Graph_t_in, Graph_t_out>>(params);
@@ -216,11 +221,22 @@ get_multilevel_coarser_by_name(const ConfigParser &, const boost::property_tree:
216221 }
217222 ml_params.maxWeight =
218223 params_pt.get_optional <v_workw_t <Graph_t_in>>(" maxWeight" ).value_or (ml_params.maxWeight );
224+ ml_params.smallWeightThreshold =
225+ params_pt.get_optional <v_workw_t <Graph_t_in>>(" smallWeightThreshold" ).value_or (ml_params.smallWeightThreshold );
219226 ml_params.max_num_iteration_without_changes =
220227 params_pt.get_optional <unsigned >(" max_num_iteration_without_changes" )
221228 .value_or (ml_params.max_num_iteration_without_changes );
222- ml_params.use_buffer_merge =
223- params_pt.get_optional <bool >(" use_buffer_merge" ).value_or (ml_params.use_buffer_merge );
229+
230+ if (auto mode_str_opt = params_pt.get_optional <std::string>(" buffer_merge_mode" )) {
231+ const std::string &mode_str = mode_str_opt.get ();
232+ if (mode_str == " OFF" ) ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::OFF;
233+ else if (mode_str == " FAN_IN" ) ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FAN_IN;
234+ else if (mode_str == " FAN_OUT" ) ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FAN_OUT;
235+ else if (mode_str == " HOMOGENEOUS" ) ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::HOMOGENEOUS;
236+ else if (mode_str == " FULL" ) ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FULL;
237+ else throw std::invalid_argument (" Invalid Sarkar Buffer Merge mode: " + mode_str
238+ + " !\n Choose from: OFF, FAN_IN, FAN_OUT, HOMOGENEOUS, FULL." );
239+ }
224240 }
225241
226242 coarser->setParameters (ml_params);
0 commit comments