From a49c14e2afe57ea383835d81333db0ca8812311a Mon Sep 17 00:00:00 2001 From: Klaus <klaus.boehnlein@tu-dresden.de> Date: Wed, 21 Jul 2021 10:05:37 +0200 Subject: [PATCH] Added some Debuggin Tests --- src/dune-microstructure.cc | 348 +++++++++++++++++++++++-------------- 1 file changed, 222 insertions(+), 126 deletions(-) diff --git a/src/dune-microstructure.cc b/src/dune-microstructure.cc index 5669c14a..c9bb6f88 100644 --- a/src/dune-microstructure.cc +++ b/src/dune-microstructure.cc @@ -3,7 +3,6 @@ #include <vector> #include <fstream> - #include <iostream> #include <dune/common/indices.hh> #include <dune/common/bitsetvector.hh> @@ -27,17 +26,13 @@ #include <dune/istl/preconditioners.hh> #include <dune/istl/io.hh> - #include <dune/functions/functionspacebases/interpolate.hh> - #include <dune/functions/backends/istlvectorbackend.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/compositebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> - - #include <dune/functions/functionspacebases/periodicbasis.hh> #include <dune/functions/functionspacebases/subspacebasis.hh> @@ -52,16 +47,12 @@ #include <dune/microstructure/prestrainimp.hh> #include <dune/functions/functionspacebases/hierarchicvectorwrapper.hh> - - // #include <dune/fufem/discretizationerror.hh> - using namespace Dune; - template<class LocalView, class Matrix, class localFunction1, class localFunction2> void computeElementStiffnessMatrix(const LocalView& localView, Matrix& elementMatrix, @@ -95,11 +86,11 @@ void computeElementStiffnessMatrix(const LocalView& localView, // LocalBasis-Offset const int localPhiOffset = localView.size(); - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); // Unterscheidung children notwendig? + const auto& localFiniteElement = localView.tree().child(0).finiteElement(); // Unterscheidung children notwendig? const auto nSf = localFiniteElement.localBasis().size(); - - +// std::cout << "localView.size(): " << localView.size() << std::endl; +// std::cout << "nSf : " << nSf << std::endl; /////////////////////////////////////////////// // Basis for R_sym^{2x2} // wird nicht als Funktion benötigt da konstant... @@ -125,11 +116,9 @@ void computeElementStiffnessMatrix(const LocalView& localView, const auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(quadPoint.position()); const auto integrationElement = geometry.integrationElement(quadPoint.position()); - // std::vector<FieldMatrix<double,1,dim> > referenceGradients; // old std::vector< FieldMatrix< double, 1, dim> > referenceGradients; - localFiniteElement.localBasis().evaluateJacobian( - quadPoint.position(), - referenceGradients); + localFiniteElement.localBasis().evaluateJacobian(quadPoint.position(), + referenceGradients); // Compute the shape function gradients on the grid element std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); @@ -152,7 +141,7 @@ void computeElementStiffnessMatrix(const LocalView& localView, defGradientU[k][0] = gradients[i][0]; // Y defGradientU[k][1] = gradients[i][1]; //X2 defGradientU[k][2] = (1.0/gamma)*gradients[i][2]; //X3 - +// printmatrix(std::cout, defGradientU , "defGradientU", "--"); // (scaled) Deformation gradient of the test basis function MatrixRT defGradientV(0); defGradientV[l][0] = gradients[j][0]; // Y @@ -168,7 +157,7 @@ void computeElementStiffnessMatrix(const LocalView& localView, strainU[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // symmetric gradient strainV[ii][jj] = 0.5 * (defGradientV[ii][jj] + defGradientV[jj][ii]); // strainV[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // same ? genügt strainU - +// printmatrix(std::cout, strainU , "strainU", "--"); } // St.Venant-Kirchhoff stress @@ -235,14 +224,17 @@ void computeElementStiffnessMatrix(const LocalView& localView, MatrixRT stressG(0); stressG.axpy(2*mu(quadPos), basisContainer[m]); //this += 2mu *strainU - double traceG = 0; + double traceG = 0.0; for (int ii=0; ii<nCompo; ii++) + { +// std::cout << basisContainer[m][ii][ii] << std::endl; traceG += basisContainer[m][ii][ii]; + } for (int ii=0; ii<nCompo; ii++) stressG[ii][ii] += lambda(quadPos) * traceG; - double energyDensityGphi = 0; + double energyDensityGphi = 0.0; for (int ii=0; ii<nCompo; ii++) for (int jj=0; jj<nCompo; jj++) energyDensityGphi += stressG[ii][jj] * strainV[ii][jj]; // "m*phi"-part @@ -261,52 +253,52 @@ void computeElementStiffnessMatrix(const LocalView& localView, // "phi*m"-part - // for (size_t k=0; k < nCompo; k++) - // for (size_t i=0; i < nSf; i++) - // { - // - // // (scaled) Deformation gradient of the ansatz basis function - // MatrixRT defGradientU(0); - // defGradientU[k][0] = gradients[i][0]; // Y - // defGradientU[k][1] = gradients[i][1]; //X2 - // defGradientU[k][2] = (1.0/gamma)*gradients[i][2]; //X3 - // - // - // // symmetric Gradient (Elastic Strains) - // MatrixRT strainU; - // for (int ii=0; ii<nCompo; ii++) - // for (int jj=0; jj<nCompo; jj++) - // { - // strainU[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // symmetric gradient - // } - // - // // St.Venant-Kirchhoff stress - // MatrixRT stressU(0); - // stressU.axpy(2*mu(quadPos), strainU); //this += 2mu *strainU - // - // double trace = 0; - // for (int ii=0; ii<nCompo; ii++) - // trace += strainU[ii][ii]; - // - // for (int ii=0; ii<nCompo; ii++) - // stressU[ii][ii] += lambda(quadPos) * trace; - // - // for( size_t n=0; n<3; n++) - // { - // - // // < L sym[D_gamma*nabla phi_i], G_j > - // double energyDensityPhiG = 0; - // for (int ii=0; ii<nCompo; ii++) - // for (int jj=0; jj<nCompo; jj++) - // energyDensityPhiG += stressU[ii][jj] * basisContainer[n][ii][jj]; // "phi*m"-part - // - // size_t col = localView.tree().child(k).localIndex(i); - // - // elementMatrix[localPhiOffset+n][col] += energyDensityPhiG * quadPoint.weight() * integrationElement; - // - // } - // } - +// for (size_t k=0; k < nCompo; k++) +// for (size_t i=0; i < nSf; i++) +// { +// +// // (scaled) Deformation gradient of the ansatz basis function +// MatrixRT defGradientU(0); +// defGradientU[k][0] = gradients[i][0]; // Y +// defGradientU[k][1] = gradients[i][1]; //X2 +// defGradientU[k][2] = (1.0/gamma)*gradients[i][2]; //X3 +// +// +// // symmetric Gradient (Elastic Strains) +// MatrixRT strainU; +// for (int ii=0; ii<nCompo; ii++) +// for (int jj=0; jj<nCompo; jj++) +// { +// strainU[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // symmetric gradient +// } +// +// // St.Venant-Kirchhoff stress +// MatrixRT stressU(0); +// stressU.axpy(2*mu(quadPos), strainU); //this += 2mu *strainU +// +// double trace = 0; +// for (int ii=0; ii<nCompo; ii++) +// trace += strainU[ii][ii]; +// +// for (int ii=0; ii<nCompo; ii++) +// stressU[ii][ii] += lambda(quadPos) * trace; +// +// for( size_t n=0; n<3; n++) +// { +// +// // < L sym[D_gamma*nabla phi_i], G_j > +// double energyDensityPhiG = 0; +// for (int ii=0; ii<nCompo; ii++) +// for (int jj=0; jj<nCompo; jj++) +// energyDensityPhiG += stressU[ii][jj] * basisContainer[n][ii][jj]; // "phi*m"-part +// +// size_t col = localView.tree().child(k).localIndex(i); +// +// elementMatrix[localPhiOffset+n][col] += energyDensityPhiG * quadPoint.weight() * integrationElement; +// +// } +// } +// @@ -319,14 +311,14 @@ void computeElementStiffnessMatrix(const LocalView& localView, MatrixRT stressG(0); stressG.axpy(2*mu(quadPos), basisContainer[m]); //this += 2mu *strainU - double traceG = 0; + double traceG = 0.0; for (int ii=0; ii<nCompo; ii++) traceG += basisContainer[m][ii][ii]; for (int ii=0; ii<nCompo; ii++) stressG[ii][ii] += lambda(quadPos) * traceG; - double energyDensityGG = 0; + double energyDensityGG = 0.0; for (int ii=0; ii<nCompo; ii++) for (int jj=0; jj<nCompo; jj++) @@ -460,7 +452,7 @@ void getOccupationPattern(const Basis& basis, MatrixIndexSet& nb) // Compute the source term for a single element -// < L sym[D_gamma*nabla phi_i], x_3G_alpha > +// < L (sym[D_gamma*nabla phi_i] + M_i ), x_3G_alpha > template<class LocalView, class LocalFunction1, class LocalFunction2, class Vector, class Force> void computeElementLoadVector( const LocalView& localView, LocalFunction1& mu, @@ -489,7 +481,7 @@ void computeElementLoadVector( const LocalView& localView, // const auto& localFiniteElement = localView.tree().finiteElement(); - elementRhs.resize(localView.size() +3 ); + elementRhs.resize(localView.size() +3); elementRhs = 0; @@ -509,7 +501,8 @@ void computeElementLoadVector( const LocalView& localView, const auto& quad = QuadratureRules<double,dim>::rule(element.type(), orderQR); - for (const auto& quadPoint : quad) { + for (const auto& quadPoint : quad) + { const FieldVector<double,dim>& quadPos = quadPoint.position(); @@ -587,11 +580,7 @@ void computeElementLoadVector( const LocalView& localView, elementRhs[localPhiOffset+m] += energyDensityfG * quadPoint.weight() * integrationElement; } - - - } - } @@ -622,6 +611,10 @@ void assembleCellStiffness(const Basis& basis, occupationPattern.exportIdx(matrix); matrix = 0; + + + std::fstream localdebugLog; + localdebugLog.open("../../outputs/debugLog.txt",std::ios::out); auto localView = basis.localView(); @@ -641,8 +634,8 @@ void assembleCellStiffness(const Basis& basis, // Dune::Matrix<double> elementMatrix; Dune::Matrix<FieldMatrix<double,1,1> > elementMatrix; computeElementStiffnessMatrix(localView, elementMatrix, muLocal, lambdaLocal, gamma); - // printmatrix(std::cout, elementMatrix, "ElementMatrix", "--"); - +// printmatrix(std::cout, elementMatrix, "ElementMatrix", "--"); +// localdebugLog << elementMatrix << std::endl; // std::cout << "elementMatrix.N() : " << elementMatrix.N() << std::endl; @@ -683,7 +676,7 @@ void assembleCellStiffness(const Basis& basis, matrix[phiOffset+m][phiOffset+n] += elementMatrix[localPhiOffset+m][localPhiOffset+n]; } - +// printmatrix(std::cout, matrix, "StiffnessMatrix", "--"); } @@ -729,6 +722,7 @@ void assembleCellLoad(const Basis& basis, // BlockVector<double> elementRhs; BlockVector<FieldVector<double,1> > elementRhs; computeElementLoadVector(localView, muLocal, lambdaLocal, gamma, elementRhs, loadFunctional); +// printvector(std::cout, elementRhs, "elementRhs", "--"); // LOAD ASSEMBLY for (size_t p=0; p<localPhiOffset; p++) @@ -743,6 +737,9 @@ void assembleCellLoad(const Basis& basis, { b[phiOffset+m] += elementRhs[localPhiOffset+m]; } + + +// printvector(std::cout, b, "b", "--"); } } @@ -799,6 +796,7 @@ auto energy(const Basis& basis, const QuadratureRule<double, dim>& quad = QuadratureRules<double, dim>::rule(e.type(), order); for (size_t pt=0; pt < quad.size(); pt++) { + const Domain& quadPos = quad[pt].position(); const double integrationElement = geometry.integrationElement(quadPos); @@ -1062,8 +1060,8 @@ auto childToIndexMap(const Basis& basis, for(size_t j=0; j<nSf; j++) { - auto Localidx = localView.tree().child(k).localIndex(j); - r.push_back(localView.index(Localidx)); + auto Localidx = localView.tree().child(k).localIndex(j); // local indices + r.push_back(localView.index(Localidx)); // global indices } @@ -1200,12 +1198,21 @@ auto subtractIntegralMean(const Basis& basis, + ////////////////////////////////////////////////// + // Infrastructure for handling periodicity + ////////////////////////////////////////////////// + // Check whether two points are equal on R/Z x R/Z x R auto equivalent = [](const FieldVector<double,3>& x, const FieldVector<double,3>& y) { +// std::cout << ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) +// and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) +// and (FloatCmp::eq(x[2],y[2])) ) << std::endl; + return ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) - and (FloatCmp::eq(x[2],y[2]))); + and (FloatCmp::eq(x[2],y[2])) + ); }; @@ -1292,27 +1299,30 @@ double computeL2Error(const Basis& basis, defGradientU[k][0] = gradients[i][0]; // Y defGradientU[k][1] = gradients[i][1]; //X2 defGradientU[k][2] = (1.0/gamma)*gradients[i][2]; //X3 - } + - // symmetric Gradient (Elastic Strains) - MatrixRT strainU(0); - for (int ii=0; ii<nCompo; ii++) - for (int jj=0; jj<nCompo; jj++) - { - strainU[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // symmetric gradient - } - - - // Local energy density: stress times strain - double tmp = 0; - for (int ii=0; ii<nCompo; ii++) - for (int jj=0; jj<nCompo; jj++) - tmp+= std::pow(strainU[ii][jj] - matrixField(quadPos)[ii][jj] ,2); + // symmetric Gradient (Elastic Strains) + MatrixRT strainU(0); + for (int ii=0; ii<nCompo; ii++) + for (int jj=0; jj<nCompo; jj++) + { + strainU[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // symmetric gradient + } + + size_t localIdx = localView.tree().child(k).localIndex(i); + size_t globalIdx = localView.index(localIdx); + // Local energy density: stress times strain + double tmp = 0.0; + for (int ii=0; ii<nCompo; ii++) + for (int jj=0; jj<nCompo; jj++) + tmp+= std::pow(coeffVector[globalIdx]*strainU[ii][jj] - matrixField(quadPos)[ii][jj] ,2); - error += tmp * quadPoint.weight() * integrationElement; + + error += tmp * quadPoint.weight() * integrationElement; + } } } @@ -1343,8 +1353,10 @@ int main(int argc, char *argv[]) // output setter // -- not set up -- std::fstream log; + std::fstream debugLog; // log.open("output2.txt", std::ios::out); log.open("../../outputs/output.txt",std::ios::out); + debugLog.open("../../outputs/debugLog.txt",std::ios::out); // log << "Writing this to a file. \n"; // log.close(); @@ -1357,7 +1369,7 @@ int main(int argc, char *argv[]) // Get Parameters/Data /////////////////////////////////// - double gamma = parameterSet.get<double>("gamma",2); // ratio dimension reduction to homogenization + double gamma = parameterSet.get<double>("gamma",2.0); // ratio dimension reduction to homogenization // Material parameter laminat // double E1 = parameterSet.get<double>("E1", 17e6); //material1 @@ -1412,6 +1424,7 @@ int main(int argc, char *argv[]) int nE = 10; log << "Number of Elements: " << nE << std::endl; + debugLog << "Number of Elements: " << nE << std::endl; std::array<int,dim> nElements={nE,nE,nE}; //#Elements in each direction @@ -1500,6 +1513,7 @@ int main(int argc, char *argv[]) log << "\n lambda: " << lambda1 << std::endl; + ///////////////////////////////////////////////////////// @@ -1509,18 +1523,33 @@ int main(int argc, char *argv[]) Functions::Experimental::BasisFactory::PeriodicIndexSet periodicIndices; + int equivCounter = 0; + int nNodes = 0; + // Don't do the following in real life: It has quadratic run-time in the number of vertices. for (const auto& v1 : vertices(gridView_CE)) + { +// std::cout << " ---------------------------------------" << std::endl; + nNodes++; for (const auto& v2 : vertices(gridView_CE)) if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) + { periodicIndices.unifyIndexPair({gridView_CE.indexSet().index(v1)}, {gridView_CE.indexSet().index(v2)}); - + equivCounter++; + } + } + std::cout << "equivCounter:" << equivCounter << std::endl; + std::cout <<" Number ofNodes: " << nNodes << std::endl; + + auto perTest = periodicIndices.indexPairSet(); + + auto Basis_CE = makeBasis( gridView_CE, - power<dim>( - // lagrange<1>(), + power<dim>( //lagrange<1>(), Functions::Experimental::BasisFactory::periodic(lagrange<1>(), periodicIndices), flatLexicographic())); // +// blockedInterleaved())); // siehe Periodicbasistest.. funktioniert auch? // flatInterleaved())); @@ -1528,6 +1557,10 @@ int main(int argc, char *argv[]) std::cout << "basis.dimension()" << Basis_CE.dimension() <<std::endl; const int phiOffset = Basis_CE.size(); + + debugLog << "phiOffset: "<< phiOffset << std::endl; + + // std::cout << Basis_CE.preBasis_.children << std::endl; // does not work // std::cout << Basis_CE::preBasis_::children << std::endl; @@ -1563,6 +1596,8 @@ int main(int argc, char *argv[]) bool substract_integralMean = true; // bool set_oneBasisFunction_Zero = false; // bool substract_integralMean = false; + debugLog << " set_oneBasisFunction_Zero: " << set_oneBasisFunction_Zero << std::endl; + debugLog << " substract_integralMean: " << substract_integralMean << std::endl; @@ -1620,10 +1655,10 @@ int main(int argc, char *argv[]) std::array<MatrixRT,3 > basisContainer = {G_1, G_2, G_3}; - // printmatrix(std::cout, basisContainer[0] , "G_1", "--"); +// printmatrix(std::cout, basisContainer[0] , "G_1", "--"); // printmatrix(std::cout, basisContainer[1] , "G_2", "--"); // printmatrix(std::cout, basisContainer[2] , "´G_3", "--"); - +// log << basisContainer[0] << std::endl; @@ -1635,8 +1670,9 @@ int main(int argc, char *argv[]) assembleCellLoad(Basis_CE, muLocal, lambdaLocal,gamma, load_alpha2 ,x3G_2); assembleCellLoad(Basis_CE, muLocal, lambdaLocal,gamma, load_alpha3 ,x3G_3); - - // printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix before B.C", "--"); + +// printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix before B.C", "--"); +// printvector(std::cout, load_alpha1, "load_alpha1", "--"); // set Integral to zero @@ -1677,7 +1713,7 @@ int main(int argc, char *argv[]) if(set_oneBasisFunction_Zero) { setOneBaseFunctionToZero(Basis_CE, stiffnessMatrix_CE, load_alpha1, load_alpha2, load_alpha3,row); - // printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix after setOneBasisFunctionToZero", "--"); +// printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix after setOneBasisFunctionToZero", "--"); } @@ -1830,26 +1866,10 @@ int main(int argc, char *argv[]) // // PRINT Corrector-Basis-Coefficients - // std::cout << "print coefficient-vector phi_1" << std::endl; - // for(size_t i=0; i<Basis_CE.size();i++) - // { - // std::cout << phi_1[i] << std::endl; - // } - // std::cout << "print coefficient-vector phi_2" << std::endl; - // for(size_t i=0; i<Basis_CE.size();i++) - // { - // std::cout << phi_2[i] << std::endl; - // } - // std::cout << "print coefficient-vector phi_3" << std::endl; - // for(size_t i=0; i<Basis_CE.size();i++) - // { - // std::cout << phi_3[i] << std::endl; - // } - // - - // auto df = derivative(correctorFunction_1); // does not work :( - - + +// printvector(std::cout, phi_1, "Corrector-Phi_1", "--"); +// printvector(std::cout, phi_2, "Corrector-Phi_2", "--"); +// printvector(std::cout, phi_3, "Corrector-Phi_3", "--"); @@ -2010,11 +2030,86 @@ int main(int argc, char *argv[]) ////////////////////////////////////////////////////////////////////////////////////////////// // Write result to VTK file ////////////////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////// TEST ////////////////////////////////////// + auto TestBasis = makeBasis( + gridView_CE, + power<dim>( + lagrange<1>(), + flatLexicographic())); + + + auto& SubPreBasis = Basis_CE.preBasis().subPreBasis(); + + VectorCT fullcoeff(TestBasis.size()); + + std::cout << "TestBasis.size(): "<< TestBasis.size() << std::endl; + auto testlocalView = TestBasis.localView(); + auto perlocalView = Basis_CE.localView(); + +// std::cout << "testlocalView.size(): " << testlocalView.size() << std::endl; +// std::cout << "perlocalView.size(): " << perlocalView.size() << std::endl; + for (const auto& element : elements(gridView_CE)) + { + testlocalView.bind(element); + perlocalView.bind(element); +// std::cout << "testlocalView.size(): " << testlocalView.size() << std::endl; +// std::cout << "perlocalView.size(): " << perlocalView.size() << std::endl; + + for(size_t i=0; i<testlocalView.size(); i++) + { + auto testIdx = testlocalView.index(i); + auto perIdx = perlocalView.index(i); +// std::cout << "testIdx: " << testIdx << std::endl; +// std::cout << "perIdx: " << perIdx << std::endl; + fullcoeff[testIdx] = phi_1[perIdx]; + } + } + +// for (size_t i = 0; i < TestBasis.size()/3; i++) +// { +// // auto c = Basis_CE.indices +// // auto c = Basis_CE.preBasis_.subPreBasis_.transformation_.mappedIdx_; +// // // Basis_CE.transformIndex(i); +// +// std::cout << "i: "<< i << std::endl; +// Dune::Functions::FlatMultiIndex<unsigned long> idx = {i}; +// SubPreBasis.transformIndex(idx); +// std::cout << "idx: " << idx << std::endl; +// +// fullcoeff[i] = phi_1[idx]; +// fullcoeff[i] = phi_1[idx]; +// +// } +// + printvector(std::cout, fullcoeff, "fullcoeff" , "--"); + printvector(std::cout, phi_1, "phi_1" , "--"); + + + for (auto itr = perTest.begin(); itr != perTest.end(); itr++) + { +// std::cout << (*itr).first << std::endl; +// std::cout << (*itr).second << std::endl; +// fullcoeff[(*itr).first] = (*itr).second; + } + + + auto correctorFunction_Test = Functions::makeDiscreteGlobalBasisFunction<SolutionRange>( + TestBasis, + fullcoeff); + ////////////////////////////////////////////////////////////////////////////////////////////// + + // SubsamplingVTKWriter<GridView> vtkWriter( // gridView, // refinementLevels(2)); VTKWriter<GridView> vtkWriter(gridView_CE); + vtkWriter.addVertexData( + correctorFunction_Test, + VTK::FieldInfo("corrector Test", VTK::FieldInfo::Type::vector, dim)); + + vtkWriter.addVertexData( correctorFunction_1, VTK::FieldInfo("corrector phi_1", VTK::FieldInfo::Type::vector, dim)); @@ -2024,6 +2119,7 @@ int main(int argc, char *argv[]) vtkWriter.addVertexData( correctorFunction_3, VTK::FieldInfo("corrector phi_3", VTK::FieldInfo::Type::vector, dim)); +// // vtkWriter.addVertexData( // solutionFunction, // VTK::FieldInfo("solution", VTK::FieldInfo::Type::scalar, 1)); -- GitLab