src/run.rs

changeset 20
90f77ad9a98d
parent 9
21b0e537ac0e
child 23
9869fa1e0ccd
--- a/src/run.rs	Wed Dec 07 08:17:46 2022 +0200
+++ b/src/run.rs	Fri Dec 09 14:10:48 2022 +0200
@@ -64,6 +64,7 @@
 use crate::seminorms::*;
 use crate::plot::*;
 use crate::{AlgorithmOverrides, CommandLineArgs};
+use crate::tolerance::Tolerance;
 
 /// Available algorithms and their configurations
 #[derive(Copy, Clone, Debug, Serialize, Deserialize)]
@@ -73,6 +74,11 @@
     PDPS(PDPSConfig<F>),
 }
 
+fn unpack_tolerance<F : Float>(v : &Vec<F>) -> Tolerance<F> {
+    assert!(v.len() == 3);
+    Tolerance::Power { initial : v[0], factor : v[1], exponent : v[2] }
+}
+
 impl<F : ClapFloat> AlgorithmConfig<F> {
     /// Override supported parameters based on the command line.
     pub fn cli_override(self, cli : &AlgorithmOverrides<F>) -> Self {
@@ -85,6 +91,7 @@
                 merge_every : cli.merge_every.unwrap_or(g.merge_every),
                 merging : cli.merging.clone().unwrap_or(g.merging),
                 final_merging : cli.final_merging.clone().unwrap_or(g.final_merging),
+                tolerance: cli.tolerance.as_ref().map(unpack_tolerance).unwrap_or(g.tolerance),
                 .. g
             }
         };
@@ -105,6 +112,7 @@
             }),
             FW(fw) => FW(FWConfig {
                 merging : cli.merging.clone().unwrap_or(fw.merging),
+                tolerance : cli.tolerance.as_ref().map(unpack_tolerance).unwrap_or(fw.tolerance),
                 .. fw
             })
         }

mercurial