|
Go to the documentation of this file.
48 if (!c) throw SetupError( "constraint pointer is NULL");
49 if (!m) throw SetupError( "model pointer is NULL");
50 inner_sliders.push_back(std::make_shared<Constraint_slider>(m, c));
65 if (! mc) throw SetupError( "matching condition pointer is NULL");
66 if (!m1) throw SetupError( "model pointer 1 is NULL");
67 if (!m2) throw SetupError( "model pointer 2 is NULL");
68 mc->set_models(m1, m2);
69 inner_sliders.push_back(std::make_shared<Matching_slider>(m1, m2, mc));
80 if (!c) throw SetupError( "constraint pointer is NULL");
81 if (!m) throw SetupError( "model pointer is NULL");
82 outer_sliders.push_back(std::make_shared<Constraint_slider>(m, c));
97 if (! mc) throw SetupError( "matching condition pointer is NULL");
98 if (!m1) throw SetupError( "model pointer 1 is NULL");
99 if (!m2) throw SetupError( "model pointer 2 is NULL");
100 mc->set_models(m1, m2);
101 outer_sliders.push_back(std::make_shared<Matching_slider>(m1, m2, mc));
121 const int max_iterations = get_max_iterations();
122 if ((inner_sliders.empty() && outer_sliders.empty())
123 || max_iterations == 0)
129 bool accuracy_reached = false;
131 bool no_conv_inner_iteration = false;
133 while (iteration < max_iterations && !accuracy_reached) {
134 update_running_precision();
137 no_conv_inner_iteration = false;
138 prepare_inner_iteration(inner_solver);
140 inner_solver.solve();
142 no_conv_inner_iteration = true;
145 accuracy_reached = accuracy_goal_reached();
149 if (!accuracy_reached || no_conv_inner_iteration)
152 VERBOSE_MSG( "convergence reached after " << iteration << " iterations");
160 if (!inner_convergence_tester) {
161 throw SetupError( "RGFlow<Semi_analytic>::Error: inner convergence tester must "
164 if (!outer_convergence_tester) {
165 throw SetupError( "RGFlow<Semi_analytic>::Error: outer convergence tester must "
174 for ( auto& s: outer_sliders)
183 inner_convergence_tester->restart();
186 solver.set_convergence_tester(inner_convergence_tester);
187 solver.set_running_precision(running_precision_calculator);
189 for ( auto& s: inner_sliders) {
191 s->add_constraint_to_solver(solver);
202 initial_guesser->guess();
207 VERBOSE_MSG( "> running all models (outer iteration " << iteration << ") ...");
209 for ( auto& s: outer_sliders) {
210 s->set_precision(get_precision());
224 return running_precision;
233 if (running_precision_calculator)
234 running_precision = running_precision_calculator->get_precision(iteration);
243 return outer_convergence_tester->accuracy_goal_reached();
253 inner_convergence_tester = convergence_tester_;
263 outer_convergence_tester = convergence_tester_;
268 initial_guesser = ig;
278 running_precision_calculator = rp;
296 return outer_convergence_tester->max_iterations();
307 const std::vector<std::shared_ptr<Slider> > sorted_inner_sliders(sort_sliders(inner_sliders));
308 const std::vector<std::shared_ptr<Slider> > sorted_outer_sliders(sort_sliders(outer_sliders));
309 std::vector<std::shared_ptr<Slider> > sorted_sliders;
310 std::merge(sorted_inner_sliders.begin(), sorted_inner_sliders.end(),
311 sorted_outer_sliders.begin(), sorted_outer_sliders.end(),
312 std::back_inserter(sorted_sliders),
313 []( const std::shared_ptr<Slider>& s1,
314 const std::shared_ptr<Slider>& s2)
315 { return s1->get_scale() < s2->get_scale(); });
317 auto it = std::lower_bound(sorted_sliders.begin(), sorted_sliders.end(),
319 []( const std::shared_ptr<Slider>& s, double scale)
320 { return s->get_scale() < scale; });
322 if (it == sorted_sliders.end())
325 return (*it)->get_model();
334 return get_model(scale);
346 inner_sliders.clear();
347 outer_sliders.clear();
350 inner_convergence_tester = nullptr;
351 outer_convergence_tester = nullptr;
352 initial_guesser = nullptr;
353 running_precision_calculator = nullptr;
354 running_precision = 1.0e-3;
365 std::vector<std::shared_ptr<Slider> > sorted_sliders(sliders);
367 std::sort(sorted_sliders.begin(), sorted_sliders.end(),
368 []( const std::shared_ptr<Slider>& s1, const std::shared_ptr<Slider>& s2)
369 { return s1->get_scale() < s2->get_scale(); });
371 return sorted_sliders;
383 Model* model = get_model();
392 model->clear_problems();
401 solver.add(constraint, model);
405 return constraint->get_scale();
409 VERBOSE_MSG( "> \trunning " << model->name() << " to scale " << constraint->get_scale() << " GeV");
410 model->run_to(constraint->get_scale());
411 VERBOSE_MSG( "> \tapplying " << constraint->name());
416 model->set_precision(p);
420 m1->clear_problems();
421 m2->clear_problems();
430 solver.add(matching, m1, m2);
434 return matching->get_scale();
438 VERBOSE_MSG( "> \trunning " << m1->name() << " to scale " << matching->get_scale() << " GeV");
439 m1->run_to(matching->get_scale());
440 VERBOSE_MSG( "> \trunning " << m2->name() << " to scale " << matching->get_scale() << " GeV");
441 m2->run_to(matching->get_scale());
442 VERBOSE_MSG( "> \tmatching " << m1->name() << " -> " << m2->name());
447 m1->set_precision(p);
448 m2->set_precision(p);
virtual void run_to(double, double eps=-1.0)=0
No convergence while solving the RGEs.
Spectrum generator was not setup correctly.
contains the definition of the RGFlow<Semi_analytic> class
contains the definition of the RGFlow<Two_scale> class
|