From 47270eff61bfdaf3199fbb6914322a325bd1ce6d Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Mon, 5 Sep 2005 12:29:06 +0000 Subject: [PATCH] write solutions and gradients [[Imported from SVN: r533]] --- staticrod.cc | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/staticrod.cc b/staticrod.cc index 8a50ae61..3b7df977 100644 --- a/staticrod.cc +++ b/staticrod.cc @@ -115,8 +115,8 @@ int main (int argc, char *argv[]) try VectorType corr; MatrixType hessianMatrix; - RodAssembler<RodFuncSpaceType, 2> rodAssembler(*rodFuncSpace[maxlevel]); - rodAssembler.setParameters(1, 10, 10); + RodAssembler<RodFuncSpaceType, 4> rodAssembler(*rodFuncSpace[maxlevel]); + rodAssembler.setParameters(1, 100, 100); MatrixIndexSet indices(numRodElements+1, numRodElements+1); rodAssembler.getNeighborsPerVertex(indices); @@ -232,7 +232,7 @@ int main (int argc, char *argv[]) try IterativeSolver<MatrixType, VectorType> solver; solver.iterationStep = &contactMMGStep; solver.numIt = numIt; - solver.verbosity_ = Solver::FULL; + solver.verbosity_ = Solver::QUIET; solver.errorNorm_ = &energyNorm; solver.tolerance_ = tolerance; @@ -254,6 +254,11 @@ int main (int argc, char *argv[]) try << " new load increment: " << loadIncrement << std::endl; std::cout << "####################################################" << std::endl; + // The continuation variable determines the material parameters + double A1 = loadFactor * 1000; + double A3 = loadFactor * 1000; + rodAssembler.setParameters(1, A1, A3); + // ///////////////////////////////////////////////////// // Newton Solver // ///////////////////////////////////////////////////// @@ -316,11 +321,11 @@ int main (int argc, char *argv[]) try smallestEnergy = energy; smallestFactor = factor; } - //printf("factor: %g, energy: %g\n", factor, energy); + printf("factor: %g, energy: %e\n", factor, energy); } std::cout << "Damping factor: " << smallestFactor << std::endl; - + //exit(0); // Add correction to the current solution x.axpy(smallestFactor, corr); @@ -340,18 +345,25 @@ int main (int argc, char *argv[]) try } + // Write Lagrange multiplyers + std::stringstream a1AsAscii, a3AsAscii; + a1AsAscii << A1; + a3AsAscii << A3; + std::string lagrangeFilename = "pressure/lagrange_" + a1AsAscii.str() + "_" + a3AsAscii.str(); + std::ofstream lagrangeFile(lagrangeFilename.c_str()); - } while (loadFactor < 1); + VectorType lagrangeMultipliers; + rodAssembler.assembleGradient(x, lagrangeMultipliers); + lagrangeFile << lagrangeMultipliers << std::endl; + + // Write result grid + std::string solutionFilename = "solutions/rod_" + a1AsAscii.str() + + "_" + a3AsAscii.str() + ".result"; + writeRod(x, solutionFilename); - // Write result grid - writeRod(x, "rod.result"); + } while (loadFactor < 1); - // Write Lagrange multiplyers - std::ofstream lagrangeFile("lagrange"); - VectorType lagrangeMultipliers; - rodAssembler.assembleGradient(x, lagrangeMultipliers); - lagrangeFile << lagrangeMultipliers << std::endl; } catch (Exception e) { -- GitLab