36#include "VtkNonlinearElasticitySolutionWriter.hpp"
37#include "VtkMeshWriter.hpp"
43 mWriteElementWiseStrains(false)
53 if (mpSolver->mOutputDirectory==
"")
55 EXCEPTION(
"No output directory was given to the mechanics solver");
62 CalculateDisplacements(mDisplacements);
63 mesh_writer.
AddPointData(
"Displacement", mDisplacements);
66 if (mpSolver->mCompressibilityType==INCOMPRESSIBLE)
68 mesh_writer.
AddPointData(
"Pressure", mpSolver->rGetPressures());
72 std::vector<double> element_attribute;
74 iter != mpSolver->mrQuadMesh.GetElementIteratorEnd();
77 element_attribute.push_back(iter->GetAttribute());
79 mesh_writer.
AddCellData(
"Attribute", element_attribute);
82 if (mWriteElementWiseStrains)
85 CalculateStrains(name,mTensorStrainData);
97 assert(rDisplacements.size() == mpSolver->mrQuadMesh.GetNumNodes());
98 std::vector<c_vector<double,DIM> > spatial_solution = mpSolver->rGetSpatialSolution();
99 for (
unsigned i=0; i<mpSolver->mrQuadMesh.GetNumNodes(); i++)
101 for (
unsigned j=0; j<DIM; j++)
103 rDisplacements[i](j) = spatial_solution[i](j) - mpSolver->mrQuadMesh.GetNode(i)->rGetLocation()[j];
108template<
unsigned DIM>
111 assert(rStrains.size() == mpSolver->mrQuadMesh.GetNumElements());
112 switch(mElementWiseStrainType)
114 case DEFORMATION_GRADIENT_F:
116 name =
"deformation_gradient_F";
119 case DEFORMATION_TENSOR_C:
121 name =
"deformation_tensor_C";
124 case LAGRANGE_STRAIN_E:
126 name =
"Lagrange_strain_E";
136 iter != mpSolver->mrQuadMesh.GetElementIteratorEnd();
139 mpSolver->GetElementCentroidStrain(mElementWiseStrainType, *iter, rStrains[iter->GetIndex()]);
143template<
unsigned DIM>
146 mWriteElementWiseStrains =
true;
147 mElementWiseStrainType = strainType;
#define EXCEPTION(message)
void AddPointData(std::string name, std::vector< double > data)
void AddTensorCellData(std::string name, std::vector< c_vector< double, SPACE_DIM *(SPACE_DIM+1)/2 > > data)
void AddCellData(std::string name, std::vector< double > data)
void WriteFilesUsingMesh(AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > &rMesh, bool keepOriginalElementIndexing=true)
AbstractNonlinearElasticitySolver< DIM > * mpSolver
void CalculateDisplacements(std::vector< c_vector< double, DIM > > &rDisplacements)
void SetWriteElementWiseStrains(StrainType strainType)
std::vector< c_matrix< double, DIM, DIM > > mTensorStrainData
std::vector< c_vector< double, DIM > > mDisplacements
void CalculateStrains(std::string &name, std::vector< c_matrix< double, DIM, DIM > > &rStrains)
VtkNonlinearElasticitySolutionWriter(AbstractNonlinearElasticitySolver< DIM > &rSolver)