diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 2da1c75d23c9d7ffada47660ffeb0b84b6f17ddc..d2c617778068e6cf919e6ff9f9ec835da739d9d5 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -342,8 +342,17 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() // //////////////////////////////////////////////////// SolutionType newIterate = x_; +#if 0 // out-commented until the Rotation class can distinguish skew-symmetric matrices from three-vectors for (int j=0; j<newIterate.size(); j++) newIterate[j] = TargetSpace::exp(newIterate[j], corr[j]); +#else + for (int j=0; j<newIterate.size(); j++) { + Dune::FieldMatrix<double,TargetSpace::TangentVector::size,TargetSpace::EmbeddedTangentVector::size> B = x_[j].orthonormalFrame(); + Dune::FieldVector<double,TargetSpace::EmbeddedTangentVector::size> embeddedCorr(0); + B.mtv(corr[j], embeddedCorr); + newIterate[j] = TargetSpace::exp(newIterate[j], embeddedCorr); + } +#endif double energy = assembler_->computeEnergy(newIterate); diff --git a/dune/gfe/targetspacertrsolver.cc b/dune/gfe/targetspacertrsolver.cc index 4cc9caa8eb3313f912bab2799282e98a013980ca..f80f4bcd6461a8db1f744538427cb6b1a58a07c0 100644 --- a/dune/gfe/targetspacertrsolver.cc +++ b/dune/gfe/targetspacertrsolver.cc @@ -107,7 +107,15 @@ void TargetSpaceRiemannianTRSolver<TargetSpace,N>::solve() // //////////////////////////////////////////////////// TargetSpace newIterate = x_; +#if 0 // out-commented until the Rotation class can distinguish skew-symmetric matrices from three-vectors newIterate = TargetSpace::exp(newIterate, corr[0]); +#else + Dune::FieldMatrix<double,TargetSpace::TangentVector::size,TargetSpace::EmbeddedTangentVector::size> B = x_.orthonormalFrame(); + Dune::FieldVector<double,TargetSpace::EmbeddedTangentVector::size> embeddedCorr(0); + B.mtv(corr[0], embeddedCorr); + + newIterate = TargetSpace::exp(newIterate, embeddedCorr); +#endif /** \todo Don't always recompute oldEnergy */ double oldEnergy = assembler_->value(x_);