diff --git a/src/Makefile.am b/src/Makefile.am index 66b6ed368f186376815370c4b0d6e5516d3af996..4cca1056223006b91a0d55c175242bca7d0a0bb5 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 0000000000000000000000000000000000000000..0a6d39419298ddab8e5206109252e56473bf690f --- /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 0000000000000000000000000000000000000000..9bb8346ff70c7c2efa82665bdee5536e6c1ae72a --- /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 0000000000000000000000000000000000000000..8d7f43c4eb8170c3be1d46ac27483f5354f28929 --- /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 b43bc820d36b987440bafbd3d02debf8d90f0028..465e2026ca110ef13e2f68e53c5de3f810cb32a6 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 f5979612332b37734023667a5d41b7ba4f96414b..58b2c8b2e00a6deea0c4a4d8199f11c25cefe60d 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