diff --git a/src/boundary_writer.cc b/src/boundary_writer.cc index 0a6d39419298ddab8e5206109252e56473bf690f..8d039d9d79163a0130442c4cda71256718bf5459 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 9bb8346ff70c7c2efa82665bdee5536e6c1ae72a..670e68b007612bb8dc76fa8e2fdd7361d7a2f341 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 465e2026ca110ef13e2f68e53c5de3f810cb32a6..269f4969cfc37450ae13b6591d0f92ffaf98cb94 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 58b2c8b2e00a6deea0c4a4d8199f11c25cefe60d..32b42ed4675a0d05d4ca383eff5c76d9c0f2d8ed 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 692a3820e4cede7fc80d5bc61b13efeb36bc4466..96f64c5391e5b2f4dda78b0088f1e55eead0627b 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;