Skip to content
Snippets Groups Projects
Commit b6e42bca authored by Oliver Sander's avatar Oliver Sander Committed by sander
Browse files

Add a new 'write' method that takes an FE basis instead of a grid as input

This will be generalized to take any Lagrange basis, to allow some form
of visualization for higher-order functions.

[[Imported from SVN: r9662]]
parent 00cc90b5
No related branches found
No related tags found
No related merge requests found
......@@ -65,6 +65,9 @@ class CosseratVTKWriter
public:
/** \brief Write a Cosserat configuration given as vertex data
*/
static void write(const GridType& grid,
const std::vector<RigidBodyMotion<double,3> >& configuration,
const std::string& filename)
......@@ -106,6 +109,53 @@ public:
}
/** \brief Write a configuration given with respect to a scalar function space basis
*/
template <typename Basis>
static void write(const Basis& basis,
const std::vector<RigidBodyMotion<double,3> >& configuration,
const std::string& filename)
{
typedef typename GridType::LeafGridView GridView;
const GridType& grid = basis.getGridView().grid();
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> P1Basis;
P1Basis p1Basis(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<P1Basis,CoefficientType> > vtkDirector
= Dune::shared_ptr<VTKBasisGridFunction<P1Basis,CoefficientType> >
(new VTKBasisGridFunction<P1Basis,CoefficientType>(p1Basis, directors[i], "director"+iAsAscii.str()));
vtkWriter.addVertexData(vtkDirector);
}
vtkWriter.write(filename);
}
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment