From 0984241bfffc1cd004c1533e4a5b0d869d5725b1 Mon Sep 17 00:00:00 2001 From: FyloZ Date: Tue, 12 Mar 2024 13:35:40 -0400 Subject: [PATCH] Graph color solver --- labo_physique/Solvers.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/labo_physique/Solvers.h b/labo_physique/Solvers.h index 3815509..062f75a 100644 --- a/labo_physique/Solvers.h +++ b/labo_physique/Solvers.h @@ -79,7 +79,42 @@ namespace gti320 { // // Implémenter la méthode de Gauss-Seidel avec coloration de graphe. // Les partitions avec l'index de chaque particule sont stockées dans la table des tables, P. + int n = b.size(); + x.resize(n); + x.setZero(); + + bool converged = false; + int k = 0; + + do { + Vector nx = x; + for (const auto &indices: P) { +#pragma omp parallel for + for (int i = 0; i < indices.size(); i++) { + nx(i) = b(i); + + for (int j = 0; j < i; j++) { + nx(i) = nx(i) - A(i, j) * nx(j); + } + + for (int j = i + 1; j < n; j++) { + nx(i) = nx(i) - A(i, j) * x(j); + } + + nx(i) = nx(i) / A(i, i); + } + } + + k++; + Vector r = A * x - b; + + converged = k >= maxIter || + (nx - x).norm() / nx.norm() < tau || + r.norm() / b.norm() < eps; + + x = nx; + } while (!converged); } /**