Graph color solver
This commit is contained in:
parent
e43d23a5ea
commit
0984241bff
|
@ -79,7 +79,42 @@ namespace gti320 {
|
||||||
//
|
//
|
||||||
// Implémenter la méthode de Gauss-Seidel avec coloration de graphe.
|
// 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.
|
// 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<float, Dynamic> 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<float, Dynamic> r = A * x - b;
|
||||||
|
|
||||||
|
converged = k >= maxIter ||
|
||||||
|
(nx - x).norm() / nx.norm() < tau ||
|
||||||
|
r.norm() / b.norm() < eps;
|
||||||
|
|
||||||
|
x = nx;
|
||||||
|
} while (!converged);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue