Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
203 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
boundary_writer.cc 1.47 KiB
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "boundary_writer.hh"
#include "tobool.hh"

template <class ScalarVector, class Vector>
BoundaryWriter<ScalarVector, Vector>::BoundaryWriter(
    Vector const &vertexCoordinates,
    Dune::BitSetVector<1> const &_boundaryNodes, std::string prefix,
    Projector projector)
    : displacementWriter(prefix + "Displacements", std::fstream::out),
      velocityWriter(prefix + "Velocities", std::fstream::out),
      boundaryNodes(_boundaryNodes),
      projector_(projector) {
  std::fstream vertexCoordinateWriter(prefix + "Coordinates",
                                      std::fstream::out);
  for (size_t i = 0; i < boundaryNodes.size(); ++i)
    if (toBool(boundaryNodes[i]))
      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 (!toBool(boundaryNodes[i]))
      continue;

    displacementWriter << projector_(u[i]) << " ";
    velocityWriter << projector_(v[i]) << " ";
  }

  displacementWriter << std::endl;
  velocityWriter << std::endl;
}

#include "boundary_writer_tmpl.cc"