diff options
author | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-02-27 13:54:55 +0000 |
---|---|---|
committer | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-02-27 13:54:55 +0000 |
commit | edf4fcfb0869c23abcb580d61e70991c9d4836a8 (patch) | |
tree | 7e21d85a177064c870149a6dd8c04f773525fbe9 /src/jtutil | |
parent | 07995eaa14b03487dc1333b91aa7f6c998eca45a (diff) |
compute min/max horizon radius for each horizon found
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@952 f88db872-0e4f-0410-b76b-b9085cfa78c5
Diffstat (limited to 'src/jtutil')
-rw-r--r-- | src/jtutil/norm.cc | 11 | ||||
-rw-r--r-- | src/jtutil/test_norm.cc | 4 | ||||
-rw-r--r-- | src/jtutil/util.hh | 22 |
3 files changed, 28 insertions, 9 deletions
diff --git a/src/jtutil/norm.cc b/src/jtutil/norm.cc index edd3fd1..6fd3a92 100644 --- a/src/jtutil/norm.cc +++ b/src/jtutil/norm.cc @@ -19,10 +19,15 @@ namespace jtutil template <typename fp_t> void norm<fp_t>::data(fp_t x) { -++N_; sum_ += x; sum2_ += x*x; -infinity_norm_ = jtutil::max(infinity_norm_, jtutil::abs<fp_t>(x)); + +const fp_t abs_x = jtutil::abs<fp_t>(x); +max_abs_value_ = jtutil::max(max_abs_value_, abs_x); +min_abs_value_ = (N_ == 0) ? abs_x + : jtutil::min(min_abs_value_, abs_x); + +++N_; } } // namespace jtutil:: @@ -38,8 +43,6 @@ template<typename fp_t> template<typename fp_t> fp_t norm<fp_t>::rms_norm() const { assert(is_nonempty()); return sqrt(sum2_/fp_t(N_)); } -template<typename fp_t> - fp_t norm<fp_t>::infinity_norm() const { return infinity_norm_; } } // namespace jtutil:: //****************************************************************************** diff --git a/src/jtutil/test_norm.cc b/src/jtutil/test_norm.cc index b156873..25a9c59 100644 --- a/src/jtutil/test_norm.cc +++ b/src/jtutil/test_norm.cc @@ -25,6 +25,8 @@ foo.data(-3.0); assert( fuzzy<double>::EQ(foo.two_norm(), sqrt(45.0)) ); assert( fuzzy<double>::EQ(foo.rms_norm(), 3.0) ); assert( fuzzy<double>::EQ(foo.infinity_norm(), 3.0) ); +assert( fuzzy<double>::EQ(foo.max_abs_value(), 3.0) ); +assert( fuzzy<double>::EQ(foo.min_abs_value(), 3.0) ); foo.reset(); assert( foo.is_empty() ); @@ -40,6 +42,8 @@ foo.data(-5.0); assert( fuzzy<double>::EQ(foo.two_norm(), sqrt(52.0)) ); assert( fuzzy<double>::EQ(foo.rms_norm(), sqrt(10.4)) ); assert( fuzzy<double>::EQ(foo.infinity_norm(), 5.0) ); +assert( fuzzy<double>::EQ(foo.max_abs_value(), 5.0) ); +assert( fuzzy<double>::EQ(foo.min_abs_value(), 1.0) ); printf("everything ok!\n"); return 0; diff --git a/src/jtutil/util.hh b/src/jtutil/util.hh index d87330d..2012a28 100644 --- a/src/jtutil/util.hh +++ b/src/jtutil/util.hh @@ -88,7 +88,8 @@ double modulo_reduce(double x, double xmod, double xmin, double xmax); //****************************************************************************** // -// This template class computes means, 2-norms, rms-norms, and infinity-norms. +// This template class computes means, 2-norms, rms-norms, and +// infinity-norms. It also computes minimum values. // template <typename fp_t> class norm @@ -98,7 +99,9 @@ public: fp_t mean() const; fp_t two_norm() const; // sqrt(sum x_i^2) fp_t rms_norm() const; // sqrt(average of x_i^2) - fp_t infinity_norm() const; // max(|x_i|) + fp_t infinity_norm() const { return max_abs_value_; } + fp_t max_abs_value() const { return max_abs_value_; } + fp_t min_abs_value() const { return min_abs_value_; } // specify data point void data(fp_t x); @@ -108,12 +111,20 @@ public: bool is_nonempty() const { return N_ > 0; } // reset ==> just like newly-constructed object - void reset() { N_ = 0; sum2_ = 0.0; infinity_norm_ = 0.0; } + void reset() + { + N_ = 0; + sum2_ = 0.0; + max_abs_value_ = 0.0; + min_abs_value_ = 0.0; + } // constructor, destructor // ... compiler-generated no-op destructor is ok norm() - : N_(0), sum_(0.0), sum2_(0.0), infinity_norm_(0.0) + : N_(0), + sum_(0.0), sum2_(0.0), + max_abs_value_(0.0), min_abs_value_(0.0) { } private: @@ -127,7 +138,8 @@ private: int N_; // # of data points fp_t sum_; // sum(data) fp_t sum2_; // sum(data^2) - fp_t infinity_norm_; // max |data| + fp_t max_abs_value_; // max |data| + fp_t min_abs_value_; // min |data| }; //****************************************************************************** |