///|
/// Bounded dense Cholesky factor, built once and reusable for coarse right-hand sides.
pub struct CoarseSolver {
grid : Grid
lower : Array[Double]
}
///|
pub fn CoarseSolver::new(operator : Operator) -> CoarseSolver raise SolverError {
let g = operator.grid
let n = g.unknowns()
if n > 81 {
raise Budget("dense coarse factorization is limited to 81 unknowns")
}
let width = g.nx - 1
let lower = Array::make(n * n, 0.0)
for row in 0.. 1 {
lower[row * n + row - 1] = -operator.west[p]
}
if j > 1 {
lower[row * n + row - width] = -operator.south[p]
}
}
for row in 0.. Field raise SolverError {
require_same(self.grid, rhs.grid)
let g = self.grid
let n = g.unknowns()
let width = g.nx - 1
let work = Array::make(n, 0.0)
for row in 0.. Field raise SolverError {
self.coarse.solve(rhs)
}