From 14ba20e5663857767e272e3f12a9e856763abb59 Mon Sep 17 00:00:00 2001 From: Klaus <klaus.boehnlein@tu-dresden.de> Date: Mon, 9 Aug 2021 20:52:23 +0200 Subject: [PATCH] backup --- inputs/cellsolver.parset | 4 +- src/dune-microstructure.cc | 145 ++++++++++++++++--------------------- 2 files changed, 64 insertions(+), 85 deletions(-) diff --git a/inputs/cellsolver.parset b/inputs/cellsolver.parset index 06b3cff7..45881378 100644 --- a/inputs/cellsolver.parset +++ b/inputs/cellsolver.parset @@ -21,7 +21,7 @@ cellDomain = 1 ## {start,finish} computes on all grid from 2^(start) to 2^finish refinement ######################################################################## -numLevels = 1 3 # computes all levels from first to second entry +numLevels = 1 2 # computes all levels from first to second entry #Elements_Cell = 20 20 20 # number elements in each direction (y1 y2 x3) @@ -33,7 +33,7 @@ numLevels = 1 3 # computes all levels from first to second entry #nElements_Cell = 10 10 10 #nElements_Cell = 2 2 2 -nElements_Cell = 4 4 4 +#nElements_Cell = 4 4 4 #nElements_Cell = 8 8 8 #nElements_Cell = 16 16 16 #nElements_Cell = 32 32 32 diff --git a/src/dune-microstructure.cc b/src/dune-microstructure.cc index 0ed65a79..de77f882 100644 --- a/src/dune-microstructure.cc +++ b/src/dune-microstructure.cc @@ -91,9 +91,6 @@ std::string prd(const type x, const int decDigits, const int width) { - - - template<class Basis> auto arbitraryComponentwiseIndices(const Basis& basis, const int elementNumber, @@ -117,9 +114,9 @@ auto arbitraryComponentwiseIndices(const Basis& basis, for (int k = 0; k < 3; k++) { auto rowLocal = localView.tree().child(k).localIndex(leafIdx); //Input: LeafIndex! TODO braucht hier (Inverse ) Local-to-Leaf Idx Map - std::cout << "rowLocal:" << rowLocal << std::endl; +// std::cout << "rowLocal:" << rowLocal << std::endl; row[k] = localView.index(rowLocal); - std::cout << "row[k]:" << row[k] << std::endl; +// std::cout << "row[k]:" << row[k] << std::endl; } } elementCounter++; @@ -234,7 +231,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 +// strainV[ii][jj] = 0.5 * (defGradientU[ii][jj] + defGradientU[jj][ii]); // same ? genügt strainU // printmatrix(std::cout, strainU , "strainU", "--"); } @@ -265,7 +262,6 @@ void computeElementStiffnessMatrix(const LocalView& localView, size_t row = localView.tree().child(l).localIndex(j); elementMatrix[row][col] += energyDensity * quadPoint.weight() * integrationElement; - } } @@ -275,8 +271,7 @@ void computeElementStiffnessMatrix(const LocalView& localView, for (size_t l=0; l< nCompo; l++) for (size_t j=0; j < nSf; j++ ) { - - + // (scaled) Deformation gradient of the test basis function MatrixRT defGradientV(0); defGradientV[l][0] = gradients[j][0]; // Y @@ -291,7 +286,6 @@ void computeElementStiffnessMatrix(const LocalView& localView, strainV[ii][jj] = 0.5 * (defGradientV[ii][jj] + defGradientV[jj][ii]); } - for( size_t m=0; m<3; m++) { @@ -323,63 +317,10 @@ void computeElementStiffnessMatrix(const LocalView& localView, elementMatrix[row][localPhiOffset+m] += value; elementMatrix[localPhiOffset+m][row] += value; - } } - - - // "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; -// -// } -// } -// - - - // "m*m"-part for(size_t m=0; m<3; m++) for(size_t n=0; n<3; n++) @@ -405,10 +346,7 @@ void computeElementStiffnessMatrix(const LocalView& localView, elementMatrix[localPhiOffset+m][localPhiOffset+n]= energyDensityGG * quadPoint.weight() * integrationElement; } - } - - } @@ -456,7 +394,7 @@ void getOccupationPattern(const Basis& basis, MatrixIndexSet& nb, ParameterSet& for (size_t i=0; i<3; i++ ) for (size_t j=0; j<3; j++ ) { - nb.add(phiOffset+i,phiOffset+j); // m*m part of StiffnessMatrix + nb.add(phiOffset+i,phiOffset+j); // m*m part of StiffnessMatrix } } ////////////////////////////////////////////////////////////////// @@ -467,11 +405,6 @@ void getOccupationPattern(const Basis& basis, MatrixIndexSet& nb, ParameterSet& unsigned int arbitraryLeafIndex = parameterSet.template get<unsigned int>("arbitraryLeafIndex", 0); unsigned int arbitraryElementNumber = parameterSet.template get<unsigned int>("arbitraryElementNumber", 0); - - -// assert(arbitraryLeafIndex < localView.size() ); // "localIndex is larger than #shapeFunctions" TODO ERROR - - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); // macht keinen Unterschied ob hier k oder 0.. const auto nSf = localFiniteElement.localBasis().size(); assert(arbitraryLeafIndex < nSf ); @@ -526,7 +459,6 @@ void computeElementLoadVector( const LocalView& localView, elementRhs.resize(localView.size() +3); elementRhs = 0; - // LocalBasis-Offset const int localPhiOffset = localView.size(); @@ -546,7 +478,6 @@ void computeElementLoadVector( const LocalView& localView, for (const auto& quadPoint : quad) { - const FieldVector<double,dim>& quadPos = quadPoint.position(); const auto jacobian = geometry.jacobianInverseTransposed(quadPos); const double integrationElement = geometry.integrationElement(quadPos); @@ -2885,6 +2816,7 @@ int main(int argc, char *argv[]) auto q1_c = Q[0][0]; auto q2_c = Q[1][1]; auto q3_c = Q[2][2]; + std::cout<< "q1_c: " << q1_c << std::endl; std::cout<< "q2_c: " << q2_c << std::endl; std::cout<< "q3_c: " << q3_c << std::endl; @@ -2923,7 +2855,7 @@ int main(int argc, char *argv[]) double b3_hat = 0.0; double b1_eff = (-3.0/2.0)*theta; - double b2_eff = (-3.0*theta*mu2)/(mu1*(1-theta)+mu2*theta); + double b2_eff = (-3.0/2.0)*(theta*mu2)/(mu1*(1-theta)+mu2*theta); double b3_eff = 0.0; @@ -2956,10 +2888,10 @@ int main(int argc, char *argv[]) Storage_Quantities.push_back(std::abs(q1 - q1_c)); Storage_Quantities.push_back(std::abs(q2 - q2_c)); - Storage_Quantities.push_back(std::abs(q3 - q3_c)); - Storage_Quantities.push_back(std::abs(b1_eff - b1eff_c)); - Storage_Quantities.push_back(std::abs(b2_eff - b2eff_c)); - Storage_Quantities.push_back(std::abs(b3_eff - b3eff_c)); + Storage_Quantities.push_back( q3_c ); + Storage_Quantities.push_back(std::abs(b1_eff - Beff[0])); + Storage_Quantities.push_back(std::abs(b2_eff - Beff[1])); + Storage_Quantities.push_back(std::abs(b3_eff - Beff[2])); auto symPhi_1_analytic = [mu1, mu2, theta, muTerm] (const Domain& x) { return MatrixRT{{ (((mu1*mu2)/((theta*mu1 +(1-theta)*mu2)*muTerm(x))) - 1)*x[2] , 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; @@ -3076,12 +3008,12 @@ int main(int argc, char *argv[]) vtkWriter.write("CellProblem-result"); std::cout << "wrote data to file: CellProblem-result" << std::endl; // better with string for output name.. - log.close(); + levelCounter++; //TODO - } + } // Level-Loop End ///////////////////////////////////////// // Print Storage @@ -3135,6 +3067,13 @@ int main(int argc, char *argv[]) << center("L2SNorm_ana",tableWidth) << " | " << center("L2Norm",tableWidth) << " | " << "\n"; std::cout << std::string(tableWidth*6 + 3*6, '-') << "\n"; + log << center("Levels",tableWidth) << " | " + << center("L2SymError",tableWidth) << " | " + << center("Order",tableWidth) << " | " + << center("L2SymNorm",tableWidth) << " | " + << center("L2SNorm_ana",tableWidth) << " | " + << center("L2Norm",tableWidth) << " | " << "\n"; + log << std::string(tableWidth*6 + 3*6, '-') << "\n"; // std::vector<double> tmpVec; // oder std::variant @@ -3150,8 +3089,9 @@ int main(int argc, char *argv[]) // std::visit([](auto&& arg){std::cout << std::left << std::setw(12) << std::setfill(' ') << arg;}, v); // std::visit([tableWidth](auto&& arg){std::cout << center(prd(arg,5,12),tableWidth) << " | ";}, v); - std::visit([tableWidth](auto&& arg){std::cout << center(prd(arg,5,1),tableWidth) << " | ";}, v); - + std::visit([tableWidth](auto&& arg){std::cout << center(prd(arg,5,1),tableWidth) << " | ";}, v); // Anzahl-Nachkommastellen + std::visit([tableWidth, &log](auto&& arg){log << center(prd(arg,5,1),tableWidth) << " & ";}, v); + @@ -3163,6 +3103,7 @@ int main(int argc, char *argv[]) // sprintf(buf, pattern2, "2x2x2", std::get<1>(tmpVec[1]), std::get<1>(tmpVec[2]), std::get<1>(tmpVec[2]), std::get<1>(tmpVec[2]), std::get<1>(tmpVec[5])); std::cout << std::endl; + log << std::endl; } } @@ -3189,5 +3130,43 @@ int main(int argc, char *argv[]) // std::cout << buf << std::endl; + //////////////// OUTPUT QUANTITIES TABLE ////////////// + + std::cout << center("Levels ",tableWidth) << " | " + << center("|q1-q1_c|",tableWidth) << " | " + << center("|q2-q2_c|",tableWidth) << " | " + << center(" q3_c",tableWidth) << " | " + << center("|b1-b1_c|",tableWidth) << " | " + << center("|b2-b2_c|",tableWidth) << " | " + << center("|b3-b3_c|",tableWidth) << " | " << "\n"; + std::cout << std::string(tableWidth*7 + 3*7, '-') << "\n"; + log << center("Levels ",tableWidth) << " | " + << center("|q1-q1_c|",tableWidth) << " | " + << center("|q2-q2_c|",tableWidth) << " | " + << center(" q3_c",tableWidth) << " | " + << center("|b1-b1_c|",tableWidth) << " | " + << center("|b2-b2_c|",tableWidth) << " | " + << center("|b3-b3_c|",tableWidth) << " | " << "\n"; + log << std::string(tableWidth*7 + 3*7, '-') << "\n"; + + int StorageCount2 = 0; + for(auto& v: Storage_Quantities) { + + std::visit([tableWidth](auto&& arg){std::cout << center(prd(arg,5,1),tableWidth) << " | ";}, v); + std::visit([tableWidth, &log](auto&& arg){log << center(prd(arg,5,1),tableWidth) << " & ";}, v); + + StorageCount2++; + if(StorageCount2 % 7 == 0 ) + { + std::cout << std::endl; + log << std::endl; + } + } + + + + + + log.close(); } -- GitLab