diff --git a/src/dune-microstructure.cc b/src/dune-microstructure.cc index 844d03711f0600acaf04af08251a6b75de516156..7fa988ff6d90f309a6df913a84dde22b49d02d8f 100644 --- a/src/dune-microstructure.cc +++ b/src/dune-microstructure.cc @@ -1687,8 +1687,9 @@ int main(int argc, char *argv[]) // 3 : QR /////////////////////////////////// unsigned int Solvertype = parameterSet.get<unsigned int>("Solvertype", 1); - - + bool write_corrector_phi1 = parameterSet.get<bool>("write_corrector_phi1", true); + bool write_corrector_phi2 = parameterSet.get<bool>("write_corrector_phi2", true); + bool write_corrector_phi3 = parameterSet.get<bool>("write_corrector_phi3", true); /////////////////////////////////// // Generate the grid @@ -1999,21 +2000,18 @@ int main(int argc, char *argv[]) - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////// // Compute solution - //////////////////////////// + //////////////////////////////////////////////////// VectorCT x_1 = load_alpha1; VectorCT x_2 = load_alpha2; VectorCT x_3 = load_alpha3; - auto load_alpha1BS = load_alpha1; // printvector(std::cout, load_alpha1, "load_alpha1 before SOLVER", "--" ); // printvector(std::cout, load_alpha2, "load_alpha2 before SOLVER", "--" ); - - //////////////////////////////////////////////////////////////////////////////////// - + if (Solvertype == 1) // CG - SOLVER { @@ -2040,10 +2038,7 @@ int main(int argc, char *argv[]) std::cout << "solve linear system for x_3.\n"; solver.apply(x_3, load_alpha3, statistics); } - - //////////////////////////////////////////////////////////////////////////////////// - else if (Solvertype ==2) // GMRES - SOLVER { @@ -2074,7 +2069,6 @@ int main(int argc, char *argv[]) solver.apply(x_3, load_alpha3, statistics); } //////////////////////////////////////////////////////////////////////////////////// - else if ( Solvertype == 3)// QR - SOLVER { @@ -2092,71 +2086,9 @@ int main(int argc, char *argv[]) } // printvector(std::cout, load_alpha1BS, "load_alpha1 before SOLVER", "--" ); // printvector(std::cout, load_alpha1, "load_alpha1 AFTER SOLVER", "--" ); - - - - std::cout << "---------load_alpha2 AFTER SOLVER: -------------" << std::endl; // printvector(std::cout, load_alpha2, "load_alpha2 AFTER SOLVER", "--" ); - - - - //////////////////////////////////////////////////////////////////////////////////// - - - - // Write solutions in logs // TODO -------------------------------------- -// if (parameterSet.get<int>("write_solutions_corrector_problems") == 1){ -// log << "\nSolution of Corrector problems:\n"; -// -// auto sizeComp = x_a.size()/nCompo; -// std::vector<VectorRT> x_a_vec(sizeComp); -// std::vector<VectorRT> x_K1_vec(sizeComp); -// std::vector<VectorRT> x_K2_vec(sizeComp); -// std::vector<VectorRT> x_K3_vec(sizeComp); -// -// for (int i=0; i < x_a_vec.size(); i++){ -// x_a_vec[i] = VectorRT{x_a[i], x_a[i + sizeComp], x_a[i + 2*sizeComp]}; -// x_K1_vec[i] = VectorRT{x_K1[i], x_K1[i + sizeComp], x_K1[i + 2*sizeComp]}; -// x_K2_vec[i] = VectorRT{x_K2[i], x_K2[i + sizeComp], x_K2[i + 2*sizeComp]}; -// x_K3_vec[i] = VectorRT{x_K3[i], x_K3[i + sizeComp], x_K3[i + 2*sizeComp]}; -// } -// -// log << "\nxa:\n"; -// for (int i=0; i < x_a_vec.size(); i++) -// log << i << ": " << x_a_vec[i] << std::endl; -// -// log << "\nxK1:\n"; -// for (int i=0; i < x_K1_vec.size(); i++) -// log << i << ": " << x_K1_vec[i] << std::endl; -// -// log << "\nxK2:\n"; -// for (int i=0; i < x_K2_vec.size(); i++) -// log << i << ": " << x_K2_vec[i] << std::endl; -// -// log << "\nxK3:\n"; -// for (int i=0; i < x_K3_vec.size(); i++) -// log << i << ": " << x_K3_vec[i] << std::endl; -// -// /* -// log << "\nxa:\n"; -// for (int i=0; i < x_a.size(); i++) -// log << i << " " << x_a[i] << std::endl; -// -// log << "\nxK1:\n"; -// for (int i=0; i < x_K1.size(); i++) -// log << i << " " << x_K1[i] << std::endl; -// -// log << "\nxK2:\n"; -// for (int i=0; i < x_K2.size(); i++) -// log << i << " " << x_K2[i] << std::endl; -// -// log << "\nxK3:\n"; -// for (int i=0; i < x_K3.size(); i++) -// log << i << " " << x_K3[i] << std::endl; -// */ -// } - + @@ -2293,12 +2225,31 @@ int main(int argc, char *argv[]) // printvector(std::cout, phi_2, "Coefficients Corrector-Phi_2", "--"); // printvector(std::cout, phi_3, "Coefficients Corrector-Phi_3", "--"); - - + ///////////////////////////////////////////////////////// + // Write Solution in Logs + ///////////////////////////////////////////////////////// + log << "\nSolution of Corrector problems:\n"; + if(write_corrector_phi1) + { + log << "\n Corrector_phi1:\n"; + log << x_1 << std::endl; + } + if(write_corrector_phi2) + { + log << "-----------------------------------------------------"; + log << "\n Corrector_phi2:\n"; + log << x_2 << std::endl; + } + if(write_corrector_phi3) + { + log << "-----------------------------------------------------"; + log << "\n Corrector_phi3:\n"; + log << x_3 << std::endl; + } //////////////////////////////////////////////////////////////////////////////// // REMAKE Corrector-Functions after substract_integralMean - + //////////////////////////////////////////////////////////////////////////////// auto correctorFunction_1New = Functions::makeDiscreteGlobalBasisFunction<SolutionRange>( Basis_CE, phi_1); @@ -2338,10 +2289,7 @@ int main(int argc, char *argv[]) coeffT_3[Basis_CE.size()+1] = m_3[1]; coeffT_3[Basis_CE.size()+2] = m_3[2]; - - - - + // TEST // for(int i = 0; i<Basis_CE.size()+3 ; i++) // { @@ -2358,6 +2306,8 @@ int main(int argc, char *argv[]) // printvector(std::cout, coeffT_1 , "coeffT_1", "--" ); // printvector(std::cout, x_1 , "x_1", "--" ); + + ///////////////////////////////////////////////////////// // Create Containers for Basis-Matrices, Correctors and Coefficients /////////////////////////////////////////////////////////