Skip to content
Snippets Groups Projects
Commit ca0833dd authored by Elias Pipping's avatar Elias Pipping
Browse files

[Cleanup] Move VTK writing to a class

Now also writes out the velocity
parent c6d42334
No related branches found
No related tags found
No related merge requests found
...@@ -320,6 +320,10 @@ int main(int argc, char *argv[]) { ...@@ -320,6 +320,10 @@ int main(int argc, char *argv[]) {
FrictionWriter<Dune::BitSetVector<1>> writer(frictionData, frictionalNodes); FrictionWriter<Dune::BitSetVector<1>> writer(frictionData, frictionalNodes);
writer.writeInfo(alpha_initial, u_initial, v_initial); writer.writeInfo(alpha_initial, u_initial, v_initial);
MyVTKWriter<typename MyAssembler::VertexBasis,
typename MyAssembler::CellBasis>
vtkWriter(myAssembler.cellBasis, myAssembler.vertexBasis, "obs");
// Set up TNNMG solver // Set up TNNMG solver
using NonlinearFactory = using NonlinearFactory =
SolverFactory<dims, MyBlockProblem<ConvexProblem< SolverFactory<dims, MyBlockProblem<ConvexProblem<
...@@ -458,11 +462,10 @@ int main(int argc, char *argv[]) { ...@@ -458,11 +462,10 @@ int main(int argc, char *argv[]) {
relaxationWriter << std::endl; relaxationWriter << std::endl;
if (parset.get<bool>("io.writeVTK")) { if (parset.get<bool>("io.writeVTK")) {
ScalarVector vonMisesStress; ScalarVector stress;
myAssembler.assembleVonMisesStress(youngModulus, poissonRatio, u, myAssembler.assembleVonMisesStress(youngModulus, poissonRatio, u,
vonMisesStress); stress);
writeVtk(myAssembler.vertexBasis, u, alpha, myAssembler.cellBasis, vtkWriter.write(u, v, alpha, stress);
vonMisesStress, (boost::format("obs%d") % run).str());
} }
} }
iterationWriter.close(); iterationWriter.close();
......
...@@ -8,28 +8,45 @@ ...@@ -8,28 +8,45 @@
#include "vtk.hh" #include "vtk.hh"
template <class VertexBasis, class CellBasis, class Vector, class ScalarVector> template <class VertexBasis, class CellBasis>
void writeVtk(VertexBasis const &vertexBasis, Vector const &displacement, MyVTKWriter<VertexBasis, CellBasis>::MyVTKWriter(
ScalarVector const &logState, CellBasis const &cellBasis, CellBasis const &_cellBasis, VertexBasis const &_vertexBasis,
ScalarVector const &stress, std::string const &filename) { std::string _prefix)
: cellBasis(_cellBasis),
vertexBasis(_vertexBasis),
prefix(_prefix),
counter(0) {}
template <class VertexBasis, class CellBasis>
template <class Vector, class ScalarVector>
void MyVTKWriter<VertexBasis, CellBasis>::write(Vector const &u,
Vector const &v,
ScalarVector const &alpha,
ScalarVector const &stress) {
Dune::VTKWriter<typename VertexBasis::GridView> writer( Dune::VTKWriter<typename VertexBasis::GridView> writer(
vertexBasis.getGridView()); vertexBasis.getGridView());
auto const displacementPointer = auto const displacementPointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, Vector> const>( std::make_shared<VTKBasisGridFunction<VertexBasis, Vector> const>(
vertexBasis, displacement, "displacement"); vertexBasis, u, "displacement");
writer.addVertexData(displacementPointer); writer.addVertexData(displacementPointer);
auto const velocityPointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, Vector> const>(
vertexBasis, v, "velocity");
writer.addVertexData(velocityPointer);
auto const logStatePointer = auto const logStatePointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, ScalarVector> const>( std::make_shared<VTKBasisGridFunction<VertexBasis, ScalarVector> const>(
vertexBasis, logState, "logState"); vertexBasis, alpha, "logState");
writer.addVertexData(logStatePointer); writer.addVertexData(logStatePointer);
auto const vonmisesPointer = auto const stressPointer =
std::make_shared<VTKBasisGridFunction<CellBasis, ScalarVector> const>( std::make_shared<VTKBasisGridFunction<CellBasis, ScalarVector> const>(
cellBasis, stress, "stress"); cellBasis, stress, "stress");
writer.addCellData(vonmisesPointer); writer.addCellData(stressPointer);
std::string const filename = prefix + std::to_string(counter++);
writer.write(filename.c_str()); writer.write(filename.c_str());
} }
......
#ifndef VTK_HH #ifndef VTK_HH
#define VTK_HH #define VTK_HH
template <class VertexBasis, class CellBasis, class Vector, class ScalarVector> template <class VertexBasis, class CellBasis> class MyVTKWriter {
void writeVtk(VertexBasis const &vertexBasis, Vector const &displacement, CellBasis const &cellBasis;
ScalarVector const &logState, CellBasis const &cellBasis, VertexBasis const &vertexBasis;
ScalarVector const &stress, std::string const &filename); std::string const prefix;
size_t counter;
public:
MyVTKWriter(CellBasis const &cellBasis, VertexBasis const &vertexBasis,
std::string prefix);
template <class Vector, class ScalarVector>
void write(Vector const &u, Vector const &v, ScalarVector const &alpha,
ScalarVector const &stress);
};
#endif #endif
...@@ -8,10 +8,11 @@ ...@@ -8,10 +8,11 @@
#include <dune/fufem/functionspacebases/p0basis.hh> #include <dune/fufem/functionspacebases/p0basis.hh>
#include <dune/fufem/functionspacebases/p1nodalbasis.hh> #include <dune/fufem/functionspacebases/p1nodalbasis.hh>
using P1Basis = P1NodalBasis<GridView, double>;
using MyP0Basis = P0Basis<GridView, double>; using MyP0Basis = P0Basis<GridView, double>;
using P1Basis = P1NodalBasis<GridView, double>;
template class MyVTKWriter<P1Basis, MyP0Basis>;
template void writeVtk<P1Basis, MyP0Basis, Vector, ScalarVector>( template void MyVTKWriter<P1Basis, MyP0Basis>::write<Vector, ScalarVector>(
P1Basis const &vertexBasis, Vector const &displacement, Vector const &u, Vector const &v, ScalarVector const &alpha,
ScalarVector const &logState, MyP0Basis const &cellBasis, ScalarVector const &stress);
ScalarVector const &stress, std::string const &filename);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment