diff --git a/dune/gfe/cosseratvtkwriter.hh b/dune/gfe/cosseratvtkwriter.hh index e82a38d6e68d982e56b98df224bff2de09456072..8a2721494471cc02725fac83c6cfa3a1911c8dc3 100644 --- a/dune/gfe/cosseratvtkwriter.hh +++ b/dune/gfe/cosseratvtkwriter.hh @@ -136,6 +136,7 @@ public: const std::vector<RigidBodyMotion<double,3> >& configuration, const std::string& filename) { +#if defined SECOND_ORDER || defined THIRD_ORDER // No special handling: downsample to first order typedef typename GridType::LeafGridView GridView; const GridType& grid = basis.getGridView().grid(); @@ -197,6 +198,57 @@ public: // Write the file to disk vtkWriter.write(filename); +#else // FIRST_ORDER + typedef typename GridType::LeafGridView GridView; + + const GridType& grid = basis.getGridView().grid(); + + ////////////////////////////////////////////////////////////////////////////////// + // Deform the grid according to the position information in 'configuration' + ////////////////////////////////////////////////////////////////////////////////// + + typedef Dune::GeometryGrid<GridType,DeformationFunction<GridView> > DeformedGridType; + + DeformationFunction<typename GridType::LeafGridView> deformationFunction(grid.leafGridView(), configuration); + + // stupid, can't instantiate deformedGrid with a const grid + DeformedGridType deformedGrid(const_cast<GridType&>(grid), deformationFunction); + + typedef P1NodalBasis<typename DeformedGridType::LeafGridView,double> DeformedP1Basis; + DeformedP1Basis deformedP1Basis(deformedGrid.leafGridView()); + + Dune::VTKWriter<typename DeformedGridType::LeafGridView> vtkWriter(deformedGrid.leafGridView()); + + // Make three vector fields containing the directors + typedef std::vector<Dune::FieldVector<double,3> > CoefficientType; + + std::vector<CoefficientType> directors(3); + + for (int i=0; i<3; i++) { + + directors[i].resize(configuration.size()); + for (size_t j=0; j<configuration.size(); j++) + directors[i][j] = configuration[j].q.director(i); + + std::stringstream iAsAscii; + iAsAscii << i; + + Dune::shared_ptr<VTKBasisGridFunction<DeformedP1Basis,CoefficientType> > vtkDirector + = Dune::make_shared<VTKBasisGridFunction<DeformedP1Basis,CoefficientType> > + (deformedP1Basis, directors[i], "director"+iAsAscii.str()); + vtkWriter.addVertexData(vtkDirector); + } + + // For easier visualization of wrinkles: add z-coordinate as scalar field + std::vector<double> zCoord(configuration.size()); + for (size_t i=0; i<zCoord.size(); i++) + zCoord[i] = configuration[i].r[2]; + + vtkWriter.addVertexData(zCoord, "zCoord"); + + // Write the file to disk + vtkWriter.write(filename); +#endif } };