Skip to content
Snippets Groups Projects
Commit 6e63d360 authored by Oliver Sander's avatar Oliver Sander Committed by sander
Browse files

Implement infrastructure to anisotropically scale the trust region

[[Imported from SVN: r9994]]
parent 5917425d
No related branches found
No related tags found
No related merge requests found
...@@ -280,6 +280,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() ...@@ -280,6 +280,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
} }
MaxNormTrustRegion<blocksize> trustRegion(globalMapper_->size(), initialTrustRegionRadius_); MaxNormTrustRegion<blocksize> trustRegion(globalMapper_->size(), initialTrustRegionRadius_);
trustRegion.set(initialTrustRegionRadius_, scaling_);
std::vector<BoxConstraint<field_type,blocksize> > trustRegionObstacles; std::vector<BoxConstraint<field_type,blocksize> > trustRegionObstacles;
......
...@@ -59,7 +59,9 @@ public: ...@@ -59,7 +59,9 @@ public:
RiemannianTrustRegionSolver() RiemannianTrustRegionSolver()
: IterativeSolver<std::vector<TargetSpace>, Dune::BitSetVector<blocksize> >(0,100,NumProc::FULL), : IterativeSolver<std::vector<TargetSpace>, Dune::BitSetVector<blocksize> >(0,100,NumProc::FULL),
hessianMatrix_(std::auto_ptr<MatrixType>(NULL)), h1SemiNorm_(NULL) hessianMatrix_(std::auto_ptr<MatrixType>(NULL)), h1SemiNorm_(NULL)
{} {
std::fill(scaling_.begin(), scaling_.end(), 1.0);
}
/** \brief Set up the solver using a monotone multigrid method as the inner solver */ /** \brief Set up the solver using a monotone multigrid method as the inner solver */
void setup(const GridType& grid, void setup(const GridType& grid,
...@@ -78,6 +80,11 @@ public: ...@@ -78,6 +80,11 @@ public:
double baseTolerance, double baseTolerance,
bool instrumented); bool instrumented);
void setScaling(const Dune::FieldVector<double,blocksize>& scaling)
{
scaling_(scaling);
}
void setIgnoreNodes(const Dune::BitSetVector<blocksize>& ignoreNodes) void setIgnoreNodes(const Dune::BitSetVector<blocksize>& ignoreNodes)
{ {
ignoreNodes_ = &ignoreNodes; ignoreNodes_ = &ignoreNodes;
...@@ -111,6 +118,9 @@ protected: ...@@ -111,6 +118,9 @@ protected:
/** \brief The initial trust-region radius in the maximum-norm */ /** \brief The initial trust-region radius in the maximum-norm */
double initialTrustRegionRadius_; double initialTrustRegionRadius_;
/** \brief Trust-region norm scaling */
Dune::FieldVector<double,blocksize> scaling_;
/** \brief Maximum number of trust-region steps */ /** \brief Maximum number of trust-region steps */
int maxTrustRegionSteps_; int maxTrustRegionSteps_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment