From a84b8fb395acf64203af7db6af2a00b5cdd4a1ca Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Mon, 8 Jul 2013 13:38:37 +0000 Subject: [PATCH] remove trailing whitespace [[Imported from SVN: r9292]] --- dune/gfe/riemanniantrsolver.cc | 136 ++++++++++++++++----------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc index 45d1b41a..6c1bae0e 100644 --- a/dune/gfe/riemanniantrsolver.cc +++ b/dune/gfe/riemanniantrsolver.cc @@ -36,7 +36,7 @@ setup(const GridType& grid, double initialTrustRegionRadius, int multigridIterations, double mgTolerance, - int mu, + int mu, int nu1, int nu2, int baseIterations, @@ -78,7 +78,7 @@ setup(const GridType& grid, baseEnergyNorm, Solver::QUIET); #endif - + // Make pre and postsmoothers TrustRegionGSStep<MatrixType, CorrectionType>* presmoother = new TrustRegionGSStep<MatrixType, CorrectionType>; TrustRegionGSStep<MatrixType, CorrectionType>* postsmoother = new TrustRegionGSStep<MatrixType, CorrectionType>; @@ -125,16 +125,16 @@ setup(const GridType& grid, // //////////////////////////////////////////////////////////// // Create Hessian matrix and its occupation structure // //////////////////////////////////////////////////////////// - + hessianMatrix_ = std::auto_ptr<MatrixType>(new MatrixType); Dune::MatrixIndexSet indices(grid_->size(1), grid_->size(1)); assembler_->getNeighborsPerVertex(indices); indices.exportIdx(*hessianMatrix_); - + // ////////////////////////////////////////////////////////// // Create obstacles // ////////////////////////////////////////////////////////// - + hasObstacle_.resize(numLevels); #if defined THIRD_ORDER || defined SECOND_ORDER BasisType basis(grid_->leafView()); @@ -152,17 +152,17 @@ setup(const GridType& grid, // //////////////////////////////////// for (size_t k=0; k<mmgStep->mgTransfer_.size(); k++) delete(mmgStep->mgTransfer_[k]); - + mmgStep->mgTransfer_.resize(numLevels-1); - + #if defined THIRD_ORDER || defined SECOND_ORDER if (numLevels>1) { P1NodalBasis<typename GridType::LeafGridView,double> p1Basis(grid_->leafView()); - + PKtoP1MGTransfer<CorrectionType>* topTransferOp = new PKtoP1MGTransfer<CorrectionType>; topTransferOp->setup(basis,p1Basis); mmgStep->mgTransfer_.back() = topTransferOp; - + for (int i=0; i<mmgStep->mgTransfer_.size()-1; i++){ TruncatedCompressedMGTransfer<CorrectionType>* newTransferOp = new TruncatedCompressedMGTransfer<CorrectionType>; newTransferOp->setup(*grid_,i+1,i+2); @@ -189,12 +189,12 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() // if the inner solver is a monotone multigrid set up a max-norm trust-region if (dynamic_cast<LoopSolver<CorrectionType>*>(innerSolver_.get())) { mgStep = dynamic_cast<MonotoneMGStep<MatrixType,CorrectionType>*>(dynamic_cast<LoopSolver<CorrectionType>*>(innerSolver_.get())->iterationStep_); - - } + + } MaxNormTrustRegion<blocksize> trustRegion(x_.size(), initialTrustRegionRadius_); - std::vector<std::vector<BoxConstraint<field_type,blocksize> > > trustRegionObstacles((mgStep) + std::vector<std::vector<BoxConstraint<field_type,blocksize> > > trustRegionObstacles((mgStep) ? mgStep->numLevels() : 0); @@ -207,27 +207,27 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() fp = fopen("statistics", "w"); if (!fp) DUNE_THROW(Dune::IOError, "Couldn't open statistics file for writing!"); - + } // ///////////////////////////////////////////////////// // Trust-Region Solver // ///////////////////////////////////////////////////// - + double oldEnergy = assembler_->computeEnergy(x_); bool recomputeGradientHessian = true; CorrectionType rhs; - + for (int i=0; i<maxTrustRegionSteps_; i++) { /* std::cout << "current iterate:\n"; for (int j=0; j<x_.size(); j++) std::cout << x_[j] << std::endl;*/ - + Dune::Timer totalTimer; if (this->verbosity_ == Solver::FULL) { std::cout << "----------------------------------------------------" << std::endl; - std::cout << " Trust-Region Step Number: " << i + std::cout << " Trust-Region Step Number: " << i << ", radius: " << trustRegion.radius() << ", energy: " << assembler_->computeEnergy(x_) << std::endl; std::cout << "----------------------------------------------------" << std::endl; @@ -237,9 +237,9 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() corr = 0; Dune::Timer gradientTimer; - + if (recomputeGradientHessian) { - + double oldClock = omp_get_wtime(); assembler_->assembleGradient(x_, rhs); @@ -248,33 +248,33 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() std::cout << "gradient assembly took " << (omp_get_wtime() - oldClock) << " sec." << std::endl; gradientTimer.reset(); oldClock = omp_get_wtime(); - - assembler_->assembleMatrix(x_, - *hessianMatrix_, + + assembler_->assembleMatrix(x_, + *hessianMatrix_, i==0 // assemble occupation pattern only for the first call ); std::cout << "hessian assembly took " << gradientTimer.elapsed() << " sec." << std::endl; std::cout << "hessian assembly took " << (omp_get_wtime() - oldClock) << " sec." << std::endl; recomputeGradientHessian = false; } - + /* std::cout << "rhs:\n" << rhs << std::endl; std::cout << "matrix[0][0]:\n" << (*hessianMatrix_)[0][0] << std::endl;*/ - + // ////////////////////////////////////////////////////////////////////// // Modify matrix and right-hand side to account for Dirichlet values // ////////////////////////////////////////////////////////////////////// typedef typename MatrixType::row_type::Iterator ColumnIterator; - + for (size_t j=0; j<ignoreNodes_->size(); j++) { - + if (ignoreNodes_->operator[](j).count() > 0) { - + // make matrix row an identity row ColumnIterator cIt = (*hessianMatrix_)[j].begin(); ColumnIterator cEndIt = (*hessianMatrix_)[j].end(); - + for (; cIt!=cEndIt; ++cIt) { for (int k=0; k<blocksize; k++) { if (ignoreNodes_->operator[](j)[k]) { @@ -294,18 +294,18 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() } mgStep->setProblem(*hessianMatrix_, corr, rhs, grid_->maxLevel()+1); - + trustRegionObstacles.back() = trustRegion.obstacles(); mgStep->obstacles_ = &trustRegionObstacles; innerSolver_->preprocess(); - + // ///////////////////////////// // Solve ! // ///////////////////////////// - + innerSolver_->solve(); - + if (mgStep) corr = mgStep->getSol(); @@ -315,44 +315,44 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() fprintf(fp, "Trust-region step: %d, trust-region radius: %g\n", i, trustRegion.radius()); - + // /////////////////////////////////////////////////////////////// // Compute and measure progress against the exact solution // for each trust region step // /////////////////////////////////////////////////////////////// - + CorrectionType exactSolution = corr; // Start from 0 double oldError = 0; double totalConvRate = 1; double convRate = 1; - + // Write statistics of the initial solution // Compute the energy norm oldError = h1SemiNorm_->operator()(exactSolution); - + for (int j=0; j<innerIterations_; j++) { - + // read iteration from file CorrectionType intermediateSol(grid_->size(gridDim)); intermediateSol = 0; char iSolFilename[100]; sprintf(iSolFilename, "tmp/mgHistory/intermediatesolution_%04d", j); - + FILE* fpInt = fopen(iSolFilename, "rb"); if (!fpInt) DUNE_THROW(Dune::IOError, "Couldn't open intermediate solution"); for (size_t k=0; k<intermediateSol.size(); k++) for (int l=0; l<blocksize; l++) fread(&intermediateSol[k][l], sizeof(double), 1, fpInt); - + fclose(fpInt); //std::cout << "intermediateSol\n" << intermediateSol << std::endl; // Compute errors intermediateSol -= exactSolution; - + //std::cout << "error\n" << intermediateSol << std::endl; // Compute the H1 norm @@ -360,23 +360,23 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() convRate = error / oldError; totalConvRate *= convRate; - + if (error < 1e-12) break; - + std::cout << "Iteration: " << j << " "; std::cout << "Errors: error " << error << ", convergence rate: " << convRate << ", total conv rate " << pow(totalConvRate, 1/((double)j+1)) << std::endl; - + fprintf(fp, "%d %g %g %g\n", j+1, error, convRate, pow(totalConvRate, 1/((double)j+1))); - - + + oldError = error; - + } - - + + } if (this->verbosity_ == NumProc::FULL) @@ -390,14 +390,14 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() std::cout << i+1 << " trust-region steps were taken." << std::endl; break; } - + // //////////////////////////////////////////////////// // Check whether trust-region step can be accepted // //////////////////////////////////////////////////// - + 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++) + for (int j=0; j<newIterate.size(); j++) newIterate[j] = TargetSpace::exp(newIterate[j], corr[j]); #else //std::cout << "embedded correction:\n"; @@ -410,9 +410,9 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() //std::cout << embeddedCorr << " " << newIterate[j] << std::endl; } #endif - - double energy = assembler_->computeEnergy(newIterate); - + + double energy = assembler_->computeEnergy(newIterate); + // compute the model decrease // It is $ m(x) - m(x+s) = -<g,s> - 0.5 <s, Hs> // Note that rhs = -g @@ -424,14 +424,14 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() double relativeModelDecrease = modelDecrease / std::fabs(energy); if (this->verbosity_ == NumProc::FULL) { - std::cout << "Absolute model decrease: " << modelDecrease + std::cout << "Absolute model decrease: " << modelDecrease << ", functional decrease: " << oldEnergy - energy << std::endl; std::cout << "Relative model decrease: " << relativeModelDecrease << ", functional decrease: " << (oldEnergy - energy)/energy << std::endl; - } + } assert(modelDecrease >= 0); - + if (energy >= oldEnergy) { if (this->verbosity_ == NumProc::FULL) printf("Richtung ist keine Abstiegsrichtung!\n"); @@ -454,36 +454,36 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() // ////////////////////////////////////////////// if ( (oldEnergy-energy) / modelDecrease > 0.9) { // very successful iteration - + x_ = newIterate; trustRegion.scale(2); - + // current energy becomes 'oldEnergy' for the next iteration oldEnergy = energy; - + recomputeGradientHessian = true; - + } else if ( (oldEnergy-energy) / modelDecrease > 0.01 || std::abs(oldEnergy-energy) < 1e-12) { // successful iteration x_ = newIterate; - + // current energy becomes 'oldEnergy' for the next iteration oldEnergy = energy; - + recomputeGradientHessian = true; - + } else { - + // unsuccessful iteration // Decrease the trust-region radius trustRegion.scale(0.5); - + if (this->verbosity_ == NumProc::FULL) std::cout << "Unsuccessful iteration!" << std::endl; } - + // ///////////////////////////////////////////////////////////////////// // Write the iterate to disk for later convergence rate measurement // ///////////////////////////////////////////////////////////////////// @@ -496,7 +496,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve() FILE* fpIterate = fopen(iFilename, "wb"); if (!fpIterate) DUNE_THROW(SolverError, "Couldn't open file " << iFilename << " for writing"); - + for (size_t j=0; j<x_.size(); j++) fwrite(&x_[j], sizeof(TargetSpace), 1, fpIterate); -- GitLab