Skip to content

Commit a58a760

Browse files
committed
fix: improve convergence checks in BiCG solver and enhance Gauss-Seidel iterator functionality
1 parent e4555a6 commit a58a760

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

src/iteratives/biconjugate_gradient.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ where
9999
None => DVector::<T>::zeros(n),
100100
};
101101
self.r = b - &a.mul_vec(&self.x);
102-
self.r_hat = self.r.clone(); // In practice, r_hat should be a fixed or random vector
102+
self.r_hat = self.r.clone();
103103
self.p = self.r.clone();
104104
self.v = DVector::<T>::zeros(n);
105105
self.iter = 0;
@@ -118,7 +118,7 @@ where
118118
let alpha = r_dot / self.r_hat.dot(&self.v);
119119
self.x.axpy(alpha, &self.p, T::one());
120120
let s = &self.r - &self.v * alpha;
121-
if s.magnitude() <= self.tol {
121+
if s.max() <= self.tol {
122122
self.r = s;
123123
self.converged = true;
124124
return true;
@@ -127,7 +127,7 @@ where
127127
let omega = t.dot(&s) / t.dot(&t);
128128
self.x.axpy(omega, &s, T::one());
129129
let new_r = &s - &t * omega;
130-
if new_r.magnitude() <= self.tol {
130+
if new_r.max() <= self.tol {
131131
self.r = new_r;
132132
self.converged = true;
133133
return true;

src/iteratives/gauss_seidel.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ impl AlternatingRange {
1414
current: 0,
1515
}
1616
}
17+
1718
fn is_reversed(&self) -> bool {
1819
self.reversed
1920
}
21+
2022
fn alternate(&mut self) {
2123
self.reversed = !self.reversed;
2224
self.current = 0;

0 commit comments

Comments
 (0)