diff --git a/dune/microstructure/prestrainedMaterial.hh b/dune/microstructure/prestrainedMaterial.hh index 4c8cba442cda47ac746cb1de0394013abc7178b4..008952bde46cf19fef09e092a8f29c8e60d01ab4 100644 --- a/dune/microstructure/prestrainedMaterial.hh +++ b/dune/microstructure/prestrainedMaterial.hh @@ -11,15 +11,15 @@ #include <dune/microstructure/matrix_operations.hh> #include <dune/microstructure/voigthelper.hh> -//TEST dune-vtk -// #include <dune/vtk/function.hh> -#include <dune/vtk/vtkwriter.hh> -// #include <dune/vtk/vtkwriterbase.hh> -#include <dune/vtk/writers/unstructuredgridwriter.hh> -#include <dune/vtk/datacollectors/continuousdatacollector.hh> -#include <dune/vtk/datacollectors/discontinuousdatacollector.hh> -#include <dune/vtk/datacollectors/quadraticdatacollector.hh> -#include <dune/vtk/datacollectors/lagrangedatacollector.hh> +// //TEST dune-vtk +// // #include <dune/vtk/function.hh> +// #include <dune/vtk/vtkwriter.hh> +// // #include <dune/vtk/vtkwriterbase.hh> +// #include <dune/vtk/writers/unstructuredgridwriter.hh> +// #include <dune/vtk/datacollectors/continuousdatacollector.hh> +// #include <dune/vtk/datacollectors/discontinuousdatacollector.hh> +// #include <dune/vtk/datacollectors/quadraticdatacollector.hh> +// #include <dune/vtk/datacollectors/lagrangedatacollector.hh> using namespace MatrixOperations; using namespace Dune::Functions; @@ -585,15 +585,16 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) // std::cout << "wrote data to file:" + resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "-" + std::to_string(vtkIndex) << std::endl; //--Version using dune-vtk - Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView_); + // Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView_); // Dune::Vtk::YaspDataCollector<GridView, 4> yaspDataCollector(gridView_); // Dune::Vtk::LagrangeDataCollector<GridView, 4> lagrangeDataCollector(gridView_); - Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); + // Dune::Vtk::UnstructuredGridWriter writer(lagrangeDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); + // // Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); - auto f2 = Dune::Functions::makeAnalyticGridViewFunction(indicatorFunction_ ,gridView_); - // writer.addPointData(f2 , "IndicatorFunction"); - writer.addCellData(f2 , "IndicatorFunction"); - writer.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "_DuneVTK"); + // auto f2 = Dune::Functions::makeAnalyticGridViewFunction(indicatorFunction_ ,gridView_); + // // writer.addPointData(f2 , "IndicatorFunction"); + // writer.addCellData(f2 , "IndicatorFunction"); + // writer.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "_DuneVTK"); return; }; diff --git a/src/macro-problem.cc b/src/macro-problem.cc index d184f3ebc00a3605581ffa997841e27a7a1625b7..9ed374f507c52c70e49267a620e966314c875a78 100644 --- a/src/macro-problem.cc +++ b/src/macro-problem.cc @@ -553,21 +553,12 @@ int main(int argc, char *argv[]) // SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(2)); - // //TEST dune-vtk: - + // Use VTK writer from dune-vtk // Setup a DataCollector of order 4. Dune::Vtk::LagrangeDataCollector<GridView, 4> lagrangeDataCollector(gridView); Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView); - - // VtkWriter writer{gridView, Dune::Vtk::FormatTypes::ASCII}; - // Dune::Vtk::VtkWriter writer{gridView, Dune::Vtk::FormatTypes::ASCII}; - - // Dune::Vtk::VtkWriterBase writer{gridView, Dune::Vtk::FormatTypes::ASCII}; - - - // Dune::Vtk::VtkWriterBase<GridView,Dune::Vtk::LagrangeDataCollector<GridView, 2> > writer{gridView, Dune::Vtk::FormatTypes::ASCII}; - // Vtk::UnstructuredGridWriter writer(lagrangeDataCollector, Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); - Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); + Dune::Vtk::UnstructuredGridWriter duneVTKwriter(lagrangeDataCollector, Dune::Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); + // Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); /** @@ -578,49 +569,7 @@ int main(int argc, char *argv[]) power<3>( lagrange<1>(), flatLexicographic())); - // auto normalBasis = makeBasis(gridView, - // power<3>( - // lagrang e<1>(), - // blockedInterleaved())); - - - // TEST Compute isometry error function: - - - - -// // auto diff = (rot.transposed()*rot) - I; -// auto tmpFunction = GlobalKirchhoffFunction{gridView, [&](auto x) -// { -// return localDKFunctionDouble.evaluateDerivative(x); -// }}; - - - // auto isoErrorFunction = GlobalFunction{gridView, [&](auto x) - // { - // auto tmp = tmpFunction(x); - // auto out = (tmp.transposed()*tmp) - I; - // auto r = out.frobenius_norm(); - // return r; - - // }}; - - // auto isoErrorFunction = GlobalKirchhoffFunction{gridView, [&](auto x) - // // { - - // auto tmp = localDKFunctionDouble.evaluateDerivative(x); - // auto out = (tmp.transposed()*tmp) - I; - - // auto r = out.frobenius_norm(); - - // return r; - - // }}; - - - - // writer.addPointData(isoErrorFunction, Dune::Vtk::FieldInfo{"isoErrorFunction dune-VTK",1, Vtk::RangeTypes::SCALAR}); // ComposedGridFunction - approach: @@ -628,83 +577,20 @@ int main(int argc, char *argv[]) auto deformationGradientLocalFunction = localFunction(deformationGradientFunction); - // auto normDiffFunction = [&](auto M) - // { - // return ((M.transposed()*M) - I).frobenius_norm(); - - // }; - auto normDiffFunction = [](Dune::FieldMatrix<double,3,2> M) -> double - { - FieldMatrix<double,2,2> Id = ScaledIdentityMatrix<double,2>(1); - return ((M.transposed()*M) - Id).frobenius_norm(); - }; - - // - - // auto gf_gridfunction = makeComposedGridFunction(normDiffFunction, std::ref(deformationGradientFunction)); - auto gf_gridfunction = makeComposedGridFunction(normDiffFunction, deformationGradientFunction); - // writer.addPointData(gf_gridfunction , Dune::Vtk::FieldInfo{"isoErrorFunction dune-VTK",1, Vtk::RangeTypes::SCALAR}); - // writer.addPointData(gf_gridfunction , VTK::FieldInfo("isoErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.addVertexData(gf_gridfunction, VTK::FieldInfo("isoErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - - - - auto identityF = Dune::Functions::makeAnalyticGridViewFunction([](auto&& x) -> Dune::FieldMatrix<double,2,2> { - return ScaledIdentityMatrix<double,2>(1); - - }, gridView); - // auto c = Dune::Function::makeComposedGridFunction(Difference2(),deformationGradientFunction,ScaledIdentityMatrix<double,2>(1)); - // auto c = Dune::Function::makeComposedGridFunction(Difference2(),deformationGradientFunction,ScaledIdentityMatrix<double,2>(1)); - - // auto isoErrorFunction =[](auto M, auto Id)-> double { - // return ((M.transposed()*M) - Id).frobenius_norm(); - // }; - - - // // auto c = makeComposedGridFunction(Difference2(),deformationGradientFunction,identityF); //works. - // auto c = makeComposedGridFunction(isoErrorFunction,deformationGradientFunction,identityF); FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); - auto isoErrorFunction =[&](auto M)-> double { + auto isometryErrorFunction =[&](auto M)-> double { return ((M.transposed()*M) - I).frobenius_norm(); }; + auto isometryErrorGridFunction = makeComposedGridFunction(isometryErrorFunction,deformationGradientFunction); - // auto c = makeComposedGridFunction(Difference2(),deformationGradientFunction,identityF); //works. - auto c = makeComposedGridFunction(isoErrorFunction,deformationGradientFunction); - - writer.addPointData(c, "IsometryError"); - - + duneVTKwriter.addPointData(isometryErrorGridFunction, "IsometryError"); + vtkWriter.addVertexData(isometryErrorGridFunction , VTK::FieldInfo("isoErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - // auto normalLambda = [deformationFunction](const FieldVector<double,2>& x) - // { - // // deformationfunction.derivative() ... //needs binding?! - - // } - // auto isoErrorFunction = GlobalFunction{gridView, [&](auto x) - // { - // auto tmp = deformationGradientLocalFunction(x); - // auto out = (tmp.transposed()*tmp) - I; - // auto r = out.frobenius_norm(); - // return r; - // }}; - - // auto isoErrorFunction = GlobalFunction{gridView, [&](auto x) - // { - // return gf_gridfunction(x); - // }}; - - - // writer.addPointData(gf_gridfunction , VTK::FieldInfo("isoErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - - // auto f1 = GlobalFunction{gridView, normDiff}; - // writer.addPointData(isoErrorFunction, VTK::FieldInfo("isoErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - /** * @brief Interpolate and VTK-write analytical solution "u" from ParamterFile. @@ -713,38 +599,16 @@ int main(int argc, char *argv[]) { // auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); + vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - - // deprecated: interpolate ... - // VectorSpaceCoefficients y(deformationBasis.size()); - // interpolate(deformationBasis, y, pythonAnalyticalSolution); - // // Compute the displacement - // auto displacementAnalytical = y; - // // displacementAnalytical -= identity_tmp; - // displacementAnalytical -= identity; - - - // //TEST dune-vtk: - // VtkWriter writer{gridView, Dune::Vtk::FormatTypes::ASCII}; - // auto f2 = GlobalFunction{gridView, [&](auto x) {return pythonAnalyticalSolution(x); }}; - auto f2 = Dune::Functions::makeAnalyticGridViewFunction( pythonAnalyticalSolution ,gridView); - // writer.addPointData(f2, Dune::Vtk::FieldInfo{"displacement_analytical dune-VTK",3, Vtk::RangeTypes::VECTOR}); - writer.addPointData(f2, "pythonAnalytic"); - - - - - + //dune-vtk: + auto pythonAnalyticalSolutionGVF = Dune::Functions::makeAnalyticGridViewFunction(pythonAnalyticalSolution ,gridView); + duneVTKwriter.addPointData(pythonAnalyticalSolutionGVF, Dune::Vtk::FieldInfo{"displacement_analytical dune-VTK",3, Dune::Vtk::RangeTypes::VECTOR}); - // auto pythonIdentity = Python::make_function<FieldVector<double,3>>(IdentityGridEmbedding<double>::operator()) - // auto displacementFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacementAnalytical); - // auto deformationFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, y); - // vtkWriter.addVertexData(displacementFunctionAnalytical, VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - // vtkWriter.addVertexData(deformationFunctionAnalytical, VTK::FieldInfo("deformation_analytical", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); + /** * @brief Get the normal vector field of the surface parametrized * by the analytical solution. @@ -754,22 +618,12 @@ int main(int argc, char *argv[]) { // Get the surface normal function. auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3>>(pyModule.get("surfaceNormal")); - - - // deprecated: interpolate ... - // std::vector<FieldVector<double,3>> normalVectorCoefficients(normalBasis.size()); - // Dune::Functions::interpolate(normalBasis, normalVectorCoefficients, pythonSurfaceNormal); - // auto surfaceNormalAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, normalVectorCoefficients); - // vtkWriter.addVertexData(surfaceNormalAnalytical, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); //dune-vtk - // auto f3 = GlobalFunction{gridView, [&](auto x) {return pythonSurfaceNormal(x); }}; - auto f3 = Dune::Functions::makeAnalyticGridViewFunction(pythonSurfaceNormal ,gridView); - // writer.addPointData(f3, Dune::Vtk::FieldInfo{"surfaceNormal_analytical dune-VTK",3, Vtk::RangeTypes::VECTOR}); - writer.addPointData(f3, "pythonSurfaceNormal"); + auto pythonSurfaceNormalGVF = Dune::Functions::makeAnalyticGridViewFunction(pythonSurfaceNormal ,gridView); + duneVTKwriter.addPointData(pythonSurfaceNormalGVF, Dune::Vtk::FieldInfo{"surfaceNormal_analytical dune-VTK",3, Dune::Vtk::RangeTypes::VECTOR}); } } @@ -789,14 +643,9 @@ int main(int argc, char *argv[]) - // writer.addPointData(displacementFunction, Dune::Vtk::FieldInfo{"displacement dune-VTK",3, Vtk::RangeTypes::VECTOR}); - // writer.addPointData(surfaceNormalDiscrete, Dune::Vtk::FieldInfo{"surfaceNormal_discrete dune-VTK",3, Vtk::RangeTypes::VECTOR}); - writer.addPointData(displacementFunction, "displacement dune-VTK"); - writer.addPointData(surfaceNormalDiscrete, "surfaceNormal_discrete dune-VTK"); - - - // dune-vtk - writer.write(resultFileName + "_DuneVTK"); + duneVTKwriter.addPointData(displacementFunction, Dune::Vtk::FieldInfo{"displacement dune-VTK",3, Vtk::RangeTypes::VECTOR}); + duneVTKwriter.addPointData(surfaceNormalDiscrete, Dune::Vtk::FieldInfo{"surfaceNormal_discrete dune-VTK",3, Vtk::RangeTypes::VECTOR}); + duneVTKwriter.write(resultFileName + "_DuneVTK"); }