From abeaf8b803d947231f7fcc2a4015bce378cfa973 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Thu, 30 Jan 2014 13:56:08 +0100 Subject: [PATCH] [Cleanup] Friction writing: Move half of friction writing into new class --- src/Makefile.am | 1 + src/boundary_writer.cc | 42 +++++++++++++++++++++++++++++++++++++ src/boundary_writer.hh | 23 ++++++++++++++++++++ src/boundary_writer_tmpl.cc | 7 +++++++ src/friction_writer.cc | 33 ++++------------------------- src/friction_writer.hh | 13 +++++++----- 6 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 src/boundary_writer.cc create mode 100644 src/boundary_writer.hh create mode 100644 src/boundary_writer_tmpl.cc diff --git a/src/Makefile.am b/src/Makefile.am index 66b6ed36..4cca1056 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,6 +3,7 @@ bin_PROGRAMS = \ SOURCES = \ assemblers.cc \ + boundary_writer.cc \ friction_writer.cc \ state/compute_state_dieterich_euler.cc \ state/compute_state_ruina.cc \ diff --git a/src/boundary_writer.cc b/src/boundary_writer.cc new file mode 100644 index 00000000..0a6d3941 --- /dev/null +++ b/src/boundary_writer.cc @@ -0,0 +1,42 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "boundary_writer.hh" + +template <class ScalarVector, class Vector> +BoundaryWriter<ScalarVector, Vector>::BoundaryWriter( + Vector const &vertexCoordinates, + Dune::BitSetVector<1> const &_boundaryNodes) + : displacementWriter("displacements", std::fstream::out), + velocityWriter("velocities", std::fstream::out), + boundaryNodes(_boundaryNodes) { + std::fstream vertexCoordinateWriter("coordinates", std::fstream::out); + for (size_t i = 0; i < boundaryNodes.size(); ++i) + if (boundaryNodes[i][0]) + vertexCoordinateWriter << vertexCoordinates[i] << std::endl; + vertexCoordinateWriter.close(); +} + +template <class ScalarVector, class Vector> +BoundaryWriter<ScalarVector, Vector>::~BoundaryWriter() { + displacementWriter.close(); + velocityWriter.close(); +} + +template <class ScalarVector, class Vector> +void BoundaryWriter<ScalarVector, Vector>::writeKinetics(Vector const &u, + Vector const &v) { + for (size_t i = 0; i < boundaryNodes.size(); ++i) { + if (!boundaryNodes[i][0]) + continue; + + displacementWriter << u[i][0] << " "; + velocityWriter << v[i][0] << " "; + } + + displacementWriter << std::endl; + velocityWriter << std::endl; +} + +#include "boundary_writer_tmpl.cc" diff --git a/src/boundary_writer.hh b/src/boundary_writer.hh new file mode 100644 index 00000000..9bb8346f --- /dev/null +++ b/src/boundary_writer.hh @@ -0,0 +1,23 @@ +#ifndef BOUNDARY_WRITER_HH +#define BOUNDARY_WRITER_HH + +#include <fstream> +#include <string> + +#include <dune/common/bitsetvector.hh> + +template <class ScalarVector, class Vector> class BoundaryWriter { +public: + BoundaryWriter(Vector const &vertexCoordinates, + Dune::BitSetVector<1> const &_boundaryNodes); + + virtual ~BoundaryWriter(); + + void writeKinetics(Vector const &u, Vector const &v); + +protected: + std::fstream displacementWriter; + std::fstream velocityWriter; + Dune::BitSetVector<1> const &boundaryNodes; +}; +#endif diff --git a/src/boundary_writer_tmpl.cc b/src/boundary_writer_tmpl.cc new file mode 100644 index 00000000..8d7f43c4 --- /dev/null +++ b/src/boundary_writer_tmpl.cc @@ -0,0 +1,7 @@ +#ifndef DIM +#error DIM unset +#endif + +#include "explicitvectors.hh" + +template class BoundaryWriter<ScalarVector, Vector>; diff --git a/src/friction_writer.cc b/src/friction_writer.cc index b43bc820..465e2026 100644 --- a/src/friction_writer.cc +++ b/src/friction_writer.cc @@ -8,41 +8,16 @@ template <class ScalarVector, class Vector> FrictionWriter<ScalarVector, Vector>::FrictionWriter( Vector const &vertexCoordinates, Dune::BitSetVector<1> const &_boundaryNodes) - : coefficientWriter("coefficients", std::fstream::out), - displacementWriter("displacements", std::fstream::out), - stateWriter("states", std::fstream::out), - velocityWriter("velocities", std::fstream::out), - boundaryNodes(_boundaryNodes) { - std::fstream vertexCoordinateWriter("coordinates", std::fstream::out); - for (size_t i = 0; i < boundaryNodes.size(); ++i) - if (boundaryNodes[i][0]) - vertexCoordinateWriter << vertexCoordinates[i] << std::endl; - vertexCoordinateWriter.close(); -} + : BW(vertexCoordinates, _boundaryNodes), + coefficientWriter("coefficients", std::fstream::out), + stateWriter("states", std::fstream::out) {} template <class ScalarVector, class Vector> FrictionWriter<ScalarVector, Vector>::~FrictionWriter() { stateWriter.close(); - displacementWriter.close(); - velocityWriter.close(); coefficientWriter.close(); } -template <class ScalarVector, class Vector> -void FrictionWriter<ScalarVector, Vector>::writeKinetics(Vector const &u, - Vector const &v) { - for (size_t i = 0; i < boundaryNodes.size(); ++i) { - if (!boundaryNodes[i][0]) - continue; - - displacementWriter << u[i][0] << " "; - velocityWriter << v[i][0] << " "; - } - - displacementWriter << std::endl; - velocityWriter << std::endl; -} - template <class ScalarVector, class Vector> void FrictionWriter<ScalarVector, Vector>::writeOther( ScalarVector const &coefficient, ScalarVector const &alpha) { @@ -51,7 +26,7 @@ void FrictionWriter<ScalarVector, Vector>::writeOther( continue; coefficientWriter << coefficient[i] << " "; - stateWriter << alpha[i][0] << " "; + stateWriter << alpha[i] << " "; } stateWriter << std::endl; diff --git a/src/friction_writer.hh b/src/friction_writer.hh index f5979612..58b2c8b2 100644 --- a/src/friction_writer.hh +++ b/src/friction_writer.hh @@ -2,24 +2,27 @@ #define FRICTION_WRITER_HH #include <fstream> +#include <string> #include <dune/common/bitsetvector.hh> -template <class ScalarVector, class Vector> class FrictionWriter { +#include "boundary_writer.hh" + +template <class ScalarVector, class Vector> +class FrictionWriter : public BoundaryWriter<ScalarVector, Vector> { + using BW = BoundaryWriter<ScalarVector, Vector>; + public: FrictionWriter(Vector const &vertexCoordinates, Dune::BitSetVector<1> const &_boundaryNodes); ~FrictionWriter(); - void writeKinetics(Vector const &u, Vector const &v); void writeOther(ScalarVector const &coefficient, ScalarVector const &alpha); private: std::fstream coefficientWriter; - std::fstream displacementWriter; std::fstream stateWriter; - std::fstream velocityWriter; - Dune::BitSetVector<1> const &boundaryNodes; + using BW::boundaryNodes; }; #endif -- GitLab