aboutsummaryrefslogtreecommitdiff
path: root/src/jtutil
diff options
context:
space:
mode:
authorjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-02-27 13:54:55 +0000
committerjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-02-27 13:54:55 +0000
commitedf4fcfb0869c23abcb580d61e70991c9d4836a8 (patch)
tree7e21d85a177064c870149a6dd8c04f773525fbe9 /src/jtutil
parent07995eaa14b03487dc1333b91aa7f6c998eca45a (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.cc11
-rw-r--r--src/jtutil/test_norm.cc4
-rw-r--r--src/jtutil/util.hh22
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|
};
//******************************************************************************