#ifndef MAX_NORM_TRUST_REGION_HH #define MAX_NORM_TRUST_REGION_HH #include <vector> #include <dune/solvers/common/boxconstraint.hh> template <int blocksize> class MaxNormTrustRegion { public: MaxNormTrustRegion(size_t size, double initialRadius) : obstacles_(size) { set(initialRadius); } void set(double radius) { for (size_t i=0; i<obstacles_.size(); i++) { for (int k=0; k<blocksize; k++) { obstacles_[i].lower(k) = -radius; obstacles_[i].upper(k) = radius; } } } double radius() const { assert(obstacles_.size()>0); assert(blocksize>0); return obstacles_[0].upper(0); } void scale(double factor) { for (size_t i=0; i<obstacles_.size(); i++) { for (int k=0; k<blocksize; k++) { obstacles_[i].lower(k) *= factor; obstacles_[i].upper(k) *= factor; } } } const std::vector<BoxConstraint<double,blocksize> >& obstacles() const { return obstacles_; } private: std::vector<BoxConstraint<double,blocksize> > obstacles_; }; #endif