diff liboctave/LSODE.h @ 1867:52e7bca8ce33

[project @ 1996-02-04 11:19:32 by jwe]
author jwe
date Sun, 04 Feb 1996 11:28:40 +0000
parents fc5667a20dd2
children d5ba1bd06584
line wrap: on
line diff
--- a/liboctave/LSODE.h
+++ b/liboctave/LSODE.h
@@ -32,37 +32,82 @@
 class ostream;
 #endif
 
+#include <cmath>
+
 #include "ODE.h"
 
-class LSODE_options
+class
+LSODE_options
 {
- public:
+public:
+
+  LSODE_options (void) { init (); }
 
-  LSODE_options (void);
-  LSODE_options (const LSODE_options& opt);
+  LSODE_options (const LSODE_options& opt) { copy (opt); }
+
+  LSODE_options& operator = (const LSODE_options& opt)
+    {
+      if (this != &opt)
+	copy (opt);
 
-  LSODE_options& operator = (const LSODE_options& opt);
+      return *this;
+    }
+
+  ~LSODE_options (void) { }
 
-  ~LSODE_options (void);
+  void init (void)
+    {
+      double sqrt_eps = ::sqrt (DBL_EPSILON);
 
-  void init (void);
-  void copy (const LSODE_options& opt);
+      x_absolute_tolerance = sqrt_eps;
+      x_initial_step_size = -1.0;
+      x_maximum_step_size = -1.0;
+      x_minimum_step_size = 0.0;
+      x_relative_tolerance = sqrt_eps;
+    }
 
-  void set_default_options (void);
+  void copy (const LSODE_options& opt)
+    {
+      x_absolute_tolerance = opt.x_absolute_tolerance;
+      x_initial_step_size = opt.x_initial_step_size;
+      x_maximum_step_size = opt.x_maximum_step_size;
+      x_minimum_step_size = opt.x_minimum_step_size;
+      x_relative_tolerance = opt.x_relative_tolerance;
+    }
 
-  void set_absolute_tolerance (double);
-  void set_initial_step_size (double);
-  void set_maximum_step_size (double);
-  void set_minimum_step_size (double);
-  void set_relative_tolerance (double);
+  void set_default_options (void) { init (); }
+
+  void set_absolute_tolerance (double val)
+    { x_absolute_tolerance = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); }
+
+  void set_initial_step_size (double val)
+    { x_initial_step_size = (val >= 0.0) ? val : -1.0; }
+
+  void set_maximum_step_size (double val)
+    { x_maximum_step_size = (val >= 0.0) ? val : -1.0; }
 
-  double absolute_tolerance (void);
-  double initial_step_size (void);
-  double maximum_step_size (void);
-  double minimum_step_size (void);
-  double relative_tolerance (void);
+  void set_minimum_step_size (double val)
+    { x_minimum_step_size = (val >= 0.0) ? val : 0.0; }
+
+  void set_relative_tolerance (double val)
+    { x_relative_tolerance = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); }
+
+  double absolute_tolerance (void)
+    { return x_absolute_tolerance; }
 
- private:
+  double initial_step_size (void)
+    { return x_initial_step_size; }
+
+  double maximum_step_size (void)
+    { return x_maximum_step_size; }
+
+  double minimum_step_size (void)
+    { return x_minimum_step_size; }
+
+  double relative_tolerance (void)
+    {  return x_relative_tolerance; }
+
+private:
 
   double x_absolute_tolerance;
   double x_initial_step_size;
@@ -71,7 +116,8 @@
   double x_relative_tolerance;
 };
 
-class LSODE : public ODE, public LSODE_options
+class
+LSODE : public ODE, public LSODE_options
 {
 public: