From 4021b000c59b304a1fae3d1ef5c55f4439a9f847 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Wed, 17 Oct 2012 14:53:19 +0200 Subject: [PATCH] Only write out data for a central node --- src/one-body-sample.cc | 54 +++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index 3bb04f71..a10414ec 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -86,7 +86,8 @@ void setup_boundary(GridView const &gridView, Dune::BitSetVector<dim> &ignoreNodes, Dune::BitSetVector<1> &neumannNodes, Dune::BitSetVector<1> &frictionalNodes, - GridCorner const &lowerLeft, GridCorner const &upperRight) { + GridCorner const &lowerLeft, GridCorner const &upperRight, + size_t &specialNode) { typedef typename GridView::template Codim<dim>::Iterator VertexLeafIterator; Dune::MultipleCodimMultipleGeomTypeMapper< @@ -97,6 +98,22 @@ void setup_boundary(GridView const &gridView, assert(it->geometry().corners() == 1); Dune::FieldVector<double, dim> const coordinates = it->geometry().corner(0); size_t const id = myVertexMapper.map(*it); + + // Find the center of the lower face + switch (dim) { + case 3: + if (coordinates[2] != lowerLeft[2]) + break; + // fallthrough + case 2: + if (coordinates[1] == lowerLeft[1] && + std::abs(coordinates[0] - lowerLeft[0]) < 1e-8) + specialNode = id; + break; + default: + assert(false); + } + if (coordinates[1] == upperRight[1]) // upper face ignoreNodes[id] = true; else if (coordinates[1] == lowerLeft[1]) { // lower face @@ -234,11 +251,14 @@ int main(int argc, char *argv[]) { EnergyNorm<MatrixType, VectorType> energyNorm(stiffnessMatrix); // Set up the boundary + size_t specialNode = finestSize; Dune::BitSetVector<dim> ignoreNodes(finestSize, false); Dune::BitSetVector<1> neumannNodes(finestSize, false); Dune::BitSetVector<1> frictionalNodes(finestSize, false); setup_boundary(leafView, ignoreNodes, neumannNodes, frictionalNodes, - lowerLeft, upperRight); + lowerLeft, upperRight, specialNode); + assert(specialNode != finestSize); + assert(frictionalNodes[specialNode][0]); auto const nodalIntegrals = assemble_frictional<GridType, GridView, SmallVector, P1Basis>( @@ -425,26 +445,16 @@ int main(int argc, char *argv[]) { alpha_old = alpha; { // Write all kinds of data - for (size_t i = 0; i < frictionalNodes.size(); ++i) - if (frictionalNodes[i][0]) - state_writer << alpha[i][0] << " "; - state_writer << std::endl; - - for (size_t i = 0; i < frictionalNodes.size(); ++i) - if (frictionalNodes[i][0]) - displacement_writer << u[i][0] << " "; - displacement_writer << std::endl; - - for (size_t i = 0; i < frictionalNodes.size(); ++i) - if (frictionalNodes[i][0]) - velocity_writer << ud[i][0] << " "; - velocity_writer << std::endl; - - for (size_t i = 0; i < frictionalNodes.size(); ++i) - if (frictionalNodes[i][0]) - coefficient_writer << mu + a *std::log(ud[i].two_norm() / V0) + - b * (alpha[i] + std::log(V0 / L)) << " "; - coefficient_writer << std::endl; + state_writer << alpha[specialNode][0] << " " << std::endl; + + displacement_writer << u[specialNode][0] << " " << std::endl; + + velocity_writer << ud[specialNode][0] << " " << std::endl; + + coefficient_writer << mu + + a *std::log(ud[specialNode].two_norm() / V0) + + b * (alpha[specialNode] + std::log(V0 / L)) + << " " << std::endl; } // Compute von Mises stress and write everything to a file -- GitLab