diff --git a/srcs/BEM/functionsBEM.hpp b/srcs/BEM/functionsBEM.hpp index 40e85db2665bc4e288405c194e5efc565fe06d2a..ea63482973bfa134d5c6af3b28854631f1d85b2a 100644 --- a/srcs/BEM/functionsBEM.hpp +++ b/srcs/BEM/functionsBEM.hpp @@ -23,7 +23,7 @@ struct elementStruct{ }; -void solverBEM(std::map<int, double> &electrostaticPressure, std::map<int,std::pair<double,double>> & boundaryDisplacementMap, int & nbViews, bool postProcessing, const int iteration, bool untangleMesh); +void solverBEM(std::map<int, double> &electrostaticPressure, int & nbViews, std::map<int,std::pair<double,double>> & boundaryDisplacementMap, bool postProcessing, const int iteration, bool untangleMesh); void singleDomainSolverBEM(std::map<int, double> &electrostaticPressure, std::map<int,std::pair<double,double>> & boundaryDisplacementMap, int & nbViews, bool postProcessing, const int iteration, const int domainTag); void dispNodeCoordFun(const std::vector<size_t> &allNodeTags, const std::vector<double> &allCoord); void dispMatricesFun(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, const Eigen::MatrixXd &c, const Eigen::MatrixXd &b, const Eigen::MatrixXd &x); diff --git a/srcs/BEM/mainBEM.cpp b/srcs/BEM/mainBEM.cpp index 1f23a1723ab1bfb239354724aac7e9152fe9771b..9f35b0d70edee81bf0e49e41cb5b9ba0c078fbe1 100644 --- a/srcs/BEM/mainBEM.cpp +++ b/srcs/BEM/mainBEM.cpp @@ -24,7 +24,7 @@ int main(int argc, char **argv) std::map<int,std::pair<double,double>> boundaryDisplacementMap; //solverBEM(argc, argv, finalElementTags, electrostaticPressure, nbViews); - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, true, 1, false); // iteration number randomly set to 1 + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, true, 1, false); // iteration number randomly set to 1 std::map<int, double>::iterator it; diff --git a/srcs/BEM/solverBEM.cpp b/srcs/BEM/solverBEM.cpp index afe69531d6cce4a57ba613d755bfa44ad9cf7f04..248d0871dcc90e5c82737606429d3826e9bea724 100644 --- a/srcs/BEM/solverBEM.cpp +++ b/srcs/BEM/solverBEM.cpp @@ -11,7 +11,7 @@ #include <omp.h> #include <list> -void solverBEM(std::map<int, double> &electrostaticPressure, std::map<int,std::pair<double,double>> & boundaryDisplacementMap, int & nbViews, bool postProcessing, const int iteration, bool untangleMesh) +void solverBEM(std::map<int, double> &electrostaticPressure, int & nbViews, std::map<int,std::pair<double,double>> & boundaryDisplacementMap, bool postProcessing, const int iteration, bool untangleMesh) { if(untangleMesh) diff --git a/srcs/main.cpp b/srcs/main.cpp index 90b59b98a2b0a7e9c02385c2057e14ed35a6be14..1bacc6c05934e5e4f838becfe2b4f1a0f656bf6f 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -46,10 +46,9 @@ int main(int argc, char **argv) int viewTagU = gmsh::view::add("u"); // Ã modifier plus tard int viewTagF = gmsh::view::add("f"); - - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, 1, false); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, postProcessing, 1, false); solverFEMnonLinear(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, 1, viewTagU, viewTagF, false); std::vector<int> nodeTags(boundaryDisplacementMap.size()); @@ -71,7 +70,7 @@ int main(int argc, char **argv) for(iteration = 2; iteration <= maxNbIteration; iteration++) { - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, false); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, postProcessing, iteration, false); solverFEMnonLinear(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, viewTagU, viewTagF, false); i = 0; @@ -98,18 +97,18 @@ int main(int argc, char **argv) nbViews = 0; - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, false); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, postProcessing, iteration, false); postProcessing = true; solverFEMnonLinear(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, viewTagU, viewTagF, untangleMesh); if(untangleMesh) { std::map<int,std::pair<double,double>> boundaryDisplacementMap2; - solverBEM(electrostaticPressure, boundaryDisplacementMap2, nbViews, postProcessing, iteration, untangleMesh); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap2, postProcessing, iteration, untangleMesh); } else { - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, false); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, postProcessing, iteration, false); } } else @@ -121,7 +120,7 @@ int main(int argc, char **argv) int nbViews = 0; - solverBEM(electrostaticPressure, boundaryDisplacementMap, nbViews, true, 1, false); + solverBEM(electrostaticPressure, nbViews, boundaryDisplacementMap, true, 1, false); solverFEM(electrostaticPressure, nbViews); } @@ -136,126 +135,4 @@ int main(int argc, char **argv) gmsh::finalize(); return 0; -} - - - - - - -// #include "functionsBEM.hpp" -// #include "functionsFEM.hpp" - -// #include <gmsh.h> -// #include <iostream> -// #include <omp.h> - -// int main(int argc, char **argv) -// { -// if (argc < 2) -// { -// std::cout << "Usage: " << argv[0] << " <geo_file>\n"; -// return 0; -// } - -// bool nonLinearSolver = true; // use non-linear solver or not - -// // If compiled with OpenMP support, gmsh::initialize -// // also sets the number of threads to "General.NumThreads". -// int nthreads = omp_get_max_threads(); -// gmsh::initialize(); -// omp_set_num_threads(nthreads); - -// gmsh::open(argv[1]); -// gmsh::model::mesh::generate(2); - -// Eigen::initParallel(); - -// if(nonLinearSolver) -// { - -// bool postProcessing = 0; // pass it as an argument to the solver, only compute post processing at last iteration - -// std::map<int, double> electrostaticPressure; -// std::map<int,std::pair<double,double>> boundaryDisplacementMap; - -// int nbViews = 0; -// //double start = omp_get_wtime(); - -// int iteration; - -// int viewTagU = gmsh::view::add("u"); // Ã modifier plus tard -// int viewTagF = gmsh::view::add("f"); - -// solverBEM(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, 1); -// solverFEMnonLinear(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, 1, viewTagU, viewTagF); - -// std::vector<int> nodeTags(boundaryDisplacementMap.size()); -// std::vector<double> displacements(boundaryDisplacementMap.size()); -// std::vector<double> previousDisplacements(boundaryDisplacementMap.size()); -// std::vector<double> relativeDifference(boundaryDisplacementMap.size()); - -// double norm; -// const double criticalNorm = 0.0001; -// const int maxNbIteration = 40; - -// int i = 0; -// for(auto p : boundaryDisplacementMap) -// { -// nodeTags[i] = p.first; -// displacements[i] = sqrt(p.second.first*p.second.first + p.second.second*p.second.second); -// i++; -// } - -// for(iteration = 2; iteration <= maxNbIteration; iteration++) -// { -// solverBEM(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration); -// solverFEMnonLinear(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, viewTagU, viewTagF); - -// i = 0; -// norm = 0; -// for(auto p : boundaryDisplacementMap) -// { -// previousDisplacements[i] = displacements[i]; -// displacements[i] = sqrt(p.second.first*p.second.first + p.second.second*p.second.second); - -// if(previousDisplacements[i] != 0.0) -// relativeDifference[i] = abs( (displacements[i] - previousDisplacements[i]) / previousDisplacements[i] ); -// else -// relativeDifference[i] = 0; - -// norm += relativeDifference[i]*relativeDifference[i]; -// i++; -// } -// norm = sqrt(norm/i); -// std::cout << "Norm (iteration '" << iteration << "'): " << norm << "\n"; -// if(norm < criticalNorm) -// break; -// } - -// postProcessing = true; -// solverBEM(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration); -// solverFEMnonLinear(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, postProcessing, iteration, viewTagU, viewTagF); -// } -// else -// { - -// std::map<int, double> electrostaticPressure; - -// std::map<int,std::pair<double,double>> boundaryDisplacementMap; - -// int nbViews = 0; - -// solverBEM(argc, argv, electrostaticPressure, boundaryDisplacementMap, nbViews, true, 1); -// solverFEM(argc, argv, electrostaticPressure, nbViews); - -// } - -// //double fem_end = omp_get_wtime(); -// //std::cout << "time for FEM: " << fem_end - bem_end << "\n"; - -// gmsh::fltk::run(); - -// gmsh::finalize(); -// return 0; -// } +} \ No newline at end of file