From b462d8891cd815c293e8b5bead6396b818555550 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Fri, 31 Jan 2014 13:13:42 +0100 Subject: [PATCH] [Cleanup] Friction writing: Use a general projector for outputting --- src/boundary_writer.cc | 9 +++++---- src/boundary_writer.hh | 8 +++++++- src/friction_writer.cc | 5 +++-- src/friction_writer.hh | 3 ++- src/one-body-sample.cc | 5 +++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/boundary_writer.cc b/src/boundary_writer.cc index 0a6d3941..8d039d9d 100644 --- a/src/boundary_writer.cc +++ b/src/boundary_writer.cc @@ -7,10 +7,11 @@ template <class ScalarVector, class Vector> BoundaryWriter<ScalarVector, Vector>::BoundaryWriter( Vector const &vertexCoordinates, - Dune::BitSetVector<1> const &_boundaryNodes) + Dune::BitSetVector<1> const &_boundaryNodes, Projector projector) : displacementWriter("displacements", std::fstream::out), velocityWriter("velocities", std::fstream::out), - boundaryNodes(_boundaryNodes) { + boundaryNodes(_boundaryNodes), + projector_(projector) { std::fstream vertexCoordinateWriter("coordinates", std::fstream::out); for (size_t i = 0; i < boundaryNodes.size(); ++i) if (boundaryNodes[i][0]) @@ -31,8 +32,8 @@ void BoundaryWriter<ScalarVector, Vector>::writeKinetics(Vector const &u, if (!boundaryNodes[i][0]) continue; - displacementWriter << u[i][0] << " "; - velocityWriter << v[i][0] << " "; + displacementWriter << projector_(u[i]) << " "; + velocityWriter << projector_(v[i]) << " "; } displacementWriter << std::endl; diff --git a/src/boundary_writer.hh b/src/boundary_writer.hh index 9bb8346f..670e68b0 100644 --- a/src/boundary_writer.hh +++ b/src/boundary_writer.hh @@ -7,9 +7,13 @@ #include <dune/common/bitsetvector.hh> template <class ScalarVector, class Vector> class BoundaryWriter { +protected: + using Projector = std::function<double(typename Vector::block_type const &)>; + public: BoundaryWriter(Vector const &vertexCoordinates, - Dune::BitSetVector<1> const &_boundaryNodes); + Dune::BitSetVector<1> const &_boundaryNodes, + Projector projector); virtual ~BoundaryWriter(); @@ -19,5 +23,7 @@ template <class ScalarVector, class Vector> class BoundaryWriter { std::fstream displacementWriter; std::fstream velocityWriter; Dune::BitSetVector<1> const &boundaryNodes; + + Projector projector_; }; #endif diff --git a/src/friction_writer.cc b/src/friction_writer.cc index 465e2026..269f4969 100644 --- a/src/friction_writer.cc +++ b/src/friction_writer.cc @@ -7,8 +7,9 @@ template <class ScalarVector, class Vector> FrictionWriter<ScalarVector, Vector>::FrictionWriter( Vector const &vertexCoordinates, - Dune::BitSetVector<1> const &_boundaryNodes) - : BW(vertexCoordinates, _boundaryNodes), + Dune::BitSetVector<1> const &_boundaryNodes, + typename BW::Projector projector) + : BW(vertexCoordinates, _boundaryNodes, projector), coefficientWriter("coefficients", std::fstream::out), stateWriter("states", std::fstream::out) {} diff --git a/src/friction_writer.hh b/src/friction_writer.hh index 58b2c8b2..32b42ed4 100644 --- a/src/friction_writer.hh +++ b/src/friction_writer.hh @@ -14,7 +14,8 @@ class FrictionWriter : public BoundaryWriter<ScalarVector, Vector> { public: FrictionWriter(Vector const &vertexCoordinates, - Dune::BitSetVector<1> const &_boundaryNodes); + Dune::BitSetVector<1> const &_boundaryNodes, + typename BW::Projector projector); ~FrictionWriter(); diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index 692a3820..96f64c53 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -280,8 +280,9 @@ int main(int argc, char *argv[]) { vertexCoordinates[vertexMapper.map(*it)] = geometry.corner(0); } } - FrictionWriter<ScalarVector, Vector> frictionWriter(vertexCoordinates, - frictionalNodes); + FrictionWriter<ScalarVector, Vector> frictionWriter( + vertexCoordinates, frictionalNodes, + [](LocalVector const &x) { return x[0]; }); auto const reportFriction = [&](Vector const &_u, Vector const &_v, ScalarVector const &_alpha) { ScalarVector c; -- GitLab